build(deps): bump actions/upload-artifact from 3 to 4 #42
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Run kickstart tests in a PR triggered by a "/kickstart-test <launch args>" comment from an organization member. | |
name: kickstart-tests | |
on: | |
issue_comment: | |
types: [created] | |
permissions: | |
contents: read | |
statuses: write | |
jobs: | |
pr-info: | |
if: startsWith(github.event.comment.body, '/kickstart-test') | |
runs-on: ubuntu-latest | |
steps: | |
- name: Query comment author repository permissions | |
uses: octokit/request-action@v2.x | |
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 "::set-output name=allowed_user::true" | |
- name: Get information for pull request | |
uses: octokit/request-action@v2.x | |
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') | |
echo "launch arguments are: $LAUNCH_ARGS" | |
echo "::set-output name=launch_args::${LAUNCH_ARGS}" | |
- 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 "::set-output name=skip_tests::skip-on-fedora" | |
elif echo "$TARGET_BRANCH" | grep -qE "f[[:digit:]]+-(devel|release)$"; then | |
echo "::set-output name=skip_tests::skip-on-fedora" | |
elif echo "$TARGET_BRANCH" | grep -qE "rhel-8(\.[[:digit:]]+)?$"; then | |
echo "::set-output name=skip_tests::skip-on-rhel,skip-on-rhel-8" | |
echo "::set-output name=optional_test_args::--platform rhel8" | |
elif echo "$TARGET_BRANCH" | grep -qE "rhel-9(\.[[:digit:]]+)?$"; then | |
echo "::set-output name=skip_tests::skip-on-rhel,skip-on-rhel-9" | |
echo "::set-output name=optional_test_args::--platform rhel9" | |
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 }} | |
launch_args: ${{ steps.parse_launch_args.outputs.launch_args }} | |
skip_tests: ${{ steps.ks_test_args.outputs.skip_tests }} | |
optional_test_args: ${{ steps.ks_test_args.outputs.optional_test_args }} | |
run: | |
needs: pr-info | |
# only do this for Fedora for now; once we have RHEL 8/9 boot.iso builds working, also support these | |
if: needs.pr-info.outputs.allowed_user == 'true' && needs.pr-info.outputs.launch_args != '' | |
runs-on: [self-hosted, kstest] | |
timeout-minutes: 300 | |
env: | |
STATUS_NAME: kickstart-test | |
TARGET_BRANCH: ${{ needs.pr-info.outputs.base_ref }} | |
CONTAINER_TAG: 'lorax' | |
ISO_BUILD_CONTAINER_NAME: 'quay.io/rhinstaller/anaconda-iso-creator' | |
RPM_BUILD_CONTAINER_NAME: 'quay.io/rhinstaller/anaconda-rpm' | |
SKIP_KS_TESTS: ${{ needs.pr-info.outputs.skip_tests }} | |
OPTIONAL_KS_TEST_ARGS: ${{ needs.pr-info.outputs.optional_test_args }} | |
steps: | |
# we post statuses manually as this does not run from a pull_request event | |
# https://developer.github.com/v3/repos/statuses/#create-a-status | |
- name: Create in-progress status | |
uses: octokit/request-action@v2.x | |
with: | |
route: 'POST /repos/${{ github.repository }}/statuses/${{ needs.pr-info.outputs.sha }}' | |
context: '${{ env.STATUS_NAME }} ${{ needs.pr-info.outputs.launch_args }}' | |
state: pending | |
target_url: 'https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}' | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
# 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@v3 | |
with: | |
ref: ${{ needs.pr-info.outputs.sha }} | |
fetch-depth: 0 | |
- name: Rebase to current ${{ env.TARGET_BRANCH }} | |
run: | | |
git config user.name github-actions | |
git config user.email github-actions@github.com | |
git log --oneline -1 origin/${{ env.TARGET_BRANCH }} | |
git rebase origin/${{ env.TARGET_BRANCH }} | |
- name: Check out kickstart-tests | |
uses: actions/checkout@v3 | |
with: | |
repository: rhinstaller/kickstart-tests | |
path: kickstart-tests | |
- name: Ensure http proxy is running | |
run: sudo kickstart-tests/containers/squid.sh start | |
# This is really fast, but does not catch file removals or dracut changes | |
# maybe this becomes opt-in via a magic comment for efficiency reasons? | |
# if you use this, add `--updates ../updates.img` to the launch command line below | |
#- name: Build updates.img | |
# run: | | |
# scripts/makeupdates | |
# gzip -cd updates.img | cpio -tv | |
- name: Update container images used here | |
run: | | |
sudo podman pull quay.io/rhinstaller/kstest-runner:latest | |
- name: Build anaconda-iso-creator container image | |
run: | | |
# set static tag to avoid complications when looking what tag is used | |
sudo make -f ./Makefile.am anaconda-iso-creator-build CI_TAG=$CONTAINER_TAG | |
- name: Build anaconda-rpm container (for RPM build) | |
run: | | |
# set static tag to avoid complications when looking what tag is used | |
make -f ./Makefile.am anaconda-rpm-build CI_TAG=$CONTAINER_TAG | |
- name: Build Anaconda RPM files | |
run: | | |
# output of the build will be stored in ./result/build/01-rpm-build/*.rpm | |
make -f ./Makefile.am container-rpms-scratch CI_TAG=$CONTAINER_TAG | |
mkdir -p ./kickstart-tests/data/additional_repo/ | |
cp -av ./result/build/01-rpm-build/*.rpm ./kickstart-tests/data/additional_repo/ | |
- name: Prepare environment for lorax run | |
run: | | |
mkdir -p kickstart-tests/data/images | |
# We have to pre-create loop devices because they are not namespaced in kernel so | |
# podman can't access newly created ones. That caused failures of tests when runners | |
# were rebooted. | |
sudo mknod -m 0660 /dev/loop0 b 7 0 2> /dev/null || true | |
sudo mknod -m 0660 /dev/loop1 b 7 1 2> /dev/null || true | |
- name: Build boot.iso | |
run: | | |
# /var/tmp tmpfs speeds up lorax and avoids https://bugzilla.redhat.com/show_bug.cgi?id=1906364 | |
sudo podman run -i --rm --privileged \ | |
--tmpfs /var/tmp:rw,mode=1777 \ | |
-v `pwd`/kickstart-tests/data/additional_repo:/anaconda-rpms:ro \ | |
-v `pwd`/kickstart-tests/data/images:/images:z \ | |
$ISO_BUILD_CONTAINER_NAME:$CONTAINER_TAG | |
- name: Clean up after lorax | |
if: always() | |
run: | | |
sudo losetup -d /dev/loop0 2> /dev/null || true | |
sudo losetup -d /dev/loop1 2> /dev/null || true | |
# remove container images together with the container | |
sudo podman rmi -f $ISO_BUILD_CONTAINER_NAME:$CONTAINER_TAG || true | |
sudo podman rmi -f $RPM_BUILD_CONTAINER_NAME:$CONTAINER_TAG || true | |
- name: Run kickstart tests with ${{ needs.pr-info.outputs.launch_args }} in container | |
working-directory: kickstart-tests | |
run: | | |
sudo TEST_JOBS=16 containers/runner/launch --skip-testtypes "$SKIP_KS_TESTS,knownfailure,manual" $OPTIONAL_KS_TEST_ARGS ${{ needs.pr-info.outputs.launch_args }} | |
- name: Collect logs | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: 'logs' | |
# skip the /anaconda subdirectories, too large | |
path: | | |
kickstart-tests/data/logs/kstest.log | |
kickstart-tests/data/logs/kstest-*/*.log | |
kickstart-tests/data/additional_repo/*.rpm | |
- name: Set result status | |
if: always() | |
uses: octokit/request-action@v2.x | |
with: | |
route: 'POST /repos/${{ github.repository }}/statuses/${{ needs.pr-info.outputs.sha }}' | |
context: '${{ env.STATUS_NAME }} ${{ needs.pr-info.outputs.launch_args }}' | |
state: ${{ job.status }} | |
target_url: 'https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}' | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |