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,36 @@ 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 }}
24
+ conclusion : ${{ steps.set-output.outputs.conclusion }}
29
25
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
26
- name : Checkout
42
27
uses : actions/checkout@v4
43
28
with :
44
- ref : ${{ env.CHECK_RUN_HEAD_SHA }}
29
+ ref : ${{ inputs.head-sha }}
45
30
46
31
- name : Get release status check run
47
32
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
33
env :
50
34
GITHUB_TOKEN : ${{ github.token }}
51
35
run : |
52
36
check_run_info=$(gh api \
53
37
--header "Accept: application/vnd.github+json" \
54
38
--header "X-GitHub-Api-Version: 2022-11-28" \
55
39
--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
57
46
58
47
check_run_id=$(echo "$check_run_info" | jq -r '.id')
59
48
check_run_status=$(echo "$check_run_info" | jq -r '.status')
@@ -64,19 +53,21 @@ jobs:
64
53
echo "CHECK_RUN_CONCLUSION=$check_run_conclusion" >> "$GITHUB_ENV"
65
54
66
55
- 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'
68
57
env :
69
58
GITHUB_TOKEN : ${{ github.token }}
70
59
run : |
71
60
CHECK_RUN_ID=$(gh api \
72
61
--header "Accept: application/vnd.github+json" \
73
62
--header "X-GitHub-Api-Version: 2022-11-28" \
74
63
--field name="release-status" \
75
- --field head_sha="$CHECK_RUN_HEAD_SHA " \
64
+ --field head_sha="$HEAD_SHA " \
76
65
--jq ".id" \
77
66
/repos/$GITHUB_REPOSITORY/check-runs)
78
67
79
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"
80
71
81
72
- name : Check all runs completed
82
73
if : env.CHECK_RUN_STATUS != 'completed'
@@ -87,10 +78,12 @@ jobs:
87
78
--header "Accept: application/vnd.github+json" \
88
79
--header "X-GitHub-Api-Version: 2022-11-28" \
89
80
--jq '.check_runs | map(select(.name != "release-status"))' \
90
- /repos/$GITHUB_REPOSITORY/commits/$CHECK_RUN_HEAD_SHA /check-runs)
81
+ /repos/$GITHUB_REPOSITORY/commits/$HEAD_SHA /check-runs)
91
82
92
83
status_stats=$(echo "$check_runs" | jq -r '. | {failed: (map(select(.conclusion == "failure")) | length), pending: (map(select(.status != "completed")) | length) }')
93
84
85
+ echo "status_stats=$status_stats"
86
+
94
87
failed=$(echo "$status_stats" | jq -r '.failed')
95
88
pending=$(echo "$status_stats" | jq -r '.pending')
96
89
101
94
if : env.CHECK_RUNS_PENDING == '0' && env.CHECK_RUN_STATUS != 'completed'
102
95
env :
103
96
GITHUB_TOKEN : ${{ github.token }}
104
- CHECK_RUNS_FAILED : ${{ env.check-runs-failed }}
105
97
run : |
106
98
if [[ "$CHECK_RUNS_FAILED" == "0" ]]; then
107
99
echo "All check runs succeeded"
@@ -123,6 +115,8 @@ jobs:
123
115
--input - \
124
116
/repos/$GITHUB_REPOSITORY/check-runs/$CHECK_RUN_ID
125
117
118
+ echo "conclusion=$conclusion" >> "$GITHUB_OUTPUT"
119
+
126
120
- name : Set output
127
121
id : set-output
128
122
run : |
@@ -132,13 +126,11 @@ jobs:
132
126
echo "status=in_progress" >> "$GITHUB_OUTPUT"
133
127
fi
134
128
135
- echo "check-run-head-sha=$CHECK_RUN_HEAD_SHA" >> "$GITHUB_OUTPUT"
136
-
137
129
update-release :
138
130
needs : validate-check-runs
139
- if : needs.validate-check-runs.outputs.status == 'completed'
131
+ if : needs.validate-check-runs.outputs.status == 'completed' && needs.validate-check-runs.outputs.conclusion == 'success'
140
132
uses : ./.github/workflows/update-release.yml
141
133
with :
142
- head-sha : ${{ needs.validate-check-runs.outputs.check-run- head-sha }}
134
+ head-sha : ${{ inputs. head-sha }}
143
135
secrets :
144
136
AUTOMATION_PRIVATE_KEY : ${{ secrets.AUTOMATION_PRIVATE_KEY }}
0 commit comments