diff --git a/.github/workflows/docker-image-upload.yml b/.github/workflows/docker-image-upload.yml index 70f863d..2f385b6 100644 --- a/.github/workflows/docker-image-upload.yml +++ b/.github/workflows/docker-image-upload.yml @@ -9,10 +9,19 @@ on: - 'master' jobs: - build-su2: + date-tag: runs-on: ubuntu-latest outputs: date_tag: ${{ steps.vars.outputs.date_tag }} + steps: + - name: Set variables + id: vars + run: echo "::set-output name=date_tag::$(date +%y%m%d-%H%M)" + + build-su2: + needs: [date-tag] + if: ${{ always() && !(contains(needs.*.result, 'failure')) }} + runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 @@ -32,21 +41,68 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Set variables - id: vars - run: echo "::set-output name=date_tag::$(date +%y%m%d-%H%M)" - - name: Docker Buildx Create run: docker buildx create --use - name: Build and push build-su2 - run: docker buildx build --platform=linux/amd64 --platform=linux/arm64 -t ghcr.io/${{ github.repository_owner }}/su2/build-su2:${{ steps.vars.outputs.date_tag }} --push ./build/ + run: docker buildx build --platform=linux/amd64 --platform=linux/arm64 -t ghcr.io/${{ github.repository_owner }}/su2/build-su2:${{ needs.date-tag.outputs.date_tag }} --push ./build/ + + build-su2-tsan-platforms: + needs: [date-tag] + if: ${{ always() && !(contains(needs.*.result, 'failure')) }} + runs-on: ubuntu-latest + strategy: + fail-fast: false, + matrix: + platform: [amd64, arm64] + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + with: + platforms: arm64 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Login to Github Docker Registry + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Docker Buildx Create + run: docker buildx create --use + + - name: Build and push single-platform build-su2-tsan + run: docker buildx build --platform=linux/${{ matrix.platform }} -t ghcr.io/${{ github.repository_owner }}/su2/build-su2-tsan-${{ matrix.platform }}:${{ needs.date-tag.outputs.date_tag }} --push --file ./build/Dockerfile.tsan ./build/ + + build-su2-tsan: + needs: [date-tag, build-su2-tsan-platforms] + if: ${{ always() && !(contains(needs.*.result, 'failure')) }} + runs-on: ubuntu-latest + steps: + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Login to Github Docker Registry + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Docker Buildx Create + run: docker buildx create --use - - name: Build and push build-su2-tsan - run: docker buildx build --platform=linux/amd64 --platform=linux/arm64 -t ghcr.io/${{ github.repository_owner }}/su2/build-su2-tsan:${{ steps.vars.outputs.date_tag }} --push --file ./build/Dockerfile.tsan ./build/ + - name: Merge single-platform build-su2-tsan images + run: docker buildx imagetools create -t ghcr.io/${{ github.repository_owner }}/su2/build-su2-tsan:${{ needs.date-tag.outputs.date_tag }} ghcr.io/${{ github.repository_owner }}/su2/build-su2-tsan-amd64:${{ needs.date-tag.outputs.date_tag }} ghcr.io/${{ github.repository_owner }}/su2/build-su2-tsan-arm64:${{ needs.date-tag.outputs.date_tag }} test-su2: - needs: [build-su2] + needs: [date-tag, build-su2, build-su2-tsan] if: ${{ always() && !(contains(needs.*.result, 'failure')) }} runs-on: ubuntu-latest steps: @@ -72,13 +128,13 @@ jobs: run: docker buildx create --use - name: Build and push test-su2 - run: docker buildx build --platform=linux/amd64 --platform=linux/arm64 --build-arg BASE_IMAGE=ghcr.io/${{ github.repository_owner }}/su2/build-su2:${{ needs.build-su2.outputs.date_tag }} -t ghcr.io/${{ github.repository_owner }}/su2/test-su2:${{ needs.build-su2.outputs.date_tag }} --push ./test/ + run: docker buildx build --platform=linux/amd64 --platform=linux/arm64 --build-arg BASE_IMAGE=ghcr.io/${{ github.repository_owner }}/su2/build-su2:${{ needs.date-tag.outputs.date_tag }} -t ghcr.io/${{ github.repository_owner }}/su2/test-su2:${{ needs.date-tag.outputs.date_tag }} --push ./test/ - name: Build and push test-su2-tsan - run: docker buildx build --platform=linux/amd64 --platform=linux/arm64 --build-arg BASE_IMAGE=ghcr.io/${{ github.repository_owner }}/su2/build-su2-tsan:${{ needs.build-su2.outputs.date_tag }} -t ghcr.io/${{ github.repository_owner }}/su2/test-su2-tsan:${{ needs.build-su2.outputs.date_tag }} --push ./test/ + run: docker buildx build --platform=linux/amd64 --platform=linux/arm64 --build-arg BASE_IMAGE=ghcr.io/${{ github.repository_owner }}/su2/build-su2-tsan:${{ needs.date-tag.outputs.date_tag }} -t ghcr.io/${{ github.repository_owner }}/su2/test-su2-tsan:${{ needs.date-tag.outputs.date_tag }} --push ./test/ cross-build-su2-mac: - needs: [build-su2] + needs: [date-tag, build-su2] if: ${{ always() && !(contains(needs.*.result, 'failure')) }} runs-on: ubuntu-latest steps: @@ -104,7 +160,7 @@ jobs: run: docker buildx create --use - name: Build and push build-su2-cross - run: docker buildx build --platform=linux/amd64 --platform=linux/arm64 --build-arg BASE_IMAGE=ghcr.io/${{ github.repository_owner }}/su2/build-su2:${{ needs.build-su2.outputs.date_tag }} -t ghcr.io/${{ github.repository_owner }}/su2/build-su2-cross-stage1:${{ needs.build-su2.outputs.date_tag }} --push --file ./build_cross/Dockerfile.stage1 ./build_cross/ + run: docker buildx build --platform=linux/amd64 --platform=linux/arm64 --build-arg BASE_IMAGE=ghcr.io/${{ github.repository_owner }}/su2/build-su2:${{ needs.date-tag.outputs.date_tag }} -t ghcr.io/${{ github.repository_owner }}/su2/build-su2-cross-stage1:${{ needs.date-tag.outputs.date_tag }} --push --file ./build_cross/Dockerfile.stage1 ./build_cross/ cross-build-su2-linux: needs: [build-su2, cross-build-su2-mac] @@ -133,4 +189,4 @@ jobs: run: docker buildx create --use - name: Build and push build-su2-cross - run: docker buildx build --platform=linux/amd64 --platform=linux/arm64 --build-arg BASE_IMAGE=ghcr.io/${{ github.repository_owner }}/su2/build-su2-cross-stage1:${{ needs.build-su2.outputs.date_tag }} -t ghcr.io/${{ github.repository_owner }}/su2/build-su2-cross:${{ needs.build-su2.outputs.date_tag }} --push --file ./build_cross/Dockerfile.stage2 ./build_cross/ + run: docker buildx build --platform=linux/amd64 --platform=linux/arm64 --build-arg BASE_IMAGE=ghcr.io/${{ github.repository_owner }}/su2/build-su2-cross-stage1:${{ needs.date-tag.outputs.date_tag }} -t ghcr.io/${{ github.repository_owner }}/su2/build-su2-cross:${{ needs.date-tag.outputs.date_tag }} --push --file ./build_cross/Dockerfile.stage2 ./build_cross/