Browse Source

ci: make the "skip-if-redundant" check more defensive

In 7d78d5fc1a (ci: skip GitHub workflow runs for already-tested
commits/trees, 2020-10-08), we added a check that determines whether
there is already a workflow run for the given commit (or at least tree),
and if found, skips the current run.

We just worked around an issue with this check where older runs might
unexpectedly miss the `head_commit` attribute.

Let's be even more defensive by catching all kinds of exceptions,
logging them as warnings, and continue the run without skipping it
(after all, if the check fails, we _want_ to continue with the run).

This commit is best viewed with the diff option `-w` because it
increases the indentation level of the GitHub Action script by two
spaces, surrounding it by a `try ... catch` construct.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Johannes Schindelin 4 years ago committed by Junio C Hamano
parent
commit
d6d6683797
  1. 58
      .github/workflows/main.yml

58
.github/workflows/main.yml

@ -41,35 +41,39 @@ jobs:
with: with:
github-token: ${{secrets.GITHUB_TOKEN}} github-token: ${{secrets.GITHUB_TOKEN}}
script: | script: |
// Figure out workflow ID, commit and tree try {
const { data: run } = await github.actions.getWorkflowRun({ // Figure out workflow ID, commit and tree
owner: context.repo.owner, const { data: run } = await github.actions.getWorkflowRun({
repo: context.repo.repo, owner: context.repo.owner,
run_id: context.runId, repo: context.repo.repo,
}); run_id: context.runId,
const workflow_id = run.workflow_id; });
const head_sha = run.head_sha; const workflow_id = run.workflow_id;
const tree_id = run.head_commit.tree_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 // See whether there is a successful run for that commit or tree
const { data: runs } = await github.actions.listWorkflowRuns({ const { data: runs } = await github.actions.listWorkflowRuns({
owner: context.repo.owner, owner: context.repo.owner,
repo: context.repo.repo, repo: context.repo.repo,
per_page: 500, per_page: 500,
status: 'success', status: 'success',
workflow_id, workflow_id,
}); });
for (const run of runs.workflow_runs) { for (const run of runs.workflow_runs) {
if (head_sha === run.head_sha) { if (head_sha === run.head_sha) {
core.warning(`Successful run for the commit ${head_sha}: ${run.html_url}`); core.warning(`Successful run for the commit ${head_sha}: ${run.html_url}`);
core.setOutput('enabled', ' but skip'); core.setOutput('enabled', ' but skip');
break; break;
} }
if (run.head_commit && tree_id === run.head_commit.tree_id) { if (run.head_commit && tree_id === run.head_commit.tree_id) {
core.warning(`Successful run for the tree ${tree_id}: ${run.html_url}`); core.warning(`Successful run for the tree ${tree_id}: ${run.html_url}`);
core.setOutput('enabled', ' but skip'); core.setOutput('enabled', ' but skip');
break; break;
}
} }
} catch (e) {
core.warning(e);
} }


windows-build: windows-build:

Loading…
Cancel
Save