Merge branch 'remove-preserve-unknown-fields' of github.com:ahatzz11/actions-runner-controller into remove-preserve-unknown-fields
This commit is contained in:
		
						commit
						83b4dafc5a
					
				|  | @ -45,8 +45,7 @@ jobs: | ||||||
|           fetch-depth: 0 |           fetch-depth: 0 | ||||||
| 
 | 
 | ||||||
|       - name: Set up Helm |       - name: Set up Helm | ||||||
|         # Using https://github.com/Azure/setup-helm/releases/tag/v4.2.0 |         uses: azure/setup-helm@b9e51907a09c216f16ebe8536097933489208112 | ||||||
|         uses: azure/setup-helm@fe7b79cd5ee1e45176fcad797de68ecaf3ca4814 |  | ||||||
|         with: |         with: | ||||||
|           version: ${{ env.HELM_VERSION }} |           version: ${{ env.HELM_VERSION }} | ||||||
| 
 | 
 | ||||||
|  | @ -64,7 +63,6 @@ jobs: | ||||||
|           python-version: "3.11" |           python-version: "3.11" | ||||||
| 
 | 
 | ||||||
|       - name: Set up chart-testing |       - name: Set up chart-testing | ||||||
|         # https://github.com/helm/chart-testing-action/releases/tag/v2.7.0 |  | ||||||
|         uses: helm/chart-testing-action@0d28d3144d3a25ea2cc349d6e59901c4ff469b3b |         uses: helm/chart-testing-action@0d28d3144d3a25ea2cc349d6e59901c4ff469b3b | ||||||
| 
 | 
 | ||||||
|       - name: Run chart-testing (list-changed) |       - name: Run chart-testing (list-changed) | ||||||
|  | @ -81,7 +79,6 @@ jobs: | ||||||
| 
 | 
 | ||||||
|       - name: Create kind cluster |       - name: Create kind cluster | ||||||
|         if: steps.list-changed.outputs.changed == 'true' |         if: steps.list-changed.outputs.changed == 'true' | ||||||
|         # https://github.com/helm/kind-action/releases/tag/v1.12.0 |  | ||||||
|         uses: helm/kind-action@a1b0e391336a6ee6713a0583f8c6240d70863de3 |         uses: helm/kind-action@a1b0e391336a6ee6713a0583f8c6240d70863de3 | ||||||
| 
 | 
 | ||||||
|       # We need cert-manager already installed in the cluster because we assume the CRDs exist |       # We need cert-manager already installed in the cluster because we assume the CRDs exist | ||||||
|  | @ -148,8 +145,7 @@ jobs: | ||||||
| 
 | 
 | ||||||
|       - name: Get Token |       - name: Get Token | ||||||
|         id: get_workflow_token |         id: get_workflow_token | ||||||
|         # https://github.com/peter-murray/workflow-application-token-action/releases/tag/v3.0.0 |         uses: peter-murray/workflow-application-token-action@d17e3a9a36850ea89f35db16c1067dd2b68ee343 | ||||||
|         uses: peter-murray/workflow-application-token-action@dc0413987a085fa17d19df9e47d4677cf81ffef3 |  | ||||||
|         with: |         with: | ||||||
|           application_id: ${{ secrets.ACTIONS_ACCESS_APP_ID }} |           application_id: ${{ secrets.ACTIONS_ACCESS_APP_ID }} | ||||||
|           application_private_key: ${{ secrets.ACTIONS_ACCESS_PK }} |           application_private_key: ${{ secrets.ACTIONS_ACCESS_PK }} | ||||||
|  |  | ||||||
|  | @ -73,8 +73,7 @@ jobs: | ||||||
| 
 | 
 | ||||||
|       - name: Get Token |       - name: Get Token | ||||||
|         id: get_workflow_token |         id: get_workflow_token | ||||||
|         # https://github.com/peter-murray/workflow-application-token-action/releases/tag/v3.0.0 |         uses: peter-murray/workflow-application-token-action@d17e3a9a36850ea89f35db16c1067dd2b68ee343 | ||||||
|         uses: peter-murray/workflow-application-token-action@dc0413987a085fa17d19df9e47d4677cf81ffef3 |  | ||||||
|         with: |         with: | ||||||
|           application_id: ${{ secrets.ACTIONS_ACCESS_APP_ID }} |           application_id: ${{ secrets.ACTIONS_ACCESS_APP_ID }} | ||||||
|           application_private_key: ${{ secrets.ACTIONS_ACCESS_PK }} |           application_private_key: ${{ secrets.ACTIONS_ACCESS_PK }} | ||||||
|  |  | ||||||
|  | @ -39,8 +39,7 @@ jobs: | ||||||
| 
 | 
 | ||||||
|       - name: Get Token |       - name: Get Token | ||||||
|         id: get_workflow_token |         id: get_workflow_token | ||||||
|         # https://github.com/peter-murray/workflow-application-token-action/releases/tag/v3.0.0 |         uses: peter-murray/workflow-application-token-action@d17e3a9a36850ea89f35db16c1067dd2b68ee343 | ||||||
|         uses: peter-murray/workflow-application-token-action@dc0413987a085fa17d19df9e47d4677cf81ffef3 |  | ||||||
|         with: |         with: | ||||||
|           application_id: ${{ secrets.ACTIONS_ACCESS_APP_ID }} |           application_id: ${{ secrets.ACTIONS_ACCESS_APP_ID }} | ||||||
|           application_private_key: ${{ secrets.ACTIONS_ACCESS_PK }} |           application_private_key: ${{ secrets.ACTIONS_ACCESS_PK }} | ||||||
|  |  | ||||||
|  | @ -45,8 +45,7 @@ jobs: | ||||||
|           fetch-depth: 0 |           fetch-depth: 0 | ||||||
| 
 | 
 | ||||||
|       - name: Set up Helm |       - name: Set up Helm | ||||||
|         # Using https://github.com/Azure/setup-helm/releases/tag/v4.2.0 |         uses: azure/setup-helm@b9e51907a09c216f16ebe8536097933489208112 | ||||||
|         uses: azure/setup-helm@fe7b79cd5ee1e45176fcad797de68ecaf3ca4814 |  | ||||||
|         with: |         with: | ||||||
|           version: ${{ env.HELM_VERSION }} |           version: ${{ env.HELM_VERSION }} | ||||||
| 
 | 
 | ||||||
|  | @ -56,7 +55,6 @@ jobs: | ||||||
|           python-version: "3.11" |           python-version: "3.11" | ||||||
| 
 | 
 | ||||||
|       - name: Set up chart-testing |       - name: Set up chart-testing | ||||||
|         # https://github.com/helm/chart-testing-action/releases/tag/v2.7.0 |  | ||||||
|         uses: helm/chart-testing-action@0d28d3144d3a25ea2cc349d6e59901c4ff469b3b |         uses: helm/chart-testing-action@0d28d3144d3a25ea2cc349d6e59901c4ff469b3b | ||||||
| 
 | 
 | ||||||
|       - name: Run chart-testing (list-changed) |       - name: Run chart-testing (list-changed) | ||||||
|  | @ -72,7 +70,6 @@ jobs: | ||||||
|           ct lint --config charts/.ci/ct-config.yaml |           ct lint --config charts/.ci/ct-config.yaml | ||||||
| 
 | 
 | ||||||
|       - name: Create kind cluster |       - name: Create kind cluster | ||||||
|         # https://github.com/helm/kind-action/releases/tag/v1.12.0 |  | ||||||
|         uses: helm/kind-action@a1b0e391336a6ee6713a0583f8c6240d70863de3 |         uses: helm/kind-action@a1b0e391336a6ee6713a0583f8c6240d70863de3 | ||||||
|         if: steps.list-changed.outputs.changed == 'true' |         if: steps.list-changed.outputs.changed == 'true' | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -16,7 +16,7 @@ env: | ||||||
|   TARGET_ORG: actions-runner-controller |   TARGET_ORG: actions-runner-controller | ||||||
|   TARGET_REPO: arc_e2e_test_dummy |   TARGET_REPO: arc_e2e_test_dummy | ||||||
|   IMAGE_NAME: "arc-test-image" |   IMAGE_NAME: "arc-test-image" | ||||||
|   IMAGE_VERSION: "0.12.0" |   IMAGE_VERSION: "0.12.1" | ||||||
| 
 | 
 | ||||||
| concurrency: | concurrency: | ||||||
|   # This will make sure we only apply the concurrency limits on pull requests |   # This will make sure we only apply the concurrency limits on pull requests | ||||||
|  |  | ||||||
|  | @ -72,11 +72,10 @@ jobs: | ||||||
|           echo "repository_owner=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT |           echo "repository_owner=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT | ||||||
| 
 | 
 | ||||||
|       - name: Set up QEMU |       - name: Set up QEMU | ||||||
|         # https://github.com/docker/setup-qemu-action/releases/tag/v3.6.0 |  | ||||||
|         uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 |         uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 | ||||||
| 
 | 
 | ||||||
