From d0ff1a3cbc579947c5daeeb5ac433885a0bdc88e Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Sun, 11 Oct 2020 21:27:10 +0000 Subject: [PATCH 1/2] ci: work around old records of GitHub runs Apparently older GitHub runs at least _sometimes_ lack information about the `head_commit` (and therefore the `ci-config` check will fail with "TypeError: Cannot read property 'tree_id' of null") in the check added in 7d78d5fc1a9 (ci: skip GitHub workflow runs for already-tested commits/trees, 2020-10-08). Let's work around this by adding a defensive condition. Reported-by: Philippe Blain Signed-off-by: Johannes Schindelin Signed-off-by: Junio C Hamano --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0a9acb6a19..d4298878f5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -65,7 +65,7 @@ jobs: core.setOutput('enabled', ' but skip'); break; } - if (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.setOutput('enabled', ' but skip'); break; From d6d668379724c744e5865e9553a2d275bd5c9500 Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Sun, 11 Oct 2020 21:27:11 +0000 Subject: [PATCH 2/2] ci: make the "skip-if-redundant" check more defensive In 7d78d5fc1a9 (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 Signed-off-by: Junio C Hamano --- .github/workflows/main.yml | 58 ++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d4298878f5..9dc359bc23 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -41,35 +41,39 @@ jobs: 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; + try { + // 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 (run.head_commit && 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; + // 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 (run.head_commit && 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; + } } + } catch (e) { + core.warning(e); } windows-build: