11name : Integration Tests
2+
23on :
34 workflow_dispatch :
45 inputs :
56 use_minimal_test_account :
67 description : ' Use minimal test account'
78 required : false
89 default : ' false'
10+ test_path :
11+ description : " The path from 'test/integration' to the target to be tested, e.g. 'cli'"
12+ required : false
913 sha :
1014 description : ' The hash value of the commit.'
1115 required : false
1216 default : ' '
17+ pull_request_number :
18+ description : ' The number of the PR. Ensure sha value is provided'
19+ required : false
1320 push :
1421 branches :
1522 - main
1623 - dev
24+
1725jobs :
1826 integration-tests :
19- name : Run integration tests
27+ name : Run integration tests on Ubuntu
2028 runs-on : ubuntu-latest
29+ if : github.event_name == 'workflow_dispatch' && inputs.sha != '' || github.event_name == 'push' || github.event_name == 'pull_request'
2130 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
2341 if : ${{ inputs.sha != '' }}
2442 uses : actions/checkout@v4
2543 with :
2644 fetch-depth : 0
2745 submodules : ' recursive'
2846 ref : ${{ inputs.sha }}
2947
30- - name : Clone Repository without SHA
48+ - name : Checkout Repository without SHA
3149 if : ${{ inputs.sha == '' }}
3250 uses : actions/checkout@v4
3351 with :
3452 fetch-depth : 0
3553 submodules : ' recursive'
3654
55+ - name : Get the hash value of the latest commit from the PR branch
56+ 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+
3780 - name : Update system packages
3881 run : sudo apt-get update -y
3982
70113 timestamp=$(date +'%Y%m%d%H%M')
71114 report_filename="${timestamp}_cli_test_report.xml"
72115 make testint TEST_ARGS="--junitxml=${report_filename}"
116+ if : ${{ steps.validate-tests.outputs.match == '' || inputs.test_path == '' }}
117+ env :
118+ LINODE_CLI_TOKEN : ${{ env.LINODE_CLI_TOKEN }}
73119
74120 - name : Apply Calico Rules to LKE
75121 if : always()
@@ -91,4 +137,33 @@ jobs:
91137 python3 e2e_scripts/tod_scripts/xml_to_obj_storage/scripts/xml_to_obj.py "${filename}"
92138 env :
93139 LINODE_CLI_OBJ_ACCESS_KEY : ${{ secrets.LINODE_CLI_OBJ_ACCESS_KEY }}
94- LINODE_CLI_OBJ_SECRET_KEY : ${{ secrets.LINODE_CLI_OBJ_SECRET_KEY }}
140+ LINODE_CLI_OBJ_SECRET_KEY : ${{ secrets.LINODE_CLI_OBJ_SECRET_KEY }}
141+
142+ - name : Update PR Check Run
143+ uses : actions/github-script@v6
144+ id : update-check-run
145+ if : ${{ inputs.pull_request_number != '' && fromJson(steps.commit-hash.outputs.data).repository.pullRequest.headRef.target.oid == inputs.sha }}
146+ env :
147+ number : ${{ inputs.pull_request_number }}
148+ job : ${{ github.job }}
149+ conclusion : ${{ job.status }}
150+ with :
151+ github-token : ${{ secrets.GITHUB_TOKEN }}
152+ script : |
153+ const { data: pull } = await github.rest.pulls.get({
154+ ...context.repo,
155+ pull_number: process.env.number
156+ });
157+ const ref = pull.head.sha;
158+ const { data: checks } = await github.rest.checks.listForRef({
159+ ...context.repo,
160+ ref
161+ });
162+ const check = checks.check_runs.filter(c => c.name === process.env.job);
163+ const { data: result } = await github.rest.checks.update({
164+ ...context.repo,
165+ check_run_id: check[0].id,
166+ status: 'completed',
167+ conclusion: process.env.conclusion
168+ });
169+ return result;
0 commit comments