diff --git a/.github/workflows/legacy-v5.yml b/.github/workflows/legacy-v5.yml index 9c10609b..3f0d9e98 100644 --- a/.github/workflows/legacy-v5.yml +++ b/.github/workflows/legacy-v5.yml @@ -4,9 +4,55 @@ on: workflow_dispatch: jobs: - test-and-publish: + build: + strategy: + fail-fast: false + matrix: + php_version: ['8.1', '8.0', '7.4'] + variant: ['apache','cli','fpm'] + builder: [ {arch: "amd64", os: "ubuntu-24.04"}, {arch: "arm64", os: "ubuntu-24.04-arm"}] + runs-on: ${{ matrix.builder.os }} + name: Build ${{ matrix.php_version }}-${{ matrix.variant }} ${{ matrix.builder.arch }} + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Set up Docker + uses: docker-practice/actions-setup-docker@master + - name: Login to GHCR + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Build + run: | + PHP_VERSION="${{ matrix.php_version }}" + # Get last cached successful builds + TARGETS=$(REPO="ghcr.io/${{ github.repository_owner }}/php" TAG_PREFIX="" docker buildx bake php${PHP_VERSION//.}-${{ matrix.variant }}-all --progress=quiet --print | jq -r '.target[].tags[]') + for TARGET in $TARGETS; do + docker --quiet pull ${TARGET} || echo "" + done; + # Build the current builds + REPO="ghcr.io/${{ github.repository_owner }}/php" \ + ARCH_SUFFIX="-${{ matrix.builder.arch }}" \ + TAG_PREFIX="rc${GITHUB_RUN_ID}-" \ + docker buildx bake \ + --set "*.platform=linux/${{ matrix.builder.arch }}" \ + --set "*.output=type=registry" \ + --progress=quiet \ + --load \ + php${PHP_VERSION//.}-${{ matrix.variant }}-all + - name: Display tags built + run: | + docker image ls --filter="reference=ghcr.io/${{ github.repository_owner }}/php" --format "{{.CreatedAt}}\t{{.Size}}\t{{.Repository}}:{{.Tag}}" + + merge-and-publish: + needs: + - build runs-on: ubuntu-latest - name: Publish ${{ matrix.php_version }}-${{ matrix.variant }} multi-arch to dockerhub + name: Merge and publish ${{ matrix.php_version }}-${{ matrix.variant }} strategy: fail-fast: false matrix: @@ -15,49 +61,67 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 + - name: Login to GHCR + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} - name: Login to DockerHub uses: docker/login-action@v3 + if: ${{ github.repository_owner == 'thecodingmachine' }} with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Install regctl + uses: regclient/actions/regctl-installer@main + with: + release: 'v0.8.1' - name: Fetch minor version of php run: | - # Build slim one - PHP_VERSION="${{ matrix.php_version }}" - TAG_PREFIX="rc${GITHUB_RUN_ID}-" \ - docker buildx bake \ - --set "*.platform=linux/amd64" \ - --set "*.output=type=docker" \ - --load \ - php${PHP_VERSION//.}-slim-${{ matrix.variant }} + # Pull amd64 slim image to get PHP version + docker pull --quiet ghcr.io/${{ github.repository_owner }}/php:rc${GITHUB_RUN_ID}-${{ matrix.php_version }}-v5-slim-${{ matrix.variant }}-amd64 # Retrieve minor - PHP_PATCH_MINOR=`docker run --rm thecodingmachine/php:rc${GITHUB_RUN_ID}-${{ matrix.php_version }}-v5-slim-${{ matrix.variant }} php -v | head -n1 | grep -P '\d+\.\d+\.\d+' -o | head -n1` + PHP_PATCH_MINOR=`docker run --rm ghcr.io/${{ github.repository_owner }}/php:rc${GITHUB_RUN_ID}-${{ matrix.php_version }}-v5-slim-${{ matrix.variant }}-amd64 php -v | head -n1 | grep -P '\d+\.\d+\.\d+' -o | head -n1` + echo "PHP_PATCH_MINOR=${PHP_PATCH_MINOR}" echo "PHP_PATCH_MINOR=${PHP_PATCH_MINOR}" >> $GITHUB_ENV - - name: Display tags to build + - name: Get list of images for this variant + id: get-images run: | PHP_VERSION="${{ matrix.php_version }}" - PHP_PATCH_MINOR="${{ env.PHP_PATCH_MINOR }}" \ + REPO="ghcr.io/${{ github.repository_owner }}/php" \ TAG_PREFIX="rc${GITHUB_RUN_ID}-" \ - IS_RELEASE="1" \ - docker buildx bake php${PHP_VERSION//.}-${{ matrix.variant }}-all --print --progress plain | jq ".target[].tags | join(\" \")" -r > "/tmp/tags.log" - cat "/tmp/tags.log" - - name: Build and push ${{ matrix.php_version }}-${{ matrix.variant }} + docker buildx bake \ + --print --progress=quiet \ + php${PHP_VERSION//.}-${{ matrix.variant }}-all | jq '.target[].tags[]' + - name: Create multiarch manifests run: | PHP_VERSION="${{ matrix.php_version }}" - PHP_PATCH_MINOR="${{ env.PHP_PATCH_MINOR }}" \ - TAG_PREFIX="rc${GITHUB_RUN_ID}-" \ - IS_RELEASE="1" \ - docker buildx bake \ - --set "*.platform=linux/amd64,linux/arm64" \ - --set "*.output=type=registry" \ - php${PHP_VERSION//.}-${{ matrix.variant }}-all - - name: Push artifacts - uses: actions/upload-artifact@v4 - with: - name: ${{ matrix.php_version }}-${{ matrix.variant }} - path: /tmp/tags.log - retention-days: 60 + + # Get all targets from the bake group + TARGETS=$(docker buildx bake php${PHP_VERSION//.}-${{ matrix.variant }}-all --progress=quiet --print | jq -r ".group[\"php${PHP_VERSION//.}-${{ matrix.variant }}-all\"].targets[]") + + for TARGET in $TARGETS; do + TAG_ORI=$(REPO="ghcr.io/${{ github.repository_owner }}/php" TAG_PREFIX="rc${GITHUB_RUN_ID}-" docker buildx bake ${TARGET} --progress=quiet --print | jq -r ".target | to_entries[] | select(.key == \"${TARGET}\") | .value.tags[0]") + TAG_PATH=$(REPO="php" PHP_PATCH_MINOR="${{ env.PHP_PATCH_MINOR }}" docker buildx bake ${TARGET} --progress=quiet --print | jq -r ".target | to_entries[] | select(.key == \"${TARGET}\") | .value.tags[0]") + TAG_MINOR=$(REPO="php" docker buildx bake ${TARGET} --progress=quiet --print | jq -r ".target | to_entries[] | select(.key == \"${TARGET}\") | .value.tags[0]") + + # Create manifest for rc tag (always) + echo "Creating manifest: ${TARGET} - ${TAG_ORI}" + docker buildx imagetools create --progress=plain -t "${TAG_ORI}" "${TAG_ORI}-amd64" "${TAG_ORI}-arm64" + + # Create manifest for PHP_PATCH + regctl image copy "${TAG_ORI}" "ghcr.io/${{ github.repository_owner }}/${TAG_PATH}" + # Create manifest for PHP_MINOR + regctl image copy "${TAG_ORI}" "ghcr.io/${{ github.repository_owner }}/${TAG_MINOR}" + + # SAME FOR DOCKERHUB (for the official repository) + if [ "${{ github.repository_owner }}" == "thecodingmachine" ]; then + # Create manifest for PHP_PATCH_MINOR + regctl image copy "${TAG_ORI}" "thecodingmachine/${TAG_PATH}" + # Create manifest for PHP_VERSION + regctl image copy "${TAG_ORI}" "thecodingmachine/${TAG_MINOR}" + fi + done diff --git a/.github/workflows/legacy.yml b/.github/workflows/legacy.yml index d843fcdd..f0c67543 100644 --- a/.github/workflows/legacy.yml +++ b/.github/workflows/legacy.yml @@ -10,8 +10,7 @@ jobs: matrix: php_version: ['8.4', '8.3','8.2','8.1','8.0','7.4'] variant: ['apache','cli','fpm'] -# builder: [ {arch: "amd64", os: "ubuntu-latest"}, {arch: "arm64", os: "macos-latest"}] - builder: [ {arch: "amd64", os: "ubuntu-latest"}, {arch: "arm64", os: "ubuntu-latest"}] + builder: [ {arch: "amd64", os: "ubuntu-24.04"}, {arch: "arm64", os: "ubuntu-24.04-arm"}] runs-on: ${{ matrix.builder.os }} name: Test ${{ matrix.php_version }}-${{ matrix.variant }} ${{ matrix.builder.arch }} only steps: diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index 9cac7696..1510fd7b 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -12,56 +12,78 @@ on: workflow_dispatch: jobs: - test: + build: strategy: fail-fast: false matrix: php_version: ['8.5', '8.4', '8.3','8.2','8.1'] variant: ['apache','cli','fpm'] -# builder: [ {arch: "amd64", os: "ubuntu-latest"}, {arch: "arm64", os: "macos-latest"}] - builder: [ {arch: "amd64", os: "ubuntu-24.04"}, {arch: "arm64", os: "ubuntu-24.04"}] + builder: [ {arch: "amd64", os: "ubuntu-24.04"}, {arch: "arm64", os: "ubuntu-24.04-arm"}] runs-on: ${{ matrix.builder.os }} - name: Test ${{ matrix.php_version }}-${{ matrix.variant }} ${{ matrix.builder.arch }} only + name: Build&test ${{ matrix.php_version }}-${{ matrix.variant }} ${{ matrix.builder.arch }} steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Docker - # /!\ this action is marked as experimental - # It's required only for macos - if: ${{ matrix.builder.os == 'macos-latest' }} uses: docker-practice/actions-setup-docker@master - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 + - name: Login to GHCR + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build run: | PHP_VERSION="${{ matrix.php_version }}" + # Get last cached successful builds + TAGS=$(REPO="ghcr.io/${{ github.repository_owner }}/php" TAG_PREFIX="" docker buildx bake php${PHP_VERSION//.}-${{ matrix.variant }}-all --progress=quiet --print | jq -r '.target[].tags[]') + for TAG in $TAGS; do + docker pull --quiet ${TAG} || echo "" + done; + # Build the current builds + REPO="ghcr.io/${{ github.repository_owner }}/php" \ + ARCH_SUFFIX="-${{ matrix.builder.arch }}" \ TAG_PREFIX="rc${GITHUB_RUN_ID}-" \ docker buildx bake \ --set "*.platform=linux/${{ matrix.builder.arch }}" \ --set "*.output=type=docker" \ - --load \ + --load --progress=quiet \ php${PHP_VERSION//.}-${{ matrix.variant }}-all - name: Display tags built run: | - docker image ls --filter="reference=thecodingmachine/php" --format "{{.CreatedAt}}\t{{.Size}}\t{{.Repository}}:{{.Tag}}" + docker image ls --filter="reference=ghcr.io/${{ github.repository_owner }}/php" --format "{{.CreatedAt}}\t{{.Size}}\t{{.Repository}}:{{.Tag}}" - name: Test run: | + REPO="ghcr.io/${{ github.repository_owner }}/php" \ TAG_PREFIX="rc${GITHUB_RUN_ID}-" \ PHP_VERSION="${{ matrix.php_version }}" \ + ARCH_SUFFIX="-${{ matrix.builder.arch }}" \ BRANCH="v5" \ VARIANT="${{ matrix.variant }}" \ PLATFORM="linux/${{ matrix.builder.arch }}" \ ./tests-suite/bash_unit -f tap ./tests-suite/*.sh + - name: Publish specific arch version + if: > # Only from the main repo + github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || + (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository) + run: | + PHP_VERSION="${{ matrix.php_version }}" + TAGS=$(REPO="ghcr.io/${{ github.repository_owner }}/php" \ + ARCH_SUFFIX="-${{ matrix.builder.arch }}" \ + TAG_PREFIX="rc${GITHUB_RUN_ID}-" \ + docker buildx bake \ + --print --progress=quiet \ + php${PHP_VERSION//.}-${{ matrix.variant }}-all | jq -r '.target[].tags[]'); + for TAG in $TAGS; do docker push --quiet ${TAG}; done; - publish: - # push ~ schedule + merge-and-publish: if: ${{ github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }} needs: - - test + - build runs-on: ubuntu-latest - name: Publish ${{ matrix.php_version }}-${{ matrix.variant }} multi-arch to dockerhub + name: Merge and publish ${{ matrix.php_version }}-${{ matrix.variant }} strategy: fail-fast: false matrix: @@ -70,49 +92,67 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 + - name: Login to GHCR + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} - name: Login to DockerHub uses: docker/login-action@v3 + if: ${{ github.repository_owner == 'thecodingmachine' }} with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Install regctl + uses: regclient/actions/regctl-installer@main + with: + release: 'v0.8.1' - name: Fetch minor version of php run: | - # Build slim one - PHP_VERSION="${{ matrix.php_version }}" - TAG_PREFIX="rc${GITHUB_RUN_ID}-" \ - docker buildx bake \ - --set "*.platform=linux/amd64" \ - --set "*.output=type=docker" \ - --load \ - php${PHP_VERSION//.}-slim-${{ matrix.variant }} + # Pull amd64 slim image to get PHP version + docker pull --quiet ghcr.io/${{ github.repository_owner }}/php:rc${GITHUB_RUN_ID}-${{ matrix.php_version }}-v5-slim-${{ matrix.variant }}-amd64 # Retrieve minor - PHP_PATCH_MINOR=`docker run --rm thecodingmachine/php:rc${GITHUB_RUN_ID}-${{ matrix.php_version }}-v5-slim-${{ matrix.variant }} php -v | head -n1 | grep -P '\d+\.\d+\.\d+' -o | head -n1` + PHP_PATCH_MINOR=`docker run --rm ghcr.io/${{ github.repository_owner }}/php:rc${GITHUB_RUN_ID}-${{ matrix.php_version }}-v5-slim-${{ matrix.variant }}-amd64 php -v | head -n1 | grep -P '\d+\.\d+\.\d+' -o | head -n1` + echo "PHP_PATCH_MINOR=${PHP_PATCH_MINOR}" echo "PHP_PATCH_MINOR=${PHP_PATCH_MINOR}" >> $GITHUB_ENV - - name: Display tags to build + - name: Get list of images for this variant + id: get-images run: | PHP_VERSION="${{ matrix.php_version }}" - PHP_PATCH_MINOR="${{ env.PHP_PATCH_MINOR }}" \ + REPO="ghcr.io/${{ github.repository_owner }}/php" \ TAG_PREFIX="rc${GITHUB_RUN_ID}-" \ - IS_RELEASE="1" \ - docker buildx bake php${PHP_VERSION//.}-${{ matrix.variant }}-all --print --progress plain | jq ".target[].tags | join(\" \")" -r > "/tmp/tags.log" - cat "/tmp/tags.log" - - name: Build and push ${{ matrix.php_version }}-${{ matrix.variant }} + docker buildx bake \ + --print --progress=quiet \ + php${PHP_VERSION//.}-${{ matrix.variant }}-all | jq '.target[].tags[]' + - name: Create multiarch manifests run: | PHP_VERSION="${{ matrix.php_version }}" - PHP_PATCH_MINOR="${{ env.PHP_PATCH_MINOR }}" \ - TAG_PREFIX="rc${GITHUB_RUN_ID}-" \ - IS_RELEASE="1" \ - docker buildx bake \ - --set "*.platform=linux/amd64,linux/arm64" \ - --set "*.output=type=registry" \ - php${PHP_VERSION//.}-${{ matrix.variant }}-all - - name: Push artifacts - uses: actions/upload-artifact@v4 - with: - name: ${{ matrix.php_version }}-${{ matrix.variant }} - path: /tmp/tags.log - retention-days: 60 + + # Get all targets from the bake group + TARGETS=$(docker buildx bake php${PHP_VERSION//.}-${{ matrix.variant }}-all --progress=quiet --print | jq -r ".group[\"php${PHP_VERSION//.}-${{ matrix.variant }}-all\"].targets[]") + + for TARGET in $TARGETS; do + TAG_ORI=$(REPO="ghcr.io/${{ github.repository_owner }}/php" TAG_PREFIX="rc${GITHUB_RUN_ID}-" docker buildx bake ${TARGET} --progress=quiet --print | jq -r ".target | to_entries[] | select(.key == \"${TARGET}\") | .value.tags[0]") + TAG_PATH=$(REPO="php" PHP_PATCH_MINOR="${{ env.PHP_PATCH_MINOR }}" docker buildx bake ${TARGET} --progress=quiet --print | jq -r ".target | to_entries[] | select(.key == \"${TARGET}\") | .value.tags[0]") + TAG_MINOR=$(REPO="php" docker buildx bake ${TARGET} --progress=quiet --print | jq -r ".target | to_entries[] | select(.key == \"${TARGET}\") | .value.tags[0]") + + # Create manifest for rc tag (always) + echo "Creating manifest: ${TARGET} - ${TAG_ORI}" + docker buildx imagetools create --progress=plain -t "${TAG_ORI}" "${TAG_ORI}-amd64" "${TAG_ORI}-arm64" + + # Create manifest for PHP_PATCH + regctl image copy "${TAG_ORI}" "ghcr.io/${{ github.repository_owner }}/${TAG_PATH}" + # Create manifest for PHP_MINOR + regctl image copy "${TAG_ORI}" "ghcr.io/${{ github.repository_owner }}/${TAG_MINOR}" + + # SAME FOR DOCKERHUB (for the official repository) + if [ "${{ github.repository_owner }}" == "thecodingmachine" ]; then + # Create manifest for PHP_PATCH_MINOR + regctl image copy "${TAG_ORI}" "thecodingmachine/${TAG_PATH}" + # Create manifest for PHP_VERSION + regctl image copy "${TAG_ORI}" "thecodingmachine/${TAG_MINOR}" + fi + done diff --git a/Dockerfile.apache.node b/Dockerfile.apache.node index 84e94ac4..6d862db7 100644 --- a/Dockerfile.apache.node +++ b/Dockerfile.apache.node @@ -21,15 +21,15 @@ ENV BLACKFIRE_VERSION=${BLACKFIRE_VERSION} RUN apt update && \ apt install -y --no-install-recommends gnupg && \ if [[ "${NODE_VERSION}" -lt "16" ]]; then \ - curl -sL https://deb.nodesource.com/setup_${NODE_VERSION}.x | sudo bash -; \ + curl -sL --retry 5 --retry-delay 2 https://deb.nodesource.com/setup_${NODE_VERSION}.x | sudo bash -; \ else \ sudo mkdir -p /etc/apt/keyrings && \ - curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ + curl -fsSL --retry 5 --retry-delay 2 https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list; \ fi && \ apt update && \ apt install -y --no-install-recommends nodejs && \ - curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ + curl -sS --retry 5 --retry-delay 2 https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ apt update && \ apt install -y --no-install-recommends yarn && \ diff --git a/Dockerfile.cli.node b/Dockerfile.cli.node index ebdb692a..9db212f6 100644 --- a/Dockerfile.cli.node +++ b/Dockerfile.cli.node @@ -21,15 +21,15 @@ ENV BLACKFIRE_VERSION=${BLACKFIRE_VERSION} RUN apt update && \ apt install -y --no-install-recommends gnupg && \ if [[ "${NODE_VERSION}" -lt "16" ]]; then \ - curl -sL https://deb.nodesource.com/setup_${NODE_VERSION}.x | sudo bash -; \ + curl -sL --retry 5 --retry-delay 2 https://deb.nodesource.com/setup_${NODE_VERSION}.x | sudo bash -; \ else \ sudo mkdir -p /etc/apt/keyrings && \ - curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ + curl -fsSL --retry 5 --retry-delay 2 https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list; \ fi && \ apt update && \ apt install -y --no-install-recommends nodejs && \ - curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ + curl -sS --retry 5 --retry-delay 2 https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ apt update && \ apt install -y --no-install-recommends yarn && \ diff --git a/Dockerfile.fpm.node b/Dockerfile.fpm.node index 822be6a1..b5aa1cd2 100644 --- a/Dockerfile.fpm.node +++ b/Dockerfile.fpm.node @@ -21,15 +21,15 @@ ENV BLACKFIRE_VERSION=${BLACKFIRE_VERSION} RUN apt update && \ apt install -y --no-install-recommends gnupg && \ if [[ "${NODE_VERSION}" -lt "16" ]]; then \ - curl -sL https://deb.nodesource.com/setup_${NODE_VERSION}.x | sudo bash -; \ + curl -sL --retry 5 --retry-delay 2 https://deb.nodesource.com/setup_${NODE_VERSION}.x | sudo bash -; \ else \ sudo mkdir -p /etc/apt/keyrings && \ - curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ + curl -fsSL --retry 5 --retry-delay 2 https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list; \ fi && \ apt update && \ apt install -y --no-install-recommends nodejs && \ - curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ + curl -sS --retry 5 --retry-delay 2 https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ apt update && \ apt install -y --no-install-recommends yarn && \ diff --git a/Dockerfile.slim.apache b/Dockerfile.slim.apache index b60e05eb..933593d9 100644 --- a/Dockerfile.slim.apache +++ b/Dockerfile.slim.apache @@ -108,7 +108,7 @@ RUN rm /etc/php/${PHP_VERSION}/cli/php.ini #ENV COMPOSER_ALLOW_SUPERUSER 1 -RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer &&\ +RUN curl -sS --retry 5 --retry-delay 2 https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer &&\ chmod +x /usr/local/bin/composer # TODO: utils.php in /usr/local/bin... bof! @@ -377,7 +377,7 @@ ONBUILD RUN if [ -n "$INSTALL_CRON" ]; then \ && if [ "$TARGETARCH" = "arm64" ]; then SUPERCRONIC_SHA1SUM=e2714c43e7781bf1579c85aa61259245f56dbba1; \ elif [ "$TARGETARCH" = "amd64" ]; then SUPERCRONIC_SHA1SUM=5ddf8ea26b56d4a7ff6faecdd8966610d5cb9d85; \ else echo "Target arch '${TARGETARCH}' is not supported"; exit 1; fi \ - && curl -fsSLO "${SUPERCRONIC_URL}" \ + && curl -fsSLO --retry 5 --retry-delay 2 "${SUPERCRONIC_URL}" \ && echo "${SUPERCRONIC_SHA1SUM} ${SUPERCRONIC}" | sha1sum -c - \ && chmod +x "${SUPERCRONIC}" \ && sudo mv "${SUPERCRONIC}" "/usr/local/bin/${SUPERCRONIC}" \ @@ -398,15 +398,15 @@ ONBUILD RUN if [ -n "$NODE_VERSION" ]; then \ sudo apt update && \ sudo apt install -y --no-install-recommends gnupg && \ if [[ "${NODE_VERSION}" -lt "16" ]]; then \ - curl -sL https://deb.nodesource.com/setup_${NODE_VERSION}.x | sudo bash -; \ + curl -sL --retry 5 --retry-delay 2 https://deb.nodesource.com/setup_${NODE_VERSION}.x | sudo bash -; \ else \ sudo mkdir -p /etc/apt/keyrings && \ - curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ + curl -fsSL --retry 5 --retry-delay 2 https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list; \ fi && \ sudo apt update && \ sudo apt install -y --no-install-recommends nodejs && \ - curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - && \ + curl -sS --retry 5 --retry-delay 2 https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - && \ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list && \ sudo apt update && \ sudo apt install -y --no-install-recommends yarn && \ diff --git a/Dockerfile.slim.cli b/Dockerfile.slim.cli index 741eeb6d..cace8438 100644 --- a/Dockerfile.slim.cli +++ b/Dockerfile.slim.cli @@ -108,7 +108,7 @@ RUN rm /etc/php/${PHP_VERSION}/cli/php.ini #ENV COMPOSER_ALLOW_SUPERUSER 1 -RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer &&\ +RUN curl -sS --retry 5 --retry-delay 2 https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer &&\ chmod +x /usr/local/bin/composer # TODO: utils.php in /usr/local/bin... bof! @@ -282,7 +282,7 @@ ONBUILD RUN if [ -n "$INSTALL_CRON" ]; then \ && if [ "$TARGETARCH" = "arm64" ]; then SUPERCRONIC_SHA1SUM=e2714c43e7781bf1579c85aa61259245f56dbba1; \ elif [ "$TARGETARCH" = "amd64" ]; then SUPERCRONIC_SHA1SUM=5ddf8ea26b56d4a7ff6faecdd8966610d5cb9d85; \ else echo "Target arch '${TARGETARCH}' is not supported"; exit 1; fi \ - && curl -fsSLO "${SUPERCRONIC_URL}" \ + && curl -fsSLO --retry 5 --retry-delay 2 "${SUPERCRONIC_URL}" \ && echo "${SUPERCRONIC_SHA1SUM} ${SUPERCRONIC}" | sha1sum -c - \ && chmod +x "${SUPERCRONIC}" \ && sudo mv "${SUPERCRONIC}" "/usr/local/bin/${SUPERCRONIC}" \ @@ -303,15 +303,15 @@ ONBUILD RUN if [ -n "$NODE_VERSION" ]; then \ sudo apt update && \ sudo apt install -y --no-install-recommends gnupg && \ if [[ "${NODE_VERSION}" -lt "16" ]]; then \ - curl -sL https://deb.nodesource.com/setup_${NODE_VERSION}.x | sudo bash -; \ + curl -sL --retry 5 --retry-delay 2 https://deb.nodesource.com/setup_${NODE_VERSION}.x | sudo bash -; \ else \ sudo mkdir -p /etc/apt/keyrings && \ - curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ + curl -fsSL --retry 5 --retry-delay 2 https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list; \ fi && \ sudo apt update && \ sudo apt install -y --no-install-recommends nodejs && \ - curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - && \ + curl -sS --retry 5 --retry-delay 2 https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - && \ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list && \ sudo apt update && \ sudo apt install -y --no-install-recommends yarn && \ diff --git a/Dockerfile.slim.fpm b/Dockerfile.slim.fpm index ee7e6207..43853d85 100644 --- a/Dockerfile.slim.fpm +++ b/Dockerfile.slim.fpm @@ -108,7 +108,7 @@ RUN rm /etc/php/${PHP_VERSION}/cli/php.ini #ENV COMPOSER_ALLOW_SUPERUSER 1 -RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer &&\ +RUN curl -sS --retry 5 --retry-delay 2 https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer &&\ chmod +x /usr/local/bin/composer # TODO: utils.php in /usr/local/bin... bof! @@ -301,7 +301,7 @@ ONBUILD RUN if [ -n "$INSTALL_CRON" ]; then \ && if [ "$TARGETARCH" = "arm64" ]; then SUPERCRONIC_SHA1SUM=e2714c43e7781bf1579c85aa61259245f56dbba1; \ elif [ "$TARGETARCH" = "amd64" ]; then SUPERCRONIC_SHA1SUM=5ddf8ea26b56d4a7ff6faecdd8966610d5cb9d85; \ else echo "Target arch '${TARGETARCH}' is not supported"; exit 1; fi \ - && curl -fsSLO "${SUPERCRONIC_URL}" \ + && curl -fsSLO --retry 5 --retry-delay 2 "${SUPERCRONIC_URL}" \ && echo "${SUPERCRONIC_SHA1SUM} ${SUPERCRONIC}" | sha1sum -c - \ && chmod +x "${SUPERCRONIC}" \ && sudo mv "${SUPERCRONIC}" "/usr/local/bin/${SUPERCRONIC}" \ @@ -322,15 +322,15 @@ ONBUILD RUN if [ -n "$NODE_VERSION" ]; then \ sudo apt update && \ sudo apt install -y --no-install-recommends gnupg && \ if [[ "${NODE_VERSION}" -lt "16" ]]; then \ - curl -sL https://deb.nodesource.com/setup_${NODE_VERSION}.x | sudo bash -; \ + curl -sL --retry 5 --retry-delay 2 https://deb.nodesource.com/setup_${NODE_VERSION}.x | sudo bash -; \ else \ sudo mkdir -p /etc/apt/keyrings && \ - curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ + curl -fsSL --retry 5 --retry-delay 2 https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list; \ fi && \ sudo apt update && \ sudo apt install -y --no-install-recommends nodejs && \ - curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - && \ + curl -sS --retry 5 --retry-delay 2 https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - && \ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list && \ sudo apt update && \ sudo apt install -y --no-install-recommends yarn && \ diff --git a/README.md b/README.md index e374c18f..8d44e0c0 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ This repository contains a set of developer-friendly, general purpose PHP images -| Name | PHP version | type |variant | NodeJS version | Size +| Name | PHP version | type |variant | NodeJS version | Size |-------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------|--------|-----------------|------ | [thecodingmachine/php:8.5-v5-apache](https://github.com/thecodingmachine/docker-images-php/blob/v5/Dockerfile.apache) | `8.5.x` | fat | apache | *N/A* | [![](https://images.microbadger.com/badges/image/thecodingmachine/php:8.5-v5-apache.svg)](https://microbadger.com/images/thecodingmachine/php:8.5-v5-apache) | [thecodingmachine/php:8.5-v5-apache-node20](https://github.com/thecodingmachine/docker-images-php/blob/v5/Dockerfile.apache.node) | `8.5.x` | fat | apache | `20.x` | [![](https://images.microbadger.com/badges/image/thecodingmachine/php:8.5-v5-apache-node20.svg)](https://microbadger.com/images/thecodingmachine/php:8.5-v5-apache-node20) @@ -166,7 +166,6 @@ This list can be outdated, you can verify by executing : `docker run --rm -it th **Note**: - *ev* is not available in PHP 8.1+ -- *rdkafka* and *snmp* are not available in all `ARM64` images (build time is too long : it's possible to install manually as required) ### Enabling/disabling extensions in the fat image diff --git a/docker-bake.hcl b/docker-bake.hcl index dc933092..75883b81 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -2,7 +2,7 @@ group "default" { targets = [ - + "php85", "php84", "php83", @@ -189,13 +189,14 @@ variable "TAG_PREFIX" {default = ""} variable "PHP_PATCH_MINOR" {default = ""} variable "IS_RELEASE" {default = "0"} variable "GLOBAL_VERSION" {default = "v5"} +variable "ARCH_SUFFIX" {default = ""} function "tag" { params = [PHP_VERSION, VARIANT] result = [ - equal("1",IS_RELEASE) ? "${REPO}:${PHP_VERSION}-${GLOBAL_VERSION}-${VARIANT}" : "", - equal("1",IS_RELEASE) ? (notequal("",PHP_PATCH_MINOR) ? "${REPO}:${PHP_PATCH_MINOR}-${GLOBAL_VERSION}-${VARIANT}": "") : "", - "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${GLOBAL_VERSION}-${VARIANT}", + equal("1",IS_RELEASE) ? "${REPO}:${PHP_VERSION}-${GLOBAL_VERSION}-${VARIANT}${ARCH_SUFFIX}" : "", + equal("1",IS_RELEASE) ? (notequal("",PHP_PATCH_MINOR) ? "${REPO}:${PHP_PATCH_MINOR}-${GLOBAL_VERSION}-${VARIANT}${ARCH_SUFFIX}": "") : "", + "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${GLOBAL_VERSION}-${VARIANT}${ARCH_SUFFIX}", ] } diff --git a/extensions/core/ev/install.sh b/extensions/core/ev/install.sh index 89368dac..88910c5a 100755 --- a/extensions/core/ev/install.sh +++ b/extensions/core/ev/install.sh @@ -1,11 +1,6 @@ #!/usr/bin/env bash set -e -if [[ "${TARGETARCH}" == "arm64" ]]; then - # 188 seconds to execute onto arm64 arch - >&2 echo "php-ev is not included with arm64 version (because build time is too long)" - exit 0; -fi export PECL_EXTENSION=ev ../docker-install.sh diff --git a/extensions/core/grpc/install.sh b/extensions/core/grpc/install.sh index 896db7f2..ff595931 100755 --- a/extensions/core/grpc/install.sh +++ b/extensions/core/grpc/install.sh @@ -5,15 +5,3 @@ export EXTENSION=grpc ../docker-install.sh -#if [[ "${TARGETARCH}" == "arm64" ]]; then -# # Need few hours to compile onto arm64 arch -# >&2 echo "php-grpc is not included with arm64 version (because build time is too long)" -# exit 0; -#fi -#set -e -#export USE_PECL=1 -#export DEV_DEPENDENCIES=zlib1g-dev -# -#export PECL_EXTENSION=grpc -# -#../docker-install.sh diff --git a/extensions/core/rdkafka/install.sh b/extensions/core/rdkafka/install.sh index b4320828..4a26d0c6 100755 --- a/extensions/core/rdkafka/install.sh +++ b/extensions/core/rdkafka/install.sh @@ -1,11 +1,6 @@ #!/usr/bin/env bash set -e -if [[ "${TARGETARCH}" == "arm64" ]]; then - # 176 seconds to execute onto arm64 arch - >&2 echo "php-rdkafka is not included with arm64 version (because build time is too long)" - exit 0; -fi export DEV_DEPENDENCIES="librdkafka-dev" export DEPENDENCIES="librdkafka1" PECL_EXTENSION=rdkafka ../docker-install.sh diff --git a/extensions/core/snmp/install.sh b/extensions/core/snmp/install.sh index 7ed4967e..d3e18aef 100755 --- a/extensions/core/snmp/install.sh +++ b/extensions/core/snmp/install.sh @@ -1,11 +1,6 @@ #!/usr/bin/env bash set -e -if [[ "${TARGETARCH}" == "arm64" ]]; then - # 109 seconds to execute onto arm64 arch - >&2 echo "php-snmp is not included with arm64 version (because build time is too long)" - exit 0; -fi export EXTENSION=snmp #export DEV_DEPENDENCIES="libsnmp-dev libssl-dev" #export DEPENDENCIES="snmp libsnmp30 libc6 libpci3 libsensors4 libwrap0 procps libssl1.1" diff --git a/tests-suite/assets/composer/Dockerfile b/tests-suite/assets/composer/Dockerfile index e33e0a18..bb58457e 100644 --- a/tests-suite/assets/composer/Dockerfile +++ b/tests-suite/assets/composer/Dockerfile @@ -3,8 +3,9 @@ ARG BRANCH_VARIANT ARG PHP_VERSION ARG REPO ARG TAG_PREFIX +ARG ARCH_SUFFIX="" -FROM ${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT} +FROM ${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT}${ARCH_SUFFIX} ENV PHP_EXTENSION_GD=1 diff --git a/tests-suite/config b/tests-suite/config index daf956ee..e9b34260 100755 --- a/tests-suite/config +++ b/tests-suite/config @@ -6,6 +6,7 @@ export PHP_VERSION=${PHP_VERSION:-8.4} export BRANCH=${BRANCH:-v5} export VARIANT=${VARIANT:-apache} export BRANCH_VARIANT="${VARIANT//./-}" +export ARCH_SUFFIX="${ARCH_SUFFIX:-}" export REPO="${REPO:-thecodingmachine/php}" export TAG_PREFIX="${TAG_PREFIX:-}" export SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) diff --git a/tests-suite/onbuild.sh b/tests-suite/onbuild.sh index 2d6a4a70..87ae899e 100755 --- a/tests-suite/onbuild.sh +++ b/tests-suite/onbuild.sh @@ -15,7 +15,7 @@ test_onbluidBase() { onbluidBase() { docker ${BUILDTOOL} -t ${DOCKER1_NAME} - < "${TMP_DIR}/Dockerfile" ARG PHP_EXTENSIONS="gd" - FROM ${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT} + FROM ${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}${ARCH_SUFFIX} COPY composer.json composer.json diff --git a/tests-suite/php-blackfire.sh b/tests-suite/php-blackfire.sh index 69b14f18..b68859be 100755 --- a/tests-suite/php-blackfire.sh +++ b/tests-suite/php-blackfire.sh @@ -3,14 +3,14 @@ test_enable() { # Check that blackfire can be enabled - docker run ${RUN_OPTIONS} --rm -e PHP_EXTENSION_BLACKFIRE=1 "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT}" \ + docker run ${RUN_OPTIONS} --rm -e PHP_EXTENSION_BLACKFIRE=1 "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT}${ARCH_SUFFIX}" \ php -m | tail -n +1 | grep -q blackfire assert_equals "0" "$?" } test_alertConflictWithXDebug() { # Tests that blackfire + xdebug will output an error RESULT="$(docker run ${RUN_OPTIONS} --rm -e PHP_EXTENSION_XDEBUG=1 -e PHP_EXTENSION_BLACKFIRE=1 \ - "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT}" \ + "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT}${ARCH_SUFFIX}" \ php -v 2>&1 | tail -n +1 | grep 'WARNING: Both Blackfire and Xdebug are enabled. This is not recommended as the PHP engine may not behave as expected. You should strongly consider disabling Xdebug or Blackfire.')" assert_equals "WARNING: Both Blackfire and Xdebug are enabled. This is not recommended as the PHP engine may not behave as expected. You should strongly consider disabling Xdebug or Blackfire." "$RESULT" } diff --git a/tests-suite/php-extensions.sh b/tests-suite/php-extensions.sh index 71740248..9920da7d 100755 --- a/tests-suite/php-extensions.sh +++ b/tests-suite/php-extensions.sh @@ -6,7 +6,7 @@ # (it's compiled in PHP) ########################################################### test_presenceOfMbstring() { - RESULT=$(docker run ${RUN_OPTIONS} --rm "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}" php -m | tail -n +1 | grep --color=never mbstring) + RESULT=$(docker run ${RUN_OPTIONS} --rm "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}${ARCH_SUFFIX}" php -m | tail -n +1 | grep --color=never mbstring) assert_equals "mbstring" "${RESULT}" "Missing php-mbstring" } ############################################################ @@ -14,21 +14,21 @@ test_presenceOfMbstring() { ## (it's compiled in PHP) ############################################################ test_presenceOfPDO() { - RESULT=$(docker run ${RUN_OPTIONS} --rm "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}" php -m | tail -n +1 | grep --color=never PDO) + RESULT=$(docker run ${RUN_OPTIONS} --rm "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}${ARCH_SUFFIX}" php -m | tail -n +1 | grep --color=never PDO) assert_equals "PDO" "${RESULT}" "Missing php-PDO" } ################################################################# ## Let's check that uploadprogress is enabled explicitly with fat ################################################################# test_presenceOfUploadprogressOnFat() { - RESULT=$(docker run ${RUN_OPTIONS} -e "PHP_EXTENSIONS=uploadprogress" --rm "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT}" php -m | tail -n +1 | grep --color=never uploadprogress) + RESULT=$(docker run ${RUN_OPTIONS} -e "PHP_EXTENSIONS=uploadprogress" --rm "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT}${ARCH_SUFFIX}" php -m | tail -n +1 | grep --color=never uploadprogress) assert_equals "uploadprogress" "${RESULT}" "Missing php-uploadprogress" } ################################################################### ## Let's check that FFI is enabled explicitly with fat for PHP 7.4+ ################################################################### test_presenceOfFFIOnFat() { - RESULT=$(docker run ${RUN_OPTIONS} -e "PHP_EXTENSIONS=ffi" --rm "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT}" php -m | tail -n +1 | grep --color=never FFI) + RESULT=$(docker run ${RUN_OPTIONS} -e "PHP_EXTENSIONS=ffi" --rm "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT}${ARCH_SUFFIX}" php -m | tail -n +1 | grep --color=never FFI) assert_equals "FFI" "${RESULT}" "Missing php-FFI" } ############################################################ @@ -37,7 +37,7 @@ test_presenceOfFFIOnFat() { test_enableGdWithComposer() { docker $BUILDTOOL -t test/composer_with_gd \ --build-arg PHP_VERSION="${PHP_VERSION}" --build-arg BRANCH="$BRANCH" \ - --build-arg BRANCH_VARIANT="$BRANCH_VARIANT" --build-arg REPO="$REPO" --build-arg TAG_PREFIX="$TAG_PREFIX" \ + --build-arg BRANCH_VARIANT="$BRANCH_VARIANT" --build-arg REPO="$REPO" --build-arg TAG_PREFIX="$TAG_PREFIX" --build-arg ARCH_SUFFIX="$ARCH_SUFFIX" \ "${SCRIPT_DIR}/assets/composer" > /dev/null 2>&1 assert_equals "0" "$?" "Docker build failed" # This should run ok (the sudo disables environment variables but call to composer proxy does not trigger PHP ini file regeneration) diff --git a/tests-suite/php-ini.sh b/tests-suite/php-ini.sh index 5911c0e6..9929de7e 100755 --- a/tests-suite/php-ini.sh +++ b/tests-suite/php-ini.sh @@ -6,7 +6,7 @@ ## Templates ############################################################ test_templateDefaultErrorReporting() { - RESULT="$(docker run ${RUN_OPTIONS} --rm "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}" php -i | grep error_reporting)" + RESULT="$(docker run ${RUN_OPTIONS} --rm "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}${ARCH_SUFFIX}" php -i | grep error_reporting)" if [[ "$(printf '%s\n' "$PHP_VERSION" "8.4" | sort -V | head -n 1)" == "$PHP_VERSION" ]] && [[ "$PHP_VERSION" != "8.4" ]]; then assert_equals "error_reporting => 32767 => 32767" "$RESULT" "Wrong default error reporting" else @@ -16,12 +16,12 @@ test_templateDefaultErrorReporting() { } test_templateProductionErrorReporting() { RESULT="$(docker run ${RUN_OPTIONS} --rm -e TEMPLATE_PHP_INI=production \ - "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}" php -i | grep error_reporting)" + "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}${ARCH_SUFFIX}" php -i | grep error_reporting)" assert_equals "error_reporting => 22527 => 22527" "$RESULT" "Wrong production error reporting" } test_templateCustomErrorReporting() { RESULT="$(docker run ${RUN_OPTIONS} --rm -v "${SCRIPT_DIR}/assets/php-ini/php.ini:/etc/php/${PHP_VERSION}/cli/php.ini" \ - "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}" php -i | grep error_reporting)" + "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}${ARCH_SUFFIX}" php -i | grep error_reporting)" if [[ "$(printf '%s\n' "$PHP_VERSION" "8.4" | sort -V | head -n 1)" == "$PHP_VERSION" ]] && [[ "$PHP_VERSION" != "8.4" ]]; then assert_equals "error_reporting => 24575 => 24575" "$RESULT" "Wrong custom php.ini error reporting" else @@ -34,7 +34,7 @@ test_templateCustomErrorReporting() { ############################################################ test_environmentErrorReporting() { RESULT="$(docker run ${RUN_OPTIONS} --rm -e PHP_INI_ERROR_REPORTING="E_ERROR | E_WARNING" \ - "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}" php -i | grep error_reporting)" + "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}${ARCH_SUFFIX}" php -i | grep error_reporting)" [[ "$RESULT" == "error_reporting => 3 => 3" ]] assert_equals "error_reporting => 3 => 3" "$RESULT" "Wrong Environment error reporting" } @@ -44,7 +44,7 @@ test_environmentErrorReporting() { ############################################################ test_sessionSavePath() { RESULT="$(docker run ${RUN_OPTIONS} --rm -e PHP_INI_SESSION__SAVE_PATH="tcp://localhost?auth=yourverycomplex\"passwordhere" \ - "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}" php -i | grep "session.save_path")" + "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}${ARCH_SUFFIX}" php -i | grep "session.save_path")" [[ "$RESULT" == "" ]] assert_equals "session.save_path => tcp://localhost?auth=yourverycomplex\"passwordhere => tcp://localhost?auth=yourverycomplex\"passwordhere" "$RESULT" "Wrong Environment PHP_INI_SESSION__SAVE_PATH" } @@ -54,7 +54,7 @@ test_sessionSavePath() { ############################################################ test_smtp() { RESULT="$(docker run ${RUN_OPTIONS} --rm -e PHP_INI_SMTP="192.168.0.1" \ - "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}" php -i | grep "^SMTP")" + "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}${ARCH_SUFFIX}" php -i | grep "^SMTP")" assert_equals "SMTP => 192.168.0.1 => 192.168.0.1" "$RESULT" "Wrong Environment PHP_INI_SMTP" } ############################################################ @@ -62,7 +62,7 @@ test_smtp() { ############################################################ test_disabledFunctionsIsCommented() { RESULT="$(docker run ${RUN_OPTIONS} --rm \ - "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}" php -i | grep "disable_functions")" + "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}${ARCH_SUFFIX}" php -i | grep "disable_functions")" assert_equals "disable_functions => no value => no value" "$RESULT" } diff --git a/tests-suite/php-xdebug.sh b/tests-suite/php-xdebug.sh index 96ca5bc9..dccc8d63 100755 --- a/tests-suite/php-xdebug.sh +++ b/tests-suite/php-xdebug.sh @@ -6,18 +6,18 @@ ############################################################ test_config() { # Let's check that the "xdebug.client_host" contains a value different from "no value" - docker run ${RUN_OPTIONS} --rm -e PHP_EXTENSION_XDEBUG=1 "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT}" \ + docker run ${RUN_OPTIONS} --rm -e PHP_EXTENSION_XDEBUG=1 "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT}${ARCH_SUFFIX}" \ php -i | grep xdebug.client_host | grep -v -q "no value" assert_equals "0" "$?" '"xdebug.client_host" contains "no value"' # Let's check that "xdebug.mode" is set to "debug" by default - docker run ${RUN_OPTIONS} --rm -e PHP_EXTENSION_XDEBUG=1 "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT}" \ + docker run ${RUN_OPTIONS} --rm -e PHP_EXTENSION_XDEBUG=1 "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT}${ARCH_SUFFIX}" \ php -i | grep xdebug.mode | grep -q "debug" assert_equals "0" "$?" '"xdebug.mode" is not set to "debug" by default' # Let's check that "xdebug.mode" is properly overridden docker run ${RUN_OPTIONS} --rm -e PHP_EXTENSION_XDEBUG=1 -e PHP_INI_XDEBUG__MODE=debug,coverage \ - "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT}" \ + "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT}${ARCH_SUFFIX}" \ php -i | grep xdebug.mode | grep -q "debug,coverage" assert_equals "0" "$?" '"xdebug.mode" is not properly overridden' } diff --git a/tests-suite/tool-startup-command.sh b/tests-suite/tool-startup-command.sh index 2ddabe68..bce45d74 100755 --- a/tests-suite/tool-startup-command.sh +++ b/tests-suite/tool-startup-command.sh @@ -6,7 +6,7 @@ ############################################################ test_uid() { RESULT="$(docker run ${RUN_OPTIONS} --rm -e FOO="bar" -e STARTUP_COMMAND_1="env" -e UID=0 \ - "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}" sleep 1 | grep "FOO")" + "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}${ARCH_SUFFIX}" sleep 1 | grep "FOO")" assert_equals "FOO=bar" "$RESULT" } ############################################################ @@ -14,7 +14,7 @@ test_uid() { ############################################################ test_asRoot() { RESULT="$(docker run ${RUN_OPTIONS} --rm -e STARTUP_COMMAND_1="cd / && whoami" -e UID=0 \ - "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}" sleep 1)" + "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}${ARCH_SUFFIX}" sleep 1)" assert_equals "root" "$RESULT" } ############################################################ @@ -22,6 +22,6 @@ test_asRoot() { ############################################################ test_withFile() { docker run ${RUN_OPTIONS} --rm -v "${SCRIPT_DIR}/assets/startup.sh":/etc/container/startup.sh \ - "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}" php -m 2>/dev/null | grep -q "startup.sh executed" + "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}${ARCH_SUFFIX}" php -m 2>/dev/null | grep -q "startup.sh executed" assert_equals "0" "$?" } diff --git a/tests-suite/tool-supercronic.sh b/tests-suite/tool-supercronic.sh index 1deb2a07..ba85c019 100755 --- a/tests-suite/tool-supercronic.sh +++ b/tests-suite/tool-supercronic.sh @@ -6,7 +6,7 @@ ############################################################ test_displayErrorWhenMissing() { RESULT=$(docker run ${RUN_OPTIONS} --rm -e CRON_SCHEDULE_1="* * * * * * *" -e CRON_COMMAND_1="(>&1 echo 'foobar')" \ - "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}" sleep 1 2>&1 | grep -o 'Cron is not available in this image') + "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}${ARCH_SUFFIX}" sleep 1 2>&1 | grep -o 'Cron is not available in this image') assert_equals "Cron is not available in this image" "$RESULT" } ############################################################ @@ -14,10 +14,10 @@ test_displayErrorWhenMissing() { ############################################################ test_errorLog() { RESULT="$(docker run ${RUN_OPTIONS} --rm -e CRON_SCHEDULE_1="* * * * * * *" -e CRON_COMMAND_1="(>&1 echo 'foobar')" \ - "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT}" sleep 1 2>&1 | grep -oP 'msg=foobar' | head -n1)" + "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT}${ARCH_SUFFIX}" sleep 1 2>&1 | grep -oP 'msg=foobar' | head -n1)" assert_equals "msg=foobar" "$RESULT" "std1" RESULT="$(docker run ${RUN_OPTIONS} --rm -e CRON_SCHEDULE_1="* * * * * * *" -e CRON_COMMAND_1="(>&2 echo 'error')" \ - "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT}" sleep 1 2>&1 | grep -oP 'msg=error' | head -n1)" + "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT}${ARCH_SUFFIX}" sleep 1 2>&1 | grep -oP 'msg=error' | head -n1)" assert_equals "msg=error" "$RESULT" "std2" } ############################################################ @@ -25,7 +25,7 @@ test_errorLog() { ############################################################ test_changeUser() { RESULT="$(docker run ${RUN_OPTIONS} --rm -e CRON_SCHEDULE_1="* * * * * * *" -e CRON_COMMAND_1="whoami" -e CRON_USER_1="docker" \ - "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT}" sleep 1 2>&1 | grep -oP 'msg=docker' | head -n1)" + "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT}${ARCH_SUFFIX}" sleep 1 2>&1 | grep -oP 'msg=docker' | head -n1)" assert_equals "msg=docker" "$RESULT" } ############################################################ @@ -33,6 +33,6 @@ test_changeUser() { ############################################################ test_twoCommandInOneRow() { RESULT="$(docker run ${RUN_OPTIONS} --rm -e CRON_SCHEDULE_1="* * * * * * *" -e CRON_COMMAND_1="whoami;whoami" -e CRON_USER_1="docker" \ - "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT}" sleep 1 2>&1 | grep -oP 'msg=docker' | wc -l)" + "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT}${ARCH_SUFFIX}" sleep 1 2>&1 | grep -oP 'msg=docker' | wc -l)" assert '[ "$RESULT" -gt "1" ]' } diff --git a/tests-suite/users-rights.sh b/tests-suite/users-rights.sh index 54acc92c..abdfc61d 100755 --- a/tests-suite/users-rights.sh +++ b/tests-suite/users-rights.sh @@ -5,7 +5,7 @@ ## Default user is 1000 ############################################################ test_defaultUserUidIs1000() { - RESULT="$(docker run ${RUN_OPTIONS} --rm "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}" \ + RESULT="$(docker run ${RUN_OPTIONS} --rm "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}${ARCH_SUFFIX}" \ id -ur)" assert_equals "0" "$?" "Docker run failed" assert_equals "1000" "${RESULT}" "Default user UID missmatch" @@ -18,7 +18,7 @@ test_defaultUserUidIs1000() { test_defaultUserHasUidOfMountedDirectory() { mkdir -p "${TMP_DIR}/user1999" docker run ${RUN_OPTIONS} --rm -v /tmp:/tmp busybox chown 1999:1999 "${TMP_DIR}/user1999" > /dev/null 2>&1 - RESULT="$(docker run ${RUN_OPTIONS} --rm -v "${TMP_DIR}/user1999":"${CONTAINER_CWD}" "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}" \ + RESULT="$(docker run ${RUN_OPTIONS} --rm -v "${TMP_DIR}/user1999":"${CONTAINER_CWD}" "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}${ARCH_SUFFIX}" \ id -ur)" assert_equals "0" "$?" "Docker run failed" assert_equals "1999" "${RESULT}" "Default user UID missmatch with mounted directory" @@ -28,7 +28,7 @@ test_defaultUserHasUidOfMountedDirectory() { ## The default user can write on stdout and stderr ############################################################ test_defaultUserCanWriteOnStdoutAndStderr() { - docker run ${RUN_OPTIONS} --rm -v "${TMP_DIR}/user1999":"${CONTAINER_CWD}" "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}" \ + docker run ${RUN_OPTIONS} --rm -v "${TMP_DIR}/user1999":"${CONTAINER_CWD}" "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}${ARCH_SUFFIX}" \ bash -c "echo TEST > /proc/self/fd/2" >> /dev/null assert_equals "0" "$?" "Docker run failed" } @@ -48,11 +48,11 @@ test_defaultUserCanWriteOnStdoutAndStderr() { } EOF docker run ${RUN_OPTIONS} --rm -v /tmp:/tmp busybox chown -R 33:33 "${TMP_DIR}/user33" > /dev/null 2>&1 - RESULT="$(docker run ${RUN_OPTIONS} --rm -v "${TMP_DIR}/user33":"${CONTAINER_CWD}" "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}" \ + RESULT="$(docker run ${RUN_OPTIONS} --rm -v "${TMP_DIR}/user33":"${CONTAINER_CWD}" "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}${ARCH_SUFFIX}" \ id -ur)" assert_equals "0" "$?" "Docker run 1 failed" assert_equals "33" "${RESULT}" "Default user UID missmatch" - docker run ${RUN_OPTIONS} --rm -v "${TMP_DIR}/user33":"${CONTAINER_CWD}" "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}" \ + docker run ${RUN_OPTIONS} --rm -v "${TMP_DIR}/user33":"${CONTAINER_CWD}" "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}${ARCH_SUFFIX}" \ composer update -vvv > /dev/null 2>&1 assert_equals "0" "$?" "Docker run 2 failed" } diff --git a/tests-suite/variant-apache.sh b/tests-suite/variant-apache.sh index 3c08ad09..3555b14a 100755 --- a/tests-suite/variant-apache.sh +++ b/tests-suite/variant-apache.sh @@ -46,19 +46,19 @@ setup_suite() { export DOCKER1_PORT="$(unused_port)" export DOCKER1_NAME="test-apache1-${DOCKER1_PORT}" docker run --name "${DOCKER1_NAME}" ${RUN_OPTIONS} --rm -e MYVAR=foo -e PHP_INI_MEMORY_LIMIT=2G -p "${DOCKER1_PORT}:80" -d -v "${SCRIPT_DIR}/assets/":/var/www/html \ - "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}" > /dev/null + "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}${ARCH_SUFFIX}" > /dev/null assert_equals "0" "$?" "Docker run failed" # SETUP apache2 export DOCKER2_PORT="$(unused_port)" export DOCKER2_NAME="test-apache2-${DOCKER2_PORT}" docker run --name "${DOCKER2_NAME}" ${RUN_OPTIONS} --rm -e MYVAR=foo -e APACHE_DOCUMENT_ROOT=apache -p "${DOCKER2_PORT}:80" -d -v "${SCRIPT_DIR}/assets/":/var/www/html \ - "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}" > /dev/null + "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}${ARCH_SUFFIX}" > /dev/null assert_equals "0" "$?" "Docker run failed" # SETUP apache3 export DOCKER3_PORT="$(unused_port)" export DOCKER3_NAME="test-apache3-${DOCKER3_PORT}" docker run --name "${DOCKER3_NAME}" ${RUN_OPTIONS} --rm -e MYVAR=foo -e APACHE_DOCUMENT_ROOT=/var/www/foo/apache -p "${DOCKER3_PORT}:80" -d -v "${SCRIPT_DIR}/assets/":/var/www/foo \ - "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}" > /dev/null + "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}${ARCH_SUFFIX}" > /dev/null assert_equals "0" "$?" "Docker run failed" # Let's wait for Apache to start waitfor http://localhost:${DOCKER1_PORT} diff --git a/tests-suite/variant-fpm.sh b/tests-suite/variant-fpm.sh index 714cafb5..a341d036 100755 --- a/tests-suite/variant-fpm.sh +++ b/tests-suite/variant-fpm.sh @@ -10,7 +10,7 @@ fi; ############################################################ test_start() { docker run --name test-fpm1 ${RUN_OPTIONS} --rm -e MYVAR=foo -e PHP_INI_MEMORY_LIMIT=2G -p "9001:9000" -d -v "${SCRIPT_DIR}/assets/":/var/www/html \ - "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}" > /dev/null + "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-slim-${BRANCH_VARIANT}${ARCH_SUFFIX}" > /dev/null assert_equals "0" "$?" "Docker run failed" # Let's wait for FPM to start sleep 3 diff --git a/tests-suite/variant-node.sh b/tests-suite/variant-node.sh index cd195ce4..5674a45f 100755 --- a/tests-suite/variant-node.sh +++ b/tests-suite/variant-node.sh @@ -9,13 +9,13 @@ fi; ## Run node --version, check for vX.Y.Z version string ############################################################ test_nodeVersion() { - RESULT=$(docker run ${RUN_OPTIONS} --rm "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT}-node${NODE}" node --version) + RESULT=$(docker run ${RUN_OPTIONS} --rm "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT}-node${NODE}${ARCH_SUFFIX}" node --version) assert_matches "^v[0-9]+.[0-9]+.[0-9]+" "${RESULT}" "Missing node" } ############################################################ ## Run npm --version, check for X.Y.Z version string ############################################################ test_npmVersion() { - RESULT=$(docker run ${RUN_OPTIONS} --rm "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT}-node${NODE}" npm --version) + RESULT=$(docker run ${RUN_OPTIONS} --rm "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${BRANCH}-${BRANCH_VARIANT}-node${NODE}${ARCH_SUFFIX}" npm --version) assert_matches "[0-9]+.[0-9]+.[0-9]+" "${RESULT}" "Missing npm" } diff --git a/utils/Dockerfile.node.blueprint b/utils/Dockerfile.node.blueprint index 777628bf..e0825643 100644 --- a/utils/Dockerfile.node.blueprint +++ b/utils/Dockerfile.node.blueprint @@ -20,15 +20,15 @@ ENV BLACKFIRE_VERSION=${BLACKFIRE_VERSION} RUN apt update && \ apt install -y --no-install-recommends gnupg && \ if [[ "${NODE_VERSION}" -lt "16" ]]; then \ - curl -sL https://deb.nodesource.com/setup_${NODE_VERSION}.x | sudo bash -; \ + curl -sL --retry 5 --retry-delay 2 https://deb.nodesource.com/setup_${NODE_VERSION}.x | sudo bash -; \ else \ sudo mkdir -p /etc/apt/keyrings && \ - curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ + curl -fsSL --retry 5 --retry-delay 2 https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list; \ fi && \ apt update && \ apt install -y --no-install-recommends nodejs && \ - curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ + curl -sS --retry 5 --retry-delay 2 https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ apt update && \ apt install -y --no-install-recommends yarn && \ diff --git a/utils/Dockerfile.slim.blueprint b/utils/Dockerfile.slim.blueprint index 6fe853ad..0096418b 100644 --- a/utils/Dockerfile.slim.blueprint +++ b/utils/Dockerfile.slim.blueprint @@ -107,7 +107,7 @@ RUN rm /etc/php/${PHP_VERSION}/cli/php.ini #ENV COMPOSER_ALLOW_SUPERUSER 1 -RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer &&\ +RUN curl -sS --retry 5 --retry-delay 2 https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer &&\ chmod +x /usr/local/bin/composer # TODO: utils.php in /usr/local/bin... bof! @@ -402,7 +402,7 @@ ONBUILD RUN if [ -n "$INSTALL_CRON" ]; then \ && if [ "$TARGETARCH" = "arm64" ]; then SUPERCRONIC_SHA1SUM=e2714c43e7781bf1579c85aa61259245f56dbba1; \ elif [ "$TARGETARCH" = "amd64" ]; then SUPERCRONIC_SHA1SUM=5ddf8ea26b56d4a7ff6faecdd8966610d5cb9d85; \ else echo "Target arch '${TARGETARCH}' is not supported"; exit 1; fi \ - && curl -fsSLO "${SUPERCRONIC_URL}" \ + && curl -fsSLO --retry 5 --retry-delay 2 "${SUPERCRONIC_URL}" \ && echo "${SUPERCRONIC_SHA1SUM} ${SUPERCRONIC}" | sha1sum -c - \ && chmod +x "${SUPERCRONIC}" \ && sudo mv "${SUPERCRONIC}" "/usr/local/bin/${SUPERCRONIC}" \ @@ -423,15 +423,15 @@ ONBUILD RUN if [ -n "$NODE_VERSION" ]; then \ sudo apt update && \ sudo apt install -y --no-install-recommends gnupg && \ if [[ "${NODE_VERSION}" -lt "16" ]]; then \ - curl -sL https://deb.nodesource.com/setup_${NODE_VERSION}.x | sudo bash -; \ + curl -sL --retry 5 --retry-delay 2 https://deb.nodesource.com/setup_${NODE_VERSION}.x | sudo bash -; \ else \ sudo mkdir -p /etc/apt/keyrings && \ - curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ + curl -fsSL --retry 5 --retry-delay 2 https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list; \ fi && \ sudo apt update && \ sudo apt install -y --no-install-recommends nodejs && \ - curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - && \ + curl -sS --retry 5 --retry-delay 2 https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - && \ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list && \ sudo apt update && \ sudo apt install -y --no-install-recommends yarn && \ diff --git a/utils/README.blueprint.md b/utils/README.blueprint.md index f3187379..6157630b 100644 --- a/utils/README.blueprint.md +++ b/utils/README.blueprint.md @@ -99,7 +99,6 @@ This list can be outdated, you can verify by executing : `docker run --rm -it th **Note**: - *ev* is not available in PHP 8.1+ -- *rdkafka* and *snmp* are not available in all `ARM64` images (build time is too long : it's possible to install manually as required) ### Enabling/disabling extensions in the fat image diff --git a/utils/docker-bake.blueprint.hcl b/utils/docker-bake.blueprint.hcl index 09ba83eb..fefa6c8d 100644 --- a/utils/docker-bake.blueprint.hcl +++ b/utils/docker-bake.blueprint.hcl @@ -24,13 +24,14 @@ variable "TAG_PREFIX" {default = ""} variable "PHP_PATCH_MINOR" {default = ""} variable "IS_RELEASE" {default = "0"} variable "GLOBAL_VERSION" {default = "v5"} +variable "ARCH_SUFFIX" {default = ""} function "tag" { params = [PHP_VERSION, VARIANT] result = [ - equal("1",IS_RELEASE) ? "${REPO}:${PHP_VERSION}-${GLOBAL_VERSION}-${VARIANT}" : "", - equal("1",IS_RELEASE) ? (notequal("",PHP_PATCH_MINOR) ? "${REPO}:${PHP_PATCH_MINOR}-${GLOBAL_VERSION}-${VARIANT}": "") : "", - "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${GLOBAL_VERSION}-${VARIANT}", + equal("1",IS_RELEASE) ? "${REPO}:${PHP_VERSION}-${GLOBAL_VERSION}-${VARIANT}${ARCH_SUFFIX}" : "", + equal("1",IS_RELEASE) ? (notequal("",PHP_PATCH_MINOR) ? "${REPO}:${PHP_PATCH_MINOR}-${GLOBAL_VERSION}-${VARIANT}${ARCH_SUFFIX}": "") : "", + "${REPO}:${TAG_PREFIX}${PHP_VERSION}-${GLOBAL_VERSION}-${VARIANT}${ARCH_SUFFIX}", ] }