|       - name: Set up Docker Buildx |       - name: Set up Docker Buildx | ||||||
|         uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 |         uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 | ||||||
|         with: |         with: | ||||||
|           # Pinning v0.9.1 for Buildx and BuildKit v0.10.6 |           # Pinning v0.9.1 for Buildx and BuildKit v0.10.6 | ||||||
|           # BuildKit v0.11 which has a bug causing intermittent |           # BuildKit v0.11 which has a bug causing intermittent | ||||||
|  | @ -85,7 +84,6 @@ jobs: | ||||||
|           driver-opts: image=moby/buildkit:v0.10.6 |           driver-opts: image=moby/buildkit:v0.10.6 | ||||||
| 
 | 
 | ||||||
|       - name: Login to GitHub Container Registry |       - name: Login to GitHub Container Registry | ||||||
|         # https://github.com/docker/login-action/releases/tag/v3.4.0 |  | ||||||
|         uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 |         uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 | ||||||
|         with: |         with: | ||||||
|           registry: ghcr.io |           registry: ghcr.io | ||||||
|  | @ -93,7 +91,6 @@ jobs: | ||||||
|           password: ${{ secrets.GITHUB_TOKEN }} |           password: ${{ secrets.GITHUB_TOKEN }} | ||||||
| 
 | 
 | ||||||
|       - name: Build & push controller image |       - name: Build & push controller image | ||||||
|         # https://github.com/docker/build-push-action/releases/tag/v6.18.0 |  | ||||||
|         uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 |         uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 | ||||||
|         with: |         with: | ||||||
|           file: Dockerfile |           file: Dockerfile | ||||||
|  | @ -141,8 +138,7 @@ jobs: | ||||||
|           echo "repository_owner=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT |           echo "repository_owner=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT | ||||||
| 
 | 
 | ||||||
|       - name: Set up Helm |       - name: Set up Helm | ||||||
|         # Using https://github.com/Azure/setup-helm/releases/tag/v4.2.0 |         uses: azure/setup-helm@b9e51907a09c216f16ebe8536097933489208112 | ||||||
|         uses: azure/setup-helm@fe7b79cd5ee1e45176fcad797de68ecaf3ca4814 |  | ||||||
|         with: |         with: | ||||||
|           version: ${{ env.HELM_VERSION }} |           version: ${{ env.HELM_VERSION }} | ||||||
| 
 | 
 | ||||||
|  | @ -189,8 +185,7 @@ jobs: | ||||||
|           echo "repository_owner=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT |           echo "repository_owner=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT | ||||||
| 
 | 
 | ||||||
|       - name: Set up Helm |       - name: Set up Helm | ||||||
|         # Using https://github.com/Azure/setup-helm/releases/tag/v4.2.0 |         uses: azure/setup-helm@b9e51907a09c216f16ebe8536097933489208112 | ||||||
|         uses: azure/setup-helm@fe7b79cd5ee1e45176fcad797de68ecaf3ca4814 |  | ||||||
|         with: |         with: | ||||||
|           version: ${{ env.HELM_VERSION }} |           version: ${{ env.HELM_VERSION }} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -41,8 +41,7 @@ jobs: | ||||||
|           fetch-depth: 0 |           fetch-depth: 0 | ||||||
| 
 | 
 | ||||||
|       - name: Set up Helm |       - name: Set up Helm | ||||||
|         # Using https://github.com/Azure/setup-helm/releases/tag/v4.2.0 |         uses: azure/setup-helm@b9e51907a09c216f16ebe8536097933489208112 | ||||||
|         uses: azure/setup-helm@fe7b79cd5ee1e45176fcad797de68ecaf3ca4814 |  | ||||||
|         with: |         with: | ||||||
|           version: ${{ env.HELM_VERSION }} |           version: ${{ env.HELM_VERSION }} | ||||||
| 
 | 
 | ||||||
|  | @ -52,7 +51,6 @@ jobs: | ||||||
|           python-version: "3.11" |           python-version: "3.11" | ||||||
| 
 | 
 | ||||||
|       - name: Set up chart-testing |       - name: Set up chart-testing | ||||||
|         # https://github.com/helm/chart-testing-action/releases/tag/v2.7.0 |  | ||||||
|         uses: helm/chart-testing-action@0d28d3144d3a25ea2cc349d6e59901c4ff469b3b |         uses: helm/chart-testing-action@0d28d3144d3a25ea2cc349d6e59901c4ff469b3b | ||||||
| 
 | 
 | ||||||
|       - name: Run chart-testing (list-changed) |       - name: Run chart-testing (list-changed) | ||||||
|  | @ -69,13 +67,12 @@ jobs: | ||||||
|           ct lint --config charts/.ci/ct-config-gha.yaml |           ct lint --config charts/.ci/ct-config-gha.yaml | ||||||
| 
 | 
 | ||||||
|       - name: Set up docker buildx |       - name: Set up docker buildx | ||||||
|         uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 |         uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 | ||||||
|         if: steps.list-changed.outputs.changed == 'true' |         if: steps.list-changed.outputs.changed == 'true' | ||||||
|         with: |         with: | ||||||
|           version: latest |           version: latest | ||||||
| 
 | 
 | ||||||
|       - name: Build controller image |       - name: Build controller image | ||||||
|         # https://github.com/docker/build-push-action/releases/tag/v6.18.0 |  | ||||||
|         uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 |         uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 | ||||||
|         if: steps.list-changed.outputs.changed == 'true' |         if: steps.list-changed.outputs.changed == 'true' | ||||||
|         with: |         with: | ||||||
|  | @ -91,7 +88,6 @@ jobs: | ||||||
|           cache-to: type=gha,mode=max |           cache-to: type=gha,mode=max | ||||||
| 
 | 
 | ||||||
|       - name: Create kind cluster |       - name: Create kind cluster | ||||||
|         # https://github.com/helm/kind-action/releases/tag/v1.12.0 |  | ||||||
|         uses: helm/kind-action@a1b0e391336a6ee6713a0583f8c6240d70863de3 |         uses: helm/kind-action@a1b0e391336a6ee6713a0583f8c6240d70863de3 | ||||||
|         if: steps.list-changed.outputs.changed == 'true' |         if: steps.list-changed.outputs.changed == 'true' | ||||||
|         with: |         with: | ||||||
|  |  | ||||||
|  | @ -59,8 +59,7 @@ jobs: | ||||||
| 
 | 
 | ||||||
|       - name: Get Token |       - name: Get Token | ||||||
|         id: get_workflow_token |         id: get_workflow_token | ||||||
|         # https://github.com/peter-murray/workflow-application-token-action/releases/tag/v3.0.0 |         uses: peter-murray/workflow-application-token-action@d17e3a9a36850ea89f35db16c1067dd2b68ee343 | ||||||
|         uses: peter-murray/workflow-application-token-action@dc0413987a085fa17d19df9e47d4677cf81ffef3 |  | ||||||
|         with: |         with: | ||||||
|           application_id: ${{ secrets.ACTIONS_ACCESS_APP_ID }} |           application_id: ${{ secrets.ACTIONS_ACCESS_APP_ID }} | ||||||
|           application_private_key: ${{ secrets.ACTIONS_ACCESS_PK }} |           application_private_key: ${{ secrets.ACTIONS_ACCESS_PK }} | ||||||
|  | @ -94,7 +93,6 @@ jobs: | ||||||
|         uses: actions/checkout@v4 |         uses: actions/checkout@v4 | ||||||
| 
 | 
 | ||||||
|       - name: Login to GitHub Container Registry |       - name: Login to GitHub Container Registry | ||||||
|         # https://github.com/docker/login-action/releases/tag/v3.4.0 |  | ||||||
|         uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 |         uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 | ||||||
|         with: |         with: | ||||||
|           registry: ghcr.io |           registry: ghcr.io | ||||||
|  | @ -112,18 +110,15 @@ jobs: | ||||||
|           echo "repository_owner=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT |           echo "repository_owner=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT | ||||||
| 
 | 
 | ||||||
|       - name: Set up QEMU |       - name: Set up QEMU | ||||||
|         # https://github.com/docker/setup-qemu-action/releases/tag/v3.6.0 |  | ||||||
|         uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 |         uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 | ||||||
| 
 | 
 | ||||||
|       - name: Set up Docker Buildx |       - name: Set up Docker Buildx | ||||||
|         # https://github.com/docker/setup-buildx-action/releases/tag/v3.10.0 |         uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 | ||||||
|         uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 |  | ||||||
|         with: |         with: | ||||||
|           version: latest |           version: latest | ||||||
| 
 | 
 | ||||||
|       # Unstable builds - run at your own risk |       # Unstable builds - run at your own risk | ||||||
|       - name: Build and Push |       - name: Build and Push | ||||||
|         # https://github.com/docker/build-push-action/releases/tag/v6.18.0 |  | ||||||
|         uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 |         uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 | ||||||
|         with: |         with: | ||||||
|           context: . |           context: . | ||||||
|  |  | ||||||
|  | @ -33,12 +33,12 @@ jobs: | ||||||
|           go-version-file: go.mod |           go-version-file: go.mod | ||||||
| 
 | 
 | ||||||
