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
This commit is contained in:
Jamie
2023-12-04 14:11:09 +09:00
committed by GitHub
parent e2627e265d
commit b54a6b662f
2 changed files with 59 additions and 5 deletions

View File

@@ -27,7 +27,7 @@ executors:
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 @@ jobs:
$env:SYSTEM_FLAG="--system"
test/test_path_preservation.ps1
build-docker-image:
build-docker-image-x64:
executor: bionic
steps:
- checkout
@@ -189,7 +189,7 @@ jobs:
name: test
command: make -C ./docker version=tot test
publish-docker-image:
publish-docker-image-x64:
executor: bionic
steps:
- checkout
@@ -209,6 +209,53 @@ jobs:
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 @@ workflows:
- 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

View File

@@ -4,6 +4,7 @@
# i.e.: 1.39.18
version =
alias =
only_alias =
image_name ?= emscripten/emsdk
@@ -21,7 +22,9 @@ test: test_dockerimage.sh .TEST
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}