[llvm] [libc++] Switch over to the LLVM-wide premerge test runners. (PR #147794)

via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 10 08:24:51 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-github-workflow

Author: None (cmtice)

<details>
<summary>Changes</summary>

Update the premerge testing system to use the LLVM-wide premerge infrastructure. Also remove libcxx-restart-preempted-jobs.yaml, as this should no longer be needed.

---
Full diff: https://github.com/llvm/llvm-project/pull/147794.diff


2 Files Affected:

- (modified) .github/workflows/libcxx-build-and-test.yaml (+8-11) 
- (removed) .github/workflows/libcxx-restart-preempted-jobs.yaml (-158) 


``````````diff
diff --git a/.github/workflows/libcxx-build-and-test.yaml b/.github/workflows/libcxx-build-and-test.yaml
index f0bdf6c0b5899..ec937de02ca1a 100644
--- a/.github/workflows/libcxx-build-and-test.yaml
+++ b/.github/workflows/libcxx-build-and-test.yaml
@@ -36,8 +36,7 @@ concurrency:
 jobs:
   stage1:
     if: github.repository_owner == 'llvm'
-    runs-on: libcxx-self-hosted-linux
-    container: ghcr.io/llvm/libcxx-linux-builder:b060022103f551d8ca1dad84122ef73927c86512
+    runs-on: llvm-premerge-libcxx-runners
     continue-on-error: false
     strategy:
       fail-fast: false
@@ -74,8 +73,7 @@ jobs:
             **/crash_diagnostics/*
   stage2:
     if: github.repository_owner == 'llvm'
-    runs-on: libcxx-self-hosted-linux
-    container: ghcr.io/llvm/libcxx-linux-builder:2b57ebb50b6d418e70382e655feaa619b558e254
+    runs-on: llvm-premerge-libcxx-runners
     needs: [ stage1 ]
     continue-on-error: false
     strategy:
@@ -149,21 +147,20 @@ jobs:
           'generic-static',
           'bootstrapping-build'
         ]
-        machine: [ 'libcxx-self-hosted-linux' ]
+        machine: [ 'llvm-premerge-libcxx-runners' ]
         include:
         - config: 'generic-cxx26'
-          machine: libcxx-self-hosted-linux
+          machine: llvm-premerge-libcxx-runners
         - config: 'generic-asan'
-          machine: libcxx-self-hosted-linux
+          machine: llvm-premerge-libcxx-runners
         - config: 'generic-tsan'
-          machine: libcxx-self-hosted-linux
+          machine: llvm-premerge-libcxx-runners
         - config: 'generic-ubsan'
-          machine: libcxx-self-hosted-linux
+          machine: llvm-premerge-libcxx-runners
         # Use a larger machine for MSAN to avoid timeout and memory allocation issues.
         - config: 'generic-msan'
-          machine: libcxx-self-hosted-linux
+          machine: llvm-premerge-libcxx-runners
     runs-on: ${{ matrix.machine }}
-    container: ghcr.io/llvm/libcxx-linux-builder:2b57ebb50b6d418e70382e655feaa619b558e254
     steps:
       - uses: actions/checkout at 11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
       - name: ${{ matrix.config }}
diff --git a/.github/workflows/libcxx-restart-preempted-jobs.yaml b/.github/workflows/libcxx-restart-preempted-jobs.yaml
deleted file mode 100644
index accb84efb5c90..0000000000000
--- a/.github/workflows/libcxx-restart-preempted-jobs.yaml
+++ /dev/null
@@ -1,158 +0,0 @@
-name: Restart Preempted Libc++ Workflow
-
-# The libc++ builders run on preemptable VMs, which can be shutdown at any time.
-# This workflow identifies when a workflow run was canceled due to the VM being preempted,
-# and restarts the workflow run.
-
-# We identify a canceled workflow run by checking the annotations of the check runs in the check suite,
-# which should contain the message "The runner has received a shutdown signal."
-
-# Note: If a job is both preempted and also contains a non-preemption failure, we do not restart the workflow.
-
-on:
-  workflow_run:
-    workflows: [Build and Test libc\+\+]
-    types:
-      - completed
-
-permissions:
-  contents: read
-
-jobs:
-  restart:
-    if: github.repository_owner == 'llvm' && (github.event.workflow_run.conclusion == 'failure')
-    name: "Restart Job"
-    permissions:
-      statuses: read
-      checks: write
-      actions: write
-    runs-on: ubuntu-24.04
-    steps:
-      - name: "Restart Job"
-        uses: actions/github-script at 60a0d83039c74a4aee543508d2ffcb1c3799cdea #v7.0.1
-        with:
-          script: |
-            // The "The run was canceled by" message comes from a user manually canceling a workflow
-            // the "higher priority" message comes from github canceling a workflow because the user updated the change.
-            // And the "exit code 1" message indicates a genuine failure.
-            const failure_regex = /(Process completed with exit code 1.)/
-            const preemption_regex = /(The runner has received a shutdown signal)|(The operation was canceled)/
-
-            const wf_run = context.payload.workflow_run
-            core.notice(`Running on "${wf_run.display_title}" by @${wf_run.actor.login} (event: ${wf_run.event})\nWorkflow run URL: ${wf_run.html_url}`)
-
-
-            async function create_check_run(conclusion, message) {
-                // Create a check run on the given workflow run to indicate if
-                // we are restarting the workflow or not.
-                if (conclusion != 'success' && conclusion != 'skipped' && conclusion != 'neutral') {
-                  core.setFailed('Invalid conclusion: ' + conclusion)
-                }
-                await github.rest.checks.create({
-                    owner: context.repo.owner,
-                    repo: context.repo.repo,
-                    name: 'Restart Preempted Job',
-                    head_sha: wf_run.head_sha,
-                    status: 'completed',
-                    conclusion: conclusion,
-                    output: {
-                      title: 'Restarted Preempted Job',
-                      summary: message
-                    }
-                })
-            }
-
-            console.log('Listing check runs for suite')
-            const check_suites = await github.rest.checks.listForSuite({
-              owner: context.repo.owner,
-              repo: context.repo.repo,
-              check_suite_id: context.payload.workflow_run.check_suite_id,
-              per_page: 100 // FIXME: We don't have 100 check runs yet, but we should handle this better.
-            })
-
-            check_run_ids = [];
-            for (check_run of check_suites.data.check_runs) {
-              console.log('Checking check run: ' + check_run.id);
-              if (check_run.status != 'completed') {
-                console.log('Check run was not completed. Skipping.');
-                continue;
-              }
-              if (check_run.conclusion != 'failure') {
-                console.log('Check run had conclusion: ' + check_run.conclusion + '. Skipping.');
-                continue;
-              }
-              check_run_ids.push(check_run.id);
-            }
-
-            has_preempted_job = false;
-
-            for (check_run_id of check_run_ids) {
-              console.log('Listing annotations for check run: ' + check_run_id);
-
-              annotations = await github.rest.checks.listAnnotations({
-                owner: context.repo.owner,
-                repo: context.repo.repo,
-                check_run_id: check_run_id
-              })
-
-              // For temporary debugging purposes to see the structure of the annotations.
-              console.log(annotations);
-
-              has_failed_job = false;
-              saved_failure_message = null;
-
-              for (annotation of annotations.data) {
-                if (annotation.annotation_level != 'failure') {
-                  continue;
-                }
-
-                const preemption_match = annotation.message.match(preemption_regex);
-
-                if (preemption_match != null) {
-                  console.log('Found preemption message: ' + annotation.message);
-                  has_preempted_job = true;
-                }
-
-                const failure_match = annotation.message.match(failure_regex);
-                if (failure_match != null) {
-                  has_failed_job = true;
-                  saved_failure_message = annotation.message;
-                }
-              }
-              if (has_failed_job && (! has_preempted_job)) {
-                // We only want to restart the workflow if all of the failures were due to preemption.
-                // We don't want to restart the workflow if there were other failures.
-                //
-                // However, libcxx runners running inside docker containers produce both a preemption message and failure message.
-                //
-                // The desired approach is to ignore failure messages which appear on the same job as a preemption message
-                // (An job is a single run with a specific configuration, ex generic-gcc, gcc-14).
-                //
-                // However, it's unclear that this code achieves the desired approach, and it may ignore all failures
-                // if a preemption message is found at all on any run.
-                //
-                // For now, it's more important to restart preempted workflows than to avoid restarting workflows with
-                // non-preemption failures.
-                //
-                // TODO Figure this out.
-                core.notice('Choosing not to rerun workflow because we found a non-preemption failure' +
-                  'Failure message: "' + saved_failure_message + '"');
-                await create_check_run('skipped', 'Choosing not to rerun workflow because we found a non-preemption failure\n'
-                    + 'Failure message: ' + saved_failure_message)
-                return;
-              }
-            }
-
-            if (!has_preempted_job) {
-              core.notice('No preempted jobs found. Not restarting workflow.');
-              await create_check_run('neutral', 'No preempted jobs found. Not restarting workflow.')
-              return;
-            }
-
-            core.notice("Restarted workflow: " + context.payload.workflow_run.id);
-            await github.rest.actions.reRunWorkflowFailedJobs({
-                owner: context.repo.owner,
-                repo: context.repo.repo,
-                run_id: context.payload.workflow_run.id
-              })
-            await create_check_run('success', 'Restarted workflow run due to preempted job')

``````````

</details>


https://github.com/llvm/llvm-project/pull/147794


More information about the llvm-commits mailing list