258 lines
12 KiB
YAML
258 lines
12 KiB
YAML
on:
|
|
pull_request:
|
|
|
|
name: "Trigger: Push action"
|
|
|
|
jobs:
|
|
tests:
|
|
name: Lint
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
|
- uses: pre-commit/action@2c7b3805fd2a0fd8c1884dcaebf91fc102a13ecd # v3.0.1
|
|
- name: Run ShellCheck
|
|
uses: ludeeus/action-shellcheck@00b27aa7cb85167568cb48a3838b75f4265f2bca # master
|
|
|
|
ubuntu_tests:
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
release: [jammy, focal, noble]
|
|
platform: [amd64, arm64]
|
|
fail-fast: false
|
|
steps:
|
|
- name: Copy Repo Files
|
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
- name: Get GitHub organization or user
|
|
run: echo 'ORG='$(echo $(dirname ${GITHUB_REPOSITORY}) | awk '{print tolower($0)}') >> $GITHUB_ENV
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@06116385d9baf250c9f4dcb4858b16962ea869c3 # v4.1.0
|
|
with:
|
|
image: tonistiigi/binfmt:qemu-v7.0.0
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 # v4.1.0
|
|
- name: Install Goss and dgoss
|
|
run: |
|
|
curl -fsSL https://goss.rocks/install | sh
|
|
export PATH=$PATH:/usr/local/bin
|
|
- name: Get current Git SHA
|
|
id: vars
|
|
run: echo "GIT_SHA=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
|
|
- name: set testable image environment variable
|
|
id: testvars
|
|
run: echo "GH_RUNNER_IMAGE=ubuntu-${{ matrix.release }}-${{ env.GIT_SHA }}-${{ matrix.platform }}" >> $GITHUB_ENV
|
|
- name: Combine Dockerfile
|
|
run: |
|
|
cp Dockerfile.base Dockerfile.final.ubuntu-${{ matrix.release }};
|
|
sed -i.bak 's/FROM.*/FROM ubuntu:${{ matrix.release }}/' Dockerfile.final.ubuntu-${{ matrix.release }}
|
|
|
|
# Combine the dockerfiles
|
|
cp Dockerfile Dockerfile.ubuntu-${{ matrix.release }}
|
|
cat Dockerfile.ubuntu-${{ matrix.release }} | sed "s/^FROM.*//" >>Dockerfile.final.ubuntu-${{ matrix.release }}
|
|
|
|
# Sanity check
|
|
grep FROM Dockerfile.final.ubuntu-${{ matrix.release }}
|
|
- name: Retry build final image
|
|
uses: nick-fields/retry@ad984534de44a9489a53aefd81eb77f87c70dc60 # v4
|
|
with:
|
|
timeout_minutes: 60
|
|
max_attempts: 3
|
|
command: |
|
|
docker buildx build \
|
|
--file Dockerfile.final.ubuntu-${{ matrix.release }} \
|
|
--platform linux/${{ matrix.platform }} \
|
|
--tag ${{ env.GH_RUNNER_IMAGE }} \
|
|
--load \
|
|
--cache-from type=gha \
|
|
--cache-to type=gha,mode=max \
|
|
.
|
|
# Tests will run against the final `${GH_RUNNER_IMAGE}` laid on top of `base-${GH_RUNNER_IMAGE}`
|
|
- name: Run goss tests
|
|
uses: nick-fields/retry@ad984534de44a9489a53aefd81eb77f87c70dc60 # v4
|
|
with:
|
|
timeout_minutes: 60
|
|
max_attempts: 3
|
|
command: |
|
|
echo "os: ubuntu" >goss_vars_${GH_RUNNER_IMAGE}.yaml
|
|
echo "oscodename: ${{ matrix.release }}" >>goss_vars_${GH_RUNNER_IMAGE}.yaml
|
|
echo "arch: ${{ matrix.platform }}" >>goss_vars_${GH_RUNNER_IMAGE}.yaml
|
|
# test the edge case from deregistration on reusable runners
|
|
GOSS_VARS=goss_vars_${GH_RUNNER_IMAGE}.yaml GOSS_FILE=goss_reusage_fail.yaml GOSS_SLEEP=1 dgoss run --entrypoint /usr/bin/sleep \
|
|
-e DEBUG_ONLY=true \
|
|
-e ACCESS_TOKEN=notreal \
|
|
-e LABELS=linux,x64 \
|
|
-e REPO_URL=https://github.com/octokode/test1 \
|
|
-e RUNNER_NAME=sustainjane-runner-1 \
|
|
-e RUNNER_SCOPE=repo \
|
|
-e RUNNER_WORKDIR=/tmp/runner/work \
|
|
-e DISABLE_AUTOMATIC_DEREGISTRATION=false \
|
|
-e CONFIGURED_ACTIONS_RUNNER_FILES_DIR=/runner/data \
|
|
${GH_RUNNER_IMAGE} 10
|
|
if [ $? -ne 0 ]; then
|
|
exit 1
|
|
fi
|
|
# test the base
|
|
GOSS_VARS=goss_vars_${GH_RUNNER_IMAGE}.yaml GOSS_FILE=goss_base.yaml GOSS_SLEEP=1 dgoss run --entrypoint /usr/bin/sleep -e RUNNER_NAME=test -e DEBUG_ONLY=true ${GH_RUNNER_IMAGE} 10
|
|
if [ $? -ne 0 ]; then
|
|
exit 1
|
|
fi
|
|
# test the final image but with all defaults
|
|
GOSS_VARS=goss_vars_${GH_RUNNER_IMAGE}.yaml GOSS_FILE=goss_full_defaults.yaml GOSS_SLEEP=1 dgoss run --entrypoint /usr/bin/sleep -e RUNNER_NAME=test -e DEBUG_ONLY=true ${GH_RUNNER_IMAGE} 10
|
|
if [ $? -ne 0 ]; then
|
|
exit 1
|
|
fi
|
|
# test the final image but with non-default values
|
|
GOSS_VARS=goss_vars_${GH_RUNNER_IMAGE}.yaml GOSS_FILE=goss_full.yaml GOSS_SLEEP=1 dgoss run --entrypoint /usr/bin/sleep \
|
|
-e DEBUG_ONLY=true \
|
|
-e RUNNER_NAME=huzzah \
|
|
-e REPO_URL=https://github.com/myoung34/docker-github-actions-runner \
|
|
-e RUN_AS_ROOT=true \
|
|
-e RUNNER_NAME_PREFIX=asdf \
|
|
-e ACCESS_TOKEN=1234 \
|
|
-e APP_ID=5678 \
|
|
-e APP_PRIVATE_KEY=2345 \
|
|
-e APP_LOGIN=SOMETHING \
|
|
-e RUNNER_SCOPE=org \
|
|
-e ORG_NAME=myoung34 \
|
|
-e ENTERPRISE_NAME=emyoung34 \
|
|
-e LABELS=blue,green \
|
|
-e RUNNER_TOKEN=3456 \
|
|
-e RUNNER_WORKDIR=/tmp/a \
|
|
-e RUNNER_GROUP=wat \
|
|
-e GITHUB_HOST=github.example.com \
|
|
-e DISABLE_AUTOMATIC_DEREGISTRATION=true \
|
|
-e EPHEMERAL=true \
|
|
-e DISABLE_AUTO_UPDATE=true \
|
|
${GH_RUNNER_IMAGE} 10
|
|
if [ $? -ne 0 ]; then
|
|
exit 1
|
|
fi
|
|
# test the EXIT trap on process crash
|
|
GOSS_VARS=goss_vars_${GH_RUNNER_IMAGE}.yaml GOSS_FILE=goss_trap_exit.yaml GOSS_SLEEP=1 dgoss run --entrypoint /usr/bin/sleep \
|
|
-e DEBUG_ONLY=false \
|
|
-e REPO_URL=https://github.com/fake/repo \
|
|
-e RUNNER_TOKEN=faketoken \
|
|
-e RUN_AS_ROOT=true \
|
|
-e DISABLE_AUTOMATIC_DEREGISTRATION=false \
|
|
${GH_RUNNER_IMAGE} 300
|
|
if [ $? -ne 0 ]; then
|
|
exit 1
|
|
fi
|
|
debian_tests:
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
release: [bookworm, trixie]
|
|
platform: [amd64, arm64]
|
|
fail-fast: false
|
|
steps:
|
|
- name: Copy Repo Files
|
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
- name: Get GitHub organization or user
|
|
run: echo 'ORG='$(echo $(dirname ${GITHUB_REPOSITORY}) | awk '{print tolower($0)}') >> $GITHUB_ENV
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@06116385d9baf250c9f4dcb4858b16962ea869c3 # v4.1.0
|
|
with:
|
|
image: tonistiigi/binfmt:qemu-v7.0.0
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 # v4.1.0
|
|
- name: Install Goss and dgoss
|
|
run: |
|
|
curl -fsSL https://goss.rocks/install | sh
|
|
export PATH=$PATH:/usr/local/bin
|
|
- name: Get current Git SHA
|
|
id: vars
|
|
run: echo "GIT_SHA=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
|
|
- name: set testable image environment variable
|
|
id: testvars
|
|
run: echo "GH_RUNNER_IMAGE=debian-${{ matrix.release }}-${{ env.GIT_SHA }}-${{ matrix.platform }}" >> $GITHUB_ENV
|
|
- name: Combine Dockerfile
|
|
run: |
|
|
cp Dockerfile.base Dockerfile.final.debian-${{ matrix.release }}
|
|
sed -i.bak 's/FROM.*/FROM debian:${{ matrix.release }}/' Dockerfile.final.debian-${{ matrix.release }}
|
|
|
|
# Combine the dockerfiles
|
|
cp Dockerfile Dockerfile.debian-${{ matrix.release }}
|
|
cat Dockerfile.debian-${{ matrix.release }} | sed "s/^FROM.*//" >>Dockerfile.final.debian-${{ matrix.release }}
|
|
|
|
# Sanity check
|
|
grep FROM Dockerfile.final.debian-${{ matrix.release }}
|
|
- name: Retry build final image
|
|
uses: nick-fields/retry@ad984534de44a9489a53aefd81eb77f87c70dc60 # v4
|
|
with:
|
|
timeout_minutes: 60
|
|
max_attempts: 3
|
|
command: |
|
|
docker buildx build \
|
|
--file Dockerfile.final.debian-${{ matrix.release }} \
|
|
--platform linux/${{ matrix.platform }} \
|
|
--tag ${{ env.GH_RUNNER_IMAGE }} \
|
|
--load \
|
|
--cache-from type=gha \
|
|
--cache-to type=gha,mode=max \
|
|
.
|
|
# Tests will run against the final `${GH_RUNNER_IMAGE}` laid on top of `base-${GH_RUNNER_IMAGE}`
|
|
- name: Run goss tests
|
|
uses: nick-fields/retry@ad984534de44a9489a53aefd81eb77f87c70dc60 # v4
|
|
with:
|
|
timeout_minutes: 60
|
|
max_attempts: 3
|
|
command: |
|
|
echo "os: debian" >goss_vars_${GH_RUNNER_IMAGE}.yaml
|
|
echo "oscodename: ${{ matrix.release }}" >>goss_vars_${GH_RUNNER_IMAGE}.yaml
|
|
echo "arch: ${{ matrix.platform }}" >>goss_vars_${GH_RUNNER_IMAGE}.yaml
|
|
# test the edge case from deregistration on reusable runners
|
|
GOSS_VARS=goss_vars_${GH_RUNNER_IMAGE}.yaml GOSS_FILE=goss_reusage_fail.yaml GOSS_SLEEP=1 dgoss run --entrypoint /usr/bin/sleep \
|
|
-e DEBUG_ONLY=true \
|
|
-e ACCESS_TOKEN=notreal \
|
|
-e LABELS=linux,x64 \
|
|
-e REPO_URL=https://github.com/octokode/test1 \
|
|
-e RUNNER_NAME=sustainjane-runner-1 \
|
|
-e RUNNER_SCOPE=repo \
|
|
-e RUNNER_WORKDIR=/tmp/runner/work \
|
|
-e DISABLE_AUTOMATIC_DEREGISTRATION=false \
|
|
-e CONFIGURED_ACTIONS_RUNNER_FILES_DIR=/runner/data \
|
|
${GH_RUNNER_IMAGE} 10
|
|
if [ $? -ne 0 ]; then
|
|
exit 1
|
|
fi
|
|
# test the base
|
|
GOSS_VARS=goss_vars_${GH_RUNNER_IMAGE}.yaml GOSS_FILE=goss_base.yaml GOSS_SLEEP=1 dgoss run --entrypoint /usr/bin/sleep -e RUNNER_NAME=test -e DEBUG_ONLY=true ${GH_RUNNER_IMAGE} 10
|
|
# test the final image but with all defaults
|
|
GOSS_VARS=goss_vars_${GH_RUNNER_IMAGE}.yaml GOSS_FILE=goss_full_defaults.yaml GOSS_SLEEP=1 dgoss run --entrypoint /usr/bin/sleep -e RUNNER_NAME=test -e DEBUG_ONLY=true ${GH_RUNNER_IMAGE} 10
|
|
# test the final image but with non-default values
|
|
GOSS_VARS=goss_vars_${GH_RUNNER_IMAGE}.yaml GOSS_FILE=goss_full.yaml GOSS_SLEEP=1 dgoss run --entrypoint /usr/bin/sleep \
|
|
-e DEBUG_ONLY=true \
|
|
-e RUNNER_NAME=huzzah \
|
|
-e REPO_URL=https://github.com/myoung34/docker-github-actions-runner \
|
|
-e RUN_AS_ROOT=true \
|
|
-e RUNNER_NAME_PREFIX=asdf \
|
|
-e ACCESS_TOKEN=1234 \
|
|
-e APP_ID=5678 \
|
|
-e APP_PRIVATE_KEY=2345 \
|
|
-e APP_LOGIN=SOMETHING \
|
|
-e RUNNER_SCOPE=org \
|
|
-e ORG_NAME=myoung34 \
|
|
-e ENTERPRISE_NAME=emyoung34 \
|
|
-e LABELS=blue,green \
|
|
-e RUNNER_TOKEN=3456 \
|
|
-e RUNNER_WORKDIR=/tmp/a \
|
|
-e RUNNER_GROUP=wat \
|
|
-e GITHUB_HOST=github.example.com \
|
|
-e DISABLE_AUTOMATIC_DEREGISTRATION=true \
|
|
-e EPHEMERAL=true \
|
|
-e DISABLE_AUTO_UPDATE=true \
|
|
${GH_RUNNER_IMAGE} 10
|
|
# test the EXIT trap on process crash
|
|
GOSS_VARS=goss_vars_${GH_RUNNER_IMAGE}.yaml GOSS_FILE=goss_trap_exit.yaml GOSS_SLEEP=1 dgoss run --entrypoint /usr/bin/sleep \
|
|
-e DEBUG_ONLY=false \
|
|
-e REPO_URL=https://github.com/fake/repo \
|
|
-e RUNNER_TOKEN=faketoken \
|
|
-e RUN_AS_ROOT=true \
|
|
-e DISABLE_AUTOMATIC_DEREGISTRATION=false \
|
|
${GH_RUNNER_IMAGE} 300
|
|
if [ $? -ne 0 ]; then
|
|
exit 1
|
|
fi
|