From b4ce3b76407bfd59795f73a5eb02c3ac114a62d8 Mon Sep 17 00:00:00 2001 From: Nick Hudson Date: Wed, 16 Oct 2024 18:52:25 -0500 Subject: [PATCH] generate docker manifests (#783) Co-authored-by: Adam Hendel --- .github/workflows/builder-images.yml | 183 +++++++++++++++++++++++---- 1 file changed, 158 insertions(+), 25 deletions(-) diff --git a/.github/workflows/builder-images.yml b/.github/workflows/builder-images.yml index 9ff8b997..adaf1836 100644 --- a/.github/workflows/builder-images.yml +++ b/.github/workflows/builder-images.yml @@ -15,7 +15,94 @@ on: - ".github/workflows/builder-images.yml" jobs: + build_and_push_c_builders: + name: Build and push C builder images + runs-on: + - self-hosted + - dind + - ${{ matrix.arch == 'amd64' && 'large-8x8' || 'large-8x8-arm64' }} + strategy: + fail-fast: false + matrix: + arch: + - "arm64" + - "amd64" + pg_version: + - "14" + - "15" + - "16" + steps: + - name: Check out the repo + uses: actions/checkout@v4 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Login to Quay.io + uses: docker/login-action@v3 + with: + registry: quay.io + username: ${{ secrets.QUAY_USER }} + password: ${{ secrets.QUAY_PASSWORD }} + - name: Build and push + run: | + set -xe + docker build \ + --build-arg PG_VERSION=${{ matrix.pg_version }} \ + --platform linux/${{ matrix.arch }} \ + --tag quay.io/coredb/c-builder:pg${{ matrix.pg_version }}-${{ matrix.arch }} cli/images/c-builder + if [ "${BRANCH_NAME}" == "main" ]; then + BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD) + docker push quay.io/coredb/c-builder:pg${{ matrix.pg_version }}-${{ matrix.arch }} + fi + + create_and_push_c_manifests: + needs: build_and_push_c_builders + name: Build and push c-builder manifests + runs-on: + - self-hosted + - dind + - large-8x8 + strategy: + matrix: + pg_version: ["14", "15", "16"] + steps: + - name: Check out the repo + uses: actions/checkout@v4 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Login to Quay.io + uses: docker/login-action@v3 + with: + registry: quay.io + username: ${{ secrets.QUAY_USER }} + password: ${{ secrets.QUAY_PASSWORD }} + + - name: Create and push manifest + run: | + set -xe + # Create the manifest + docker manifest create \ + quay.io/coredb/c-builder:pg${{ matrix.pg_version }} \ + quay.io/coredb/c-builder:pg${{ matrix.pg_version }}-amd64 \ + quay.io/coredb/c-builder:pg${{ matrix.pg_version }}-arm64 + + # Annotate the manifest with architecture and OS information + docker manifest annotate quay.io/coredb/c-builder:pg${{ matrix.pg_version }} \ + quay.io/coredb/c-builder:pg${{ matrix.pg_version }}-amd64 \ + --os linux --arch amd64 + + docker manifest annotate quay.io/coredb/c-builder:pg${{ matrix.pg_version }} \ + quay.io/coredb/c-builder:pg${{ matrix.pg_version }}-arm64 \ + --os linux --arch arm64 + + # Push the manifest + BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD) + if [ "${BRANCH_NAME}" == "main" ]; then + docker manifest push quay.io/coredb/c-builder:pg${{ matrix.pg_version }} + fi + build_and_push_pgrx_builders: + needs: + - create_and_push_c_manifests name: Build and push PGRX builder images runs-on: - self-hosted @@ -85,40 +172,76 @@ jobs: - name: Build and push run: | set -xe - BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD) - if [ "${BRANCH_NAME}" == "main" ]; then - PUSH_FLAG="--push" - fi - docker buildx build \ + docker build \ --build-arg PG_VERSION=${{ matrix.pg_version }} \ --build-arg PGRX_VERSION=${{ matrix.pgrx_version }} \ --platform linux/${{ matrix.arch }} \ - --tag quay.io/coredb/pgrx-builder:pg${{ matrix.pg_version }}-pgrx${{ matrix.pgrx_version }} \ - --pull ${PUSH_FLAG} cli/images/pgrx-builder + --tag quay.io/coredb/pgrx-builder:pg${{ matrix.pg_version }}-pgrx${{ matrix.pgrx_version }}-${{ matrix.arch }} cli/images/pgrx-builder - build_and_push_c_builders: - name: Build and push C builder images + BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD) + if [ "${BRANCH_NAME}" == "main" ]; then + docker push quay.io/coredb/pgrx-builder:pg${{ matrix.pg_version }}-pgrx${{ matrix.pgrx_version }}-${{ matrix.arch }} + fi + + + create_and_push_pgrx_manifests: + name: Build and push PGRX manifests + needs: + - build_and_push_pgrx_builders runs-on: - self-hosted - dind - - ${{ matrix.arch == 'amd64' && 'large-8x8' || 'large-8x8-arm64' }} + - large-8x8 strategy: fail-fast: false matrix: - arch: - - "arm64" - - "amd64" pg_version: - "14" - "15" - "16" + pgrx_version: + - "0.7.4" + - "0.8.0" + - "0.8.3" + - "0.8.4" + - "0.9.0" + - "0.9.1" + - "0.9.7" + - "0.9.8" + - "0.10.0" + - "0.10.1" + - "0.10.2" + - "0.11.0" + - "0.11.1" + - "0.11.2" + - "0.11.3" + - "0.11.4" + - "0.12.0" + - "0.12.1" + - "0.12.2" + - "0.12.3" + - "0.12.4" + - "0.12.5" + exclude: + - pg_version: "16" + pgrx_version: "0.7.4" + - pg_version: "16" + pgrx_version: "0.8.0" + - pg_version: "16" + pgrx_version: "0.8.3" + - pg_version: "16" + pgrx_version: "0.8.4" + - pg_version: "16" + pgrx_version: "0.9.0" + - pg_version: "16" + pgrx_version: "0.9.1" + - pg_version: "16" + pgrx_version: "0.9.7" + - pg_version: "16" + pgrx_version: "0.9.8" steps: - name: Check out the repo uses: actions/checkout@v4 - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - with: - image: quay.io/coredb/binfmt:latest - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to Quay.io @@ -127,16 +250,26 @@ jobs: registry: quay.io username: ${{ secrets.QUAY_USER }} password: ${{ secrets.QUAY_PASSWORD }} - - name: Build and push + - name: Create and push manifest run: | set -xe + # Create the manifest + docker manifest create \ + quay.io/coredb/pgrx-builder:pg${{ matrix.pg_version }}-pgrx${{ matrix.pgrx_version }} \ + --amend quay.io/coredb/pgrx-builder:pg${{ matrix.pg_version }}-pgrx${{ matrix.pgrx_version }}-amd64 \ + --amend quay.io/coredb/pgrx-builder:pg${{ matrix.pg_version }}-pgrx${{ matrix.pgrx_version }}-arm64 + + # Annotate the manifest with architecture and OS information + docker manifest annotate quay.io/coredb/pgrx-builder:pg${{ matrix.pg_version }}-pgrx${{ matrix.pgrx_version }} \ + quay.io/coredb/pgrx-builder:pg${{ matrix.pg_version }}-pgrx${{ matrix.pgrx_version }}-amd64 \ + --os linux --arch amd64 + + docker manifest annotate quay.io/coredb/pgrx-builder:pg${{ matrix.pg_version }}-pgrx${{ matrix.pgrx_version }} \ + quay.io/coredb/pgrx-builder:pg${{ matrix.pg_version }}-pgrx${{ matrix.pgrx_version }}-arm64 \ + --os linux --arch arm64 + + # Push the manifest BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD) - PUSH_FLAG="" if [ "${BRANCH_NAME}" == "main" ]; then - PUSH_FLAG="--push" + docker manifest push quay.io/coredb/pgrx-builder:pg${{ matrix.pg_version }}-pgrx${{ matrix.pgrx_version }} fi - docker buildx build \ - --build-arg PG_VERSION=${{ matrix.pg_version }} \ - --platform linux/${{ matrix.arch }} \ - --tag quay.io/coredb/c-builder:pg${{ matrix.pg_version }} \ - --pull ${PUSH_FLAG} cli/images/c-builder