diff --git a/.github/workflows/ubuntu-images.yaml b/.github/workflows/ubuntu-images.yaml index c9656d0e4..bc066870f 100644 --- a/.github/workflows/ubuntu-images.yaml +++ b/.github/workflows/ubuntu-images.yaml @@ -1,6 +1,14 @@ -name: "Images: Build and push Ubuntu toolbx images" +name: "Ubuntu: Build and push ubuntu-toolbox images" + +permissions: read-all on: + pull_request: + branches: + - main + paths: + - images/ubuntu/** + - .github/workflows/ubuntu-images.yaml push: branches: - main @@ -10,14 +18,22 @@ on: schedule: - cron: '0 0 * * MON' -# Prevent multiple workflow runs from racing -concurrency: ${{ github.workflow }} - env: - latest_release: '22.04' + distro: 'ubuntu' + latest_release: '23.10' + platforms: 'linux/amd64, linux/arm64' + registry: 'quay.io/toolbx' + username: 'toolbx+github' + +# Prevent multiple workflow runs from racing to ensure that pushes are made +# sequentially for the main branch. Also cancel in progress workflow runs for +# pull requests only. +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} jobs: - build-and-push-images: + build-push-images: strategy: matrix: release: ['16.04', '18.04', '20.04', '22.04', '23.04', '23.10'] @@ -25,37 +41,56 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 + - name: Set up QEMU for multi-arch builds + shell: bash + run: | + sudo apt update + sudo apt install qemu-user-static - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 + - name: Build container image + uses: redhat-actions/buildah-build@v2 + if: env.latest_release != matrix.release + with: + platforms: ${{ env.platforms }} + context: images/${{ env.distro }}/${{ matrix.release }} + image: ${{ env.distro }}-toolbox + tags: ${{ matrix.release }} + containerfiles: images/${{ env.distro }}/${{ matrix.release }}/Containerfile + layers: false + oci: true - - name: Login to Quay.io - uses: docker/login-action@v2 + - name: Build container image (latest tag) + uses: redhat-actions/buildah-build@v2 + if: env.latest_release == matrix.release with: - registry: quay.io - username: 'toolbx+github' - password: ${{ secrets.QUAY_ROBOT_TOKEN }} + platforms: ${{ env.platforms }} + context: images/${{ env.distro }}/${{ matrix.release }} + image: ${{ env.distro }}-toolbox + tags: ${{ matrix.release }} latest + containerfiles: images/${{ env.distro }}/${{ matrix.release }}/Containerfile + layers: false + oci: true - - name: Build and push Ubuntu ${{ matrix.release }} toolbox image - uses: docker/build-push-action@v3 + - name: Push to Container Registry + uses: redhat-actions/push-to-registry@v2 + id: push + if: (github.event_name == 'push' || github.event_name == 'schedule') && github.ref == 'refs/heads/main' && env.latest_release != matrix.release with: - context: images/ubuntu/${{ matrix.release }} - file: images/ubuntu/${{ matrix.release }}/Containerfile - platforms: linux/amd64,linux/arm64,linux/ppc64le - push: true - no-cache: true - tags: quay.io/toolbx/ubuntu-toolbox:${{ matrix.release }} - - - name: Push latest tag - if: env.latest_release == matrix.release - uses: docker/build-push-action@v3 + username: ${{ env.username }} + password: ${{ secrets.QUAY_ROBOT_TOKEN }} + image: ${{ env.distro }}-toolbox + registry: ${{ env.registry }} + tags: ${{ matrix.release }} + + - name: Push to Container Registry (latest tag) + uses: redhat-actions/push-to-registry@v2 + id: push-latest + if: (github.event_name == 'push' || github.event_name == 'schedule') && github.ref == 'refs/heads/main' && env.latest_release == matrix.release with: - context: images/ubuntu/${{ matrix.release }} - file: images/ubuntu/${{ matrix.release }}/Containerfile - platforms: linux/amd64,linux/arm64,linux/ppc64le - push: true - tags: quay.io/toolbx/ubuntu-toolbox:latest + username: ${{ env.username }} + password: ${{ secrets.QUAY_ROBOT_TOKEN }} + image: ${{ env.distro }}-toolbox + registry: ${{ env.registry }} + tags: ${{ matrix.release }} latest