1
1
name : " Update Release Status"
2
2
on :
3
- check_run :
4
- types :
5
- - completed
6
- - rerequested
7
- branches :
8
- - " rc/**"
9
-
10
3
workflow_dispatch :
11
4
inputs :
12
5
head-sha :
@@ -20,40 +13,30 @@ permissions:
20
13
checks : write
21
14
contents : write
22
15
16
+ env :
17
+ HEAD_SHA : ${{ inputs.head-sha }}
18
+
23
19
jobs :
24
20
validate-check-runs :
25
21
runs-on : ubuntu-22.04
26
22
outputs :
27
23
status : ${{ steps.set-output.outputs.status }}
28
- check-run-head-sha : ${{ steps.set-output.outputs.check-run-head-sha }}
29
24
steps :
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
-
41
25
- name : Checkout
42
26
uses : actions/checkout@v4
43
27
with :
44
- ref : ${{ env.CHECK_RUN_HEAD_SHA }}
28
+ ref : ${{ inputs.head-sha }}
45
29
46
30
- name : Get release status check run
47
31
id : 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'
49
32
env :
50
33
GITHUB_TOKEN : ${{ github.token }}
51
34
run : |
52
35
check_run_info=$(gh api \
53
36
--header "Accept: application/vnd.github+json" \
54
37
--header "X-GitHub-Api-Version: 2022-11-28" \
55
38
--jq '.check_runs[] | select(.name == "release-status") | {id: .id, status: .status, conclusion: .conclusion}' \
56
- /repos/$GITHUB_REPOSITORY/commits/$CHECK_RUN_HEAD_SHA /check-runs)
39
+ /repos/$GITHUB_REPOSITORY/commits/$HEAD_SHA /check-runs)
57
40
58
41
check_run_id=$(echo "$check_run_info" | jq -r '.id')
59
42
check_run_status=$(echo "$check_run_info" | jq -r '.status')
@@ -64,19 +47,21 @@ jobs:
64
47
echo "CHECK_RUN_CONCLUSION=$check_run_conclusion" >> "$GITHUB_ENV"
65
48
66
49
- 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')
50
+ if : env.CHECK_RUN_STATUS == 'completed'
68
51
env :
69
52
GITHUB_TOKEN : ${{ github.token }}
70
53
run : |
71
54
CHECK_RUN_ID=$(gh api \
72
55
--header "Accept: application/vnd.github+json" \
73
56
--header "X-GitHub-Api-Version: 2022-11-28" \
74
57
--field name="release-status" \
75
- --field head_sha="$CHECK_RUN_HEAD_SHA " \
58
+ --field head_sha="$HEAD_SHA " \
76
59
--jq ".id" \
77
60
/repos/$GITHUB_REPOSITORY/check-runs)
78
61
79
62
echo "Created release status check run with id $CHECK_RUN_ID"
63
+ // Reset the status to in progress.
64
+ echo "CHECK_RUN_STATUS=in_progress" >> "$GITHUB_ENV"
80
65
81
66
- name : Check all runs completed
82
67
if : env.CHECK_RUN_STATUS != 'completed'
87
72
--header "Accept: application/vnd.github+json" \
88
73
--header "X-GitHub-Api-Version: 2022-11-28" \
89
74
--jq '.check_runs | map(select(.name != "release-status"))' \
90
- /repos/$GITHUB_REPOSITORY/commits/$CHECK_RUN_HEAD_SHA /check-runs)
75
+ /repos/$GITHUB_REPOSITORY/commits/$HEAD_SHA /check-runs)
91
76
92
77
status_stats=$(echo "$check_runs" | jq -r '. | {failed: (map(select(.conclusion == "failure")) | length), pending: (map(select(.status != "completed")) | length) }')
93
78
@@ -132,13 +117,11 @@ jobs:
132
117
echo "status=in_progress" >> "$GITHUB_OUTPUT"
133
118
fi
134
119
135
- echo "check-run-head-sha=$CHECK_RUN_HEAD_SHA" >> "$GITHUB_OUTPUT"
136
-
137
120
update-release :
138
121
needs : validate-check-runs
139
122
if : needs.validate-check-runs.outputs.status == 'completed'
140
123
uses : ./.github/workflows/update-release.yml
141
124
with :
142
- head-sha : ${{ needs.validate-check-runs.outputs.check-run- head-sha }}
125
+ head-sha : ${{ inputs. head-sha }}
143
126
secrets :
144
127
AUTOMATION_PRIVATE_KEY : ${{ secrets.AUTOMATION_PRIVATE_KEY }}
0 commit comments