1
1
name : Integration Tests
2
+
2
3
on :
3
4
workflow_dispatch :
4
5
inputs :
5
6
use_minimal_test_account :
6
7
description : ' Use minimal test account'
7
8
required : false
8
9
default : ' false'
10
+ test_path :
11
+ description : " The path from 'test/integration' to the target to be tested, e.g. 'cli'"
12
+ required : false
9
13
sha :
10
14
description : ' The hash value of the commit.'
11
15
required : false
12
16
default : ' '
17
+ pull_request_number :
18
+ description : ' The number of the PR. Ensure sha value is provided'
19
+ required : false
13
20
push :
14
21
branches :
15
22
- main
16
23
- dev
24
+
17
25
jobs :
18
- integration-tests :
19
- name : Run integration tests
26
+ integration_tests :
27
+ name : Run integration tests on Ubuntu
20
28
runs-on : ubuntu-latest
29
+ if : github.event_name == 'workflow_dispatch' && inputs.sha != '' || github.event_name == 'push' || github.event_name == 'pull_request'
21
30
steps :
22
- - name : Clone Repository with SHA
31
+ - name : Validate Test Path
32
+ uses : actions-ecosystem/action-regex-match@v2
33
+ id : validate-tests
34
+ if : ${{ inputs.test_path != '' }}
35
+ with :
36
+ text : ${{ inputs.test_path }}
37
+ regex : ' [^a-z0-9-:.\/_]' # Tests validation
38
+ flags : gi
39
+
40
+ - name : Checkout Repository with SHA
23
41
if : ${{ inputs.sha != '' }}
24
42
uses : actions/checkout@v4
25
43
with :
26
44
fetch-depth : 0
27
45
submodules : ' recursive'
28
46
ref : ${{ inputs.sha }}
29
47
30
- - name : Clone Repository without SHA
48
+ - name : Checkout Repository without SHA
31
49
if : ${{ inputs.sha == '' }}
32
50
uses : actions/checkout@v4
33
51
with :
34
52
fetch-depth : 0
35
53
submodules : ' recursive'
36
54
55
+ - name : Get the hash value of the latest commit from the PR branch
56
+ uses : octokit/graphql-action@v2.x
57
+ id : commit-hash
58
+ if : ${{ inputs.pull_request_number != '' }}
59
+ with :
60
+ query : |
61
+ query PRHeadCommitHash($owner: String!, $repo: String!, $pr_num: Int!) {
62
+ repository(owner:$owner, name:$repo) {
63
+ pullRequest(number: $pr_num) {
64
+ headRef {
65
+ target {
66
+ ... on Commit {
67
+ oid
68
+ }
69
+ }
70
+ }
71
+ }
72
+ }
73
+ }
74
+ owner : ${{ github.event.repository.owner.login }}
75
+ repo : ${{ github.event.repository.name }}
76
+ pr_num : ${{ fromJSON(inputs.pull_request_number) }}
77
+ env :
78
+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
79
+
37
80
- name : Update system packages
38
81
run : sudo apt-get update -y
39
82
68
111
timestamp=$(date +'%Y%m%d%H%M')
69
112
report_filename="${timestamp}_cli_test_report.xml"
70
113
make testint TEST_ARGS="--junitxml=${report_filename}"
114
+ if : ${{ steps.validate-tests.outputs.match == '' || inputs.test_path == '' }}
115
+ env :
116
+ LINODE_CLI_TOKEN : ${{ env.LINODE_CLI_TOKEN }}
71
117
72
118
- name : Apply Calico Rules to LKE
73
119
if : always()
@@ -80,13 +126,108 @@ jobs:
80
126
if : always()
81
127
run : |
82
128
filename=$(ls | grep -E '^[0-9]{12}_cli_test_report\.xml$')
83
- python tod_scripts/add_to_xml_test_report .py \
129
+ python3 e2e_scripts/ tod_scripts/xml_to_obj_storage/scripts/add_gha_info_to_xml .py \
84
130
--branch_name "${GITHUB_REF#refs/*/}" \
85
131
--gha_run_id "$GITHUB_RUN_ID" \
86
132
--gha_run_number "$GITHUB_RUN_NUMBER" \
87
133
--xmlfile "${filename}"
88
134
sync
89
- python tod_scripts/test_report_upload_script .py "${filename}"
135
+ python3 e2e_scripts/ tod_scripts/xml_to_obj_storage/scripts/xml_to_obj .py "${filename}"
90
136
env :
91
137
LINODE_CLI_OBJ_ACCESS_KEY : ${{ secrets.LINODE_CLI_OBJ_ACCESS_KEY }}
92
- LINODE_CLI_OBJ_SECRET_KEY : ${{ secrets.LINODE_CLI_OBJ_SECRET_KEY }}
138
+ LINODE_CLI_OBJ_SECRET_KEY : ${{ secrets.LINODE_CLI_OBJ_SECRET_KEY }}
139
+
140
+ - name : Update PR Check Run
141
+ uses : actions/github-script@v6
142
+ id : update-check-run
143
+ if : ${{ inputs.pull_request_number != '' && fromJson(steps.commit-hash.outputs.data).repository.pullRequest.headRef.target.oid == inputs.sha }}
144
+ env :
145
+ number : ${{ inputs.pull_request_number }}
146
+ job : ${{ github.job }}
147
+ conclusion : ${{ job.status }}
148
+ with :
149
+ github-token : ${{ secrets.GITHUB_TOKEN }}
150
+ script : |
151
+ const { data: pull } = await github.rest.pulls.get({
152
+ ...context.repo,
153
+ pull_number: process.env.number
154
+ });
155
+ const ref = pull.head.sha;
156
+ const { data: checks } = await github.rest.checks.listForRef({
157
+ ...context.repo,
158
+ ref
159
+ });
160
+ const check = checks.check_runs.filter(c => c.name === process.env.job);
161
+ const { data: result } = await github.rest.checks.update({
162
+ ...context.repo,
163
+ check_run_id: check[0].id,
164
+ status: 'completed',
165
+ conclusion: process.env.conclusion
166
+ });
167
+ return result;
168
+
169
+ notify-slack :
170
+ runs-on : ubuntu-latest
171
+ needs : [integration_tests]
172
+ if : always() && github.repository == 'linode/linode-cli' # Run even if integration tests fail and only on main repository
173
+
174
+ steps :
175
+ - name : Notify Slack
176
+ uses : slackapi/slack-github-action@v1.27.0
177
+ with :
178
+ channel-id : ${{ secrets.SLACK_CHANNEL_ID }}
179
+ payload : |
180
+ {
181
+ "blocks": [
182
+ {
183
+ "type": "section",
184
+ "text": {
185
+ "type": "mrkdwn",
186
+ "text": ":rocket: *${{ github.workflow }} Completed in: ${{ github.repository }}* :white_check_mark:"
187
+ }
188
+ },
189
+ {
190
+ "type": "divider"
191
+ },
192
+ {
193
+ "type": "section",
194
+ "fields": [
195
+ {
196
+ "type": "mrkdwn",
197
+ "text": "*Build Result:*\n${{ needs.integration_tests.result == 'success' && ':large_green_circle: Build Passed' || ':red_circle: Build Failed' }}"
198
+ },
199
+ {
200
+ "type": "mrkdwn",
201
+ "text": "*Branch:*\n`${{ github.ref_name }}`"
202
+ }
203
+ ]
204
+ },
205
+ {
206
+ "type": "section",
207
+ "fields": [
208
+ {
209
+ "type": "mrkdwn",
210
+ "text": "*Commit Hash:*\n<${{ github.server_url }}/${{ github.repository }}/commit/${{ github.sha }}|${{ github.sha }}>"
211
+ },
212
+ {
213
+ "type": "mrkdwn",
214
+ "text": "*Run URL:*\n<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|View Run Details>"
215
+ }
216
+ ]
217
+ },
218
+ {
219
+ "type": "divider"
220
+ },
221
+ {
222
+ "type": "context",
223
+ "elements": [
224
+ {
225
+ "type": "mrkdwn",
226
+ "text": "Triggered by: :bust_in_silhouette: `${{ github.actor }}`"
227
+ }
228
+ ]
229
+ }
230
+ ]
231
+ }
232
+ env :
233
+ SLACK_BOT_TOKEN : ${{ secrets.SLACK_BOT_TOKEN }}
0 commit comments