diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index b8c8fd90e..f23ea2770 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -1,8 +1,10 @@ name: docker on: - schedule: - - cron: '30 18 * * *' + # Temporary - change back to schedule once it is confirmed to work + pull_request: +# schedule: +# - cron: '30 18 * * *' env: CERBERUS_IMAGE_ID: ghcr.io/rems-project/cerberus/cn:release @@ -20,7 +22,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - platform: [linux/amd64, linux/arm64] + platform: [linux-amd64, linux-arm64] permissions: packages: write contents: read @@ -44,7 +46,34 @@ jobs: run: | echo "Building ${{env.CERBERUS_IMAGE_ID}}" PLATFORM=${{ matrix.platform }} make -f Makefile_docker release_cn - docker tag cn:release ${{env.CERBERUS_IMAGE_ID}} - + docker tag cn:release ${{env.CERBERUS_IMAGE_ID}}-${{ matrix.platform }} - name: Push the Docker image - run: docker push ${{env.CERBERUS_IMAGE_ID}} + run: docker push ${{env.CERBERUS_IMAGE_ID}}-${{ matrix.platform }} + + combine-docker: + runs-on: docker:latest + needs: deploy-docker + permissions: + packages: write + contents: read + attestations: write + id-token: write + steps: + - uses: actions/checkout@v4 + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Pull images + run: | + docker pull ${{env.CERBERUS_IMAGE_ID}}-linux-amd64 + docker pull ${{env.CERBERUS_IMAGE_ID}}-linux-arm64 + - name: Create manifest + run: | + docker manifest create ${{env.CERBERUS_IMAGE_ID}} ${{env.CERBERUS_IMAGE_ID}}-linux-amd64 ${{env.CERBERUS_IMAGE_ID}}-linux-arm64 + docker manifest inspect ${{env.CERBERUS_IMAGE_ID}} + - name: Push the Docker image + run: docker manifest push ${{env.CERBERUS_IMAGE_ID}} diff --git a/Makefile_docker b/Makefile_docker index f809b44a2..50a9136db 100644 --- a/Makefile_docker +++ b/Makefile_docker @@ -1,22 +1,33 @@ .PHONY: all release dev-env deps -PLATFORM ?= linux/amd64 +# This is needed because docker tags can't have `/` in the name +PLATFORM ?= linux-amd64 +ifeq ($(PLATFORM),linux-amd64) +DOCKER_PLATFORM=linux/amd64 +else +ifeq ($(PLATFORM),linux-arm64) +DOCKER_PLATFORM=linux/arm64 +else +$(error "Unknown platform!") +endif +endif + $(info Building for platform $(PLATFORM)) all: @echo 'targets: deps|release|dev-env' deps : - docker build --platform $(PLATFORM) --tag cerberus:deps -f Dockerfile.deps . + docker build --platform $(DOCKER_PLATFORM) --tag cerberus:deps -f Dockerfile.deps . release: deps - docker build --platform $(PLATFORM) --tag cerberus:release -f Dockerfile.release . + docker build --platform $(DOCKER_PLATFORM) --tag cerberus:release -f Dockerfile.release . @echo 'for example: docker run --volume `PWD`:/data/ cerberus:release cerberus tests/tcc/00_assignment.c --pp=core' release_cn: deps - docker build --platform $(PLATFORM) --tag cn:release -f Dockerfile.release . + docker build --platform $(DOCKER_PLATFORM) --tag cn:release -f Dockerfile.release . @echo 'for example: docker run --volume `PWD`:/data/ cn:release cerberus tests/tcc/00_assignment.c --pp=core' dev-env: deps - docker build --platform $(PLATFORM) --tag cerberus:dev-env -f Dockerfile.dev-env . + docker build --platform $(DOCKER_PLATFORM) --tag cerberus:dev-env -f Dockerfile.dev-env . @echo 'for example: docker run -ti --volume `PWD`:/home/user1/cerberus/ cerberus:dev-env'