name: GitHub Actions Runner in Docker - Base on: push: paths: - Dockerfile.base - .github/workflows/base.yml - goss* branches: - master - develop schedule: - cron: '0 22 * * *' workflow_dispatch: jobs: ubuntu_base_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: Copy Dockerfile run: cp Dockerfile.base Dockerfile.base.ubuntu-${{ matrix.release }}; sed -i.bak 's/FROM.*/FROM ubuntu:${{ matrix.release }}/' Dockerfile.base.ubuntu-${{ matrix.release }} - 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: Login to DockerHub uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4.2.0 with: username: ${{ secrets.DOCKER_USER }} password: ${{ secrets.DOCKER_TOKEN }} - name: Retry build and load uses: nick-fields/retry@ad984534de44a9489a53aefd81eb77f87c70dc60 # v4 with: timeout_minutes: 60 max_attempts: 3 command: | docker buildx build \ --file Dockerfile.base.ubuntu-${{ matrix.release }} \ --platform linux/${{ matrix.platform }} \ --tag ${{ env.GH_RUNNER_IMAGE }} \ --load \ --pull \ --cache-from type=gha \ --cache-to type=gha,mode=max \ . - 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 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 debian_base_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: Copy Dockerfile run: cp Dockerfile.base Dockerfile.base.debian-${{ matrix.release }}; sed -i.bak 's/FROM.*/FROM debian:${{ matrix.release }}/' Dockerfile.base.debian-${{ matrix.release }} - 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: Login to DockerHub uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4.2.0 with: username: ${{ secrets.DOCKER_USER }} password: ${{ secrets.DOCKER_TOKEN }} - name: Retry build uses: nick-fields/retry@ad984534de44a9489a53aefd81eb77f87c70dc60 # v4 with: timeout_minutes: 60 max_attempts: 3 command: | docker buildx build \ --file Dockerfile.base.debian-${{ matrix.release }} \ --platform linux/${{ matrix.platform }} \ --tag ${{ env.GH_RUNNER_IMAGE }} \ --load \ --pull \ --cache-from type=gha \ --cache-to type=gha,mode=max \ . - 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 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 ubuntu_base_latest_deploy: runs-on: ubuntu-latest needs: ubuntu_base_tests 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: Login to DockerHub uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4.2.0 with: username: ${{ secrets.DOCKER_USER }} password: ${{ secrets.DOCKER_TOKEN }} - name: Retry build and push uses: nick-fields/retry@ad984534de44a9489a53aefd81eb77f87c70dc60 # v4 with: timeout_minutes: 60 max_attempts: 3 command: | docker buildx build \ --file Dockerfile.base \ --platform linux/amd64,linux/arm64 \ --tag ${{ env.ORG }}/github-runner-base:latest \ --push \ --pull \ --cache-from type=gha \ --cache-to type=gha,mode=max \ . ubuntu_base_deploy: runs-on: ubuntu-latest needs: ubuntu_base_tests strategy: matrix: release: [jammy, focal, noble] 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: Copy Dockerfile run: cp Dockerfile.base Dockerfile.base.ubuntu-${{ matrix.release }}; sed -i.bak 's/FROM.*/FROM ubuntu:${{ matrix.release }}/' Dockerfile.base.ubuntu-${{ matrix.release }} - name: Login to DockerHub uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4.2.0 with: username: ${{ secrets.DOCKER_USER }} password: ${{ secrets.DOCKER_TOKEN }} - name: Retry build and push uses: nick-fields/retry@ad984534de44a9489a53aefd81eb77f87c70dc60 # v4 with: timeout_minutes: 60 max_attempts: 3 command: | docker buildx build \ --file Dockerfile.base.ubuntu-${{ matrix.release }} \ --platform linux/amd64,linux/arm64 \ --tag ${{ env.ORG }}/github-runner-base:ubuntu-${{ matrix.release }} \ --push \ --pull \ --cache-from type=gha \ --cache-to type=gha,mode=max \ . debian_base_deploy: runs-on: ubuntu-latest needs: debian_base_tests strategy: matrix: release: [bookworm, trixie] 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: Copy Dockerfile run: cp Dockerfile.base Dockerfile.base.debian-${{ matrix.release }}; sed -i.bak 's/FROM.*/FROM debian:${{ matrix.release }}/' Dockerfile.base.debian-${{ matrix.release }} - name: Login to DockerHub uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4.2.0 with: username: ${{ secrets.DOCKER_USER }} password: ${{ secrets.DOCKER_TOKEN }} - name: Retry build and push uses: nick-fields/retry@ad984534de44a9489a53aefd81eb77f87c70dc60 # v4 with: timeout_minutes: 60 max_attempts: 3 command: | docker buildx build \ --file Dockerfile.base.debian-${{ matrix.release }} \ --platform linux/amd64,linux/arm64 \ --tag ${{ env.ORG }}/github-runner-base:debian-${{ matrix.release }} \ --push \ --pull \ --cache-from type=gha \ --cache-to type=gha,mode=max \ .