11name : Integration Tests
2+
23on :
3- workflow_dispatch : null
4+ workflow_dispatch :
5+ inputs :
6+ use_minimal_test_account :
7+ description : ' Use minimal test account'
8+ required : false
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
13+ sha :
14+ description : ' The hash value of the commit.'
15+ required : false
16+ default : ' '
17+ pull_request_number :
18+ description : ' The number of the PR. Ensure sha value is provided'
19+ required : false
420 push :
521 branches :
622 - main
723 - dev
24+
825jobs :
926 integration-tests :
10- name : Run integration tests
27+ name : Run integration tests on Ubuntu
1128 runs-on : ubuntu-latest
12- env :
13- EXIT_STATUS : 0
29+ if : github.event_name == 'workflow_dispatch' && inputs.sha != '' || github.event_name == 'push' || github.event_name == 'pull_request'
1430 steps :
15- - name : Clone Repository
16- uses : actions/checkout@v3
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
41+ if : ${{ inputs.sha != '' }}
42+ uses : actions/checkout@v4
43+ with :
44+ fetch-depth : 0
45+ submodules : ' recursive'
46+ ref : ${{ inputs.sha }}
47+
48+ - name : Checkout Repository without SHA
49+ if : ${{ inputs.sha == '' }}
50+ uses : actions/checkout@v4
1751 with :
1852 fetch-depth : 0
1953 submodules : ' recursive'
2054
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+
2180 - name : Update system packages
2281 run : sudo apt-get update -y
2382
@@ -26,39 +85,85 @@ jobs:
2685 with :
2786 python-version : ' 3.x'
2887
29- - name : Install Python deps
30- run : pip install wheel boto3
31-
32- - name : Update cert
33- run : pip install certifi -U
88+ - name : Install Python dependencies and update cert
89+ run : |
90+ pip install wheel boto3 && \
91+ pip install certifi -U && \
92+ pip install .[obj,dev]
3493
35- - name : Install deps
36- run : pip install .[obj,dev]
94+ - name : Download kubectl and calicoctl for LKE clusters
95+ run : |
96+ curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
97+ curl -LO "https://github.com/projectcalico/calico/releases/download/v3.25.0/calicoctl-linux-amd64"
98+ chmod +x calicoctl-linux-amd64 kubectl
99+ mv calicoctl-linux-amd64 /usr/local/bin/calicoctl
100+ mv kubectl /usr/local/bin/kubectl
37101
38102 - name : Install Package
39103 run : make install
40104 env :
41105 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
42106
107+ - name : Set LINODE_CLI_TOKEN
108+ run : |
109+ echo "LINODE_CLI_TOKEN=${{ secrets[inputs.use_minimal_test_account == 'true' && 'MINIMAL_LINODE_TOKEN' || 'LINODE_TOKEN'] }}" >> $GITHUB_ENV
110+
43111 - name : Run the integration test suite
44112 run : |
45113 timestamp=$(date +'%Y%m%d%H%M')
46114 report_filename="${timestamp}_cli_test_report.xml"
47115 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 }}
119+
120+ - name : Apply Calico Rules to LKE
121+ if : always()
122+ run : |
123+ cd scripts && ./lke_calico_rules_e2e.sh
48124 env :
49- LINODE_CLI_TOKEN : ${{ secrets.LINODE_TOKEN }}
125+ LINODE_TOKEN : ${{ env.LINODE_CLI_TOKEN }}
50126
51127 - name : Upload test results
52128 if : always()
53129 run : |
54130 filename=$(ls | grep -E '^[0-9]{12}_cli_test_report\.xml$')
55- python tod_scripts/add_to_xml_test_report .py \
131+ python3 e2e_scripts/ tod_scripts/xml_to_obj_storage/scripts/add_gha_info_to_xml .py \
56132 --branch_name "${GITHUB_REF#refs/*/}" \
57133 --gha_run_id "$GITHUB_RUN_ID" \
58134 --gha_run_number "$GITHUB_RUN_NUMBER" \
59135 --xmlfile "${filename}"
60136 sync
61- python tod_scripts/test_report_upload_script .py "${filename}"
137+ python3 e2e_scripts/ tod_scripts/xml_to_obj_storage/scripts/xml_to_obj .py "${filename}"
62138 env :
63139 LINODE_CLI_OBJ_ACCESS_KEY : ${{ secrets.LINODE_CLI_OBJ_ACCESS_KEY }}
64- 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