|       - name: Initialize CodeQL |       - name: Initialize CodeQL | ||||||
|         uses: github/codeql-action/init@v2 |         uses: github/codeql-action/init@v3 | ||||||
|         with: |         with: | ||||||
|           languages: go |           languages: go | ||||||
| 
 | 
 | ||||||
|       - name: Autobuild |       - name: Autobuild | ||||||
|         uses: github/codeql-action/autobuild@v2 |         uses: github/codeql-action/autobuild@v3 | ||||||
| 
 | 
 | ||||||
|       - name: Perform CodeQL Analysis |       - name: Perform CodeQL Analysis | ||||||
|         uses: github/codeql-action/analyze@v2 |         uses: github/codeql-action/analyze@v3 | ||||||
|  |  | ||||||
|  | @ -14,7 +14,7 @@ jobs: | ||||||
|       issues: write         # for actions/stale to close stale issues |       issues: write         # for actions/stale to close stale issues | ||||||
|       pull-requests: write  # for actions/stale to close stale PRs |       pull-requests: write  # for actions/stale to close stale PRs | ||||||
|     steps: |     steps: | ||||||
|       - uses: actions/stale@v6 |       - uses: actions/stale@v9 | ||||||
|         with: |         with: | ||||||
|           stale-issue-message: 'This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days.' |           stale-issue-message: 'This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days.' | ||||||
|           # turn off stale for both issues and PRs |           # turn off stale for both issues and PRs | ||||||
|  |  | ||||||
|  | @ -48,8 +48,7 @@ jobs: | ||||||
|           go-version-file: "go.mod" |           go-version-file: "go.mod" | ||||||
|           cache: false |           cache: false | ||||||
|       - name: golangci-lint |       - name: golangci-lint | ||||||
|         # https://github.com/golangci/golangci-lint-action/releases/tag/v7.0.0 |         uses: golangci/golangci-lint-action@4afd733a84b1f43292c63897423277bb7f4313a9 | ||||||
|         uses: golangci/golangci-lint-action@1481404843c368bc19ca9406f87d6e0fc97bdcfd |  | ||||||
|         with: |         with: | ||||||
|           only-new-issues: true |           only-new-issues: true | ||||||
|           version: v2.1.2 |           version: v2.1.2 | ||||||
|  |  | ||||||
|  | @ -15,13 +15,13 @@ type: application | ||||||
| # This is the chart version. This version number should be incremented each time you make changes | # This is the chart version. This version number should be incremented each time you make changes | ||||||
| # to the chart and its templates, including the app version. | # to the chart and its templates, including the app version. | ||||||
| # Versions are expected to follow Semantic Versioning (https://semver.org/) | # Versions are expected to follow Semantic Versioning (https://semver.org/) | ||||||
| version: 0.12.0 | version: 0.12.1 | ||||||
| 
 | 
 | ||||||
| # This is the version number of the application being deployed. This version number should be | # This is the version number of the application being deployed. This version number should be | ||||||
| # incremented each time you make changes to the application. Versions are not expected to | # incremented each time you make changes to the application. Versions are not expected to | ||||||
| # follow Semantic Versioning. They should reflect the version the application is using. | # follow Semantic Versioning. They should reflect the version the application is using. | ||||||
| # It is recommended to use it with quotes. | # It is recommended to use it with quotes. | ||||||
| appVersion: "0.12.0" | appVersion: "0.12.1" | ||||||
| 
 | 
 | ||||||
| home: https://github.com/actions/actions-runner-controller | home: https://github.com/actions/actions-runner-controller | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -129,11 +129,3 @@ Create the name of the service account to use | ||||||
| {{- define "gha-runner-scale-set-controller.leaderElectionRoleBinding" -}} | {{- define "gha-runner-scale-set-controller.leaderElectionRoleBinding" -}} | ||||||
| {{- include "gha-runner-scale-set-controller.fullname" . }}-leader-election | {{- include "gha-runner-scale-set-controller.fullname" . }}-leader-election | ||||||
| {{- end }} | {{- end }} | ||||||
| 
 |  | ||||||
