name: Build ubuntu images on: schedule: - cron: 0 12 */7 * * push: paths: - '.github/workflows/build-ubuntu.yml' - 'linux/ubuntu/**' branches: - 'master' pull_request: paths: - '.github/workflows/build-ubuntu.yml' - 'linux/ubuntu/**' workflow_dispatch: env: IMAGE_LABEL_OWNER: ${{ github.repository_owner }} IMAGE_LABEL_REPO: ${{ github.repository }} SLUG: ${{ github.repository_owner }}/ubuntu DISTRO: ubuntu NODE: '16 18' BUILD_REF: ${{ github.sha }} SKIP_TEST: false PUSH_GHCR: ${{ github.repository == (github.event.pull_request.head.repo.full_name || github.repository) && '1' || '' }} PUSH_QUAY: ${{ secrets.QUAY_USER && secrets.QUAY_TOKEN && '1' || '' }} PUSH_DOCKER_HUB: ${{ secrets.DOCKER_USER && secrets.DOCKER_TOKEN && '1' || '' }} defaults: run: shell: sh jobs: build-base: name: Build base ${{ matrix.TAG }} runs-on: ubuntu-latest env: PLATFORMS: ${{ matrix.PLATFORMS }} strategy: fail-fast: true max-parallel: 4 matrix: PLATFORMS: - linux/amd64,linux/arm64,linux/arm/v7 TAG: - latest - 22.04 - 20.04 steps: - name: Force SLUG to lowercase uses: actions/github-script@v6 with: github-token: n/a script: | core.exportVariable('SLUG', process.env.SLUG.toLowerCase()); - name: Login to GitHub Container Registry if: env.PUSH_GHCR run: exec buildah login -u ${{ github.actor }} -p ${{ github.token }} ghcr.io - name: Login to Quay if: env.PUSH_QUAY run: exec buildah login -u ${{ secrets.QUAY_USER }} -p ${{ secrets.QUAY_TOKEN }} quay.io - name: Login to Docker Hub if: env.PUSH_DOCKER_HUB run: exec buildah login -u ${{ secrets.DOCKER_USER }} -p ${{ secrets.DOCKER_TOKEN }} docker.io - name: Print tag run: | if ${{ ( github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' ) }} ; then echo "PART_TAG=$(date +%Y%m%d)" | tee -a "$GITHUB_ENV" else echo "PART_TAG=dev" | tee -a "$GITHUB_ENV" fi - name: Set Ubuntu version to RELEASE run: | if [ "latest" = "${{ matrix.TAG }}" ]; then echo "RELEASE_TAG=$(lsb_release -rs)" | tee -a "$GITHUB_ENV" else echo "RELEASE_TAG=${{ matrix.TAG }}" | tee -a "$GITHUB_ENV" fi - name: Set up QEMU uses: docker/setup-qemu-action@v2 - uses: actions/checkout@v3 - name: Build and push ${{ env.DISTRO }}:${{ env.TAG }} shell: buildah unshare pwsh "{0}" env: RUNNER: root TAG: act-${{ matrix.TAG }}-${{ env.PART_TAG }} TYPE: act FROM_IMAGE: buildpack-deps FROM_TAG: ${{ env.RELEASE_TAG }} BUILD_TAG_VERSION: ${{ env.PART_TAG }} BUILD_TAG: act-${{ matrix.TAG }} run: | ./build.ps1 ` -push ` -tags @( ${{ env.PUSH_GHCR && format('''ghcr.io/{0}:{1}''{2}', env.SLUG, env.TAG, (env.PUSH_QUAY || env.PUSH_DOCKER_HUB) && ',' || '') || '' }} ${{ env.PUSH_QUAY && format('''quay.io/{0}:{1}''{2}', env.SLUG, env.TAG, (env.PUSH_DOCKER_HUB) && ',' || '') || '' }} ${{ env.PUSH_DOCKER_HUB && format('''docker.io/{0}:{1}''{2}', env.SLUG, env.TAG, ('') && ',' || '') || '' }} ) - name: Build and push ${{ env.DISTRO }}:${{ env.TAG }} shell: buildah unshare pwsh "{0}" env: RUNNER: runner TAG: runner-${{ matrix.TAG }}-${{ env.PART_TAG }} TYPE: runner FROM_IMAGE: ghcr.io/${{ env.SLUG }} FROM_TAG: act-${{ matrix.TAG }}-${{ env.PART_TAG }} BUILD_TAG_VERSION: ${{ env.PART_TAG }} BUILD_TAG: runner-${{ matrix.TAG }} run: | ./build.ps1 ` -push ` -tags @( ${{ env.PUSH_GHCR && format('''ghcr.io/{0}:{1}''{2}', env.SLUG, env.TAG, (env.PUSH_QUAY || env.PUSH_DOCKER_HUB) && ',' || '') || '' }} ${{ env.PUSH_QUAY && format('''quay.io/{0}:{1}''{2}', env.SLUG, env.TAG, (env.PUSH_DOCKER_HUB) && ',' || '') || '' }} ${{ env.PUSH_DOCKER_HUB && format('''docker.io/{0}:{1}''{2}', env.SLUG, env.TAG, ('') && ',' || '') || '' }} ) - if: ${{ !env.SKIP_TEST }} uses: actions/setup-go@v3 with: go-version: '^1.16' - if: ${{ !env.SKIP_TEST }} uses: actions/checkout@v3 with: repository: nektos/act path: act - if: ${{ !env.SKIP_TEST }} env: ACT_TEST_IMAGE: ghcr.io/${{ env.SLUG }}:act-${{ matrix.TAG }}-${{ env.PART_TAG }} run: | cd act/ go test ./... - name: Build and push ${{ env.DISTRO }}:${{ env.TAG }} if: ${{ ( github.event_name != 'pull_request' && github.event_name != 'push' && !env.ACT ) }} shell: buildah unshare pwsh "{0}" env: TAG: act-${{ matrix.TAG }} TYPE: act FROM_IMAGE: buildpack-deps FROM_TAG: ${{ env.RELEASE_TAG }} BUILD_TAG_VERSION: ${{ env.PART_TAG }} BUILD_TAG: act-${{ matrix.TAG }} run: | ./build.ps1 ` ${{ '-push' || '' }} ` -tags @( ${{ env.PUSH_GHCR && format('''ghcr.io/{0}:{1}''{2}', env.SLUG, env.TAG, (env.PUSH_QUAY || env.PUSH_DOCKER_HUB) && ',' || '') || '' }} ${{ env.PUSH_QUAY && format('''quay.io/{0}:{1}''{2}', env.SLUG, env.TAG, (env.PUSH_DOCKER_HUB) && ',' || '') || '' }} ${{ env.PUSH_DOCKER_HUB && format('''docker.io/{0}:{1}''{2}', env.SLUG, env.TAG, ('') && ',' || '') || '' }} ) - name: Build and push ${{ env.DISTRO }}:${{ env.TAG }} if: ${{ ( github.event_name != 'pull_request' && github.event_name != 'push' && !env.ACT ) }} shell: buildah unshare pwsh "{0}" env: RUNNER: runner TAG: runner-${{ matrix.TAG }} TYPE: runner FROM_IMAGE: ghcr.io/${{ env.SLUG }} FROM_TAG: act-${{ matrix.TAG }} BUILD_TAG_VERSION: ${{ env.PART_TAG }} BUILD_TAG: runner-${{ matrix.TAG }} run: | ./build.ps1 ` -push ` -tags @( ${{ env.PUSH_GHCR && format('''ghcr.io/{0}:{1}''{2}', env.SLUG, env.TAG, (env.PUSH_QUAY || env.PUSH_DOCKER_HUB) && ',' || '') || '' }} ${{ env.PUSH_QUAY && format('''quay.io/{0}:{1}''{2}', env.SLUG, env.TAG, (env.PUSH_DOCKER_HUB) && ',' || '') || '' }} ${{ env.PUSH_DOCKER_HUB && format('''docker.io/{0}:{1}''{2}', env.SLUG, env.TAG, ('') && ',' || '') || '' }} ) build-flavours: name: Build ${{ matrix.TYPE }}:${{ matrix.TAG }} runs-on: ubuntu-latest needs: [build-base] env: PLATFORMS: ${{ matrix.PLATFORMS }} BUILD_TAG: ${{ matrix.TYPE }}-${{ matrix.TAG }} TYPE: ${{ matrix.TYPE }} strategy: fail-fast: false max-parallel: 8 matrix: TAG: - latest - 22.04 - 20.04 PLATFORMS: - 'linux/amd64' TYPE: - go - js - pwsh - rust - dotnet - custom steps: - name: Cleanup run: | docker rmi -f $(docker images -aq) || : rm -r "$RUNNER_TOOL_CACHE" || : rm -r "$RUNNER_TOOLSDIRECTORY" || : rm -r "$AGENT_TOOLSDIRECTORY" || : shell: bash - name: Force SLUG to lowercase uses: actions/github-script@v6 with: github-token: n/a script: | core.exportVariable('SLUG', process.env.SLUG.toLowerCase()); - name: Login to GitHub Container Registry if: env.PUSH_GHCR run: exec buildah login -u ${{ github.actor }} -p ${{ github.token }} ghcr.io - name: Login to Quay if: env.PUSH_QUAY run: exec buildah login -u ${{ secrets.QUAY_USER }} -p ${{ secrets.QUAY_TOKEN }} quay.io - name: Login to Docker Hub if: env.PUSH_DOCKER_HUB run: exec buildah login -u ${{ secrets.DOCKER_USER }} -p ${{ secrets.DOCKER_TOKEN }} docker.io - name: Print tag run: | if ${{ ( github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' ) }} ; then echo "PART_TAG=$(date +%Y%m%d)" | tee -a "$GITHUB_ENV" else echo "PART_TAG=dev" | tee -a "$GITHUB_ENV" fi - name: Set Ubuntu version to RELEASE run: | if [ "latest" = "${{ matrix.TAG }}" ]; then echo "RELEASE_TAG=$(lsb_release -rs)" | tee -a "$GITHUB_ENV" else echo "RELEASE_TAG=${{ matrix.TAG }}" | tee -a "$GITHUB_ENV" fi - name: Set up QEMU uses: docker/setup-qemu-action@v2 - uses: actions/checkout@v3 - name: Build and push ${{ env.DISTRO }}:${{ env.TAG }} shell: buildah unshare pwsh "{0}" env: TAG: ${{ matrix.TYPE }}-${{ matrix.TAG }}-${{ env.PART_TAG }} FROM_IMAGE: ghcr.io/${{ env.SLUG }} FROM_TAG: act-${{ matrix.TAG }}-${{ env.PART_TAG }} BUILD_TAG_VERSION: ${{ env.PART_TAG }} run: | ./build.ps1 ` -push ` -tags @( ${{ env.PUSH_GHCR && format('''ghcr.io/{0}:{1}''{2}', env.SLUG, env.TAG, (env.PUSH_QUAY || env.PUSH_DOCKER_HUB) && ',' || '') || '' }} ${{ env.PUSH_QUAY && format('''quay.io/{0}:{1}''{2}', env.SLUG, env.TAG, (env.PUSH_DOCKER_HUB) && ',' || '') || '' }} ${{ env.PUSH_DOCKER_HUB && format('''docker.io/{0}:{1}''{2}', env.SLUG, env.TAG, ('') && ',' || '') || '' }} ) - name: Build and push ${{ env.DISTRO }}:${{ env.TAG }} shell: buildah unshare pwsh "{0}" if: ${{ ( github.event_name != 'pull_request' && github.event_name != 'push' && !env.ACT ) }} env: TAG: ${{ matrix.TYPE }}-${{ matrix.TAG }} FROM_IMAGE: ghcr.io/${{ env.SLUG }} FROM_TAG: act-${{ matrix.TAG }}-${{ env.PART_TAG }} BUILD_TAG_VERSION: ${{ env.PART_TAG }} run: | ./build.ps1 ` -push ` -tags @( ${{ env.PUSH_GHCR && format('''ghcr.io/{0}:{1}''{2}', env.SLUG, env.TAG, (env.PUSH_QUAY || env.PUSH_DOCKER_HUB) && ',' || '') || '' }} ${{ env.PUSH_QUAY && format('''quay.io/{0}:{1}''{2}', env.SLUG, env.TAG, (env.PUSH_DOCKER_HUB) && ',' || '') || '' }} ${{ env.PUSH_DOCKER_HUB && format('''docker.io/{0}:{1}''{2}', env.SLUG, env.TAG, ('') && ',' || '') || '' }} )