From c96c75854cf3128347b0205381f50929882ee752 Mon Sep 17 00:00:00 2001 From: Chingis Sandanov Date: Wed, 29 Jan 2025 13:35:21 +0300 Subject: [PATCH] Test multi-arch parallel build --- .github/actions/action.yml | 66 ++--- .github/actions/release.sh | 17 -- .github/workflows/workflow.yml | 517 +++++++++++++++++++-------------- 8/Makefile | 39 +-- 4 files changed, 347 insertions(+), 292 deletions(-) delete mode 100644 .github/actions/release.sh diff --git a/.github/actions/action.yml b/.github/actions/action.yml index 11a87320..e7227978 100644 --- a/.github/actions/action.yml +++ b/.github/actions/action.yml @@ -1,44 +1,36 @@ -name: Build -description: Build PHP image +name: push +description: combine multi-arch image and push inputs: version: - description: php version + description: version required: true - workdir: - description: working directory - required: true - tags: - description: image tags - required: true - dev: - description: dev version of image - required: false - user_id: - description: user id - required: false - group_id: - description: group id - required: false - platform: - description: docker platform + latest: + description: if tag latest required: false - default: linux/amd64 runs: using: "composite" steps: - - name: Build image - env: - PHP_VER: ${{ inputs.version }} - PHP_DEV: ${{ inputs.dev }} - WODBY_USER_ID: ${{ inputs.user_id }} - WODBY_GROUP_ID: ${{ inputs.group_id }} - PLATFORM: ${{ inputs.platform }} - TAGS: ${{ inputs.tags }} - run: | - set -e - make buildx-build-amd64 - make test - make buildx-build - . $GITHUB_ACTION_PATH/release.sh - shell: bash - working-directory: ${{ inputs.workdir }} + - name: Build image + env: + VERSION: ${{ inputs.version }} + LATEST: ${{ inputs.latest }} + run: | + if [[ "${GITHUB_REF}" == refs/heads/main || "${GITHUB_REF}" == refs/tags/* ]]; then + minor_ver="${VERSION%.*}" + major_ver="${minor_ver%.*}" + + tags=("${minor_ver}" "${major_ver}") + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + stability_tag=("${GITHUB_REF##*/}") + tags=("${minor_ver}-${stability_tag}" "${major_ver}-${stability_tag}") + else + if [[ -n "${LATEST}" ]]; then + tags+=("latest") + fi + fi + + for tag in "${tags[@]}"; do + TAG=${tag} make buildx-imagetools-create + done + fi + shell: bash diff --git a/.github/actions/release.sh b/.github/actions/release.sh deleted file mode 100644 index 6f9ce60f..00000000 --- a/.github/actions/release.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash - -set -eo pipefail - -if [[ "${GITHUB_REF}" == refs/heads/master || "${GITHUB_REF}" == refs/tags/* ]]; then - docker login -u "${DOCKER_USERNAME}" -p "${DOCKER_PASSWORD}" - - if [[ "${GITHUB_REF}" == refs/tags/* ]]; then - export STABILITY_TAG="${GITHUB_REF##*/}" - fi - - IFS=',' read -ra tags <<< "${TAGS}" - - for tag in "${tags[@]}"; do - make buildx-push TAG="${tag}"; - done -fi diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index 375d3472..bc3a6bbf 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -19,225 +19,320 @@ env: DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} jobs: - php84: - runs-on: ubuntu-latest - defaults: - run: - working-directory: '8' + php84-build: + strategy: + matrix: + platform: + - linux/amd64 + - linux/arm64 + include: + - platform: linux/amd64 + runner: ubuntu-24.04 + arch: amd64 + - platform: linux/arm64 + runner: ubuntu-24.04-arm + arch: arm64 + - platform: linux/amd64 + runner: ubuntu-24.04 + arch: amd64 + dev: 1 + - platform: linux/arm64 + runner: ubuntu-24.04-arm + arch: arm64 + dev: 1 + - platform: linux/amd64 + runner: ubuntu-24.04 + arch: amd64 + user_id: 501 + group_id: 20 + dev: 1 + - platform: linux/arm64 + runner: ubuntu-24.04-arm + arch: arm64 + user_id: 501 + group_id: 20 + dev: 1 + runs-on: ${{ matrix.runner }} steps: - uses: actions/checkout@v4 - - uses: docker/setup-qemu-action@v3 + - uses: docker/login-action@v3 with: - platforms: linux/amd64,linux/arm64 + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} - uses: docker/setup-buildx-action@v3 - - uses: ./.github/actions - with: - version: ${{ env.PHP84 }} - tags: 8.4,8,latest - workdir: 8 - platform: linux/amd64,linux/arm64 - php83: - runs-on: ubuntu-latest - defaults: - run: - working-directory: '8' - steps: - - uses: actions/checkout@v4 - - uses: docker/setup-qemu-action@v3 - with: - platforms: linux/amd64,linux/arm64 - - uses: docker/setup-buildx-action@v3 - - uses: ./.github/actions - with: - version: ${{ env.PHP83 }} - tags: 8.3 - workdir: 8 - platform: linux/amd64,linux/arm64 - php82: - runs-on: ubuntu-latest - defaults: - run: - working-directory: '8' - steps: - - uses: actions/checkout@v4 - - uses: docker/setup-qemu-action@v3 - with: - platforms: linux/amd64,linux/arm64 - - uses: docker/setup-buildx-action@v3 - - uses: ./.github/actions - with: - version: ${{ env.PHP82 }} - tags: 8.2 - workdir: 8 - platform: linux/amd64,linux/arm64 - php81: + - name: build and push + env: + PHP_VER: ${{ env.PHP84 }} + TAG: 8.4-${{ matrix.arch }} + PHP_DEV: ${{ matrix.dev }} + WODBY_USER_ID: ${{ matrix.user_id }} + WODBY_GROUP_ID: ${{ matrix.group_id }} + PLATFORM: ${{ matrix.platform }} + working-directory: 8 + run: | + make buildx-build + make buildx-push + php84-push: runs-on: ubuntu-latest - defaults: - run: - working-directory: '8' - steps: - - uses: actions/checkout@v4 - - uses: docker/setup-qemu-action@v3 - with: - platforms: linux/amd64,linux/arm64 - - uses: docker/setup-buildx-action@v3 - - uses: ./.github/actions - with: - version: ${{ env.PHP81 }} - tags: 8.1 - workdir: 8 - platform: linux/amd64,linux/arm64 - ### dev - php84-dev: - runs-on: ubuntu-latest - defaults: - run: - working-directory: '8' + needs: + - php84-build steps: - uses: actions/checkout@v4 - - uses: docker/setup-qemu-action@v3 + - uses: docker/login-action@v3 with: - platforms: linux/amd64,linux/arm64 - - uses: docker/setup-buildx-action@v3 + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} - uses: ./.github/actions with: version: ${{ env.PHP84 }} - dev: 1 - tags: 8.4-dev,8-dev,dev - workdir: 8 - platform: linux/amd64,linux/arm64 - php83-dev: - runs-on: ubuntu-latest - defaults: - run: - working-directory: '8' - steps: - - uses: actions/checkout@v4 - - uses: docker/setup-qemu-action@v3 - with: - platforms: linux/amd64,linux/arm64 - - uses: docker/setup-buildx-action@v3 - - uses: ./.github/actions - with: - version: ${{ env.PHP83 }} - dev: 1 - tags: 8.3-dev - workdir: 8 - platform: linux/amd64,linux/arm64 - php82-dev: - runs-on: ubuntu-latest - defaults: - run: - working-directory: '8' - steps: - - uses: actions/checkout@v4 - - uses: docker/setup-qemu-action@v3 - with: - platforms: linux/amd64,linux/arm64 - - uses: docker/setup-buildx-action@v3 - - uses: ./.github/actions - with: - version: ${{ env.PHP82 }} - dev: 1 - tags: 8.2-dev - workdir: 8 - platform: linux/amd64,linux/arm64 - php81-dev: - runs-on: ubuntu-latest - defaults: - run: - working-directory: '8' - steps: - - uses: actions/checkout@v4 - - uses: docker/setup-qemu-action@v3 - with: - platforms: linux/amd64,linux/arm64 - - uses: docker/setup-buildx-action@v3 - - uses: ./.github/actions - with: - version: ${{ env.PHP81 }} - dev: 1 - tags: 8.1-dev - workdir: 8 - platform: linux/amd64,linux/arm64 - ### dev-macos - php84-dev-macos: - runs-on: ubuntu-latest - defaults: - run: - working-directory: '8' - steps: - - uses: actions/checkout@v4 - - uses: docker/setup-qemu-action@v3 - with: - platforms: linux/amd64,linux/arm64 - - uses: docker/setup-buildx-action@v3 - - uses: ./.github/actions - with: - version: ${{ env.PHP84 }} - dev: 1 - user_id: 501 - group_id: 20 - tags: 8.4-dev-macos,8-dev-macos,dev-macos - workdir: 8 - platform: linux/amd64,linux/arm64 - php83-dev-macos: - runs-on: ubuntu-latest - defaults: - run: - working-directory: '8' - steps: - - uses: actions/checkout@v4 - - uses: docker/setup-qemu-action@v3 - with: - platforms: linux/amd64,linux/arm64 - - uses: docker/setup-buildx-action@v3 - - uses: ./.github/actions - with: - version: ${{ env.PHP83 }} - dev: 1 - user_id: 501 - group_id: 20 - tags: 8.3-dev-macos - workdir: 8 - platform: linux/amd64,linux/arm64 - php82-dev-macos: - runs-on: ubuntu-latest - defaults: - run: - working-directory: '8' - steps: - - uses: actions/checkout@v4 - - uses: docker/setup-qemu-action@v3 - with: - platforms: linux/amd64,linux/arm64 - - uses: docker/setup-buildx-action@v3 - - uses: ./.github/actions - with: - version: ${{ env.PHP82 }} - dev: 1 - user_id: 501 - group_id: 20 - tags: 8.2-dev-macos - workdir: 8 - platform: linux/amd64,linux/arm64 - php81-dev-macos: - runs-on: ubuntu-latest - defaults: - run: - working-directory: '8' - steps: - - uses: actions/checkout@v4 - - uses: docker/setup-qemu-action@v3 - with: - platforms: linux/amd64,linux/arm64 - - uses: docker/setup-buildx-action@v3 - - uses: ./.github/actions - with: - version: ${{ env.PHP81 }} - dev: 1 - user_id: 501 - group_id: 20 - tags: 8.1-dev-macos - workdir: 8 - platform: linux/amd64,linux/arm64 + latest: true + +# php83-build: +# strategy: +# matrix: +# platform: +# - linux/amd64 +# - linux/arm64 +# include: +# - platform: linux/amd64 +# runner: ubuntu-24.04 +# arch: amd64 +# - platform: linux/arm64 +# runner: ubuntu-24.04-arm +# arch: arm64 +# runs-on: ${{ matrix.runner }} +# steps: +# - uses: actions/checkout@v4 +# - uses: docker/login-action@v3 +# with: +# username: ${{ secrets.DOCKER_USERNAME }} +# password: ${{ secrets.DOCKER_PASSWORD }} +# - uses: docker/setup-buildx-action@v3 +# - name: build and push +# env: +# MARIADB_VER: ${{ env.PHP84 }} +# TAG: 8.4-${{ matrix.arch }} +# PLATFORM: ${{ matrix.platform }} +# working-directory: 8 +# run: | +# make buildx-build +# make buildx-push +# php83-push: +# runs-on: ubuntu-latest +# needs: +# - php84-build +# steps: +# - uses: actions/checkout@v4 +# - uses: docker/login-action@v3 +# with: +# username: ${{ secrets.DOCKER_USERNAME }} +# password: ${{ secrets.DOCKER_PASSWORD }} +# - uses: ./.github/actions +# with: +# version: ${{ env.PHP84 }} + +# php83: +# runs-on: ubuntu-latest +# defaults: +# run: +# working-directory: '8' +# steps: +# - uses: actions/checkout@v4 +# - uses: docker/setup-qemu-action@v3 +# with: +# platforms: linux/amd64,linux/arm64 +# - uses: docker/setup-buildx-action@v3 +# - uses: ./.github/actions +# with: +# version: ${{ env.PHP83 }} +# tags: 8.3 +# workdir: 8 +# platform: linux/amd64,linux/arm64 +# php82: +# runs-on: ubuntu-latest +# defaults: +# run: +# working-directory: '8' +# steps: +# - uses: actions/checkout@v4 +# - uses: docker/setup-qemu-action@v3 +# with: +# platforms: linux/amd64,linux/arm64 +# - uses: docker/setup-buildx-action@v3 +# - uses: ./.github/actions +# with: +# version: ${{ env.PHP82 }} +# tags: 8.2 +# workdir: 8 +# platform: linux/amd64,linux/arm64 +# php81: +# runs-on: ubuntu-latest +# defaults: +# run: +# working-directory: '8' +# steps: +# - uses: actions/checkout@v4 +# - uses: docker/setup-qemu-action@v3 +# with: +# platforms: linux/amd64,linux/arm64 +# - uses: docker/setup-buildx-action@v3 +# - uses: ./.github/actions +# with: +# version: ${{ env.PHP81 }} +# tags: 8.1 +# workdir: 8 +# platform: linux/amd64,linux/arm64 +# ### dev +# php84-dev: +# runs-on: ubuntu-latest +# defaults: +# run: +# working-directory: '8' +# steps: +# - uses: actions/checkout@v4 +# - uses: docker/setup-qemu-action@v3 +# with: +# platforms: linux/amd64,linux/arm64 +# - uses: docker/setup-buildx-action@v3 +# - uses: ./.github/actions +# with: +# version: ${{ env.PHP84 }} +# dev: 1 +# tags: 8.4-dev,8-dev,dev +# workdir: 8 +# platform: linux/amd64,linux/arm64 +# php83-dev: +# runs-on: ubuntu-latest +# defaults: +# run: +# working-directory: '8' +# steps: +# - uses: actions/checkout@v4 +# - uses: docker/setup-qemu-action@v3 +# with: +# platforms: linux/amd64,linux/arm64 +# - uses: docker/setup-buildx-action@v3 +# - uses: ./.github/actions +# with: +# version: ${{ env.PHP83 }} +# dev: 1 +# tags: 8.3-dev +# workdir: 8 +# platform: linux/amd64,linux/arm64 +# php82-dev: +# runs-on: ubuntu-latest +# defaults: +# run: +# working-directory: '8' +# steps: +# - uses: actions/checkout@v4 +# - uses: docker/setup-qemu-action@v3 +# with: +# platforms: linux/amd64,linux/arm64 +# - uses: docker/setup-buildx-action@v3 +# - uses: ./.github/actions +# with: +# version: ${{ env.PHP82 }} +# dev: 1 +# tags: 8.2-dev +# workdir: 8 +# platform: linux/amd64,linux/arm64 +# php81-dev: +# runs-on: ubuntu-latest +# defaults: +# run: +# working-directory: '8' +# steps: +# - uses: actions/checkout@v4 +# - uses: docker/setup-qemu-action@v3 +# with: +# platforms: linux/amd64,linux/arm64 +# - uses: docker/setup-buildx-action@v3 +# - uses: ./.github/actions +# with: +# version: ${{ env.PHP81 }} +# dev: 1 +# tags: 8.1-dev +# workdir: 8 +# platform: linux/amd64,linux/arm64 +# ### dev-macos +# php84-dev-macos: +# runs-on: ubuntu-latest +# defaults: +# run: +# working-directory: '8' +# steps: +# - uses: actions/checkout@v4 +# - uses: docker/setup-qemu-action@v3 +# with: +# platforms: linux/amd64,linux/arm64 +# - uses: docker/setup-buildx-action@v3 +# - uses: ./.github/actions +# with: +# version: ${{ env.PHP84 }} +# dev: 1 +# user_id: 501 +# group_id: 20 +# tags: 8.4-dev-macos,8-dev-macos,dev-macos +# workdir: 8 +# platform: linux/amd64,linux/arm64 +# php83-dev-macos: +# runs-on: ubuntu-latest +# defaults: +# run: +# working-directory: '8' +# steps: +# - uses: actions/checkout@v4 +# - uses: docker/setup-qemu-action@v3 +# with: +# platforms: linux/amd64,linux/arm64 +# - uses: docker/setup-buildx-action@v3 +# - uses: ./.github/actions +# with: +# version: ${{ env.PHP83 }} +# dev: 1 +# user_id: 501 +# group_id: 20 +# tags: 8.3-dev-macos +# workdir: 8 +# platform: linux/amd64,linux/arm64 +# php82-dev-macos: +# runs-on: ubuntu-latest +# defaults: +# run: +# working-directory: '8' +# steps: +# - uses: actions/checkout@v4 +# - uses: docker/setup-qemu-action@v3 +# with: +# platforms: linux/amd64,linux/arm64 +# - uses: docker/setup-buildx-action@v3 +# - uses: ./.github/actions +# with: +# version: ${{ env.PHP82 }} +# dev: 1 +# user_id: 501 +# group_id: 20 +# tags: 8.2-dev-macos +# workdir: 8 +# platform: linux/amd64,linux/arm64 +# php81-dev-macos: +# runs-on: ubuntu-latest +# defaults: +# run: +# working-directory: '8' +# steps: +# - uses: actions/checkout@v4 +# - uses: docker/setup-qemu-action@v3 +# with: +# platforms: linux/amd64,linux/arm64 +# - uses: docker/setup-buildx-action@v3 +# - uses: ./.github/actions +# with: +# version: ${{ env.PHP81 }} +# dev: 1 +# user_id: 501 +# group_id: 20 +# tags: 8.1-dev-macos +# workdir: 8 +# platform: linux/amd64,linux/arm64 diff --git a/8/Makefile b/8/Makefile index ee95883f..a582e7d8 100644 --- a/8/Makefile +++ b/8/Makefile @@ -9,6 +9,7 @@ NAME = php-$(PHP_VER_MINOR) PECL_HTTP_PROXY ?= "" PLATFORM ?= linux/arm64 +TAG ?= $(PHP_VER_MINOR) ifeq ($(WODBY_USER_ID),) WODBY_USER_ID := 1000 @@ -18,25 +19,15 @@ ifeq ($(WODBY_GROUP_ID),) WODBY_GROUP_ID := 1000 endif -ifeq ($(TAG),) - ifneq ($(PHP_DEV),) - TAG ?= $(PHP_VER_MINOR)-dev - else - TAG ?= $(PHP_VER_MINOR) - endif -endif - +ifneq ($(PHP_DEV),) + TAG = $(PHP_VER_MINOR)-dev +else + ifneq ($(PHP_DEV),) NAME := $(NAME)-dev endif -ifneq ($(STABILITY_TAG),) - ifneq ($(TAG),latest) - override TAG := $(TAG)-$(STABILITY_TAG) - endif -endif - -.PHONY: build build-debug buildx-build buildx-push buildx-build-amd64 test push shell run start stop logs clean release +.PHONY: build build-debug buildx-build buildx-push test push shell run start stop logs clean release default: build @@ -58,18 +49,6 @@ build-debug: --build-arg PECL_HTTP_PROXY=$(PECL_HTTP_PROXY) \ --no-cache --progress=plain ./ 2>&1 | tee build.log -# --load doesn't work with multiple platforms https://github.com/docker/buildx/issues/59 -# we need to save cache to run tests first. -buildx-build-amd64: - docker buildx build --platform linux/amd64 -t $(REPO):$(TAG) \ - --build-arg PHP_VER=$(PHP_VER) \ - --build-arg PHP_DEV=$(PHP_DEV) \ - --build-arg WODBY_USER_ID=$(WODBY_USER_ID) \ - --build-arg WODBY_GROUP_ID=$(WODBY_GROUP_ID) \ - --build-arg PECL_HTTP_PROXY=$(PECL_HTTP_PROXY) \ - --load \ - ./ - buildx-build: docker buildx build --platform $(PLATFORM) -t $(REPO):$(TAG) \ --build-arg PHP_VER=$(PHP_VER) \ @@ -88,6 +67,12 @@ buildx-push: --build-arg PECL_HTTP_PROXY=$(PECL_HTTP_PROXY) \ ./ +bulidx-imagetools-create: + docker buildx imagetools create -t $(REPO):$(TAG) \ + $(REPO):$(PHP_VER_MINOR)-amd64 \ + $(REPO):$(PHP_VER_MINOR)-arm64 +.PHONY: bulidx-imagetools-create + test: cd ./tests && IMAGE=$(REPO):$(TAG) ./run.sh