| {{- define "gha-runner-scale-set-controller.imagePullSecretsNames" -}} |  | ||||||
| {{- $names := list }} |  | ||||||
| {{- range $k, $v := . }} |  | ||||||
|   {{- $names = append $names $v.name }} |  | ||||||
| {{- end }} |  | ||||||
| {{- $names | join ","}} |  | ||||||
| {{- end }} |  | ||||||
|  |  | ||||||
|  | @ -54,7 +54,9 @@ spec: | ||||||
|         - "--leader-election-id={{ include "gha-runner-scale-set-controller.fullname" . }}" |         - "--leader-election-id={{ include "gha-runner-scale-set-controller.fullname" . }}" | ||||||
|         {{- end }} |         {{- end }} | ||||||
|         {{- with .Values.imagePullSecrets }} |         {{- with .Values.imagePullSecrets }} | ||||||
|         - "--auto-scaler-image-pull-secrets={{ include "gha-runner-scale-set-controller.imagePullSecretsNames" . }}" |         {{- range . }} | ||||||
|  |         - "--auto-scaler-image-pull-secrets={{- .name -}}" | ||||||
|  |         {{- end }} | ||||||
|         {{- end }} |         {{- end }} | ||||||
|         {{- with .Values.flags.logLevel }} |         {{- with .Values.flags.logLevel }} | ||||||
|         - "--log-level={{ . }}" |         - "--log-level={{ . }}" | ||||||
|  |  | ||||||
|  | @ -683,7 +683,8 @@ func TestTemplate_ControllerDeployment_ForwardImagePullSecrets(t *testing.T) { | ||||||
| 
 | 
 | ||||||
| 	expectedArgs := []string{ | 	expectedArgs := []string{ | ||||||
| 		"--auto-scaling-runner-set-only", | 		"--auto-scaling-runner-set-only", | ||||||
| 		"--auto-scaler-image-pull-secrets=dockerhub,ghcr", | 		"--auto-scaler-image-pull-secrets=dockerhub", | ||||||
|  | 		"--auto-scaler-image-pull-secrets=ghcr", | ||||||
| 		"--log-level=debug", | 		"--log-level=debug", | ||||||
| 		"--log-format=text", | 		"--log-format=text", | ||||||
| 		"--update-strategy=immediate", | 		"--update-strategy=immediate", | ||||||
|  | @ -1079,6 +1080,7 @@ func TestDeployment_excludeLabelPropagationPrefixes(t *testing.T) { | ||||||
| 	assert.Contains(t, container.Args, "--exclude-label-propagation-prefix=prefix.com/") | 	assert.Contains(t, container.Args, "--exclude-label-propagation-prefix=prefix.com/") | ||||||
| 	assert.Contains(t, container.Args, "--exclude-label-propagation-prefix=complete.io/label") | 	assert.Contains(t, container.Args, "--exclude-label-propagation-prefix=complete.io/label") | ||||||
| } | } | ||||||
|  | 
 | ||||||
| func TestNamespaceOverride(t *testing.T) { | func TestNamespaceOverride(t *testing.T) { | ||||||
| 	t.Parallel() | 	t.Parallel() | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -15,13 +15,13 @@ type: application | ||||||
| # This is the chart version. This version number should be incremented each time you make changes | # This is the chart version. This version number should be incremented each time you make changes | ||||||
| # to the chart and its templates, including the app version. | # to the chart and its templates, including the app version. | ||||||
| # Versions are expected to follow Semantic Versioning (https://semver.org/) | # Versions are expected to follow Semantic Versioning (https://semver.org/) | ||||||
| version: 0.12.0 | version: 0.12.1 | ||||||
| 
 | 
 | ||||||
| # This is the version number of the application being deployed. This version number should be | # This is the version number of the application being deployed. This version number should be | ||||||
| # incremented each time you make changes to the application. Versions are not expected to | # incremented each time you make changes to the application. Versions are not expected to | ||||||
| # follow Semantic Versioning. They should reflect the version the application is using. | # follow Semantic Versioning. They should reflect the version the application is using. | ||||||
| # It is recommended to use it with quotes. | # It is recommended to use it with quotes. | ||||||
| appVersion: "0.12.0" | appVersion: "0.12.1" | ||||||
| 
 | 
 | ||||||
| home: https://github.com/actions/actions-runner-controller | home: https://github.com/actions/actions-runner-controller | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -468,7 +468,7 @@ func (e *exporter) PublishStatistics(stats *actions.RunnerScaleSetStatistic) { | ||||||
| 	e.setGauge(MetricAssignedJobs, e.scaleSetLabels, float64(stats.TotalAssignedJobs)) | 	e.setGauge(MetricAssignedJobs, e.scaleSetLabels, float64(stats.TotalAssignedJobs)) | ||||||
| 	e.setGauge(MetricRunningJobs, e.scaleSetLabels, float64(stats.TotalRunningJobs)) | 	e.setGauge(MetricRunningJobs, e.scaleSetLabels, float64(stats.TotalRunningJobs)) | ||||||
| 	e.setGauge(MetricRegisteredRunners, e.scaleSetLabels, float64(stats.TotalRegisteredRunners)) | 	e.setGauge(MetricRegisteredRunners, e.scaleSetLabels, float64(stats.TotalRegisteredRunners)) | ||||||
| 	e.setGauge(MetricBusyRunners, e.scaleSetLabels, float64(float64(stats.TotalBusyRunners))) | 	e.setGauge(MetricBusyRunners, e.scaleSetLabels, float64(stats.TotalBusyRunners)) | ||||||
| 	e.setGauge(MetricIdleRunners, e.scaleSetLabels, float64(stats.TotalIdleRunners)) | 	e.setGauge(MetricIdleRunners, e.scaleSetLabels, float64(stats.TotalIdleRunners)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -201,12 +201,16 @@ func (r *EphemeralRunnerReconciler) Reconcile(ctx context.Context, req ctrl.Requ | ||||||
| 	backoffDuration := failedRunnerBackoff[len(ephemeralRunner.Status.Failures)] | 	backoffDuration := failedRunnerBackoff[len(ephemeralRunner.Status.Failures)] | ||||||
| 	nextReconciliation := lastFailure.Add(backoffDuration) | 	nextReconciliation := lastFailure.Add(backoffDuration) | ||||||
| 	if !lastFailure.IsZero() && now.Before(&metav1.Time{Time: nextReconciliation}) { | 	if !lastFailure.IsZero() && now.Before(&metav1.Time{Time: nextReconciliation}) { | ||||||
|  | 		requeueAfter := nextReconciliation.Sub(now.Time) | ||||||
| 		log.Info("Backing off the next reconciliation due to failure", | 		log.Info("Backing off the next reconciliation due to failure", | ||||||
| 			"lastFailure", lastFailure, | 			"lastFailure", lastFailure, | ||||||
| 			"nextReconciliation", nextReconciliation, | 			"nextReconciliation", nextReconciliation, | ||||||
| 			"requeueAfter", nextReconciliation.Sub(now.Time), | 			"requeueAfter", requeueAfter, | ||||||
| 		) | 		) | ||||||
| 		return ctrl.Result{RequeueAfter: now.Sub(nextReconciliation)}, nil | 		return ctrl.Result{ | ||||||
|  | 			Requeue:      true, | ||||||
|  | 			RequeueAfter: requeueAfter, | ||||||
|  | 		}, nil | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	secret := new(corev1.Secret) | 	secret := new(corev1.Secret) | ||||||
|  | @ -293,32 +297,14 @@ func (r *EphemeralRunnerReconciler) Reconcile(ctx context.Context, req ctrl.Requ | ||||||
| 		} | 		} | ||||||
| 		return ctrl.Result{}, nil | 		return ctrl.Result{}, nil | ||||||
| 
 | 
 | ||||||
| 	default: | 	default: // succeeded
 | ||||||
| 		// pod succeeded. We double-check with the service if the runner exists.
 | 		log.Info("Ephemeral runner has finished successfully") | ||||||
| 		// The reason is that image can potentially finish with status 0, but not pick up the job.
 |  | ||||||
| 		existsInService, err := r.runnerRegisteredWithService(ctx, ephemeralRunner.DeepCopy(), log) |  | ||||||
| 		if err != nil { |  | ||||||
| 			log.Error(err, "Failed to check if runner is registered with the service") |  | ||||||
| 			return ctrl.Result{}, err |  | ||||||
| 		} |  | ||||||
| 		if !existsInService { |  | ||||||
| 			// the runner does not exist in the service, so it must be done
 |  | ||||||
| 			log.Info("Ephemeral runner has finished since it does not exist in the service anymore") |  | ||||||
| 		if err := r.markAsFinished(ctx, ephemeralRunner, log); err != nil { | 		if err := r.markAsFinished(ctx, ephemeralRunner, log); err != nil { | ||||||
| 			log.Error(err, "Failed to mark ephemeral runner as finished") | 			log.Error(err, "Failed to mark ephemeral runner as finished") | ||||||
| 			return ctrl.Result{}, err | 			return ctrl.Result{}, err | ||||||
| 		} | 		} | ||||||
| 		return ctrl.Result{}, nil | 		return ctrl.Result{}, nil | ||||||
| 	} | 	} | ||||||
| 
 |  | ||||||
| 		// The runner still exists. This can happen if the pod exited with 0 but fails to start
 |  | ||||||
| 		log.Info("Ephemeral runner pod has finished, but the runner still exists in the service. Deleting the pod to restart it.") |  | ||||||
| 		if err := r.deletePodAsFailed(ctx, ephemeralRunner, pod, log); err != nil { |  | ||||||
| 			log.Error(err, "failed to delete a pod that still exists in the service") |  | ||||||
| 			return ctrl.Result{}, err |  | ||||||
| 		} |  | ||||||
| 		return ctrl.Result{}, nil |  | ||||||
| 	} |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (r *EphemeralRunnerReconciler) cleanupRunnerFromService(ctx context.Context, ephemeralRunner *v1alpha1.EphemeralRunner, log logr.Logger) (ok bool, err error) { | func (r *EphemeralRunnerReconciler) cleanupRunnerFromService(ctx context.Context, ephemeralRunner *v1alpha1.EphemeralRunner, log logr.Logger) (ok bool, err error) { | ||||||
|  | @ -752,35 +738,6 @@ func (r *EphemeralRunnerReconciler) updateRunStatusFromPod(ctx context.Context, | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // runnerRegisteredWithService checks if the runner is still registered with the service
 |  | ||||||
| // Returns found=false and err=nil if ephemeral runner does not exist in GitHub service and should be deleted
 |  | ||||||
| func (r EphemeralRunnerReconciler) runnerRegisteredWithService(ctx context.Context, runner *v1alpha1.EphemeralRunner, log logr.Logger) (found bool, err error) { |  | ||||||
| 	actionsClient, err := r.GetActionsService(ctx, runner) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return false, fmt.Errorf("failed to get Actions client for ScaleSet: %w", err) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	log.Info("Checking if runner exists in GitHub service", "runnerId", runner.Status.RunnerId) |  | ||||||
| 	_, err = actionsClient.GetRunner(ctx, int64(runner.Status.RunnerId)) |  | ||||||
| 	if err != nil { |  | ||||||
| 		actionsError := &actions.ActionsError{} |  | ||||||
| 		if !errors.As(err, &actionsError) { |  | ||||||
| 			return false, err |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		if actionsError.StatusCode != http.StatusNotFound || |  | ||||||
| 			!actionsError.IsException("AgentNotFoundException") { |  | ||||||
| 			return false, fmt.Errorf("failed to check if runner exists in GitHub service: %w", err) |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		log.Info("Runner does not exist in GitHub service", "runnerId", runner.Status.RunnerId) |  | ||||||
| 		return false, nil |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	log.Info("Runner exists in GitHub service", "runnerId", runner.Status.RunnerId) |  | ||||||
| 	return true, nil |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (r *EphemeralRunnerReconciler) deleteRunnerFromService(ctx context.Context, ephemeralRunner *v1alpha1.EphemeralRunner, log logr.Logger) error { | func (r *EphemeralRunnerReconciler) deleteRunnerFromService(ctx context.Context, ephemeralRunner *v1alpha1.EphemeralRunner, log logr.Logger) error { | ||||||
| 	client, err := r.GetActionsService(ctx, ephemeralRunner) | 	client, err := r.GetActionsService(ctx, ephemeralRunner) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  |  | ||||||
|  | @ -675,53 +675,6 @@ var _ = Describe("EphemeralRunner", func() { | ||||||
| 			).Should(BeEquivalentTo(true)) | 			).Should(BeEquivalentTo(true)) | ||||||
| 		}) | 		}) | ||||||
| 
 | 
 | ||||||
| 		It("It should re-create pod on exit status 0, but runner exists within the service", func() { |  | ||||||
| 			pod := new(corev1.Pod) |  | ||||||
| 			Eventually( |  | ||||||
| 				func() (bool, error) { |  | ||||||
| 					if err := k8sClient.Get(ctx, client.ObjectKey{Name: ephemeralRunner.Name, Namespace: ephemeralRunner.Namespace}, pod); err != nil { |  | ||||||
| 						return false, err |  | ||||||
| 					} |  | ||||||
| 					return true, nil |  | ||||||
| 				}, |  | ||||||
| 				ephemeralRunnerTimeout, |  | ||||||
| 				ephemeralRunnerInterval, |  | ||||||
| 			).Should(BeEquivalentTo(true)) |  | ||||||
| 
 |  | ||||||
| 			pod.Status.ContainerStatuses = append(pod.Status.ContainerStatuses, corev1.ContainerStatus{ |  | ||||||
| 				Name: v1alpha1.EphemeralRunnerContainerName, |  | ||||||
| 				State: corev1.ContainerState{ |  | ||||||
| 					Terminated: &corev1.ContainerStateTerminated{ |  | ||||||
| 						ExitCode: 0, |  | ||||||
| 					}, |  | ||||||
| 				}, |  | ||||||
| 			}) |  | ||||||
| 			err := k8sClient.Status().Update(ctx, pod) |  | ||||||
| 			Expect(err).To(BeNil(), "failed to update pod status") |  | ||||||
| 
 |  | ||||||
| 			updated := new(v1alpha1.EphemeralRunner) |  | ||||||
| 			Eventually(func() (bool, error) { |  | ||||||
| 				err := k8sClient.Get(ctx, client.ObjectKey{Name: ephemeralRunner.Name, Namespace: ephemeralRunner.Namespace}, updated) |  | ||||||
| 				if err != nil { |  | ||||||
| 					return false, err |  | ||||||
| 				} |  | ||||||
| 				return len(updated.Status.Failures) == 1, nil |  | ||||||
| 			}, ephemeralRunnerTimeout, ephemeralRunnerInterval).Should(BeEquivalentTo(true)) |  | ||||||
| 
 |  | ||||||
| 			// should re-create after failure
 |  | ||||||
| 			Eventually( |  | ||||||
| 				func() (bool, error) { |  | ||||||
| 					pod := new(corev1.Pod) |  | ||||||
| 					if err := k8sClient.Get(ctx, client.ObjectKey{Name: ephemeralRunner.Name, Namespace: ephemeralRunner.Namespace}, pod); err != nil { |  | ||||||
| 						return false, err |  | ||||||
| 					} |  | ||||||
| 					return true, nil |  | ||||||
| 				}, |  | ||||||
| 				ephemeralRunnerTimeout, |  | ||||||
| 				ephemeralRunnerInterval, |  | ||||||
| 			).Should(BeEquivalentTo(true)) |  | ||||||
| 		}) |  | ||||||
| 
 |  | ||||||
| 		It("It should not set the phase to succeeded without pod termination status", func() { | 		It("It should not set the phase to succeeded without pod termination status", func() { | ||||||
| 			pod := new(corev1.Pod) | 			pod := new(corev1.Pod) | ||||||
| 			Eventually( | 			Eventually( | ||||||
|  |  | ||||||
|  | @ -1046,12 +1046,12 @@ func newRunnerPodWithContainerMode(containerMode string, template corev1.Pod, ru | ||||||
| 		// overridden
 | 		// overridden
 | ||||||
| 		if ok, _ := envVarPresent("DOCKER_GROUP_GID", dockerdContainer.Env); !ok { | 		if ok, _ := envVarPresent("DOCKER_GROUP_GID", dockerdContainer.Env); !ok { | ||||||
| 			gid := d.DockerGID | 			gid := d.DockerGID | ||||||
| 			// We default to gid 121 for Ubuntu 22.04 images
 | 			// We default to gid 121 for Ubuntu 22.04 and 24.04 images
 | ||||||
| 			// See below for more details
 | 			// See below for more details
 | ||||||
| 			// - https://github.com/actions/actions-runner-controller/issues/2490#issuecomment-1501561923
 | 			// - https://github.com/actions/actions-runner-controller/issues/2490#issuecomment-1501561923
 | ||||||
| 			// - https://github.com/actions/actions-runner-controller/blob/8869ad28bb5a1daaedefe0e988571fe1fb36addd/runner/actions-runner.ubuntu-20.04.dockerfile#L14
 | 			// - https://github.com/actions/actions-runner-controller/blob/8869ad28bb5a1daaedefe0e988571fe1fb36addd/runner/actions-runner.ubuntu-20.04.dockerfile#L14
 | ||||||
| 			// - https://github.com/actions/actions-runner-controller/blob/8869ad28bb5a1daaedefe0e988571fe1fb36addd/runner/actions-runner.ubuntu-22.04.dockerfile#L12
 | 			// - https://github.com/actions/actions-runner-controller/blob/8869ad28bb5a1daaedefe0e988571fe1fb36addd/runner/actions-runner.ubuntu-22.04.dockerfile#L12
 | ||||||
| 			if strings.Contains(runnerContainer.Image, "22.04") { | 			if strings.Contains(runnerContainer.Image, "22.04") || strings.Contains(runnerContainer.Image, "24.04") { | ||||||
| 				gid = "121" | 				gid = "121" | ||||||
| 			} else if strings.Contains(runnerContainer.Image, "20.04") { | 			} else if strings.Contains(runnerContainer.Image, "20.04") { | ||||||
| 				gid = "1001" | 				gid = "1001" | ||||||
|  |  | ||||||
|  | @ -188,7 +188,7 @@ Create one using e.g. `eksctl`. You can refer to [the EKS documentation](https:/ | ||||||
| 
 | 
 | ||||||
| Once you set up the service account, all you need is to add `serviceAccountName` and `fsGroup` to any pods that use the IAM-role enabled service account. | Once you set up the service account, all you need is to add `serviceAccountName` and `fsGroup` to any pods that use the IAM-role enabled service account. | ||||||
| 
 | 
 | ||||||
| `fsGroup` needs to be set to the UID of the `runner` Linux user that runs the runner agent (and dockerd in case you use dind-runner). For anyone using an Ubuntu 20.04 runner image it's `1000` and for Ubuntu 22.04 one it's `1001`. | `fsGroup` needs to be set to the UID of the `runner` Linux user that runs the runner agent (and dockerd in case you use dind-runner). For anyone using an Ubuntu 20.04 runner image it's `1000` and for Ubuntu 22.04 and 24.04 one it's `1001`. | ||||||
| 
 | 
 | ||||||
| For `RunnerDeployment`, you can set those two fields under the runner spec at `RunnerDeployment.Spec.Template`: | For `RunnerDeployment`, you can set those two fields under the runner spec at `RunnerDeployment.Spec.Template`: | ||||||
| 
 | 
 | ||||||
|  | @ -205,7 +205,7 @@ spec: | ||||||
|       securityContext: |       securityContext: | ||||||
|         # For Ubuntu 20.04 runner |         # For Ubuntu 20.04 runner | ||||||
|         fsGroup: 1000 |         fsGroup: 1000 | ||||||
|         # Use 1001 for Ubuntu 22.04 runner |         # Use 1001 for Ubuntu 22.04 and 24.04 runner | ||||||
|         #fsGroup: 1001 |         #fsGroup: 1001 | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -43,6 +43,14 @@ You can follow [this troubleshooting guide](https://docs.github.com/en/actions/h | ||||||
| 
 | 
 | ||||||
| ## Changelog | ## Changelog | ||||||
| 
 | 
 | ||||||
|  | ### 0.12.1 | ||||||
|  | 
 | ||||||
|  | 1. Fix indentation of startupProbe attributes in dind sidecar [#4126](https://github.com/actions/actions-runner-controller/pull/4126) | ||||||
|  | 1. Remove duplicate float64 call [#4139](https://github.com/actions/actions-runner-controller/pull/4139) | ||||||
|  | 1. Fix dind sidecar template [#4128](https://github.com/actions/actions-runner-controller/pull/4128) | ||||||
|  | 1. Remove check if runner exists after exit code 0 [#4142](https://github.com/actions/actions-runner-controller/pull/4142) | ||||||
|  | 1. Explicitly requeue during backoff ephemeral runner [#4152](https://github.com/actions/actions-runner-controller/pull/4152) | ||||||
|  | 
 | ||||||
| ### 0.12.0 | ### 0.12.0 | ||||||
| 
 | 
 | ||||||
| 1. Allow use of client id as an app id [#4057](https://github.com/actions/actions-runner-controller/pull/4057) | 1. Allow use of client id as an app id [#4057](https://github.com/actions/actions-runner-controller/pull/4057) | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								main.go
								
								
								
								
							
							
						
						
									
										2
									
								
								main.go
								
								
								
								
							|  | @ -124,7 +124,7 @@ func main() { | ||||||
| 	flag.StringVar(&leaderElectionId, "leader-election-id", "actions-runner-controller", "Controller id for leader election.") | 	flag.StringVar(&leaderElectionId, "leader-election-id", "actions-runner-controller", "Controller id for leader election.") | ||||||
| 	flag.StringVar(&runnerPodDefaults.RunnerImage, "runner-image", defaultRunnerImage, "The image name of self-hosted runner container to use by default if one isn't defined in yaml.") | 	flag.StringVar(&runnerPodDefaults.RunnerImage, "runner-image", defaultRunnerImage, "The image name of self-hosted runner container to use by default if one isn't defined in yaml.") | ||||||
| 	flag.StringVar(&runnerPodDefaults.DockerImage, "docker-image", defaultDockerImage, "The image name of docker sidecar container to use by default if one isn't defined in yaml.") | 	flag.StringVar(&runnerPodDefaults.DockerImage, "docker-image", defaultDockerImage, "The image name of docker sidecar container to use by default if one isn't defined in yaml.") | ||||||
| 	flag.StringVar(&runnerPodDefaults.DockerGID, "docker-gid", defaultDockerGID, "The default GID of docker group in the docker sidecar container. Use 1001 for dockerd sidecars of Ubuntu 20.04 runners 121 for Ubuntu 22.04.") | 	flag.StringVar(&runnerPodDefaults.DockerGID, "docker-gid", defaultDockerGID, "The default GID of docker group in the docker sidecar container. Use 1001 for dockerd sidecars of Ubuntu 20.04 runners 121 for Ubuntu 22.04 and 24.04.") | ||||||
| 	flag.Var(&runnerImagePullSecrets, "runner-image-pull-secret", "The default image-pull secret name for self-hosted runner container.") | 	flag.Var(&runnerImagePullSecrets, "runner-image-pull-secret", "The default image-pull secret name for self-hosted runner container.") | ||||||
| 	flag.StringVar(&runnerPodDefaults.DockerRegistryMirror, "docker-registry-mirror", "", "The default Docker Registry Mirror used by runners.") | 	flag.StringVar(&runnerPodDefaults.DockerRegistryMirror, "docker-registry-mirror", "", "The default Docker Registry Mirror used by runners.") | ||||||
| 	flag.StringVar(&c.Token, "github-token", c.Token, "The personal access token of GitHub.") | 	flag.StringVar(&c.Token, "github-token", c.Token, "The personal access token of GitHub.") | ||||||
|  |  | ||||||
|  | @ -0,0 +1,135 @@ | ||||||
|  | FROM ubuntu:24.04 | ||||||
|  | 
 | ||||||
|  | ARG TARGETPLATFORM | ||||||
|  | ARG RUNNER_VERSION | ||||||
|  | ARG RUNNER_CONTAINER_HOOKS_VERSION | ||||||
|  | # Docker and Docker Compose arguments | ||||||
|  | ENV CHANNEL=stable | ||||||
|  | ARG DOCKER_COMPOSE_VERSION=v2.23.0 | ||||||
|  | ARG DUMB_INIT_VERSION=1.2.5 | ||||||
|  | ARG RUNNER_USER_UID=1001 | ||||||
|  | 
 | ||||||
|  | # Other arguments | ||||||
|  | ARG DEBUG=false | ||||||
|  | 
 | ||||||
|  | RUN test -n "$TARGETPLATFORM" || (echo "TARGETPLATFORM must be set" && false) | ||||||
|  | 
 | ||||||
|  | ENV DEBIAN_FRONTEND=noninteractive | ||||||
|  | RUN apt-get update -y \ | ||||||
|  |     && apt-get install -y software-properties-common \ | ||||||
|  |     && add-apt-repository -y ppa:git-core/ppa \ | ||||||
|  |     && apt-get update -y \ | ||||||
|  |     && apt-get install -y --no-install-recommends \ | ||||||
|  |     curl \ | ||||||
|  |     ca-certificates \ | ||||||
|  |     git \ | ||||||
|  |     iproute2 \ | ||||||
|  |     iptables \ | ||||||
|  |     jq \ | ||||||
|  |     sudo \ | ||||||
|  |     uidmap \ | ||||||
|  |     unzip \ | ||||||
|  |     zip \ | ||||||
|  |     fuse-overlayfs \ | ||||||
|  |     && rm -rf /var/lib/apt/lists/* | ||||||
|  | 
 | ||||||
|  | # Download latest git-lfs version | ||||||
|  | RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash && \ | ||||||
|  |     apt-get install -y --no-install-recommends git-lfs | ||||||
|  | 
 | ||||||
|  | # Runner user | ||||||
|  | RUN adduser --disabled-password --gecos "" --uid $RUNNER_USER_UID runner | ||||||
|  | 
 | ||||||
|  | ENV HOME=/home/runner | ||||||
|  | 
 | ||||||
|  | # Set-up subuid and subgid so that "--userns-remap=default" works | ||||||
|  | RUN set -eux; \ | ||||||
|  |     addgroup --system dockremap; \ | ||||||
|  |     adduser --system --ingroup dockremap dockremap; \ | ||||||
|  |     echo 'dockremap:165536:65536' >> /etc/subuid; \ | ||||||
|  |     echo 'dockremap:165536:65536' >> /etc/subgid | ||||||
|  | 
 | ||||||
|  | RUN export ARCH=$(echo ${TARGETPLATFORM} | cut -d / -f2) \ | ||||||
|  |     && if [ "$ARCH" = "arm64" ]; then export ARCH=aarch64 ; fi \ | ||||||
|  |     && if [ "$ARCH" = "amd64" ] || [ "$ARCH" = "i386" ]; then export ARCH=x86_64 ; fi \ | ||||||
|  |     && curl -fLo /usr/bin/dumb-init https://github.com/Yelp/dumb-init/releases/download/v${DUMB_INIT_VERSION}/dumb-init_${DUMB_INIT_VERSION}_${ARCH} \ | ||||||
|  |     && chmod +x /usr/bin/dumb-init | ||||||
|  | 
 | ||||||
|  | ENV RUNNER_ASSETS_DIR=/runnertmp | ||||||
|  | RUN export ARCH=$(echo ${TARGETPLATFORM} | cut -d / -f2) \ | ||||||
|  |     && if [ "$ARCH" = "amd64" ] || [ "$ARCH" = "x86_64" ] || [ "$ARCH" = "i386" ]; then export ARCH=x64 ; fi \ | ||||||
|  |     && mkdir -p "$RUNNER_ASSETS_DIR" \ | ||||||
|  |     && cd "$RUNNER_ASSETS_DIR" \ | ||||||
|  |     && curl -fLo 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 \ | ||||||
|  |     # 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. | ||||||
|  |     && apt-get install -y libyaml-dev \ | ||||||
|  |     && rm -rf /var/lib/apt/lists/* | ||||||
|  | 
 | ||||||
|  | ENV RUNNER_TOOL_CACHE=/opt/hostedtoolcache | ||||||
|  | RUN mkdir /opt/hostedtoolcache \ | ||||||
|  |     && chgrp runner /opt/hostedtoolcache \ | ||||||
|  |     && chmod g+rwx /opt/hostedtoolcache | ||||||
|  | 
 | ||||||
|  | RUN cd "$RUNNER_ASSETS_DIR" \ | ||||||
|  |     && curl -fLo runner-container-hooks.zip https://github.com/actions/runner-container-hooks/releases/download/v${RUNNER_CONTAINER_HOOKS_VERSION}/actions-runner-hooks-k8s-${RUNNER_CONTAINER_HOOKS_VERSION}.zip \ | ||||||
|  |     && unzip ./runner-container-hooks.zip -d ./k8s \ | ||||||
|  |     && rm -f runner-container-hooks.zip | ||||||
|  | 
 | ||||||
|  | # Make the rootless runner directory executable | ||||||
|  | RUN mkdir /run/user/1000 \ | ||||||
|  |     && chown runner:runner /run/user/1000 \ | ||||||
|  |     && chmod a+x /run/user/1000 | ||||||
|  | 
 | ||||||
|  | # We place the scripts in `/usr/bin` so that users who extend this image can | ||||||
|  | # override them with scripts of the same name placed in `/usr/local/bin`. | ||||||
|  | COPY entrypoint-dind-rootless.sh startup.sh logger.sh graceful-stop.sh update-status /usr/bin/ | ||||||
|  | RUN chmod +x /usr/bin/entrypoint-dind-rootless.sh /usr/bin/startup.sh | ||||||
|  | 
 | ||||||
|  | # Copy the docker shim which propagates the docker MTU to underlying networks | ||||||
|  | # to replace the docker binary in the PATH. | ||||||
|  | COPY docker-shim.sh /usr/local/bin/docker | ||||||
|  | 
 | ||||||
|  | # Configure hooks folder structure. | ||||||
|  | COPY hooks /etc/arc/hooks/ | ||||||
|  | 
 | ||||||
|  | # Add the Python "User Script Directory" to the PATH | ||||||
|  | ENV PATH="${PATH}:${HOME}/.local/bin:/home/runner/bin" | ||||||
|  | ENV ImageOS=ubuntu22 | ||||||
|  | ENV DOCKER_HOST=unix:///run/user/1000/docker.sock | ||||||
|  | ENV XDG_RUNTIME_DIR=/run/user/1000 | ||||||
|  | 
 | ||||||
|  | RUN echo "PATH=${PATH}" > /etc/environment \ | ||||||
|  |     && echo "ImageOS=${ImageOS}" >> /etc/environment \ | ||||||
|  |     && echo "DOCKER_HOST=${DOCKER_HOST}" >> /etc/environment \ | ||||||
|  |     && echo "XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR}" >> /etc/environment | ||||||
|  | 
 | ||||||
|  | # No group definition, as that makes it harder to run docker. | ||||||
|  | USER runner | ||||||
|  | 
 | ||||||
|  | # This will install docker under $HOME/bin according to the content of the script | ||||||
|  | RUN export SKIP_IPTABLES=1 \ | ||||||
|  |     && curl -fsSL https://get.docker.com/rootless | sh \ | ||||||
|  |     && /home/runner/bin/docker -v | ||||||
|  | 
 | ||||||
|  | RUN export ARCH=$(echo ${TARGETPLATFORM} | cut -d / -f2) \ | ||||||
|  |     && if [ "$ARCH" = "arm64" ]; then export ARCH=aarch64 ; fi \ | ||||||
|  |     && if [ "$ARCH" = "amd64" ] || [ "$ARCH" = "i386" ]; then export ARCH=x86_64 ; fi \ | ||||||
|  |     && mkdir -p /home/runner/.docker/cli-plugins \ | ||||||
|  |     && curl -fLo /home/runner/.docker/cli-plugins/docker-compose https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-linux-${ARCH} \ | ||||||
|  |     && chmod +x /home/runner/.docker/cli-plugins/docker-compose \ | ||||||
|  |     && ln -s /home/runner/.docker/cli-plugins/docker-compose /home/runner/bin/docker-compose \ | ||||||
|  |     && which docker-compose \ | ||||||
|  |     && docker compose version | ||||||
|  | 
 | ||||||
|  | # Create folder structure here to avoid permission issues | ||||||
|  | # when mounting the daemon.json file from a configmap. | ||||||
|  | RUN mkdir -p /home/runner/.config/docker | ||||||
|  | 
 | ||||||
|  | ENTRYPOINT ["/bin/bash", "-c"] | ||||||
|  | CMD ["entrypoint-dind-rootless.sh"] | ||||||
|  | @ -0,0 +1,120 @@ | ||||||
|  | FROM ubuntu:24.04 | ||||||
|  | 
 | ||||||
|  | ARG TARGETPLATFORM | ||||||
|  | ARG RUNNER_VERSION | ||||||
|  | ARG RUNNER_CONTAINER_HOOKS_VERSION | ||||||
|  | # Docker and Docker Compose arguments | ||||||
|  | ARG CHANNEL=stable | ||||||
|  | ARG DOCKER_VERSION=24.0.7 | ||||||
|  | ARG DOCKER_COMPOSE_VERSION=v2.23.0 | ||||||
|  | ARG DUMB_INIT_VERSION=1.2.5 | ||||||
|  | ARG RUNNER_USER_UID=1001 | ||||||
|  | ARG DOCKER_GROUP_GID=121 | ||||||
|  | 
 | ||||||
|  | ENV DEBIAN_FRONTEND=noninteractive | ||||||
|  | RUN apt-get update -y \ | ||||||
|  |     && apt-get install -y software-properties-common \ | ||||||
|  |     && add-apt-repository -y ppa:git-core/ppa \ | ||||||
|  |     && apt-get update -y \ | ||||||
|  |     && apt-get install -y --no-install-recommends \ | ||||||
|  |     curl \ | ||||||
|  |     ca-certificates \ | ||||||
|  |     git \ | ||||||
|  |     iptables \ | ||||||
|  |     jq \ | ||||||
|  |     software-properties-common \ | ||||||
|  |     sudo \ | ||||||
|  |     unzip \ | ||||||
|  |     zip \ | ||||||
|  |     && rm -rf /var/lib/apt/lists/* | ||||||
|  | 
 | ||||||
|  | # Download latest git-lfs version | ||||||
|  | RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash && \ | ||||||
|  |     apt-get install -y --no-install-recommends git-lfs | ||||||
|  | 
 | ||||||
|  | # Runner user | ||||||
|  | RUN adduser --disabled-password --gecos "" --uid $RUNNER_USER_UID runner \ | ||||||
|  |     && groupadd docker --gid $DOCKER_GROUP_GID \ | ||||||
|  |     && usermod -aG sudo runner \ | ||||||
|  |     && usermod -aG docker runner \ | ||||||
|  |     && echo "%sudo   ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers \ | ||||||
|  |     && echo "Defaults env_keep += \"DEBIAN_FRONTEND\"" >> /etc/sudoers | ||||||
|  | 
 | ||||||
|  | ENV HOME=/home/runner | ||||||
|  | 
 | ||||||
|  | RUN export ARCH=$(echo ${TARGETPLATFORM} | cut -d / -f2) \ | ||||||
|  |     && if [ "$ARCH" = "arm64" ]; then export ARCH=aarch64 ; fi \ | ||||||
|  |     && if [ "$ARCH" = "amd64" ] || [ "$ARCH" = "i386" ]; then export ARCH=x86_64 ; fi \ | ||||||
|  |     && curl -fLo /usr/bin/dumb-init https://github.com/Yelp/dumb-init/releases/download/v${DUMB_INIT_VERSION}/dumb-init_${DUMB_INIT_VERSION}_${ARCH} \ | ||||||
|  |     && chmod +x /usr/bin/dumb-init | ||||||
|  | 
 | ||||||
|  | ENV RUNNER_ASSETS_DIR=/runnertmp | ||||||
|  | RUN export ARCH=$(echo ${TARGETPLATFORM} | cut -d / -f2) \ | ||||||
|  |     && if [ "$ARCH" = "amd64" ] || [ "$ARCH" = "x86_64" ] || [ "$ARCH" = "i386" ]; then export ARCH=x64 ; fi \ | ||||||
|  |     && mkdir -p "$RUNNER_ASSETS_DIR" \ | ||||||
|  |     && cd "$RUNNER_ASSETS_DIR" \ | ||||||
|  |     && curl -fLo 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 -f runner.tar.gz \ | ||||||
|  |     && ./bin/installdependencies.sh \ | ||||||
|  |     # 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. | ||||||
|  |     && apt-get install -y libyaml-dev \ | ||||||
|  |     && rm -rf /var/lib/apt/lists/* | ||||||
|  | 
 | ||||||
|  | ENV RUNNER_TOOL_CACHE=/opt/hostedtoolcache | ||||||
|  | RUN mkdir /opt/hostedtoolcache \ | ||||||
|  |     && chgrp docker /opt/hostedtoolcache \ | ||||||
|  |     && chmod g+rwx /opt/hostedtoolcache | ||||||
|  | 
 | ||||||
|  | RUN cd "$RUNNER_ASSETS_DIR" \ | ||||||
|  |     && curl -fLo runner-container-hooks.zip https://github.com/actions/runner-container-hooks/releases/download/v${RUNNER_CONTAINER_HOOKS_VERSION}/actions-runner-hooks-k8s-${RUNNER_CONTAINER_HOOKS_VERSION}.zip \ | ||||||
|  |     && unzip ./runner-container-hooks.zip -d ./k8s \ | ||||||
|  |     && rm -f runner-container-hooks.zip | ||||||
|  | 
 | ||||||
|  | RUN set -vx; \ | ||||||
|  |     export ARCH=$(echo ${TARGETPLATFORM} | cut -d / -f2) \ | ||||||
|  |     && if [ "$ARCH" = "arm64" ]; then export ARCH=aarch64 ; fi \ | ||||||
|  |     && if [ "$ARCH" = "amd64" ] || [ "$ARCH" = "i386" ]; then export ARCH=x86_64 ; fi \ | ||||||
|  |     && curl -fLo docker.tgz https://download.docker.com/linux/static/${CHANNEL}/${ARCH}/docker-${DOCKER_VERSION}.tgz \ | ||||||
|  |     && tar zxvf docker.tgz \ | ||||||
|  |     && install -o root -g root -m 755 docker/* /usr/bin/ \ | ||||||
|  |     && rm -rf docker docker.tgz | ||||||
|  | 
 | ||||||
|  | RUN export ARCH=$(echo ${TARGETPLATFORM} | cut -d / -f2) \ | ||||||
|  |     && if [ "$ARCH" = "arm64" ]; then export ARCH=aarch64 ; fi \ | ||||||
|  |     && if [ "$ARCH" = "amd64" ] || [ "$ARCH" = "i386" ]; then export ARCH=x86_64 ; fi \ | ||||||
|  |     && mkdir -p /usr/libexec/docker/cli-plugins \ | ||||||
|  |     && curl -fLo /usr/libexec/docker/cli-plugins/docker-compose https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-linux-${ARCH} \ | ||||||
|  |     && chmod +x /usr/libexec/docker/cli-plugins/docker-compose \ | ||||||
|  |     && ln -s /usr/libexec/docker/cli-plugins/docker-compose /usr/bin/docker-compose \ | ||||||
|  |     && which docker-compose \ | ||||||
|  |     && docker compose version | ||||||
|  | 
 | ||||||
|  | # We place the scripts in `/usr/bin` so that users who extend this image can | ||||||
|  | # override them with scripts of the same name placed in `/usr/local/bin`. | ||||||
|  | COPY entrypoint-dind.sh startup.sh logger.sh wait.sh graceful-stop.sh update-status /usr/bin/ | ||||||
|  | RUN chmod +x /usr/bin/entrypoint-dind.sh /usr/bin/startup.sh | ||||||
|  | 
 | ||||||
|  | # Copy the docker shim which propagates the docker MTU to underlying networks | ||||||
|  | # to replace the docker binary in the PATH. | ||||||
|  | COPY docker-shim.sh /usr/local/bin/docker | ||||||
|  | 
 | ||||||
|  | # Configure hooks folder structure. | ||||||
|  | COPY hooks /etc/arc/hooks/ | ||||||
|  | 
 | ||||||
|  | VOLUME /var/lib/docker | ||||||
|  | 
 | ||||||
|  | # Add the Python "User Script Directory" to the PATH | ||||||
|  | ENV PATH="${PATH}:${HOME}/.local/bin" | ||||||
|  | ENV ImageOS=ubuntu24 | ||||||
|  | 
 | ||||||
|  | RUN echo "PATH=${PATH}" > /etc/environment \ | ||||||
|  |     && echo "ImageOS=${ImageOS}" >> /etc/environment | ||||||
|  | 
 | ||||||
|  | # No group definition, as that makes it harder to run docker. | ||||||
|  | USER runner | ||||||
|  | 
 | ||||||
|  | ENTRYPOINT ["/bin/bash", "-c"] | ||||||
|  | CMD ["entrypoint-dind.sh"] | ||||||
|  | @ -0,0 +1,114 @@ | ||||||
|  | FROM ubuntu:24.04 | ||||||
|  | 
 | ||||||
|  | ARG TARGETPLATFORM | ||||||
|  | ARG RUNNER_VERSION | ||||||
|  | ARG RUNNER_CONTAINER_HOOKS_VERSION | ||||||
|  | # Docker and Docker Compose arguments | ||||||
|  | ARG CHANNEL=stable | ||||||
|  | ARG DOCKER_VERSION=24.0.7 | ||||||
|  | ARG DOCKER_COMPOSE_VERSION=v2.23.0 | ||||||
|  | ARG DUMB_INIT_VERSION=1.2.5 | ||||||
|  | ARG RUNNER_USER_UID=1001 | ||||||
|  | ARG DOCKER_GROUP_GID=121 | ||||||
|  | 
 | ||||||
|  | ENV DEBIAN_FRONTEND=noninteractive | ||||||
|  | RUN apt-get update -y \ | ||||||
|  |     && apt-get install -y software-properties-common \ | ||||||
|  |     && add-apt-repository -y ppa:git-core/ppa \ | ||||||
|  |     && apt-get update -y \ | ||||||
|  |     && apt-get install -y --no-install-recommends \ | ||||||
|  |     curl \ | ||||||
|  |     ca-certificates \ | ||||||
|  |     git \ | ||||||
|  |     jq \ | ||||||
|  |     sudo \ | ||||||
|  |     unzip \ | ||||||
|  |     zip \ | ||||||
|  |     && rm -rf /var/lib/apt/lists/* | ||||||
|  | 
 | ||||||
|  | # Download latest git-lfs version | ||||||
|  | RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash && \ | ||||||
|  |     apt-get install -y --no-install-recommends git-lfs | ||||||
|  | 
 | ||||||
|  | RUN adduser --disabled-password --gecos "" --uid $RUNNER_USER_UID runner \ | ||||||
|  |     && groupadd docker --gid $DOCKER_GROUP_GID \ | ||||||
|  |     && usermod -aG sudo runner \ | ||||||
|  |     && usermod -aG docker runner \ | ||||||
|  |     && echo "%sudo   ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers \ | ||||||
|  |     && echo "Defaults env_keep += \"DEBIAN_FRONTEND\"" >> /etc/sudoers | ||||||
|  | 
 | ||||||
|  | ENV HOME=/home/runner | ||||||
|  | 
 | ||||||
|  | RUN export ARCH=$(echo ${TARGETPLATFORM} | cut -d / -f2) \ | ||||||
|  |     && if [ "$ARCH" = "arm64" ]; then export ARCH=aarch64 ; fi \ | ||||||
|  |     && if [ "$ARCH" = "amd64" ] || [ "$ARCH" = "i386" ]; then export ARCH=x86_64 ; fi \ | ||||||
|  |     && curl -fLo /usr/bin/dumb-init https://github.com/Yelp/dumb-init/releases/download/v${DUMB_INIT_VERSION}/dumb-init_${DUMB_INIT_VERSION}_${ARCH} \ | ||||||
|  |     && chmod +x /usr/bin/dumb-init | ||||||
|  | 
 | ||||||
|  | ENV RUNNER_ASSETS_DIR=/runnertmp | ||||||
|  | RUN export ARCH=$(echo ${TARGETPLATFORM} | cut -d / -f2) \ | ||||||
|  |     && if [ "$ARCH" = "amd64" ] || [ "$ARCH" = "x86_64" ] || [ "$ARCH" = "i386" ]; then export ARCH=x64 ; fi \ | ||||||
|  |     && mkdir -p "$RUNNER_ASSETS_DIR" \ | ||||||
|  |     && cd "$RUNNER_ASSETS_DIR" \ | ||||||
|  |     && curl -fLo 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 \ | ||||||
|  |     # 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. | ||||||
|  |     && apt-get install -y libyaml-dev \ | ||||||
|  |     && rm -rf /var/lib/apt/lists/* | ||||||
|  | 
 | ||||||
|  | ENV RUNNER_TOOL_CACHE=/opt/hostedtoolcache | ||||||
|  | RUN mkdir /opt/hostedtoolcache \ | ||||||
|  |     && chgrp docker /opt/hostedtoolcache \ | ||||||
|  |     && chmod g+rwx /opt/hostedtoolcache | ||||||
|  | 
 | ||||||
|  | RUN cd "$RUNNER_ASSETS_DIR" \ | ||||||
|  |     && curl -fLo runner-container-hooks.zip https://github.com/actions/runner-container-hooks/releases/download/v${RUNNER_CONTAINER_HOOKS_VERSION}/actions-runner-hooks-k8s-${RUNNER_CONTAINER_HOOKS_VERSION}.zip \ | ||||||
|  |     && unzip ./runner-container-hooks.zip -d ./k8s \ | ||||||
|  |     && rm -f runner-container-hooks.zip | ||||||
|  | 
 | ||||||
|  | RUN set -vx; \ | ||||||
|  |     export ARCH=$(echo ${TARGETPLATFORM} | cut -d / -f2) \ | ||||||
|  |     && if [ "$ARCH" = "arm64" ]; then export ARCH=aarch64 ; fi \ | ||||||
|  |     && if [ "$ARCH" = "amd64" ] || [ "$ARCH" = "i386" ]; then export ARCH=x86_64 ; fi \ | ||||||
|  |     && curl -fLo docker.tgz https://download.docker.com/linux/static/${CHANNEL}/${ARCH}/docker-${DOCKER_VERSION}.tgz \ | ||||||
|  |     && tar zxvf docker.tgz \ | ||||||
|  |     && install -o root -g root -m 755 docker/docker /usr/bin/docker \ | ||||||
|  |     && rm -rf docker docker.tgz | ||||||
|  | 
 | ||||||
|  | RUN export ARCH=$(echo ${TARGETPLATFORM} | cut -d / -f2) \ | ||||||
|  |     && if [ "$ARCH" = "arm64" ]; then export ARCH=aarch64 ; fi \ | ||||||
|  |     && if [ "$ARCH" = "amd64" ] || [ "$ARCH" = "i386" ]; then export ARCH=x86_64 ; fi \ | ||||||
|  |     && mkdir -p /usr/libexec/docker/cli-plugins \ | ||||||
|  |     && curl -fLo /usr/libexec/docker/cli-plugins/docker-compose https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-linux-${ARCH} \ | ||||||
|  |     && chmod +x /usr/libexec/docker/cli-plugins/docker-compose \ | ||||||
|  |     && ln -s /usr/libexec/docker/cli-plugins/docker-compose /usr/bin/docker-compose \ | ||||||
|  |     && which docker-compose \ | ||||||
|  |     && docker compose version | ||||||
|  | 
 | ||||||
|  | # We place the scripts in `/usr/bin` so that users who extend this image can | ||||||
|  | # override them with scripts of the same name placed in `/usr/local/bin`. | ||||||
|  | COPY entrypoint.sh startup.sh logger.sh graceful-stop.sh update-status /usr/bin/ | ||||||
|  | 
 | ||||||
|  | # Copy the docker shim which propagates the docker MTU to underlying networks | ||||||
|  | # to replace the docker binary in the PATH. | ||||||
|  | COPY docker-shim.sh /usr/local/bin/docker | ||||||
|  | 
 | ||||||
|  | # Configure hooks folder structure. | ||||||
|  | COPY hooks /etc/arc/hooks/ | ||||||
|  | 
 | ||||||
|  | # Add the Python "User Script Directory" to the PATH | ||||||
|  | ENV PATH="${PATH}:${HOME}/.local/bin/" | ||||||
|  | ENV ImageOS=ubuntu24 | ||||||
|  | 
 | ||||||
|  | RUN echo "PATH=${PATH}" > /etc/environment \ | ||||||
|  |     && echo "ImageOS=${ImageOS}" >> /etc/environment | ||||||
|  | 
 | ||||||
|  | USER runner | ||||||
|  | 
 | ||||||
|  | ENTRYPOINT ["/bin/bash", "-c"] | ||||||
|  | CMD ["entrypoint.sh"] | ||||||
		Loading…
	
		Reference in New Issue