forked from rhinstaller/kickstart-tests
-
Notifications
You must be signed in to change notification settings - Fork 0
145 lines (129 loc) · 6.13 KB
/
test-platforms.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# Run kickstart tests in a PR triggered by a "/test-platforms" command from an organization member
#
# /test-platforms - tests all tests affected by the PR or smoke tests if there is no such
# Or specify tests by combination of test names and/or options:
# /test-platforms --testtype TESTTYPE --skip-testtypes TYPE[,TYPE..] TEST1 TEST2
name: test-platforms
on:
issue_comment:
types: [created]
permissions:
contents: read
statuses: write
jobs:
pr-info:
if: startsWith(github.event.comment.body, '/test-platforms')
runs-on: ubuntu-latest
steps:
- name: Query comment author repository permissions
uses: octokit/[email protected]
id: user_permission
with:
route: GET /repos/${{ github.repository }}/collaborators/${{ github.event.sender.login }}/permission
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# restrict running of tests to users with admin or write permission for the repository
# see https://docs.github.com/en/free-pro-team@latest/rest/reference/repos#get-repository-permissions-for-a-user
# store output if user is allowed in allowed_user job output so it has to be checked in downstream job
- name: Check if user does have correct permissions
if: contains('admin write', fromJson(steps.user_permission.outputs.data).permission)
id: check_user_perm
run: |
echo "User '${{ github.event.sender.login }}' has permission '${{ fromJson(steps.user_permission.outputs.data).permission }}' allowed values: 'admin', 'write'"
echo "allowed_user=true" >> $GITHUB_OUTPUT
- name: Get information for pull request
uses: octokit/[email protected]
id: pr_api
with:
route: GET /repos/${{ github.repository }}/pulls/${{ github.event.issue.number }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Parse launch arguments
id: parse_launch_args
# Do not use comment body directly in the shell command to avoid possible code injection.
env:
BODY: ${{ github.event.comment.body }}
run: |
# extract first line and cut out the "/kickstart-tests" first word
LAUNCH_ARGS=$(echo "$BODY" | sed -n '1 s/^[^ ]* *//p' | sed 's/[[:space:]]*$//')
echo "launch arguments are: $LAUNCH_ARGS"
echo "launch_args=${LAUNCH_ARGS}" >> $GITHUB_OUTPUT
# - name: Set KS test arguments
# id: ks_test_args
# run: |
# set -eux
# TARGET_BRANCH="${{ fromJson(steps.pr_api.outputs.data).base.ref }}"
#
# if [ "$TARGET_BRANCH" == "master" ]; then
# echo "skip_tests=skip-on-fedora" >> $GITHUB_OUTPUT
# echo "platform=fedora_rawhide" >> $GITHUB_OUTPUT
# elif echo "$TARGET_BRANCH" | grep -qE "fedora-[[:digit:]]+$"; then
# echo "skip_tests=skip-on-fedora" >> $GITHUB_OUTPUT
# echo "platform=fedora_rawhide" >> $GITHUB_OUTPUT
# elif echo "$TARGET_BRANCH" | grep -qE "rhel-8(\.[[:digit:]]+)?$"; then
# echo "skip_tests=skip-on-rhel,skip-on-rhel-8" >> $GITHUB_OUTPUT
# echo "platform=rhel8" >> $GITHUB_OUTPUT
# elif echo "$TARGET_BRANCH" | grep -qE "rhel-9(\.[[:digit:]]+)?$"; then
# echo "skip_tests=skip-on-rhel,skip-on-rhel-9" >> $GITHUB_OUTPUT
# echo "platform=rhel9" >> $GITHUB_OUTPUT
# else
# echo "Branch $TARGET_BRANCH is not supported by kickstart tests yet!"
# exit 1
# fi
outputs:
allowed_user: ${{ steps.check_user_perm.outputs.allowed_user }}
base_ref: ${{ fromJson(steps.pr_api.outputs.data).base.ref }}
sha: ${{ fromJson(steps.pr_api.outputs.data).head.sha }}
# TODO: generate test names
launch_args: ${{ steps.parse_launch_args.outputs.launch_args }}
# skip_tests: ${{ steps.ks_test_args.outputs.skip_tests }}
# platform: ${{ steps.ks_test_args.outputs.platform }}
platform:
needs: pr-info
if: needs.pr-info.outputs.allowed_user == 'true' && ! contains(github.event.comment.body, '--waive')
name: Run tests on the platform
runs-on: [self-hosted, kstest-test]
env:
TARGET_BRANCH: ${{ needs.pr-info.outputs.base_ref }}
strategy:
matrix:
#platform: [daily-iso, rhel8, rhel9]
platform: [daily-iso]
fail-fast: false
steps:
- name: DUMMY
run: |
echo "Running platform ${{ matrix.platform }}"
#
# self-hosted runners don't do this automatically; also useful to keep stuff around for debugging
# need to run sudo as the launch script and the container create root/other user owned files
- name: Clean up previous run
run: |
sudo podman ps -q --all --filter='ancestor=kstest-runner' | xargs -tr sudo podman rm -f
sudo podman volume rm --all || true
sudo rm -rf * .git
- name: Clone repository
uses: actions/checkout@v4
with:
ref: ${{ needs.pr-info.outputs.sha }}
fetch-tags: true
path: kickstart-tests
- name: Rebase to current ${{ env.TARGET_BRANCH }}
working-directory: ./kickstart-tests
run: |
pwd
git branch
git branch -r
git remote -v
git fetch origin
git config user.name github-actions
git config user.email [email protected]
git log --oneline -1 origin/${{ env.TARGET_BRANCH }}
git rebase origin/${{ env.TARGET_BRANCH }}
- name: Get changed tests
working-directory: ./kickstart-tests
id: get_changed_tests
run: |
CHANGED_TESTS=$(git diff --name-only ${{ fromJson(steps.pr_api.outputs.data).base.ref }} ${{ fromJson(steps.pr_api.outputs.data).head.sha }} -- *.ks.in $(find -maxdepth 1 -name '*.sh' -perm -u+x) | sed 's/\.ks\.in$//; s/\.sh$//' | sort -u)
echo "changed_tests=${CHANGED_TESTS}"
# TODO: progress from anaconda