Skip to content

Commit 725bcdf

Browse files
authored
test: Add option to run on PR in e2e integration workflow (#633)
1 parent 8949bb8 commit 725bcdf

File tree

2 files changed

+79
-97
lines changed

2 files changed

+79
-97
lines changed

.github/workflows/e2e-suite-pr.yml renamed to .github/workflows/e2e-suite-windows.yml

Lines changed: 0 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -15,99 +15,6 @@ on:
1515
name: PR E2E Tests
1616

1717
jobs:
18-
integration-fork-ubuntu:
19-
runs-on: ubuntu-latest
20-
if:
21-
github.event_name == 'workflow_dispatch' && inputs.sha != ''
22-
23-
steps:
24-
- uses: actions-ecosystem/action-regex-match@v2
25-
id: validate-tests
26-
with:
27-
text: ${{ inputs.test_path }}
28-
regex: '[^a-z0-9-:.\/_]' # Tests validation
29-
flags: gi
30-
31-
# Check out merge commit
32-
- name: Checkout PR
33-
uses: actions/checkout@v4
34-
with:
35-
ref: ${{ inputs.sha }}
36-
37-
- name: Get the hash value of the latest commit from the PR branch
38-
uses: octokit/graphql-action@v2.x
39-
id: commit-hash
40-
if: ${{ inputs.pull_request_number != '' }}
41-
with:
42-
query: |
43-
query PRHeadCommitHash($owner: String!, $repo: String!, $pr_num: Int!) {
44-
repository(owner:$owner, name:$repo) {
45-
pullRequest(number: $pr_num) {
46-
headRef {
47-
target {
48-
... on Commit {
49-
oid
50-
}
51-
}
52-
}
53-
}
54-
}
55-
}
56-
owner: ${{ github.event.repository.owner.login }}
57-
repo: ${{ github.event.repository.name }}
58-
pr_num: ${{ fromJSON(inputs.pull_request_number) }}
59-
env:
60-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
61-
62-
- name: Update system packages
63-
run: sudo apt-get update -y
64-
65-
- name: Setup Python
66-
uses: actions/setup-python@v4
67-
with:
68-
python-version: '3.x'
69-
70-
- name: Install Python deps
71-
run: pip install .[dev,obj]
72-
73-
- name: Install the CLI
74-
run: make install
75-
env:
76-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
77-
78-
- run: make INTEGRATION_TEST_PATH="${{ inputs.test_path }}" testint
79-
if: ${{ steps.validate-tests.outputs.match == '' }}
80-
env:
81-
LINODE_CLI_TOKEN: ${{ secrets.LINODE_TOKEN }}
82-
83-
- uses: actions/github-script@v6
84-
id: update-check-run
85-
if: ${{ inputs.pull_request_number != '' && fromJson(steps.commit-hash.outputs.data).repository.pullRequest.headRef.target.oid == inputs.sha }}
86-
env:
87-
number: ${{ inputs.pull_request_number }}
88-
job: ${{ github.job }}
89-
conclusion: ${{ job.status }}
90-
with:
91-
github-token: ${{ secrets.GITHUB_TOKEN }}
92-
script: |
93-
const { data: pull } = await github.rest.pulls.get({
94-
...context.repo,
95-
pull_number: process.env.number
96-
});
97-
const ref = pull.head.sha;
98-
const { data: checks } = await github.rest.checks.listForRef({
99-
...context.repo,
100-
ref
101-
});
102-
const check = checks.check_runs.filter(c => c.name === process.env.job);
103-
const { data: result } = await github.rest.checks.update({
104-
...context.repo,
105-
check_run_id: check[0].id,
106-
status: 'completed',
107-
conclusion: process.env.conclusion
108-
});
109-
return result;
110-
11118
integration-fork-windows:
11219
runs-on: windows-latest
11320
if:

.github/workflows/e2e-suite.yml

Lines changed: 79 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,82 @@
11
name: Integration Tests
2+
23
on:
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+
1725
jobs:
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+
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+
3780
- name: Update system packages
3881
run: sudo apt-get update -y
3982

@@ -70,6 +113,9 @@ jobs:
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

Comments
 (0)