Skip to content

build(deps): bump actions/checkout from 3 to 4 #39

build(deps): bump actions/checkout from 3 to 4

build(deps): bump actions/checkout from 3 to 4 #39

# 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 }}