diff --git a/.github/workflows/build-and-release-runners.yml b/.github/workflows/build-and-release-runners.yml index 79209887..3cb9af87 100644 --- a/.github/workflows/build-and-release-runners.yml +++ b/.github/workflows/build-and-release-runners.yml @@ -13,7 +13,8 @@ on: paths: - runner/patched/* - runner/Dockerfile - - runner/dindrunner.Dockerfile + - runner/Dockerfile.ubuntu.1804 + - runner/Dockerfile.dindrunner - runner/entrypoint.sh - .github/workflows/build-and-release-runners.yml @@ -25,9 +26,14 @@ jobs: matrix: include: - name: actions-runner + os-version: 20.04 dockerfile: Dockerfile + - name: actions-runner + os-version: 18.04 + dockerfile: Dockerfile.ubuntu.1804 - name: actions-runner-dind - dockerfile: dindrunner.Dockerfile + os-version: 20.04 + dockerfile: Dockerfile.dindrunner env: RUNNER_VERSION: 2.277.1 DOCKER_VERSION: 19.03.12 @@ -55,7 +61,7 @@ jobs: username: ${{ github.repository_owner }} password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - - name: Build and Push + - name: Build and Push Versioned Tags uses: docker/build-push-action@v2 with: context: ./runner @@ -66,6 +72,18 @@ jobs: RUNNER_VERSION=${{ env.RUNNER_VERSION }} DOCKER_VERSION=${{ env.DOCKER_VERSION }} tags: | - ${{ env.DOCKERHUB_USERNAME }}/${{ matrix.name }}:v${{ env.RUNNER_VERSION }} - ${{ env.DOCKERHUB_USERNAME }}/${{ matrix.name }}:v${{ env.RUNNER_VERSION }}-${{ steps.vars.outputs.sha_short }} + ${{ env.DOCKERHUB_USERNAME }}/${{ matrix.name }}:v${{ env.RUNNER_VERSION }}-ubuntu-${{ matrix.os-version }} + ${{ env.DOCKERHUB_USERNAME }}/${{ matrix.name }}:v${{ env.RUNNER_VERSION }}-ubuntu-${{ matrix.os-version }}-${{ steps.vars.outputs.sha_short }} + + - name: Build and Push Latest Tag + uses: docker/build-push-action@v2 + with: + context: ./runner + file: ./runner/Dockerfile + platforms: linux/amd64,linux/arm64 + push: ${{ github.event_name != 'pull_request' }} + build-args: | + RUNNER_VERSION=${{ env.RUNNER_VERSION }} + DOCKER_VERSION=${{ env.DOCKER_VERSION }} + tags: | ${{ env.DOCKERHUB_USERNAME }}/${{ matrix.name }}:latest diff --git a/README.md b/README.md index 458715da..7756de23 100644 --- a/README.md +++ b/README.md @@ -45,8 +45,8 @@ Install the custom resource and actions-runner-controller with `kubectl` or `hel `kubectl`: ```shell -# REPLACE "v0.17.0" with the version you wish to deploy -kubectl apply -f https://github.com/summerwind/actions-runner-controller/releases/download/v0.17.0/actions-runner-controller.yaml +# REPLACE "v0.18.2" with the version you wish to deploy +kubectl apply -f https://github.com/summerwind/actions-runner-controller/releases/download/v0.18.2/actions-runner-controller.yaml ``` `helm`: @@ -61,7 +61,7 @@ helm upgrade --install -n actions-runner-system actions-runner-controller/action If you use either Github Enterprise Cloud or Server, you can use **actions-runner-controller** with those, too. Authentication works same way as with public Github (repo and organization level). The minimum version of Github Enterprise Server is 3.0.0 (or rc1/rc2). -__**NOTE : The maintainers do not have an Enterprise environment to be able to test changes and so are reliant on the community for testing, support is a best endeavors basis only and is community driven**__ +__**NOTE : The maintainers do not have an Enterprise environment to be able to test changes and so this feature is community driven. Support is on a best endeavors basis.**__ ```shell kubectl set env deploy controller-manager -c manager GITHUB_ENTERPRISE_URL= --namespace actions-runner-system @@ -747,6 +747,7 @@ Your base64'ed PAT token has a new line at the end, it needs to be created witho # Developing +**The Controller**
If you'd like to modify the controller to fork or contribute, I'd suggest using the following snippet for running the acceptance test: @@ -783,6 +784,10 @@ NAME=$DOCKER_USER/actions-runner-controller \ make docker-build docker-push \ acceptance/setup acceptance/tests ``` + +**Runner Tests**
+A set of example pipelines (./acceptance/pipelines) are provided in this repository which you can use to validate your runners are working as expected. When raising a PR please run the relevant suites to prove your change hasn't broken anything. + # Alternatives The following is a list of alternative solutions that may better fit you depending on your use-case: diff --git a/acceptance/pipelines/eks-integration-tests.yaml b/acceptance/pipelines/eks-integration-tests.yaml new file mode 100644 index 00000000..a0ed5e65 --- /dev/null +++ b/acceptance/pipelines/eks-integration-tests.yaml @@ -0,0 +1,36 @@ +name: EKS Integration Tests + +on: + workflow_dispatch: + +env: + IRSA_ROLE_ARN: + ASSUME_ROLE_ARN: + AWS_REGION: + +jobs: + assume-role-in-runner-test: + runs-on: ['self-hosted', 'Linux'] + steps: + - name: Test aws-actions/configure-aws-credentials Action + uses: aws-actions/configure-aws-credentials@v1 + with: + aws-region: ${{ env.AWS_REGION }} + role-to-assume: ${{ env.ASSUME_ROLE_ARN }} + role-duration-seconds: 900 + assume-role-in-container-test: + runs-on: ['self-hosted', 'Linux'] + container: + image: amazon/aws-cli + env: + AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token + AWS_ROLE_ARN: ${{ env.IRSA_ROLE_ARN }} + volumes: + - /var/run/secrets/eks.amazonaws.com/serviceaccount/token:/var/run/secrets/eks.amazonaws.com/serviceaccount/token + steps: + - name: Test aws-actions/configure-aws-credentials Action in container + uses: aws-actions/configure-aws-credentials@v1 + with: + aws-region: ${{ env.AWS_REGION }} + role-to-assume: ${{ env.ASSUME_ROLE_ARN }} + role-duration-seconds: 900 diff --git a/acceptance/pipelines/runner-integration-tests.yaml b/acceptance/pipelines/runner-integration-tests.yaml new file mode 100644 index 00000000..63b42a97 --- /dev/null +++ b/acceptance/pipelines/runner-integration-tests.yaml @@ -0,0 +1,83 @@ +name: Runner Integration Tests + +on: + workflow_dispatch: + +env: + ImageOS: ubuntu18 # Used by ruby/setup-ruby action | Update me for the runner OS version you are testing against + +jobs: + run-step-in-container-test: + runs-on: ['self-hosted', 'Linux'] + container: + image: alpine + steps: + - name: Test we are working in the container + run: | + if [[ $(sed -n '2p' < /etc/os-release | cut -d "=" -f2) != "alpine" ]]; then + echo "::error ::Failed OS detection test, could not match /etc/os-release with alpine. Are we really running in the container?" + echo "/etc/os-release below:" + cat /etc/os-release + exit 1 + fi + setup-python-test: + runs-on: ['self-hosted', 'Linux'] + steps: + - name: Print native Python environment + run: | + which python + python --version + - uses: actions/setup-python@v2 + with: + python-version: 3.9 + - name: Test actions/setup-python works + run: | + VERSION=$(python --version 2>&1 | cut -d ' ' -f2 | cut -d '.' -f1-2) + if [[ $VERSION != '3.9' ]]; then + echo "Python version detected : $(python --version 2>&1)" + echo "::error ::Detected python failed setup version test, could not match version with version specified in the setup action" + exit 1 + else + echo "Python version detected : $(python --version 2>&1)" + fi + setup-node-test: + runs-on: ['self-hosted', 'Linux'] + steps: + - uses: actions/setup-node@v2 + with: + node-version: '12' + - name: Test actions/setup-node works + run: | + VERSION=$(node --version | cut -c 2- | cut -d '.' -f1) + if [[ $VERSION != '12' ]]; then + echo "Node version detected : $(node --version 2>&1)" + echo "::error ::Detected node failed setup version test, could not match version with version specified in the setup action" + exit 1 + else + echo "Node version detected : $(node --version 2>&1)" + fi + setup-ruby-test: + runs-on: ['self-hosted', 'Linux'] + steps: + - uses: ruby/setup-ruby@v1 + with: + ruby-version: 3.0 + bundler-cache: true + - name: Test ruby/setup-ruby works + run: | + VERSION=$(ruby --version | cut -d ' ' -f2 | cut -d '.' -f1-2) + if [[ $VERSION != '3.0' ]]; then + echo "Ruby version detected : $(ruby --version 2>&1)" + echo "::error ::Detected ruby failed setup version test, could not match version with version specified in the setup action" + exit 1 + else + echo "Ruby version detected : $(ruby --version 2>&1)" + fi + python-shell-test: + runs-on: ['self-hosted', 'Linux'] + steps: + - name: Test Python shell works + run: | + import os + print(os.environ['PATH']) + shell: python diff --git a/acceptance/testdata/runnerdeploy.yaml b/acceptance/testdata/runnerdeploy.yaml index 66567e8f..cee39cb5 100644 --- a/acceptance/testdata/runnerdeploy.yaml +++ b/acceptance/testdata/runnerdeploy.yaml @@ -15,6 +15,6 @@ spec: #image: mumoshu/actions-runner-dind:dev # - # Set the MTU used by dockerd-managed network interfaces (including docker-build) + # Set the MTU used by dockerd-managed network interfaces (including docker-build-ubuntu) # #dockerMTU: 1450 diff --git a/runner/Dockerfile b/runner/Dockerfile index 966e4f38..b6eef7dd 100644 --- a/runner/Dockerfile +++ b/runner/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:18.04 +FROM ubuntu:20.04 ARG TARGETPLATFORM ARG RUNNER_VERSION=2.274.2 @@ -8,37 +8,37 @@ RUN test -n "$TARGETPLATFORM" || (echo "TARGETPLATFORM must be set" && false) ENV DEBIAN_FRONTEND=noninteractive RUN apt update -y \ - && apt install -y software-properties-common \ - && add-apt-repository -y ppa:git-core/ppa \ - && apt update -y \ - && apt install -y --no-install-recommends \ - build-essential \ - curl \ - ca-certificates \ - dnsutils \ - ftp \ - git \ - iproute2 \ - iputils-ping \ - jq \ - libunwind8 \ - locales \ - netcat \ - openssh-client \ - parallel \ - rsync \ - shellcheck \ - sudo \ - telnet \ - time \ - tzdata \ - unzip \ - upx \ - wget \ - zip \ - zstd \ - && cd /usr/bin && ln -sf python3 python \ - && rm -rf /var/lib/apt/lists/* + && apt install -y software-properties-common \ + && add-apt-repository -y ppa:git-core/ppa \ + && apt update -y \ + && apt install -y --no-install-recommends \ + build-essential \ + curl \ + ca-certificates \ + dnsutils \ + ftp \ + git \ + iproute2 \ + iputils-ping \ + jq \ + libunwind8 \ + locales \ + netcat \ + openssh-client \ + parallel \ + rsync \ + shellcheck \ + sudo \ + telnet \ + time \ + tzdata \ + unzip \ + upx \ + wget \ + zip \ + zstd \ + python-is-python3 \ + && rm -rf /var/lib/apt/lists/* RUN export ARCH=$(echo ${TARGETPLATFORM} | cut -d / -f2) \ && curl -L -o /usr/local/bin/dumb-init https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_${ARCH} \ @@ -46,18 +46,18 @@ RUN export ARCH=$(echo ${TARGETPLATFORM} | cut -d / -f2) \ # Docker download supports arm64 as aarch64 & amd64 as x86_64 RUN set -vx; \ - export ARCH=$(echo ${TARGETPLATFORM} | cut -d / -f2) \ - && if [ "$ARCH" = "arm64" ]; then export ARCH=aarch64 ; fi \ - && if [ "$ARCH" = "amd64" ]; then export ARCH=x86_64 ; fi \ - && curl -L -o docker.tgz https://download.docker.com/linux/static/stable/${ARCH}/docker-${DOCKER_VERSION}.tgz \ - && tar zxvf docker.tgz \ - && install -o root -g root -m 755 docker/docker /usr/local/bin/docker \ - && rm -rf docker docker.tgz \ - && adduser --disabled-password --gecos "" --uid 1000 runner \ - && groupadd docker \ - && usermod -aG sudo runner \ - && usermod -aG docker runner \ - && echo "%sudo ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers + export ARCH=$(echo ${TARGETPLATFORM} | cut -d / -f2) \ + && if [ "$ARCH" = "arm64" ]; then export ARCH=aarch64 ; fi \ + && if [ "$ARCH" = "amd64" ]; then export ARCH=x86_64 ; fi \ + && curl -L -o docker.tgz https://download.docker.com/linux/static/stable/${ARCH}/docker-${DOCKER_VERSION}.tgz \ + && tar zxvf docker.tgz \ + && install -o root -g root -m 755 docker/docker /usr/local/bin/docker \ + && rm -rf docker docker.tgz \ + && adduser --disabled-password --gecos "" --uid 1000 runner \ + && groupadd docker \ + && usermod -aG sudo runner \ + && usermod -aG docker runner \ + && echo "%sudo ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers ENV RUNNER_ASSETS_DIR=/runnertmp @@ -67,21 +67,21 @@ ENV RUNNER_ASSETS_DIR=/runnertmp # It is installed after installdependencies.sh and before removing /var/lib/apt/lists # to avoid rerunning apt-update on its own. RUN export ARCH=$(echo ${TARGETPLATFORM} | cut -d / -f2) \ - && if [ "$ARCH" = "amd64" ]; then export ARCH=x64 ; fi \ - && mkdir -p "$RUNNER_ASSETS_DIR" \ - && cd "$RUNNER_ASSETS_DIR" \ - && curl -L -o runner.tar.gz https://github.com/actions/runner/releases/download/v${RUNNER_VERSION}/actions-runner-linux-${ARCH}-${RUNNER_VERSION}.tar.gz \ - && tar xzf ./runner.tar.gz \ - && rm runner.tar.gz \ - && ./bin/installdependencies.sh \ - && mv ./externals ./externalstmp \ - && apt-get install -y libyaml-dev \ - && rm -rf /var/lib/apt/lists/* + && if [ "$ARCH" = "amd64" ]; then export ARCH=x64 ; fi \ + && mkdir -p "$RUNNER_ASSETS_DIR" \ + && cd "$RUNNER_ASSETS_DIR" \ + && curl -L -o runner.tar.gz https://github.com/actions/runner/releases/download/v${RUNNER_VERSION}/actions-runner-linux-${ARCH}-${RUNNER_VERSION}.tar.gz \ + && tar xzf ./runner.tar.gz \ + && rm runner.tar.gz \ + && ./bin/installdependencies.sh \ + && mv ./externals ./externalstmp \ + && apt-get install -y libyaml-dev \ + && rm -rf /var/lib/apt/lists/* RUN echo AGENT_TOOLSDIRECTORY=/opt/hostedtoolcache > .env \ - && mkdir /opt/hostedtoolcache \ - && chgrp docker /opt/hostedtoolcache \ - && chmod g+rwx /opt/hostedtoolcache + && mkdir /opt/hostedtoolcache \ + && chgrp docker /opt/hostedtoolcache \ + && chmod g+rwx /opt/hostedtoolcache COPY entrypoint.sh / COPY --chown=runner:docker patched $RUNNER_ASSETS_DIR/patched diff --git a/runner/dindrunner.Dockerfile b/runner/Dockerfile.dindrunner similarity index 92% rename from runner/dindrunner.Dockerfile rename to runner/Dockerfile.dindrunner index 6cc67799..f7d92a61 100644 --- a/runner/dindrunner.Dockerfile +++ b/runner/Dockerfile.dindrunner @@ -1,11 +1,12 @@ FROM ubuntu:20.04 ENV DEBIAN_FRONTEND=noninteractive -# Dev + DinD dependencies -RUN apt update \ +RUN apt update -y \ && apt install -y software-properties-common \ && add-apt-repository -y ppa:git-core/ppa \ - && apt install -y \ + && apt update -y \ + && apt install -y --no-install-recommends \ + software-properties-common \ build-essential \ curl \ ca-certificates \ @@ -13,7 +14,6 @@ RUN apt update \ ftp \ git \ iproute2 \ - iptables \ iputils-ping \ jq \ libunwind8 \ @@ -21,11 +21,9 @@ RUN apt update \ netcat \ openssh-client \ parallel \ - python-is-python3 \ rsync \ shellcheck \ sudo \ - supervisor \ telnet \ time \ tzdata \ @@ -34,6 +32,9 @@ RUN apt update \ wget \ zip \ zstd \ + python-is-python3 \ + iptables \ + supervisor \ && rm -rf /var/lib/apt/list/* # Runner user @@ -79,7 +80,7 @@ ENV RUNNER_ASSETS_DIR=/runnertmp RUN export ARCH=$(echo ${TARGETPLATFORM} | cut -d / -f2) \ && if [ "$ARCH" = "amd64" ]; then export ARCH=x64 ; fi \ && mkdir -p "$RUNNER_ASSETS_DIR" \ - && cd "$RUNNER_ASSETS_DIR" \ + && cd "$RUNNER_ASSETS_DIR" \ && curl -L -o runner.tar.gz https://github.com/actions/runner/releases/download/v${RUNNER_VERSION}/actions-runner-linux-${ARCH}-${RUNNER_VERSION}.tar.gz \ && tar xzf ./runner.tar.gz \ && rm runner.tar.gz \ @@ -88,9 +89,9 @@ RUN export ARCH=$(echo ${TARGETPLATFORM} | cut -d / -f2) \ && rm -rf /var/lib/apt/lists/* RUN echo AGENT_TOOLSDIRECTORY=/opt/hostedtoolcache > /runner.env \ - && mkdir /opt/hostedtoolcache \ - && chgrp docker /opt/hostedtoolcache \ - && chmod g+rwx /opt/hostedtoolcache + && mkdir /opt/hostedtoolcache \ + && chgrp docker /opt/hostedtoolcache \ + && chmod g+rwx /opt/hostedtoolcache COPY modprobe startup.sh /usr/local/bin/ COPY supervisor/ /etc/supervisor/conf.d/ diff --git a/runner/Dockerfile.ubuntu.1804 b/runner/Dockerfile.ubuntu.1804 new file mode 100644 index 00000000..b8de76f6 --- /dev/null +++ b/runner/Dockerfile.ubuntu.1804 @@ -0,0 +1,91 @@ +FROM ubuntu:18.04 + +ARG TARGETPLATFORM +ARG RUNNER_VERSION=2.274.2 +ARG DOCKER_VERSION=19.03.12 + +RUN test -n "$TARGETPLATFORM" || (echo "TARGETPLATFORM must be set" && false) + +ENV DEBIAN_FRONTEND=noninteractive +RUN apt update -y \ + && apt install -y software-properties-common \ + && add-apt-repository -y ppa:git-core/ppa \ + && apt update -y \ + && apt install -y --no-install-recommends \ + build-essential \ + curl \ + ca-certificates \ + dnsutils \ + ftp \ + git \ + iproute2 \ + iputils-ping \ + jq \ + libunwind8 \ + locales \ + netcat \ + openssh-client \ + parallel \ + rsync \ + shellcheck \ + sudo \ + telnet \ + time \ + tzdata \ + unzip \ + upx \ + wget \ + zip \ + zstd \ + && cd /usr/bin && ln -sf python3 python \ + && rm -rf /var/lib/apt/lists/* + +RUN export ARCH=$(echo ${TARGETPLATFORM} | cut -d / -f2) \ + && curl -L -o /usr/local/bin/dumb-init https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_${ARCH} \ + && chmod +x /usr/local/bin/dumb-init + +# Docker download supports arm64 as aarch64 & amd64 as x86_64 +RUN set -vx; \ + export ARCH=$(echo ${TARGETPLATFORM} | cut -d / -f2) \ + && if [ "$ARCH" = "arm64" ]; then export ARCH=aarch64 ; fi \ + && if [ "$ARCH" = "amd64" ]; then export ARCH=x86_64 ; fi \ + && curl -L -o docker.tgz https://download.docker.com/linux/static/stable/${ARCH}/docker-${DOCKER_VERSION}.tgz \ + && tar zxvf docker.tgz \ + && install -o root -g root -m 755 docker/docker /usr/local/bin/docker \ + && rm -rf docker docker.tgz \ + && adduser --disabled-password --gecos "" --uid 1000 runner \ + && groupadd docker \ + && usermod -aG sudo runner \ + && usermod -aG docker runner \ + && echo "%sudo ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers + +ENV RUNNER_ASSETS_DIR=/runnertmp + +# Runner download supports amd64 as x64. Externalstmp is needed for making mount points work inside DinD. +# +# libyaml-dev is required for ruby/setup-ruby action. +# It is installed after installdependencies.sh and before removing /var/lib/apt/lists +# to avoid rerunning apt-update on its own. +RUN export ARCH=$(echo ${TARGETPLATFORM} | cut -d / -f2) \ + && if [ "$ARCH" = "amd64" ]; then export ARCH=x64 ; fi \ + && mkdir -p "$RUNNER_ASSETS_DIR" \ + && cd "$RUNNER_ASSETS_DIR" \ + && curl -L -o runner.tar.gz https://github.com/actions/runner/releases/download/v${RUNNER_VERSION}/actions-runner-linux-${ARCH}-${RUNNER_VERSION}.tar.gz \ + && tar xzf ./runner.tar.gz \ + && rm runner.tar.gz \ + && ./bin/installdependencies.sh \ + && mv ./externals ./externalstmp \ + && apt-get install -y libyaml-dev \ + && rm -rf /var/lib/apt/lists/* + +RUN echo AGENT_TOOLSDIRECTORY=/opt/hostedtoolcache > .env \ + && mkdir /opt/hostedtoolcache \ + && chgrp docker /opt/hostedtoolcache \ + && chmod g+rwx /opt/hostedtoolcache + +COPY entrypoint.sh / +COPY --chown=runner:docker patched $RUNNER_ASSETS_DIR/patched + +USER runner +ENTRYPOINT ["/usr/local/bin/dumb-init", "--"] +CMD ["/entrypoint.sh"] diff --git a/runner/Makefile b/runner/Makefile index 851ca96b..5a032166 100644 --- a/runner/Makefile +++ b/runner/Makefile @@ -2,7 +2,7 @@ NAME ?= summerwind/actions-runner DIND_RUNNER_NAME ?= ${NAME}-dind TAG ?= latest -RUNNER_VERSION ?= 2.274.2 +RUNNER_VERSION ?= 2.277.1 DOCKER_VERSION ?= 19.03.12 # default list of platforms for which multiarch image is built @@ -22,16 +22,15 @@ else export PUSH_ARG="--push" endif -docker-build: +docker-build-ubuntu: docker build --build-arg TARGETPLATFORM=amd64 --build-arg RUNNER_VERSION=${RUNNER_VERSION} --build-arg DOCKER_VERSION=${DOCKER_VERSION} -t ${NAME}:${TAG} . - docker build --build-arg TARGETPLATFORM=amd64 --build-arg RUNNER_VERSION=${RUNNER_VERSION} --build-arg DOCKER_VERSION=${DOCKER_VERSION} -t ${DIND_RUNNER_NAME}:${TAG} -f dindrunner.Dockerfile . + docker build --build-arg TARGETPLATFORM=amd64 --build-arg RUNNER_VERSION=${RUNNER_VERSION} --build-arg DOCKER_VERSION=${DOCKER_VERSION} -t ${DIND_RUNNER_NAME}:${TAG} -f Dockerfile.dindrunner . - -docker-push: +docker-push-ubuntu: docker push ${NAME}:${TAG} docker push ${DIND_RUNNER_NAME}:${TAG} -docker-buildx: +docker-buildx-ubuntu: export DOCKER_CLI_EXPERIMENTAL=enabled @if ! docker buildx ls | grep -q container-builder; then\ docker buildx create --platform ${PLATFORMS} --name container-builder --use;\ @@ -46,5 +45,5 @@ docker-buildx: --build-arg RUNNER_VERSION=${RUNNER_VERSION} \ --build-arg DOCKER_VERSION=${DOCKER_VERSION} \ -t "${DIND_RUNNER_NAME}:latest" \ - -f dindrunner.Dockerfile \ + -f Dockerfile.dindrunner \ . ${PUSH_ARG}