From 0c407612af3daeb95ea4c5c40b2fbe416c4bc826 Mon Sep 17 00:00:00 2001 From: Yasindu Dissanayake Date: Fri, 8 Nov 2024 21:41:48 +0530 Subject: [PATCH 01/21] Update docker-hub-platform.yml --- .github/workflows/docker-hub-platform.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker-hub-platform.yml b/.github/workflows/docker-hub-platform.yml index 32f9fe5d2..46c29dc58 100644 --- a/.github/workflows/docker-hub-platform.yml +++ b/.github/workflows/docker-hub-platform.yml @@ -14,7 +14,7 @@ concurrency: cancel-in-progress: true env: - IMAGE_NAME: index.docker.io/metacall/core + IMAGE_NAME: index.docker.io/mryash/core BUILDKIT_VERSION: 0.13.0 jobs: @@ -143,7 +143,7 @@ jobs: password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - name: Create manifest list and push - if: github.ref == 'refs/heads/master' || contains(github.ref, 'refs/tags/') + # if: github.ref == 'refs/heads/master' || contains(github.ref, 'refs/tags/') run: | for tag in "deps" "dev" "runtime" "cli"; do cd "/tmp/digests/${tag}" From c1455b0e201fe7d96eea8add1fff65319661788f Mon Sep 17 00:00:00 2001 From: Yasindu Dissanayake Date: Fri, 8 Nov 2024 22:47:42 +0530 Subject: [PATCH 02/21] Update docker-hub-platform.yml --- .github/workflows/docker-hub-platform.yml | 34 +++++++++++------------ 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/workflows/docker-hub-platform.yml b/.github/workflows/docker-hub-platform.yml index 46c29dc58..7355a38c1 100644 --- a/.github/workflows/docker-hub-platform.yml +++ b/.github/workflows/docker-hub-platform.yml @@ -26,13 +26,13 @@ jobs: matrix: platform: - linux/amd64 - - linux/arm64 + # - linux/arm64 - linux/riscv64 - linux/ppc64le - linux/s390x - linux/386 - linux/arm/v7 - - linux/arm/v6 + # - linux/arm/v6 # - linux/mips64le # - linux/mips64 @@ -146,19 +146,19 @@ jobs: # if: github.ref == 'refs/heads/master' || contains(github.ref, 'refs/tags/') run: | for tag in "deps" "dev" "runtime" "cli"; do - cd "/tmp/digests/${tag}" - IMAGE_HASHES=$(printf '${{ env.IMAGE_NAME }}:${tag}@sha256:%s ' *) - for image in ${IMAGE_HASHES}; do - docker image tag ${image} ${{ env.IMAGE_NAME }}:${tag} - docker push ${{ env.IMAGE_NAME }}:${tag} - done - docker buildx imagetools create -t ${{ env.IMAGE_NAME }}:${tag} ${IMAGE_HASHES} - if [[ "${tag}" = "cli" ]]; then - docker buildx imagetools create -t ${{ env.IMAGE_NAME }}:latest ${IMAGE_HASHES} - if [[ "${{ contains(github.ref, 'refs/tags/') }}" = true ]]; then - TAG=${GITHUB_REF#refs/*/} - VERSION=${TAG#v} - docker buildx imagetools create -t ${{ env.IMAGE_NAME }}:${VERSION} ${IMAGE_HASHES} - fi - fi + cd "/tmp/digests/${tag}" + IFS=$'\n' read -ra HASHES <<< "$(printf '%s\n' *)" + for hash in "${HASHES[@]}"; do + docker image tag "mryash/core:${tag}@${hash}" "${{ env.IMAGE_NAME }}:${tag}@${hash}" + docker push "${{ env.IMAGE_NAME }}:${tag}@${hash}" + done + docker buildx imagetools create -t "${{ env.IMAGE_NAME }}:${tag}" "${HASHES[@]/#/metacall\/core:${tag}@}" + if [[ "${tag}" = "cli" ]]; then + docker buildx imagetools create -t "${{ env.IMAGE_NAME }}:latest" "${HASHES[@]/#/metacall\/core:${tag}@}" + if [[ "${{ contains(github.ref, 'refs/tags/') }}" = true ]]; then + TAG="${GITHUB_REF#refs/*/}" + VERSION="${TAG#v}" + docker buildx imagetools create -t "${{ env.IMAGE_NAME }}:${VERSION}" "${HASHES[@]/#/metacall\/core:${tag}@}" + fi + fi done From 780e5512ed08b3ea3e948227a9ea6a348bd4f30c Mon Sep 17 00:00:00 2001 From: Yasindu Dissanayake Date: Fri, 8 Nov 2024 22:58:48 +0530 Subject: [PATCH 03/21] Update docker-hub-platform.yml --- .github/workflows/docker-hub-platform.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/docker-hub-platform.yml b/.github/workflows/docker-hub-platform.yml index 7355a38c1..25be79cb3 100644 --- a/.github/workflows/docker-hub-platform.yml +++ b/.github/workflows/docker-hub-platform.yml @@ -145,20 +145,20 @@ jobs: - name: Create manifest list and push # if: github.ref == 'refs/heads/master' || contains(github.ref, 'refs/tags/') run: | - for tag in "deps" "dev" "runtime" "cli"; do + for tag in "deps" "dev" "runtime" "cli"; do cd "/tmp/digests/${tag}" IFS=$'\n' read -ra HASHES <<< "$(printf '%s\n' *)" for hash in "${HASHES[@]}"; do - docker image tag "mryash/core:${tag}@${hash}" "${{ env.IMAGE_NAME }}:${tag}@${hash}" - docker push "${{ env.IMAGE_NAME }}:${tag}@${hash}" - done - docker buildx imagetools create -t "${{ env.IMAGE_NAME }}:${tag}" "${HASHES[@]/#/metacall\/core:${tag}@}" - if [[ "${tag}" = "cli" ]]; then - docker buildx imagetools create -t "${{ env.IMAGE_NAME }}:latest" "${HASHES[@]/#/metacall\/core:${tag}@}" + docker image tag "${{ env.IMAGE_NAME }}:${tag}@${hash}" "${{ env.IMAGE_NAME }}:${tag}@${hash}" + docker push "${{ env.IMAGE_NAME }}:${tag}@${hash}" + done + docker buildx imagetools create -t "${{ env.IMAGE_NAME }}:${tag}" "${HASHES[@]/#/${{ env.IMAGE_NAME }}:${tag}@}" + if [[ "${tag}" = "cli" ]]; then + docker buildx imagetools create -t "${{ env.IMAGE_NAME }}:latest" "${HASHES[@]/#/${{ env.IMAGE_NAME }}:${tag}@}" if [[ "${{ contains(github.ref, 'refs/tags/') }}" = true ]]; then TAG="${GITHUB_REF#refs/*/}" VERSION="${TAG#v}" - docker buildx imagetools create -t "${{ env.IMAGE_NAME }}:${VERSION}" "${HASHES[@]/#/metacall\/core:${tag}@}" - fi - fi - done + docker buildx imagetools create -t "${{ env.IMAGE_NAME }}:${VERSION}" "${HASHES[@]/#/${{ env.IMAGE_NAME }}:${tag}@}" + fi + fi + done From 161066244b7e8ccf832cfaa624330d512453f9b2 Mon Sep 17 00:00:00 2001 From: Yasindu Dissanayake Date: Sun, 10 Nov 2024 00:17:40 +0530 Subject: [PATCH 04/21] Update docker-hub-platform.yml --- .github/workflows/docker-hub-platform.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docker-hub-platform.yml b/.github/workflows/docker-hub-platform.yml index 25be79cb3..80c574e80 100644 --- a/.github/workflows/docker-hub-platform.yml +++ b/.github/workflows/docker-hub-platform.yml @@ -27,11 +27,11 @@ jobs: platform: - linux/amd64 # - linux/arm64 - - linux/riscv64 - - linux/ppc64le - - linux/s390x + # - linux/riscv64 + # - linux/ppc64le + # - linux/s390x - linux/386 - - linux/arm/v7 + # - linux/arm/v7 # - linux/arm/v6 # - linux/mips64le # - linux/mips64 @@ -145,6 +145,7 @@ jobs: - name: Create manifest list and push # if: github.ref == 'refs/heads/master' || contains(github.ref, 'refs/tags/') run: | + set -exuo pipefail for tag in "deps" "dev" "runtime" "cli"; do cd "/tmp/digests/${tag}" IFS=$'\n' read -ra HASHES <<< "$(printf '%s\n' *)" From 53d7ba8a7b1164cbfcec1d89ce580018afdcfc4d Mon Sep 17 00:00:00 2001 From: Yasindu Dissanayake Date: Sun, 10 Nov 2024 00:28:00 +0530 Subject: [PATCH 05/21] Update docker-hub-platform.yml --- .github/workflows/docker-hub-platform.yml | 28 +++++++++++++---------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/.github/workflows/docker-hub-platform.yml b/.github/workflows/docker-hub-platform.yml index 80c574e80..295bfd43e 100644 --- a/.github/workflows/docker-hub-platform.yml +++ b/.github/workflows/docker-hub-platform.yml @@ -143,23 +143,27 @@ jobs: password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - name: Create manifest list and push - # if: github.ref == 'refs/heads/master' || contains(github.ref, 'refs/tags/') run: | set -exuo pipefail for tag in "deps" "dev" "runtime" "cli"; do cd "/tmp/digests/${tag}" IFS=$'\n' read -ra HASHES <<< "$(printf '%s\n' *)" for hash in "${HASHES[@]}"; do - docker image tag "${{ env.IMAGE_NAME }}:${tag}@${hash}" "${{ env.IMAGE_NAME }}:${tag}@${hash}" + # Push the image directly by digest without re-tagging docker push "${{ env.IMAGE_NAME }}:${tag}@${hash}" + done + + # Create manifest list with tagged references + docker buildx imagetools create -t "${{ env.IMAGE_NAME }}:${tag}" "${HASHES[@]/#/${{ env.IMAGE_NAME }}:${tag}@}" + + if [[ "${tag}" == "cli" ]]; then + docker buildx imagetools create -t "${{ env.IMAGE_NAME }}:latest" "${HASHES[@]/#/${{ env.IMAGE_NAME }}:${tag}@}" + + if [[ "${{ contains(github.ref, 'refs/tags/') }}" == true ]]; then + TAG="${GITHUB_REF#refs/*/}" + VERSION="${TAG#v}" + docker buildx imagetools create -t "${{ env.IMAGE_NAME }}:${VERSION}" "${HASHES[@]/#/${{ env.IMAGE_NAME }}:${tag}@}" + fi + fi done - docker buildx imagetools create -t "${{ env.IMAGE_NAME }}:${tag}" "${HASHES[@]/#/${{ env.IMAGE_NAME }}:${tag}@}" - if [[ "${tag}" = "cli" ]]; then - docker buildx imagetools create -t "${{ env.IMAGE_NAME }}:latest" "${HASHES[@]/#/${{ env.IMAGE_NAME }}:${tag}@}" - if [[ "${{ contains(github.ref, 'refs/tags/') }}" = true ]]; then - TAG="${GITHUB_REF#refs/*/}" - VERSION="${TAG#v}" - docker buildx imagetools create -t "${{ env.IMAGE_NAME }}:${VERSION}" "${HASHES[@]/#/${{ env.IMAGE_NAME }}:${tag}@}" - fi - fi - done + From 382d7d6a968592a395407ec5b4a0c9de6bd9a205 Mon Sep 17 00:00:00 2001 From: Yasindu Dissanayake Date: Sun, 10 Nov 2024 00:40:06 +0530 Subject: [PATCH 06/21] Update docker-hub-platform.yml --- .github/workflows/docker-hub-platform.yml | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/.github/workflows/docker-hub-platform.yml b/.github/workflows/docker-hub-platform.yml index 295bfd43e..ab319db11 100644 --- a/.github/workflows/docker-hub-platform.yml +++ b/.github/workflows/docker-hub-platform.yml @@ -149,21 +149,23 @@ jobs: cd "/tmp/digests/${tag}" IFS=$'\n' read -ra HASHES <<< "$(printf '%s\n' *)" for hash in "${HASHES[@]}"; do - # Push the image directly by digest without re-tagging - docker push "${{ env.IMAGE_NAME }}:${tag}@${hash}" + # Tag the image locally using a temporary tag and then push + docker image tag "${{ env.IMAGE_NAME }}:${tag}@${hash}" "${{ env.IMAGE_NAME }}:${tag}-${hash:0:12}" + docker push "${{ env.IMAGE_NAME }}:${tag}-${hash:0:12}" done - # Create manifest list with tagged references - docker buildx imagetools create -t "${{ env.IMAGE_NAME }}:${tag}" "${HASHES[@]/#/${{ env.IMAGE_NAME }}:${tag}@}" - + # Create the manifest list for the current tag + docker buildx imagetools create -t "${{ env.IMAGE_NAME }}:${tag}" "${HASHES[@]/#/${{ env.IMAGE_NAME }}:${tag}-}" + + # Additional tagging for 'cli' and latest if [[ "${tag}" == "cli" ]]; then - docker buildx imagetools create -t "${{ env.IMAGE_NAME }}:latest" "${HASHES[@]/#/${{ env.IMAGE_NAME }}:${tag}@}" + docker buildx imagetools create -t "${{ env.IMAGE_NAME }}:latest" "${HASHES[@]/#/${{ env.IMAGE_NAME }}:${tag}-}" if [[ "${{ contains(github.ref, 'refs/tags/') }}" == true ]]; then TAG="${GITHUB_REF#refs/*/}" VERSION="${TAG#v}" - docker buildx imagetools create -t "${{ env.IMAGE_NAME }}:${VERSION}" "${HASHES[@]/#/${{ env.IMAGE_NAME }}:${tag}@}" + docker buildx imagetools create -t "${{ env.IMAGE_NAME }}:${VERSION}" "${HASHES[@]/#/${{ env.IMAGE_NAME }}:${tag}-}" fi fi done - + From cefeab3f982e7abec84603b31bcb3dd25ad2f261 Mon Sep 17 00:00:00 2001 From: Yasindu Dissanayake Date: Sun, 10 Nov 2024 00:58:20 +0530 Subject: [PATCH 07/21] Update docker-hub-platform.yml --- .github/workflows/docker-hub-platform.yml | 57 +++++++++++------------ 1 file changed, 26 insertions(+), 31 deletions(-) diff --git a/.github/workflows/docker-hub-platform.yml b/.github/workflows/docker-hub-platform.yml index ab319db11..8b5521819 100644 --- a/.github/workflows/docker-hub-platform.yml +++ b/.github/workflows/docker-hub-platform.yml @@ -1,3 +1,4 @@ + name: Build and Push Docker Image for Multiple Architectures on: @@ -14,7 +15,7 @@ concurrency: cancel-in-progress: true env: - IMAGE_NAME: index.docker.io/mryash/core + IMAGE_NAME: index.docker.io/metacall/core BUILDKIT_VERSION: 0.13.0 jobs: @@ -26,13 +27,13 @@ jobs: matrix: platform: - linux/amd64 - # - linux/arm64 - # - linux/riscv64 - # - linux/ppc64le - # - linux/s390x + # - linux/arm64 + # - linux/riscv64 + # - linux/ppc64le + # - linux/s390x - linux/386 - # - linux/arm/v7 - # - linux/arm/v6 + # - linux/arm/v7 + # - linux/arm/v6 # - linux/mips64le # - linux/mips64 @@ -143,29 +144,23 @@ jobs: password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - name: Create manifest list and push + # if: github.ref == 'refs/heads/master' || contains(github.ref, 'refs/tags/') run: | - set -exuo pipefail - for tag in "deps" "dev" "runtime" "cli"; do - cd "/tmp/digests/${tag}" - IFS=$'\n' read -ra HASHES <<< "$(printf '%s\n' *)" - for hash in "${HASHES[@]}"; do - # Tag the image locally using a temporary tag and then push - docker image tag "${{ env.IMAGE_NAME }}:${tag}@${hash}" "${{ env.IMAGE_NAME }}:${tag}-${hash:0:12}" - docker push "${{ env.IMAGE_NAME }}:${tag}-${hash:0:12}" - done - - # Create the manifest list for the current tag - docker buildx imagetools create -t "${{ env.IMAGE_NAME }}:${tag}" "${HASHES[@]/#/${{ env.IMAGE_NAME }}:${tag}-}" - - # Additional tagging for 'cli' and latest - if [[ "${tag}" == "cli" ]]; then - docker buildx imagetools create -t "${{ env.IMAGE_NAME }}:latest" "${HASHES[@]/#/${{ env.IMAGE_NAME }}:${tag}-}" - - if [[ "${{ contains(github.ref, 'refs/tags/') }}" == true ]]; then - TAG="${GITHUB_REF#refs/*/}" - VERSION="${TAG#v}" - docker buildx imagetools create -t "${{ env.IMAGE_NAME }}:${VERSION}" "${HASHES[@]/#/${{ env.IMAGE_NAME }}:${tag}-}" + set -exuo pipefail + for tag in "deps" "dev" "runtime" "cli"; do + cd "/tmp/digests/${tag}" + IMAGE_HASHES=$(printf '${{ env.IMAGE_NAME }}:${tag}@sha256:%s ' *) + for image in ${IMAGE_HASHES}; do + docker image tag ${image} ${{ env.IMAGE_NAME }}:${tag} + docker push ${{ env.IMAGE_NAME }}:${tag} + done + docker buildx imagetools create -t ${{ env.IMAGE_NAME }}:${tag} ${IMAGE_HASHES} + if [[ "${tag}" = "cli" ]]; then + docker buildx imagetools create -t ${{ env.IMAGE_NAME }}:latest ${IMAGE_HASHES} + if [[ "${{ contains(github.ref, 'refs/tags/') }}" = true ]]; then + TAG=${GITHUB_REF#refs/*/} + VERSION=${TAG#v} + docker buildx imagetools create -t ${{ env.IMAGE_NAME }}:${VERSION} ${IMAGE_HASHES} + fi fi - fi - done - + done From 72fa25e029058165dc60e2d9c0233888c660298f Mon Sep 17 00:00:00 2001 From: Yasindu Dissanayake Date: Thu, 14 Nov 2024 03:10:19 +0530 Subject: [PATCH 08/21] Update docker-hub-platform.yml --- .github/workflows/docker-hub-platform.yml | 48 ++++++++++------------- 1 file changed, 21 insertions(+), 27 deletions(-) diff --git a/.github/workflows/docker-hub-platform.yml b/.github/workflows/docker-hub-platform.yml index 8b5521819..839a4977b 100644 --- a/.github/workflows/docker-hub-platform.yml +++ b/.github/workflows/docker-hub-platform.yml @@ -28,7 +28,7 @@ jobs: platform: - linux/amd64 # - linux/arm64 - # - linux/riscv64 + # - linux/riscv64 # - linux/ppc64le # - linux/s390x - linux/386 @@ -73,24 +73,24 @@ jobs: run: | ./docker-compose.sh platform - # - name: Generate images - # if: github.event_name != 'pull_request' - # run: | - # for tag in "deps" "dev" "runtime" "cli"; do - # mkdir -p "/tmp/images/${tag}" - # digest="$(docker images --no-trunc --quiet metacall/core:${tag})" - # echo "FROM metacall/core:${tag}@${digest}" &> "/tmp/images/${tag}/Dockerfile" - # done - - # - name: Build and push by digest (deps) - # id: build - # uses: docker/build-push-action@v6 - # if: github.event_name != 'pull_request' - # with: - # context: /tmp/images/deps/Dockerfile - # platforms: ${{ matrix.platform }} - # labels: ${{ steps.meta.outputs.labels }} - # outputs: type=image,name=docker.io/${{ env.IMAGE_NAME }}:deps,push-by-digest=true,name-canonical=true,push=true + - name: Generate images + if: github.event_name != 'pull_request' + run: | + for tag in "deps" "dev" "runtime" "cli"; do + mkdir -p "/tmp/images/${tag}" + digest="$(docker images --no-trunc --quiet metacall/core:${tag})" + echo "FROM metacall/core:${tag}@${digest}" &> "/tmp/images/${tag}/Dockerfile" + done + + - name: Build and push by digest (deps) + id: build + uses: docker/build-push-action@v6 + if: github.event_name != 'pull_request' + with: + context: /tmp/images/deps/Dockerfile + platforms: ${{ matrix.platform }} + labels: ${{ steps.meta.outputs.labels }} + outputs: type=image,name=docker.io/${{ env.IMAGE_NAME }}:deps,push-by-digest=true,name-canonical=true,push=true - name: Export digests if: github.event_name != 'pull_request' @@ -144,16 +144,10 @@ jobs: password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - name: Create manifest list and push - # if: github.ref == 'refs/heads/master' || contains(github.ref, 'refs/tags/') + # if: github.ref == 'refs/heads/master' || contains(github.ref, 'refs/tags/') run: | - set -exuo pipefail - for tag in "deps" "dev" "runtime" "cli"; do + for tag in "deps"; do cd "/tmp/digests/${tag}" - IMAGE_HASHES=$(printf '${{ env.IMAGE_NAME }}:${tag}@sha256:%s ' *) - for image in ${IMAGE_HASHES}; do - docker image tag ${image} ${{ env.IMAGE_NAME }}:${tag} - docker push ${{ env.IMAGE_NAME }}:${tag} - done docker buildx imagetools create -t ${{ env.IMAGE_NAME }}:${tag} ${IMAGE_HASHES} if [[ "${tag}" = "cli" ]]; then docker buildx imagetools create -t ${{ env.IMAGE_NAME }}:latest ${IMAGE_HASHES} From 21ab099bebe1d1de78f3a8c9c00b44b522974602 Mon Sep 17 00:00:00 2001 From: Yasindu Dissanayake Date: Mon, 25 Nov 2024 22:10:33 +0530 Subject: [PATCH 09/21] Update docker-hub-platform.yml --- .github/workflows/docker-hub-platform.yml | 221 +++++++++++++--------- 1 file changed, 130 insertions(+), 91 deletions(-) diff --git a/.github/workflows/docker-hub-platform.yml b/.github/workflows/docker-hub-platform.yml index 839a4977b..3979ae5cd 100644 --- a/.github/workflows/docker-hub-platform.yml +++ b/.github/workflows/docker-hub-platform.yml @@ -1,4 +1,3 @@ - name: Build and Push Docker Image for Multiple Architectures on: @@ -15,7 +14,9 @@ concurrency: cancel-in-progress: true env: - IMAGE_NAME: index.docker.io/metacall/core + DOCKER_REGISTRY: docker.io + DOCKER_USERNAME: metacall + IMAGE_NAME: core BUILDKIT_VERSION: 0.13.0 jobs: @@ -27,41 +28,29 @@ jobs: matrix: platform: - linux/amd64 - # - linux/arm64 - # - linux/riscv64 - # - linux/ppc64le - # - linux/s390x + - linux/arm64 + - linux/riscv64 + - linux/ppc64le + - linux/s390x - linux/386 - # - linux/arm/v7 - # - linux/arm/v6 - # - linux/mips64le - # - linux/mips64 + - linux/arm/v7 + - linux/arm/v6 steps: - - name: Checkout the code + - name: Checkout Repository uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Docker meta - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ env.IMAGE_NAME }} - - name: Set up QEMU uses: docker/setup-qemu-action@v3 - - name: Docker Setup BuildX + - name: Set up Docker BuildX uses: docker/setup-buildx-action@v3 with: version: v${{ env.BUILDKIT_VERSION }} - - name: Verify Docker BuildX Version - run: docker buildx version - - - name: Authenticate to Docker registry - if: github.event_name != 'pull_request' + - name: Login to Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_HUB_USERNAME }} @@ -71,90 +60,140 @@ jobs: env: METACALL_PLATFORM: ${{ matrix.platform }} run: | + export DOCKER_BUILDKIT=1 + export COMPOSE_DOCKER_CLI_BUILD=1 + export BUILDKIT_PROGRESS=plain + export PROGRESS_NO_TRUNC=1 ./docker-compose.sh platform - - name: Generate images - if: github.event_name != 'pull_request' + - name: Push Platform Images run: | - for tag in "deps" "dev" "runtime" "cli"; do - mkdir -p "/tmp/images/${tag}" - digest="$(docker images --no-trunc --quiet metacall/core:${tag})" - echo "FROM metacall/core:${tag}@${digest}" &> "/tmp/images/${tag}/Dockerfile" - done - - - name: Build and push by digest (deps) - id: build - uses: docker/build-push-action@v6 - if: github.event_name != 'pull_request' - with: - context: /tmp/images/deps/Dockerfile - platforms: ${{ matrix.platform }} - labels: ${{ steps.meta.outputs.labels }} - outputs: type=image,name=docker.io/${{ env.IMAGE_NAME }}:deps,push-by-digest=true,name-canonical=true,push=true - - - name: Export digests - if: github.event_name != 'pull_request' - run: | - PLATFORM=${{ matrix.platform }} - echo "PLATFORM=${PLATFORM//\//-}" >> $GITHUB_ENV + platform_tag=$(echo "${{ matrix.platform }}" | tr '/' '-') for tag in "deps" "dev" "runtime" "cli"; do - mkdir -p "/tmp/digests/${tag}" - digest="$(docker images --no-trunc --quiet metacall/core:${tag})" - touch "/tmp/digests/${tag}/${digest#sha256:}" + docker tag ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag} \ + ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-${platform_tag} + docker push ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-${platform_tag} done - - name: Upload digests - if: github.event_name != 'pull_request' - uses: actions/upload-artifact@v4 - with: - name: digests-${{ env.PLATFORM }} - path: /tmp/digests/* - if-no-files-found: error - retention-days: 1 - - merge: - name: Merge digests for the manifest + manifest: + name: Create and Push Manifest Lists + needs: build runs-on: ubuntu-latest - if: github.event_name != 'pull_request' - needs: - - build steps: - - name: Download digests - uses: actions/download-artifact@v4 + - name: Login to Docker Hub + uses: docker/login-action@v3 with: - path: /tmp/digests - pattern: digests-* - merge-multiple: true + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - with: - version: v${{ env.BUILDKIT_VERSION }} + - name: Create and Push Manifest Lists + run: | + for tag in "deps" "dev" "runtime" "cli"; do + docker manifest create ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag} \ + ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-amd64 \ + ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-arm64 \ + ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-riscv64 \ + ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-ppc64le \ + ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-s390x \ + ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-386 \ + ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-arm-v7 \ + ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-arm-v6 + + docker manifest push ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag} + done - - name: Docker meta - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ env.IMAGE_NAME }} + - name: Create Version-Specific Tags + if: startsWith(github.ref, 'refs/tags/') + run: | + VERSION=${GITHUB_REF#refs/tags/v} + for tag in "deps" "dev" "runtime" "cli"; do + docker manifest create ${DOCKER_USERNAME}/${IMAGE_NAME}:${VERSION}-${tag} \ + ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-amd64 \ + ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-arm64 \ + ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-riscv64 \ + ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-ppc64le \ + ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-s390x \ + ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-386 \ + ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-arm-v7 \ + ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-arm-v6 + + docker manifest push ${DOCKER_USERNAME}/${IMAGE_NAME}:${VERSION}-${tag} + done + + docker manifest create ${DOCKER_USERNAME}/${IMAGE_NAME}:latest \ + ${DOCKER_USERNAME}/${IMAGE_NAME}:cli-linux-amd64 \ + ${DOCKER_USERNAME}/${IMAGE_NAME}:cli-linux-arm64 \ + ${DOCKER_USERNAME}/${IMAGE_NAME}:cli-linux-riscv64 \ + ${DOCKER_USERNAME}/${IMAGE_NAME}:cli-linux-ppc64le \ + ${DOCKER_USERNAME}/${IMAGE_NAME}:cli-linux-s390x \ + ${DOCKER_USERNAME}/${IMAGE_NAME}:cli-linux-386 \ + ${DOCKER_USERNAME}/${IMAGE_NAME}:cli-linux-arm-v7 \ + ${DOCKER_USERNAME}/${IMAGE_NAME}:cli-linux-arm-v6 + + docker manifest push ${DOCKER_USERNAME}/${IMAGE_NAME}:latest + + test: + name: Test CLI Image + needs: manifest + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + platform: + - linux/amd64 + - linux/arm64 + - linux/riscv64 + - linux/ppc64le + - linux/s390x + - linux/386 + - linux/arm/v7 + - linux/arm/v6 - - name: Authenticate to Docker registry + steps: + - name: Login to Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - - name: Create manifest list and push - # if: github.ref == 'refs/heads/master' || contains(github.ref, 'refs/tags/') + - name: Create Test Dockerfile + run: | + cat < Dockerfile + FROM ${DOCKER_USERNAME}/${IMAGE_NAME}:cli + RUN echo "console.log('abcde')" > script.js + RUN metacallcli script.js + EOF + + - name: Build and Test Image + run: | + platform_tag=$(echo "${{ matrix.platform }}" | tr '/' '-') + docker pull ${DOCKER_USERNAME}/${IMAGE_NAME}:cli + docker build --platform ${{ matrix.platform }} -t test-image . + docker run --rm --platform=${{ matrix.platform }} test-image + + cleanup: + name: Cleanup Platform Specific Tags + needs: + - build + - manifest + runs-on: ubuntu-latest + if: always() + steps: + - name: Remove Platform-Specific Tags + env: + DOCKER_USERNAME: ${{ secrets.DOCKER_HUB_USERNAME }} + DOCKER_HUB_ACCESS_TOKEN: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} run: | - for tag in "deps"; do - cd "/tmp/digests/${tag}" - docker buildx imagetools create -t ${{ env.IMAGE_NAME }}:${tag} ${IMAGE_HASHES} - if [[ "${tag}" = "cli" ]]; then - docker buildx imagetools create -t ${{ env.IMAGE_NAME }}:latest ${IMAGE_HASHES} - if [[ "${{ contains(github.ref, 'refs/tags/') }}" = true ]]; then - TAG=${GITHUB_REF#refs/*/} - VERSION=${TAG#v} - docker buildx imagetools create -t ${{ env.IMAGE_NAME }}:${VERSION} ${IMAGE_HASHES} - fi - fi + platforms=("linux-amd64" "linux-arm64" "linux-riscv64" "linux-ppc64le" "linux-s390x" "linux-386" "linux-arm-v7" "linux-arm-v6") + tags=("deps" "dev" "runtime" "cli") + + for platform in "${platforms[@]}"; do + for tag in "${tags[@]}"; do + tag_to_delete="${tag}-${platform}" + echo "Deleting tag: ${tag_to_delete}" + + curl -X DELETE \ + -H "Authorization: Bearer ${DOCKER_HUB_ACCESS_TOKEN}" \ + "https://hub.docker.com/v2/repositories/${DOCKER_USERNAME}/${IMAGE_NAME}/tags/${tag_to_delete}/" + done done From fc2da266ac530a0b417fe407640f414f35440ad9 Mon Sep 17 00:00:00 2001 From: Yasindu Dissanayake Date: Thu, 28 Nov 2024 19:09:34 +0530 Subject: [PATCH 10/21] Update docker-hub-platform.yml --- .github/workflows/docker-hub-platform.yml | 90 +++++++++-------------- 1 file changed, 34 insertions(+), 56 deletions(-) diff --git a/.github/workflows/docker-hub-platform.yml b/.github/workflows/docker-hub-platform.yml index 3979ae5cd..99da99ed2 100644 --- a/.github/workflows/docker-hub-platform.yml +++ b/.github/workflows/docker-hub-platform.yml @@ -15,7 +15,7 @@ concurrency: env: DOCKER_REGISTRY: docker.io - DOCKER_USERNAME: metacall + DOCKER_USERNAME: ${{ secrets.DOCKER_HUB_USERNAME }} IMAGE_NAME: core BUILDKIT_VERSION: 0.13.0 @@ -24,17 +24,8 @@ jobs: name: Build runs-on: ubuntu-latest strategy: - fail-fast: false matrix: - platform: - - linux/amd64 - - linux/arm64 - - linux/riscv64 - - linux/ppc64le - - linux/s390x - - linux/386 - - linux/arm/v7 - - linux/arm/v6 + platform: [linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6] steps: - name: Checkout Repository @@ -60,16 +51,14 @@ jobs: env: METACALL_PLATFORM: ${{ matrix.platform }} run: | - export DOCKER_BUILDKIT=1 - export COMPOSE_DOCKER_CLI_BUILD=1 - export BUILDKIT_PROGRESS=plain - export PROGRESS_NO_TRUNC=1 ./docker-compose.sh platform - name: Push Platform Images run: | platform_tag=$(echo "${{ matrix.platform }}" | tr '/' '-') + echo "Platform Tag: ${platform_tag}" for tag in "deps" "dev" "runtime" "cli"; do + echo "Pushing image for tag: ${tag} with platform: ${platform_tag}" docker tag ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag} \ ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-${platform_tag} docker push ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-${platform_tag} @@ -79,6 +68,10 @@ jobs: name: Create and Push Manifest Lists needs: build runs-on: ubuntu-latest + strategy: + matrix: + platform: [linux-amd64, linux-arm64, linux-riscv64, linux-ppc64le, linux-s390x, linux-386, linux-arm-v7, linux-arm-v6] + steps: - name: Login to Docker Hub uses: docker/login-action@v3 @@ -89,16 +82,13 @@ jobs: - name: Create and Push Manifest Lists run: | for tag in "deps" "dev" "runtime" "cli"; do - docker manifest create ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag} \ - ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-amd64 \ - ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-arm64 \ - ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-riscv64 \ - ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-ppc64le \ - ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-s390x \ - ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-386 \ - ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-arm-v7 \ - ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-arm-v6 - + echo "Creating manifest for tag: $tag" + platform_tags="" + platforms=("linux-amd64" "linux-arm64" "linux-riscv64" "linux-ppc64le" "linux-s390x" "linux-386" "linux-arm-v7" "linux-arm-v6") + for platform in "${platforms[@]}"; do + platform_tags="${platform_tags} ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-${platform}" + done + docker manifest create ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag} ${platform_tags} --amend docker manifest push ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag} done @@ -106,30 +96,23 @@ jobs: if: startsWith(github.ref, 'refs/tags/') run: | VERSION=${GITHUB_REF#refs/tags/v} - for tag in "deps" "dev" "runtime" "cli"; do - docker manifest create ${DOCKER_USERNAME}/${IMAGE_NAME}:${VERSION}-${tag} \ - ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-amd64 \ - ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-arm64 \ - ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-riscv64 \ - ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-ppc64le \ - ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-s390x \ - ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-386 \ - ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-arm-v7 \ - ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-linux-arm-v6 - + tags=("deps" "dev" "runtime" "cli") + platforms=("linux-amd64" "linux-arm64" "linux-riscv64" "linux-ppc64le" "linux-s390x" "linux-386" "linux-arm-v7" "linux-arm-v6") + for tag in "${tags[@]}"; do + platform_tags="" + for platform in "${platforms[@]}"; do + platform_tags="${platform_tags} ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-${platform}" + done + docker manifest create ${DOCKER_USERNAME}/${IMAGE_NAME}:${VERSION}-${tag} ${platform_tags} --amend docker manifest push ${DOCKER_USERNAME}/${IMAGE_NAME}:${VERSION}-${tag} done - docker manifest create ${DOCKER_USERNAME}/${IMAGE_NAME}:latest \ - ${DOCKER_USERNAME}/${IMAGE_NAME}:cli-linux-amd64 \ - ${DOCKER_USERNAME}/${IMAGE_NAME}:cli-linux-arm64 \ - ${DOCKER_USERNAME}/${IMAGE_NAME}:cli-linux-riscv64 \ - ${DOCKER_USERNAME}/${IMAGE_NAME}:cli-linux-ppc64le \ - ${DOCKER_USERNAME}/${IMAGE_NAME}:cli-linux-s390x \ - ${DOCKER_USERNAME}/${IMAGE_NAME}:cli-linux-386 \ - ${DOCKER_USERNAME}/${IMAGE_NAME}:cli-linux-arm-v7 \ - ${DOCKER_USERNAME}/${IMAGE_NAME}:cli-linux-arm-v6 - + # Create and push the 'latest' tag for CLI + cli_platform_tags="" + for platform in ${{ matrix.platform }}; do + cli_platform_tags="${cli_platform_tags} ${DOCKER_USERNAME}/${IMAGE_NAME}:cli-${platform}" + done + docker manifest create ${DOCKER_USERNAME}/${IMAGE_NAME}:latest ${cli_platform_tags} --amend docker manifest push ${DOCKER_USERNAME}/${IMAGE_NAME}:latest test: @@ -137,17 +120,8 @@ jobs: needs: manifest runs-on: ubuntu-latest strategy: - fail-fast: false matrix: - platform: - - linux/amd64 - - linux/arm64 - - linux/riscv64 - - linux/ppc64le - - linux/s390x - - linux/386 - - linux/arm/v7 - - linux/arm/v6 + platform: [linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6] steps: - name: Login to Docker Hub @@ -176,7 +150,11 @@ jobs: needs: - build - manifest + - test runs-on: ubuntu-latest + strategy: + matrix: + platform: [linux-amd64, linux-arm64, linux-riscv64, linux-ppc64le, linux-s390x, linux-386, linux-arm-v7, linux-arm-v6] if: always() steps: - name: Remove Platform-Specific Tags From 371dda8add8dbd5f8e81c8dd38601cf839b8f2d1 Mon Sep 17 00:00:00 2001 From: Vicente Eduardo Ferrer Garcia <7854099+viferga@users.noreply.github.com> Date: Tue, 17 Dec 2024 17:19:24 -0500 Subject: [PATCH 11/21] Update docker-hub-platform.yml --- .github/workflows/docker-hub-platform.yml | 38 +++++++++++++++-------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/.github/workflows/docker-hub-platform.yml b/.github/workflows/docker-hub-platform.yml index 99da99ed2..1ea3c7a80 100644 --- a/.github/workflows/docker-hub-platform.yml +++ b/.github/workflows/docker-hub-platform.yml @@ -24,8 +24,19 @@ jobs: name: Build runs-on: ubuntu-latest strategy: + fail-fast: false matrix: - platform: [linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6] + platform: + - linux/amd64 + - linux/arm64 + - linux/riscv64 + - linux/ppc64le + - linux/s390x + - linux/386 + - linux/arm/v7 + - linux/arm/v6 + # - linux/mips64le + # - linux/mips64 steps: - name: Checkout Repository @@ -68,10 +79,6 @@ jobs: name: Create and Push Manifest Lists needs: build runs-on: ubuntu-latest - strategy: - matrix: - platform: [linux-amd64, linux-arm64, linux-riscv64, linux-ppc64le, linux-s390x, linux-386, linux-arm-v7, linux-arm-v6] - steps: - name: Login to Docker Hub uses: docker/login-action@v3 @@ -120,8 +127,19 @@ jobs: needs: manifest runs-on: ubuntu-latest strategy: + fail-fast: false matrix: - platform: [linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6] + platform: + - linux/amd64 + - linux/arm64 + - linux/riscv64 + - linux/ppc64le + - linux/s390x + - linux/386 + - linux/arm/v7 + - linux/arm/v6 + # - linux/mips64le + # - linux/mips64 steps: - name: Login to Docker Hub @@ -147,14 +165,8 @@ jobs: cleanup: name: Cleanup Platform Specific Tags - needs: - - build - - manifest - - test + needs: [build, manifest, test] runs-on: ubuntu-latest - strategy: - matrix: - platform: [linux-amd64, linux-arm64, linux-riscv64, linux-ppc64le, linux-s390x, linux-386, linux-arm-v7, linux-arm-v6] if: always() steps: - name: Remove Platform-Specific Tags From 2b23989594e34ebcadd0e2c869da495eb7cb3664 Mon Sep 17 00:00:00 2001 From: Vicente Eduardo Ferrer Garcia <7854099+viferga@users.noreply.github.com> Date: Tue, 17 Dec 2024 17:28:57 -0500 Subject: [PATCH 12/21] Update docker-hub-platform.yml --- .github/workflows/docker-hub-platform.yml | 27 ++++++++++------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/.github/workflows/docker-hub-platform.yml b/.github/workflows/docker-hub-platform.yml index 1ea3c7a80..cecc474c2 100644 --- a/.github/workflows/docker-hub-platform.yml +++ b/.github/workflows/docker-hub-platform.yml @@ -15,7 +15,7 @@ concurrency: env: DOCKER_REGISTRY: docker.io - DOCKER_USERNAME: ${{ secrets.DOCKER_HUB_USERNAME }} + DOCKER_USERNAME: metacall IMAGE_NAME: core BUILDKIT_VERSION: 0.13.0 @@ -71,8 +71,8 @@ jobs: for tag in "deps" "dev" "runtime" "cli"; do echo "Pushing image for tag: ${tag} with platform: ${platform_tag}" docker tag ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag} \ - ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-${platform_tag} - docker push ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-${platform_tag} + ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-${platform_tag} + docker push ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-${platform_tag} done manifest: @@ -93,10 +93,10 @@ jobs: platform_tags="" platforms=("linux-amd64" "linux-arm64" "linux-riscv64" "linux-ppc64le" "linux-s390x" "linux-386" "linux-arm-v7" "linux-arm-v6") for platform in "${platforms[@]}"; do - platform_tags="${platform_tags} ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-${platform}" + platform_tags="${platform_tags} ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-${platform}" done - docker manifest create ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag} ${platform_tags} --amend - docker manifest push ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag} + docker manifest create ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${tag} ${platform_tags} --amend + docker manifest push ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${tag} done - name: Create Version-Specific Tags @@ -108,10 +108,10 @@ jobs: for tag in "${tags[@]}"; do platform_tags="" for platform in "${platforms[@]}"; do - platform_tags="${platform_tags} ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-${platform}" + platform_tags="${platform_tags} ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-${platform}" done - docker manifest create ${DOCKER_USERNAME}/${IMAGE_NAME}:${VERSION}-${tag} ${platform_tags} --amend - docker manifest push ${DOCKER_USERNAME}/${IMAGE_NAME}:${VERSION}-${tag} + docker manifest create ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${VERSION}-${tag} ${platform_tags} --amend + docker manifest push ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${VERSION}-${tag} done # Create and push the 'latest' tag for CLI @@ -119,8 +119,8 @@ jobs: for platform in ${{ matrix.platform }}; do cli_platform_tags="${cli_platform_tags} ${DOCKER_USERNAME}/${IMAGE_NAME}:cli-${platform}" done - docker manifest create ${DOCKER_USERNAME}/${IMAGE_NAME}:latest ${cli_platform_tags} --amend - docker manifest push ${DOCKER_USERNAME}/${IMAGE_NAME}:latest + docker manifest create ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:latest ${cli_platform_tags} --amend + docker manifest push ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:latest test: name: Test CLI Image @@ -170,9 +170,6 @@ jobs: if: always() steps: - name: Remove Platform-Specific Tags - env: - DOCKER_USERNAME: ${{ secrets.DOCKER_HUB_USERNAME }} - DOCKER_HUB_ACCESS_TOKEN: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} run: | platforms=("linux-amd64" "linux-arm64" "linux-riscv64" "linux-ppc64le" "linux-s390x" "linux-386" "linux-arm-v7" "linux-arm-v6") tags=("deps" "dev" "runtime" "cli") @@ -183,7 +180,7 @@ jobs: echo "Deleting tag: ${tag_to_delete}" curl -X DELETE \ - -H "Authorization: Bearer ${DOCKER_HUB_ACCESS_TOKEN}" \ + -H "Authorization: Bearer ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}" \ "https://hub.docker.com/v2/repositories/${DOCKER_USERNAME}/${IMAGE_NAME}/tags/${tag_to_delete}/" done done From 6f8238778fc7791832245f08c781fc6483afaabe Mon Sep 17 00:00:00 2001 From: Yasindu Dissanayake Date: Wed, 18 Dec 2024 14:07:05 +0530 Subject: [PATCH 13/21] Update docker-hub-platform.yml --- .github/workflows/docker-hub-platform.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/docker-hub-platform.yml b/.github/workflows/docker-hub-platform.yml index cecc474c2..08975e1ee 100644 --- a/.github/workflows/docker-hub-platform.yml +++ b/.github/workflows/docker-hub-platform.yml @@ -6,6 +6,7 @@ on: branches: - master - develop + - feature/** tags: - 'v*.*.*' From feea9f14e403c0d2de05c3e81a6de15ff3db74a4 Mon Sep 17 00:00:00 2001 From: Yasindu Dissanayake Date: Wed, 18 Dec 2024 14:08:24 +0530 Subject: [PATCH 14/21] Update docker-hub-platform.yml --- .github/workflows/docker-hub-platform.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-hub-platform.yml b/.github/workflows/docker-hub-platform.yml index 08975e1ee..fbddd834e 100644 --- a/.github/workflows/docker-hub-platform.yml +++ b/.github/workflows/docker-hub-platform.yml @@ -6,7 +6,7 @@ on: branches: - master - develop - - feature/** + - multiArchitectureFeature tags: - 'v*.*.*' From da7487f2e016cf7bcef691736032088583c07a0f Mon Sep 17 00:00:00 2001 From: Yasindu Dissanayake Date: Wed, 18 Dec 2024 14:11:27 +0530 Subject: [PATCH 15/21] Update docker-hub-platform.yml --- .github/workflows/docker-hub-platform.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-hub-platform.yml b/.github/workflows/docker-hub-platform.yml index fbddd834e..a5a05bc1d 100644 --- a/.github/workflows/docker-hub-platform.yml +++ b/.github/workflows/docker-hub-platform.yml @@ -16,7 +16,7 @@ concurrency: env: DOCKER_REGISTRY: docker.io - DOCKER_USERNAME: metacall + DOCKER_USERNAME: mryash IMAGE_NAME: core BUILDKIT_VERSION: 0.13.0 From c794cc9873eccb18fd147156d20806e1d34520ef Mon Sep 17 00:00:00 2001 From: Vicente Eduardo Ferrer Garcia <7854099+viferga@users.noreply.github.com> Date: Wed, 18 Dec 2024 11:42:07 -0500 Subject: [PATCH 16/21] Update docker-hub-platform.yml --- .github/workflows/docker-hub-platform.yml | 70 ++++++++--------------- 1 file changed, 25 insertions(+), 45 deletions(-) diff --git a/.github/workflows/docker-hub-platform.yml b/.github/workflows/docker-hub-platform.yml index a5a05bc1d..c0245beda 100644 --- a/.github/workflows/docker-hub-platform.yml +++ b/.github/workflows/docker-hub-platform.yml @@ -65,14 +65,35 @@ jobs: run: | ./docker-compose.sh platform - - name: Push Platform Images + - name: Tag Platform Images run: | platform_tag=$(echo "${{ matrix.platform }}" | tr '/' '-') echo "Platform Tag: ${platform_tag}" for tag in "deps" "dev" "runtime" "cli"; do - echo "Pushing image for tag: ${tag} with platform: ${platform_tag}" docker tag ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag} \ ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-${platform_tag} + done + + - name: Create Test Dockerfile + run: | + cat < Dockerfile + FROM ${DOCKER_USERNAME}/${IMAGE_NAME}:cli + RUN echo "console.log('abcde')" > script.js + RUN metacallcli script.js + EOF + + - name: Build and Test Image + run: | + set -exuo pipefail + platform_tag=$(echo "${{ matrix.platform }}" | tr '/' '-') + docker build --platform ${{ matrix.platform }} -t test-image . + docker run --rm --platform=${{ matrix.platform }} test-image | grep "abcde" + + - name: Push Platform Images + run: | + platform_tag=$(echo "${{ matrix.platform }}" | tr '/' '-') + for tag in "deps" "dev" "runtime" "cli"; do + echo "Pushing image for tag: ${tag} with platform: ${platform_tag}" docker push ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-${platform_tag} done @@ -100,7 +121,7 @@ jobs: docker manifest push ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${tag} done - - name: Create Version-Specific Tags + - name: Create Version Specific Tags if: startsWith(github.ref, 'refs/tags/') run: | VERSION=${GITHUB_REF#refs/tags/v} @@ -123,50 +144,9 @@ jobs: docker manifest create ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:latest ${cli_platform_tags} --amend docker manifest push ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:latest - test: - name: Test CLI Image - needs: manifest - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - platform: - - linux/amd64 - - linux/arm64 - - linux/riscv64 - - linux/ppc64le - - linux/s390x - - linux/386 - - linux/arm/v7 - - linux/arm/v6 - # - linux/mips64le - # - linux/mips64 - - steps: - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKER_HUB_USERNAME }} - password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - - - name: Create Test Dockerfile - run: | - cat < Dockerfile - FROM ${DOCKER_USERNAME}/${IMAGE_NAME}:cli - RUN echo "console.log('abcde')" > script.js - RUN metacallcli script.js - EOF - - - name: Build and Test Image - run: | - platform_tag=$(echo "${{ matrix.platform }}" | tr '/' '-') - docker pull ${DOCKER_USERNAME}/${IMAGE_NAME}:cli - docker build --platform ${{ matrix.platform }} -t test-image . - docker run --rm --platform=${{ matrix.platform }} test-image - cleanup: name: Cleanup Platform Specific Tags - needs: [build, manifest, test] + needs: [build, manifest] runs-on: ubuntu-latest if: always() steps: From 87a948f4bad1dba41b63ad6a6aa9d7942f6fb6d5 Mon Sep 17 00:00:00 2001 From: Yasindu Dissanayake Date: Thu, 19 Dec 2024 17:53:44 +0530 Subject: [PATCH 17/21] Update docker-hub-platform.yml --- .github/workflows/docker-hub-platform.yml | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/.github/workflows/docker-hub-platform.yml b/.github/workflows/docker-hub-platform.yml index c0245beda..1f5d4f822 100644 --- a/.github/workflows/docker-hub-platform.yml +++ b/.github/workflows/docker-hub-platform.yml @@ -29,13 +29,13 @@ jobs: matrix: platform: - linux/amd64 - - linux/arm64 - - linux/riscv64 - - linux/ppc64le - - linux/s390x + # - linux/arm64 + # - linux/riscv64 + # - linux/ppc64le + # - linux/s390x - linux/386 - - linux/arm/v7 - - linux/arm/v6 + # - linux/arm/v7 + # - linux/arm/v6 # - linux/mips64le # - linux/mips64 @@ -89,6 +89,10 @@ jobs: docker build --platform ${{ matrix.platform }} -t test-image . docker run --rm --platform=${{ matrix.platform }} test-image | grep "abcde" + - name: List Docker Images + run: docker images + + - name: Push Platform Images run: | platform_tag=$(echo "${{ matrix.platform }}" | tr '/' '-') From 0cd475640d9a9e2af10d75733e94716e1150d4fb Mon Sep 17 00:00:00 2001 From: Yasindu Dissanayake Date: Thu, 19 Dec 2024 18:04:15 +0530 Subject: [PATCH 18/21] Update docker-hub-platform.yml --- .github/workflows/docker-hub-platform.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docker-hub-platform.yml b/.github/workflows/docker-hub-platform.yml index 1f5d4f822..a9edae857 100644 --- a/.github/workflows/docker-hub-platform.yml +++ b/.github/workflows/docker-hub-platform.yml @@ -65,6 +65,9 @@ jobs: run: | ./docker-compose.sh platform + - name: List Docker Images + run: docker images + - name: Tag Platform Images run: | platform_tag=$(echo "${{ matrix.platform }}" | tr '/' '-') @@ -89,10 +92,6 @@ jobs: docker build --platform ${{ matrix.platform }} -t test-image . docker run --rm --platform=${{ matrix.platform }} test-image | grep "abcde" - - name: List Docker Images - run: docker images - - - name: Push Platform Images run: | platform_tag=$(echo "${{ matrix.platform }}" | tr '/' '-') From adf491731c7cc5ed32cb40914094b3d84a5fe64e Mon Sep 17 00:00:00 2001 From: Yasindu Dissanayake Date: Thu, 19 Dec 2024 18:14:33 +0530 Subject: [PATCH 19/21] Update docker-hub-platform.yml --- .github/workflows/docker-hub-platform.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker-hub-platform.yml b/.github/workflows/docker-hub-platform.yml index a9edae857..8615bc255 100644 --- a/.github/workflows/docker-hub-platform.yml +++ b/.github/workflows/docker-hub-platform.yml @@ -15,7 +15,7 @@ concurrency: cancel-in-progress: true env: - DOCKER_REGISTRY: docker.io + DOCKER_REGISTRY: index.docker.io DOCKER_USERNAME: mryash IMAGE_NAME: core BUILDKIT_VERSION: 0.13.0 @@ -73,7 +73,7 @@ jobs: platform_tag=$(echo "${{ matrix.platform }}" | tr '/' '-') echo "Platform Tag: ${platform_tag}" for tag in "deps" "dev" "runtime" "cli"; do - docker tag ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag} \ + docker tag ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${tag} \ ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-${platform_tag} done From 408f261edb52a9d836cab065c90916d5e4731d5f Mon Sep 17 00:00:00 2001 From: Yasindu Dissanayake Date: Thu, 19 Dec 2024 18:49:37 +0530 Subject: [PATCH 20/21] Update docker-hub-platform.yml --- .github/workflows/docker-hub-platform.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-hub-platform.yml b/.github/workflows/docker-hub-platform.yml index 8615bc255..a7ef18a33 100644 --- a/.github/workflows/docker-hub-platform.yml +++ b/.github/workflows/docker-hub-platform.yml @@ -73,7 +73,7 @@ jobs: platform_tag=$(echo "${{ matrix.platform }}" | tr '/' '-') echo "Platform Tag: ${platform_tag}" for tag in "deps" "dev" "runtime" "cli"; do - docker tag ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${tag} \ + docker tag ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag} \ ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-${platform_tag} done From a97fe027c0531b9a10d57f01a638e08baed34a8f Mon Sep 17 00:00:00 2001 From: Yasindu Dissanayake Date: Mon, 6 Jan 2025 22:07:39 +0530 Subject: [PATCH 21/21] Fix issue in tag --- .github/workflows/docker-hub-platform.yml | 63 ++++++++++------------- 1 file changed, 27 insertions(+), 36 deletions(-) diff --git a/.github/workflows/docker-hub-platform.yml b/.github/workflows/docker-hub-platform.yml index a7ef18a33..db4f323f1 100644 --- a/.github/workflows/docker-hub-platform.yml +++ b/.github/workflows/docker-hub-platform.yml @@ -6,7 +6,6 @@ on: branches: - master - develop - - multiArchitectureFeature tags: - 'v*.*.*' @@ -16,7 +15,7 @@ concurrency: env: DOCKER_REGISTRY: index.docker.io - DOCKER_USERNAME: mryash + DOCKER_USERNAME: metacall IMAGE_NAME: core BUILDKIT_VERSION: 0.13.0 @@ -29,16 +28,13 @@ jobs: matrix: platform: - linux/amd64 - # - linux/arm64 - # - linux/riscv64 - # - linux/ppc64le - # - linux/s390x - linux/386 - # - linux/arm/v7 - # - linux/arm/v6 - # - linux/mips64le - # - linux/mips64 - + - linux/arm64 + - linux/riscv64 + - linux/ppc64le + - linux/s390x + - linux/arm/v7 + - linux/arm/v6 steps: - name: Checkout Repository uses: actions/checkout@v4 @@ -65,33 +61,15 @@ jobs: run: | ./docker-compose.sh platform - - name: List Docker Images - run: docker images - - name: Tag Platform Images run: | platform_tag=$(echo "${{ matrix.platform }}" | tr '/' '-') echo "Platform Tag: ${platform_tag}" for tag in "deps" "dev" "runtime" "cli"; do - docker tag ${DOCKER_USERNAME}/${IMAGE_NAME}:${tag} \ + docker tag metacall/${IMAGE_NAME}:${tag} \ ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-${platform_tag} done - - name: Create Test Dockerfile - run: | - cat < Dockerfile - FROM ${DOCKER_USERNAME}/${IMAGE_NAME}:cli - RUN echo "console.log('abcde')" > script.js - RUN metacallcli script.js - EOF - - - name: Build and Test Image - run: | - set -exuo pipefail - platform_tag=$(echo "${{ matrix.platform }}" | tr '/' '-') - docker build --platform ${{ matrix.platform }} -t test-image . - docker run --rm --platform=${{ matrix.platform }} test-image | grep "abcde" - - name: Push Platform Images run: | platform_tag=$(echo "${{ matrix.platform }}" | tr '/' '-') @@ -100,6 +78,19 @@ jobs: docker push ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-${platform_tag} done + - name: Run Tests + run: | + set -exuo pipefail + platform_tag=$(echo "${{ matrix.platform }}" | tr '/' '-') + cat < Dockerfile.test + FROM ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:cli-${platform_tag} + RUN echo "console.log('abcde')" > script.js + RUN metacallcli script.js + EOF + + docker build --platform ${{ matrix.platform }} -f Dockerfile.test -t test-image . + docker run --rm --platform=${{ matrix.platform }} test-image + manifest: name: Create and Push Manifest Lists needs: build @@ -116,10 +107,11 @@ jobs: for tag in "deps" "dev" "runtime" "cli"; do echo "Creating manifest for tag: $tag" platform_tags="" - platforms=("linux-amd64" "linux-arm64" "linux-riscv64" "linux-ppc64le" "linux-s390x" "linux-386" "linux-arm-v7" "linux-arm-v6") - for platform in "${platforms[@]}"; do - platform_tags="${platform_tags} ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-${platform}" + for platform in "linux/amd64" "linux/386" "linux/arm64" "linux/riscv64" "linux/ppc64le" "linux/s390x" "linux/arm/v7" "linux/arm/v6"; do + platform_tag=$(echo "${platform}" | tr '/' '-') + platform_tags="${platform_tags} ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-${platform_tag}" done + echo "Creating manifest with tags: ${platform_tags}" docker manifest create ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${tag} ${platform_tags} --amend docker manifest push ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${tag} done @@ -129,7 +121,7 @@ jobs: run: | VERSION=${GITHUB_REF#refs/tags/v} tags=("deps" "dev" "runtime" "cli") - platforms=("linux-amd64" "linux-arm64" "linux-riscv64" "linux-ppc64le" "linux-s390x" "linux-386" "linux-arm-v7" "linux-arm-v6") + platforms=("linux/amd64" "linux/386" "linux/arm64" "linux/riscv64" "linux/ppc64le" "linux/s390x" "linux/arm/v7" "linux/arm/v6") for tag in "${tags[@]}"; do platform_tags="" for platform in "${platforms[@]}"; do @@ -139,7 +131,6 @@ jobs: docker manifest push ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${VERSION}-${tag} done - # Create and push the 'latest' tag for CLI cli_platform_tags="" for platform in ${{ matrix.platform }}; do cli_platform_tags="${cli_platform_tags} ${DOCKER_USERNAME}/${IMAGE_NAME}:cli-${platform}" @@ -155,7 +146,7 @@ jobs: steps: - name: Remove Platform-Specific Tags run: | - platforms=("linux-amd64" "linux-arm64" "linux-riscv64" "linux-ppc64le" "linux-s390x" "linux-386" "linux-arm-v7" "linux-arm-v6") + platforms=("linux-amd64" "linux-386" "linux-arm64" "linux-riscv64" "linux-ppc64le" "linux-s390x" "linux-arm-v7" "linux-arm-v6") tags=("deps" "dev" "runtime" "cli") for platform in "${platforms[@]}"; do