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' BUILD_REF: ${{ github.sha }} SKIP_TEST: false 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/armhf TAG: - latest - 22.04 - 20.04 steps: - name: Login to GitHub Container Registry if: ${{ github.repository_owner == github.actor }} id: ghcr uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Quay if: ${{ github.repository_owner == github.actor }} id: quay uses: docker/login-action@v2 with: registry: quay.io username: ${{ secrets.QUAY_USER }} password: ${{ secrets.QUAY_TOKEN }} - name: Login to Docker Hub if: ${{ github.repository_owner == github.actor }} id: dckr uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_USER }} password: ${{ secrets.DOCKER_TOKEN }} - 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 # setup buildkit ourselves so it doesn't create a new one each time act is executed - run: | docker buildx create \ --use \ --name image-builder \ --buildkitd-flags '--allow-insecure-entitlement network.host' \ --driver docker-container \ --driver-opt "env.BUILDKIT_STEP_LOG_MAX_SIZE=50000000" \ --platform "${{ env.PLATFORMS }}" - uses: actions/checkout@v3 - name: Build and push ${{ env.DISTRO }}:${{ env.TAG }} shell: pwsh 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 @( 'ghcr.io/${{ env.SLUG }}:${{ env.TAG }}', 'quay.io/${{ env.SLUG }}:${{ env.TAG }}', 'docker.io/${{ env.SLUG }}:${{ env.TAG }}' ) - name: Build and push ${{ env.DISTRO }}:${{ env.TAG }} shell: pwsh 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 @( 'ghcr.io/${{ env.SLUG }}:${{ env.TAG }}', 'quay.io/${{ env.SLUG }}:${{ env.TAG }}', 'docker.io/${{ 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: pwsh 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 @( 'ghcr.io/${{ env.SLUG }}:${{ env.TAG }}', 'quay.io/${{ env.SLUG }}:${{ env.TAG }}', 'docker.io/${{ 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: pwsh 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 @( 'ghcr.io/${{ env.SLUG }}:${{ env.TAG }}', 'quay.io/${{ env.SLUG }}:${{ env.TAG }}', 'docker.io/${{ 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: Login to GitHub Container Registry if: ${{ github.repository_owner == github.actor }} id: ghcr uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Quay if: ${{ github.repository_owner == github.actor }} id: quay uses: docker/login-action@v2 with: registry: quay.io username: ${{ secrets.QUAY_USER }} password: ${{ secrets.QUAY_TOKEN }} - name: Login to Docker Hub if: ${{ github.repository_owner == github.actor }} id: dckr uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_USER }} password: ${{ secrets.DOCKER_TOKEN }} - 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 - run: | docker buildx create \ --use \ --name image-builder \ --buildkitd-flags '--allow-insecure-entitlement network.host' \ --driver docker-container \ --driver-opt "env.BUILDKIT_STEP_LOG_MAX_SIZE=50000000" \ --platform "${{ env.PLATFORMS }}" - uses: actions/checkout@v3 - name: Build and push ${{ env.DISTRO }}:${{ env.TAG }} shell: pwsh 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 @( 'ghcr.io/${{ env.SLUG }}:${{ env.TAG }}', 'quay.io/${{ env.SLUG }}:${{ env.TAG }}', 'docker.io/${{ env.SLUG }}:${{ env.TAG }}' ) - name: Build and push ${{ env.DISTRO }}:${{ env.TAG }} shell: pwsh 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 @( 'ghcr.io/${{ env.SLUG }}:${{ env.TAG }}', 'quay.io/${{ env.SLUG }}:${{ env.TAG }}', 'docker.io/${{ env.SLUG }}:${{ env.TAG }}' )