summaryrefslogtreecommitdiff
path: root/.github
diff options
context:
space:
mode:
authorJohannes Schindelin <johannes.schindelin@gmx.de>2020-10-08 15:29:34 (GMT)
committerJunio C Hamano <gitster@pobox.com>2020-10-08 18:58:37 (GMT)
commit7d78d5fc1a91b683dde970e5e48b6d9a873cfd99 (patch)
tree2caae41cbec5b94319cbb32573100a06e1ad1cf2 /.github
parentd98273ba77e1ab9ec755576bc86c716a97bf59d7 (diff)
downloadgit-7d78d5fc1a91b683dde970e5e48b6d9a873cfd99.zip
git-7d78d5fc1a91b683dde970e5e48b6d9a873cfd99.tar.gz
git-7d78d5fc1a91b683dde970e5e48b6d9a873cfd99.tar.bz2
ci: skip GitHub workflow runs for already-tested commits/trees
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> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to '.github')
-rw-r--r--.github/workflows/main.yml39
1 files changed, 38 insertions, 1 deletions
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index fcfd138..0a9acb6 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
run: |
@@ -34,6 +34,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