Bumping runner to Ubuntu 20.04 (#438)
Images for `actions-runner:v${VERSION}` and `actions-runner:latest` tags are upgraded to Ubuntu 20.04.
If you would like not to upgrade Ubuntu in the runner image in the future, migrate to new tags suffixed with `-ubuntu-20.04` like`actions-runner:v${VERSION}-ubuntu-20.04`.
We also keep publishing the existing Ubuntu 18.04 images with new `actions-runner:v${VERSION}-ubuntu-18.04` tags. Please use it when it turned out that you had workflows dependent on Ubuntu 18.04.
Co-authored-by: Yusuke Kuoka <ykuoka@gmail.com>
			
			
This commit is contained in:
		
							parent
							
								
									b42b8406a2
								
							
						
					
					
						commit
						f2680b2f2d
					
				|  | @ -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 | ||||
|  |  | |||
							
								
								
									
										11
									
								
								README.md
								
								
								
								
							
							
						
						
									
										11
									
								
								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=<GHEC/S 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**<br /> | ||||
| 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**<br /> | ||||
| 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: | ||||
|  |  | |||
|  | @ -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 | ||||
|  | @ -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 | ||||
|  | @ -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 | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
|  | @ -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/ | ||||
|  | @ -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"] | ||||
|  | @ -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} | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue