Auto-publish Arm64 images when emscripten-releases-tags.json is updated (#1231) Add job to conditionally build arm64 images when emscripten-releases-tags.json updated
diff --git a/.circleci/config.yml b/.circleci/config.yml index bc573c1..3b44851 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml
@@ -27,7 +27,7 @@ resource_class: macos.m1.medium.gen1 linux_arm64: machine: - image: ubuntu-2004:202101-01 + image: ubuntu-2004:2023.07.1 resource_class: arm.medium commands: @@ -173,7 +173,7 @@ $env:SYSTEM_FLAG="--system" test/test_path_preservation.ps1 - build-docker-image: + build-docker-image-x64: executor: bionic steps: - checkout @@ -189,7 +189,7 @@ name: test command: make -C ./docker version=tot test - publish-docker-image: + publish-docker-image-x64: executor: bionic steps: - checkout @@ -209,6 +209,53 @@ docker login -u "$DOCKER_USER" -p "$DOCKER_PASS" make -C ./docker version=${CIRCLE_TAG} alias=latest push + publish-docker-image-arm64: + executor: linux_arm64 + steps: + - checkout + - run: + name: check if emscripten-releases-tags.json has changed + command: | + CHANGED_FILES=$(git diff --name-only <<pipeline.git.base_revision>>..<<pipeline.git.revision>>) + if [[ ! $CHANGED_FILES =~ "emscripten-releases-tags.json" ]]; then + echo "emscripten-releases-tags.json has not changed, skipping build and publish" + circleci-agent step halt + fi + - run: + name: extract latest emscripten arm64 linux version + command: | + ARM64_VERSION=$(grep -oP '(?<="latest-arm64-linux": ")[^"]*' emscripten-releases-tags.json) + ARM64_IMAGE_TAG=${ARM64_VERSION}-arm64 + echo "export ARM64_VERSION=$ARM64_VERSION" >> $BASH_ENV + echo "export ARM64_IMAGE_TAG=$ARM64_IMAGE_TAG" >> $BASH_ENV + echo "ARM64_VERSION=$ARM64_VERSION" + echo "ARM64_IMAGE_TAG=$ARM64_IMAGE_TAG" + - run: + name: check if docker image already exists + command: | + if [ -z "$ARM64_VERSION" ]; then + echo "ARM64_VERSION is empty, skipping publish" + circleci-agent step halt + exit 0 + fi + DOCKER_IMAGE_EXISTS=$(curl -s -o /dev/null -w "%{http_code}" https://hub.docker.com/v2/repositories/emscripten/emsdk/tags/$ARM64_IMAGE_TAG) + if [ "$DOCKER_IMAGE_EXISTS" = "200" ]; then + echo "Docker image: $ARM64_VERSION" + echo "Docker image already exists, skipping build and publish" + circleci-agent step halt + fi + - run: + name: build + command: make -C ./docker version=${ARM64_VERSION} build + - run: + name: test + command: make -C ./docker version=${ARM64_VERSION} test + - run: + name: push image + command: | + docker login -u "$DOCKER_USER" -p "$DOCKER_PASS" + make -C ./docker version=${ARM64_VERSION} alias=${ARM64_IMAGE_TAG} only_alias=true push + test-bazel-linux: executor: bionic steps: @@ -284,13 +331,17 @@ - test-windows build-docker-image: jobs: - - build-docker-image - - publish-docker-image: + - build-docker-image-x64 + - publish-docker-image-x64: filters: branches: ignore: /.*/ tags: only: /.*/ + - publish-docker-image-arm64: + filters: + branches: + only: main test-bazel-linux: jobs: - test-bazel-linux
diff --git a/docker/Makefile b/docker/Makefile index 8e84b2e..22bea0e 100644 --- a/docker/Makefile +++ b/docker/Makefile
@@ -4,6 +4,7 @@ # i.e.: 1.39.18 version = alias = +only_alias = image_name ?= emscripten/emsdk @@ -21,7 +22,9 @@ docker run --rm -u `id -u`:`id -g` -w /emsdk/docker --net=host --entrypoint /bin/bash ${image_name}:${version} $< push: .TEST +ifndef only_alias docker push ${image_name}:${version} +endif ifdef alias docker tag ${image_name}:${version} ${image_name}:${alias} docker push ${image_name}:${alias}