diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0015bc1..8be078a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,7 +37,7 @@ jobs: # # Build native image for integration tests # - build: + build-amd64: runs-on: ubuntu-latest steps: - name: Checkout @@ -104,7 +104,7 @@ jobs: # Perform integration tests # test: - needs: [build, build-tester] + needs: [build-amd64, build-tester] strategy: matrix: dbtype: ["postgres", "sqlite", "mariadb", "cockroachdb"] @@ -130,12 +130,76 @@ jobs: up-flags: "--abort-on-container-exit" down-flags: "--volumes" # + # Build arm64 image + # Don't run this for pull requests + # Only push to buildcache and let release job push to registry + # + build-arm64: + if: ${{ github.event_name != 'pull_request' }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Log in to the Github Container registry + uses: docker/login-action@v2 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and cache Docker image + uses: docker/build-push-action@v4 + with: + context: . + platforms: linux/arm64 + cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache-arm64 + cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache-arm64,mode=max + # + # Build arm/v7 image + # Don't run this for pull requests + # Only push to buildcache and let release job push to registry + # + build-armv7: + if: ${{ github.event_name != 'pull_request' }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Log in to the Github Container registry + uses: docker/login-action@v2 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and cache Docker image + uses: docker/build-push-action@v4 + with: + context: . + platforms: linux/arm/v7 + cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache-armv7 + cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache-armv7,mode=max + # # Release image if tests pass # Don't run this for pull requests # release: if: ${{ github.event_name != 'pull_request' }} - needs: test + needs: [test, build-amd64, build-arm64, build-armv7] runs-on: ubuntu-latest steps: - name: Checkout @@ -166,7 +230,7 @@ jobs: type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}} - - name: Build and push Docker image + - name: Build and push Docker images uses: docker/build-push-action@v4 with: context: . @@ -178,29 +242,3 @@ jobs: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache-amd64 type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache-arm64 type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache-armv7 - - # Workaround for multiple cache-to's not really working - # See https://github.com/docker/buildx/discussions/1382 - - name: Cache amd64 build - uses: docker/build-push-action@v4 - with: - context: . - platforms: linux/amd64 - cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache-amd64 - cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache-amd64,mode=max - - - name: Cache arm64 build - uses: docker/build-push-action@v4 - with: - context: . - platforms: linux/arm64 - cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache-arm64 - cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache-arm64,mode=max - - - name: Cache armv7 build - uses: docker/build-push-action@v4 - with: - context: . - platforms: linux/arm/v7 - cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache-armv7 - cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache-armv7,mode=max