11name :" Update Release Status"
22on :
3- check_run :
4- types :
5- -completed
6- -rerequested
7- branches :
8- -" rc/**"
9-
103workflow_dispatch :
114inputs :
125head-sha :
@@ -20,40 +13,36 @@ permissions:
2013checks :write
2114contents :write
2215
16+ env :
17+ HEAD_SHA :${{ inputs.head-sha }}
18+
2319jobs :
2420validate-check-runs :
2521runs-on :ubuntu-22.04
2622outputs :
2723status :${{ steps.set-output.outputs.status }}
28- check-run-head-sha :${{ steps.set-output.outputs.check-run-head-sha }}
24+ conclusion :${{ steps.set-output.outputs.conclusion }}
2925steps :
30- -name :Determine check run head SHA
31- env :
32- HEAD_SHA_FROM_EVENT :${{ github.event.check_run.head_sha }}
33- HEAD_SHA_FROM_INPUTS :${{ inputs.head-sha }}
34- run :|
35- if [[ $GITHUB_EVENT_NAME == "workflow_dispatch" ]]; then
36- echo "CHECK_RUN_HEAD_SHA=$HEAD_SHA_FROM_INPUTS" >> "$GITHUB_ENV"
37- else
38- echo "CHECK_RUN_HEAD_SHA=$HEAD_SHA_FROM_EVENT" >> "$GITHUB_ENV"
39- fi
40-
4126 -name :Checkout
4227uses :actions/checkout@v4
4328with :
44- ref :${{env.CHECK_RUN_HEAD_SHA }}
29+ ref :${{inputs.head-sha }}
4530
4631 -name :Get release status check run
4732id :get-check-run
48- if :(github.event_name == 'check_run' && github.event.check_run.conclusion == 'success' && github.event.check_run.name != github.workflow) || github.event_name == 'workflow_dispatch'
4933env :
5034GITHUB_TOKEN :${{ github.token }}
5135run :|
5236 check_run_info=$(gh api \
5337 --header "Accept: application/vnd.github+json" \
5438 --header "X-GitHub-Api-Version: 2022-11-28" \
5539 --jq '.check_runs[] | select(.name == "release-status") | {id: .id, status: .status, conclusion: .conclusion}' \
56- /repos/$GITHUB_REPOSITORY/commits/$CHECK_RUN_HEAD_SHA/check-runs)
40+ /repos/$GITHUB_REPOSITORY/commits/$HEAD_SHA/check-runs)
41+
42+ if [[ -z "$check_run_info" ]]; then
43+ echo "No release status check run found"
44+ exit 1
45+ fi
5746
5847 check_run_id=$(echo "$check_run_info" | jq -r '.id')
5948 check_run_status=$(echo "$check_run_info" | jq -r '.status')
@@ -64,19 +53,22 @@ jobs:
6453 echo "CHECK_RUN_CONCLUSION=$check_run_conclusion" >> "$GITHUB_ENV"
6554
6655 -name :Reset release status
67- if :env.CHECK_RUN_STATUS == 'completed' && ((github.event_name == 'check_run' && github.event.action == 'rerequested') || github.event_name == 'workflow_dispatch')
56+ if :env.CHECK_RUN_STATUS == 'completed'
6857env :
6958GITHUB_TOKEN :${{ github.token }}
7059run :|
71- CHECK_RUN_ID =$(gh api \
60+ check_run_id =$(gh api \
7261 --header "Accept: application/vnd.github+json" \
7362 --header "X-GitHub-Api-Version: 2022-11-28" \
7463 --field name="release-status" \
75- --field head_sha="$CHECK_RUN_HEAD_SHA " \
64+ --field head_sha="$HEAD_SHA " \
7665 --jq ".id" \
7766 /repos/$GITHUB_REPOSITORY/check-runs)
7867
79- echo "Created release status check run with id $CHECK_RUN_ID"
68+ echo "Created release status check run with id $check_run_id"
69+ # Reset the status to in progress.
70+ echo "CHECK_RUN_STATUS=in_progress" >> "$GITHUB_ENV"
71+ echo "CHECK_RUN_ID=$check_run_id" >> "$GITHUB_ENV"
8072
8173 -name :Check all runs completed
8274if :env.CHECK_RUN_STATUS != 'completed'
@@ -87,10 +79,12 @@ jobs:
8779 --header "Accept: application/vnd.github+json" \
8880 --header "X-GitHub-Api-Version: 2022-11-28" \
8981 --jq '.check_runs | map(select(.name != "release-status"))' \
90- /repos/$GITHUB_REPOSITORY/commits/$CHECK_RUN_HEAD_SHA /check-runs)
82+ /repos/$GITHUB_REPOSITORY/commits/$HEAD_SHA /check-runs)
9183
9284 status_stats=$(echo "$check_runs" | jq -r '. | {failed: (map(select(.conclusion == "failure")) | length), pending: (map(select(.status != "completed")) | length) }')
9385
86+ echo "status_stats=$status_stats"
87+
9488 failed=$(echo "$status_stats" | jq -r '.failed')
9589 pending=$(echo "$status_stats" | jq -r '.pending')
9690
10195if :env.CHECK_RUNS_PENDING == '0' && env.CHECK_RUN_STATUS != 'completed'
10296env :
10397GITHUB_TOKEN :${{ github.token }}
104- CHECK_RUNS_FAILED :${{ env.check-runs-failed }}
10598run :|
10699 if [[ "$CHECK_RUNS_FAILED" == "0" ]]; then
107100 echo "All check runs succeeded"
@@ -123,22 +116,23 @@ jobs:
123116 --input - \
124117 /repos/$GITHUB_REPOSITORY/check-runs/$CHECK_RUN_ID
125118
119+ echo "RELEASE_STATUS_CONCLUSION=$conclusion" >> "$GITHUB_ENV"
120+
126121 -name :Set output
127122id :set-output
128123run :|
124+ echo "conclusion=$RELEASE_STATUS_CONCLUSION" >> "$GITHUB_OUTPUT"
129125 if [[ "$CHECK_RUNS_PENDING" == "0" ]]; then
130126 echo "status=completed" >> "$GITHUB_OUTPUT"
131127 else
132128 echo "status=in_progress" >> "$GITHUB_OUTPUT"
133129 fi
134130
135- echo "check-run-head-sha=$CHECK_RUN_HEAD_SHA" >> "$GITHUB_OUTPUT"
136-
137131update-release :
138132needs :validate-check-runs
139- if :needs.validate-check-runs.outputs.status == 'completed'
133+ if :needs.validate-check-runs.outputs.status == 'completed' && needs.validate-check-runs.outputs.conclusion == 'success'
140134uses :./.github/workflows/update-release.yml
141135with :
142- head-sha :${{needs.validate-check-runs.outputs.check-run- head-sha }}
136+ head-sha :${{inputs. head-sha }}
143137secrets :
144138AUTOMATION_PRIVATE_KEY :${{ secrets.AUTOMATION_PRIVATE_KEY }}