git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 1/2] ci: skip GitHub workflow runs for already-tested commits/trees

From
Johannes Schindelin via GitGitGadget <gitgitgadget@gmail.com>
Date
Oct 8, 2020, 15:29 UTC
Message-ID
<914868d558b1aa8ebec6e9196c5ae83a2bd566bf.1602170976.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.619.v2.git.1602170976.gitgitgadget@gmail.com>
From: Johannes Schindelin <johannes.schindelin@gmx.de>

When pushing a commit that has already passed a CI or PR build successfully, it makes sense to save some energy and time and skip the new build.

Let's teach our GitHub workflow to do that.

For good measure, we also compare the tree ID, which is what we actually test (the commit ID might have changed due to a reworded commit message, which should not affect the outcome of the run).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 .github/workflows/main.yml | 39 +++++++++++++++++++++++++++++++++++++-
 1 file changed, 38 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 5bd321e5e1..7391b46d61 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -9,7 +9,7 @@ jobs:
   ci-config:
     runs-on: ubuntu-latest
     outputs:
-      enabled: ${{ steps.check-ref.outputs.enabled }}
+      enabled: ${{ steps.check-ref.outputs.enabled }}${{ steps.skip-if-redundant.outputs.enabled }}
     steps:
       - name: try to clone ci-config branch
         continue-on-error: true
@@ -35,6 +35,43 @@ jobs:
             enabled=no
           fi
           echo "::set-output name=enabled::$enabled"
+      - name: skip if the commit or tree was already tested
+        id: skip-if-redundant
+        uses: actions/github-script@v3
+        if: steps.check-ref.outputs.enabled == 'yes'
+        with:
+          github-token: ${{secrets.GITHUB_TOKEN}}
+          script: |
+            // Figure out workflow ID, commit and tree
+            const { data: run } = await github.actions.getWorkflowRun({
+              owner: context.repo.owner,
+              repo: context.repo.repo,
+              run_id: context.runId,
+            });
+            const workflow_id = run.workflow_id;
+            const head_sha = run.head_sha;
+            const tree_id = run.head_commit.tree_id;
+
+            // See whether there is a successful run for that commit or tree
+            const { data: runs } = await github.actions.listWorkflowRuns({
+              owner: context.repo.owner,
+              repo: context.repo.repo,
+              per_page: 500,
+              status: 'success',
+              workflow_id,
+            });
+            for (const run of runs.workflow_runs) {
+              if (head_sha === run.head_sha) {
+                core.warning(`Successful run for the commit ${head_sha}: ${run.html_url}`);
+                core.setOutput('enabled', ' but skip');
+                break;
+              }
+              if (tree_id === run.head_commit.tree_id) {
+                core.warning(`Successful run for the tree ${tree_id}: ${run.html_url}`);
+                core.setOutput('enabled', ' but skip');
+                break;
+              }
+            }
 
   windows-build:
     needs: ci-config
-- 
gitgitgadget
Previous: Johannes Schindelin via GitGitGadgetNext: SZEDER Gábor
Message 6 of 16 in “ci: fix GitHub workflow when on a tagged revision”
  1. ci: fix GitHub workflow when on a tagged revisionJohannes Schindelin via GitGitGadget, Apr 24, 2020
  2. Junio C HamanoApr 24, 2020
  3. Johannes SchindelinApr 24, 2020
  4. Junio C HamanoApr 24, 2020
  5. 0/2 Do not skip tagged revisions in the GitHub workflow runsJohannes Schindelin via GitGitGadget, Oct 8, 2020
  6. 1/2 ci: skip GitHub workflow runs for already-tested commits/treesJohannes Schindelin via GitGitGadget, Oct 8, 2020
  7. SZEDER GáborOct 9, 2020
  8. Johannes SchindelinOct 9, 2020
  9. SZEDER GáborOct 10, 2020
  10. Johannes SchindelinOct 11, 2020
  11. Junio C HamanoOct 12, 2020
  12. Johannes SchindelinOct 12, 2020
  13. Junio C HamanoOct 15, 2020
  14. Johannes SchindelinOct 15, 2020
  15. 2/2 ci: do not skip tagged revisions in GitHub workflowsJohannes Schindelin via GitGitGadget, Oct 8, 2020
  16. Junio C HamanoOct 8, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.