diff --git a/.github/workflows/push-dev-image-on-commit.yml b/.github/workflows/push-dev-image-on-commit.yml index ab1711b9d30f..4a88e0f214b6 100644 --- a/.github/workflows/push-dev-image-on-commit.yml +++ b/.github/workflows/push-dev-image-on-commit.yml @@ -12,11 +12,21 @@ on: workflow_dispatch: jobs: - build: - runs-on: ubuntu-latest + build-test-push: + strategy: + matrix: + include: + - runner: ubuntu-24.04 + arch: amd64 + - runner: ubuntu-24.04-arm + arch: arm64 + + runs-on: ${{ matrix.runner }} env: APISIX_DOCKER_TAG: master-debian-dev + ENV_OS_ARCH: ${{ matrix.arch }} + DOCKER_BUILDKIT: 1 steps: - name: Check out the repo @@ -48,21 +58,32 @@ jobs: fi - name: Login to Docker Hub + uses: docker/login-action@v3 if: github.ref == 'refs/heads/master' uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USER }} password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Set up QEMU + - name: Push apisix image to Docker Hub if: github.ref == 'refs/heads/master' - uses: docker/setup-qemu-action@v1 + run: | + make push-on-debian-dev - - name: Set up Docker Buildx - if: github.ref == 'refs/heads/master' - uses: docker/setup-buildx-action@v1 + merge-tags: + needs: build-test-push + if: github.ref == 'refs/heads/master' + runs-on: ubuntu-latest + steps: + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USER }} + password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Push apisix image to Docker Hub - if: github.ref == 'refs/heads/master' + - name: Check out the repo + uses: actions/checkout@v4 + + - name: Merge architecture-specific tags run: | - make push-multiarch-dev-on-debian + make merge-dev-tags diff --git a/Makefile b/Makefile index cc046a744732..423b2405673b 100644 --- a/Makefile +++ b/Makefile @@ -497,6 +497,7 @@ ci-env-stop: build-on-debian-dev: @$(call func_echo_status, "$@ -> [ Start ]") $(ENV_DOCKER) build -t $(ENV_APISIX_IMAGE_TAG_NAME)-debian-dev \ + --build-arg TARGETARCH=$(ENV_OS_ARCH) \ --build-arg CODE_PATH=. \ --build-arg ENTRYPOINT_PATH=./docker/debian-dev/docker-entrypoint.sh \ --build-arg INSTALL_BROTLI=./docker/debian-dev/install-brotli.sh \ @@ -504,16 +505,19 @@ build-on-debian-dev: -f ./docker/debian-dev/Dockerfile . @$(call func_echo_success_status, "$@ -> [ Done ]") -### push-multiarch-dev-on-debian : Push apache/apisix:dev image -.PHONY: push-multiarch-dev-on-debian -push-multiarch-dev-on-debian: +.PHONY: push-on-debian-dev +push-on-debian-dev: @$(call func_echo_status, "$@ -> [ Start ]") - $(ENV_DOCKER) buildx build --network=host --push \ - -t $(IMAGE_NAME):dev \ - --platform linux/amd64,linux/arm64 \ - --build-arg CODE_PATH=. \ - --build-arg ENTRYPOINT_PATH=./docker/debian-dev/docker-entrypoint.sh \ - --build-arg INSTALL_BROTLI=./docker/debian-dev/install-brotli.sh \ - --build-arg CHECK_STANDALONE_CONFIG=./docker/utils/check_standalone_config.sh \ - -f ./docker/debian-dev/Dockerfile . + $(ENV_DOCKER) tag $(ENV_APISIX_IMAGE_TAG_NAME)-debian-dev $(IMAGE_NAME):dev-$(ENV_OS_ARCH) + $(ENV_DOCKER) push $(IMAGE_NAME):dev-$(ENV_OS_ARCH) + @$(call func_echo_success_status, "$@ -> [ Done ]") + +### merge-dev-tags : Merge architecture-specific dev tags into a single dev tag +.PHONY: merge-dev-tags +merge-dev-tags: + @$(call func_echo_status, "$@ -> [ Start ]") + $(ENV_DOCKER) manifest create $(IMAGE_NAME):dev \ + $(IMAGE_NAME):dev-amd64 \ + $(IMAGE_NAME):dev-arm64 + $(ENV_DOCKER) manifest push $(IMAGE_NAME):dev @$(call func_echo_success_status, "$@ -> [ Done ]")