diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index fb3ec69d..1fe96978 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -6,23 +6,176 @@ on: schedule: - cron: '@monthly' jobs: - job1: +# build-amd64: +# runs-on: linux_amd +# name: Build AMD64 +# container: +# image: catthehacker/ubuntu:act-latest +# env: +# RUNNER_TOOL_CACHE: /toolcache +# strategy: +# matrix: +# python-version: ['3.10', '3.11', '3.12', '3.13'] +# outputs: +# digest-3-10: ${{ steps.digest.outputs.DIGEST_3_10 }} +# digest-3-11: ${{ steps.digest.outputs.DIGEST_3_11 }} +# digest-3-12: ${{ steps.digest.outputs.DIGEST_3_12 }} +# digest-3-13: ${{ steps.digest.outputs.DIGEST_3_13 }} +# steps: +# - name: Checkout +# uses: actions/checkout@v4 +# with: +# github-server-url: https://gitea.technocloud.ee +# - name: Set up Docker BuildX +# uses: docker/setup-buildx-action@v3 +# with: +# platforms: linux/amd64 +# - name: Login to DockerHub +# uses: docker/login-action@v3 +# with: +# registry: gitea.technocloud.ee +# username: ${{ secrets.DOCKER_USERNAME }} +# password: ${{ secrets.DOCKER_PASSWORD }} +# - name: Get Meta +# id: meta +# run: | +# echo "REPO_NAME=${GITHUB_REPOSITORY}" >> $GITHUB_OUTPUT +# - name: Build and Push AMD64 +# id: build-docker +# uses: docker/build-push-action@v5 +# with: +# context: . +# file: Dockerfile.python${{ matrix.python-version }} +# platforms: linux/amd64 +# push: true +# provenance: false +# outputs: type=image,name=gitea.technocloud.ee/${{ steps.meta.outputs.REPO_NAME }},push-by-digest=true +# - name: Summarize the Docker digest +# id: digest +# run: | +# PY_VERSION=${{ matrix.python-version }} +# PY_VERSION_MOD=$(echo $PY_VERSION | sed 's/\./_/g') +# echo DIGEST_${PY_VERSION_MOD}="${{ steps.build-docker.outputs.digest }}" >> $GITHUB_OUTPUT + + build-arm64: runs-on: ubuntu-latest + name: Build ARM64 + container: + image: catthehacker/ubuntu:act-latest + env: + RUNNER_TOOL_CACHE: /toolcache outputs: - output_1: ${{ steps.gen_output.outputs.output_1 }} - output_2: ${{ steps.gen_output.outputs.output_2 }} - output_3: ${{ steps.gen_output.outputs.output_3 }} + digest-3-10: ${{ steps.digest.outputs.DIGEST_3_10 }} + digest-3-11: ${{ steps.digest.outputs.DIGEST_3_11 }} + digest-3-12: ${{ steps.digest.outputs.DIGEST_3_12 }} + digest-3-13: ${{ steps.digest.outputs.DIGEST_3_13 }} strategy: matrix: - version: [1, 2, 3] + python-version: ['3.10', '3.11', '3.12', '3.13'] steps: - - name: Generate output - id: gen_output + - name: Checkout + uses: actions/checkout@v4 + with: + github-server-url: https://gitea.technocloud.ee + - name: Set up Docker BuildX + uses: docker/setup-buildx-action@v3 + with: + platforms: linux/arm64 + - name: Login to DockerHub + uses: docker/login-action@v3 + with: + registry: gitea.technocloud.ee + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + - name: Get Meta + id: meta run: | - version="${{ matrix.version }}" - echo "output_${version}=${version}" >> "$GITHUB_OUTPUT" - job2: + echo "REPO_NAME=${GITHUB_REPOSITORY}" >> $GITHUB_OUTPUT + - name: Build and Push ARM64 + id: build-docker + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile.python${{ matrix.python-version }} + platforms: linux/arm64 + push: true + provenance: false + outputs: type=image,name=gitea.technocloud.ee/${{ steps.meta.outputs.REPO_NAME }},push-by-digest=true + - name: Save digest to artifact + run: | + PY_VERSION=${{ matrix.python-version }} + PY_VERSION_MOD=$(echo $PY_VERSION | sed 's/\./_/g') + mkdir -p ./digests + echo "${{ steps.build-docker.outputs.digest }}" > ./digests/DIGEST_${PY_VERSION_MOD} + + - name: Upload digest artifact + uses: actions/upload-artifact@v4 + with: + name: docker-digests + path: ./digests/ + retention-days: 1 + + - name: Download previous digests + uses: actions/download-artifact@v4 + with: + name: docker-digests + path: ./digests + + - name: Combine all digests + id: digest + run: | + PY_VERSION=${{ matrix.python-version }} + PY_VERSION_MOD=$(echo $PY_VERSION | sed 's/\./_/g') + + # Current version + echo DIGEST_${PY_VERSION_MOD}="${{ steps.build-docker.outputs.digest }}" + echo DIGEST_${PY_VERSION_MOD}="${{ steps.build-docker.outputs.digest }}" >> $GITHUB_OUTPUT + echo "Contents of ./digests/:" + ls -la ./digests/ + # Read other versions from artifacts + for f in ./digests/DIGEST_*; do + if [ -f "$f" ]; then + version=$(basename "$f") + digest=$(cat "$f") + echo "$version=$digest" + echo "$version=$digest" >> $GITHUB_OUTPUT + fi + done + + + create-manifest: + needs: [build-arm64] runs-on: ubuntu-latest - needs: [job1] + name: Create Multi-arch Manifest + strategy: + matrix: + python-version: ['3.10', '3.11', '3.12', '3.13'] steps: - - run: echo '${{ toJSON(needs.job1.outputs) }}' \ No newline at end of file + - name: Login to Docker Registry + uses: docker/login-action@v3 + with: + registry: gitea.technocloud.ee + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Set up Docker BuildX + uses: docker/setup-buildx-action@v3 + with: + driver: docker-container + + - name: Get Repository Metadata + id: meta + run: | + echo "PACKAGE=gitea.technocloud.ee/${GITHUB_REPOSITORY}" >> $GITHUB_OUTPUT + echo "PY_VERSION=digest-$(echo ${{ matrix.python-version }} | sed 's/\./-/g')" >> $GITHUB_OUTPUT + + - name: Create and Push Multi-arch Manifest + run: | + echo '${{ toJSON(needs.build-arm64.outputs) }}' + echo '${{ toJSON(needs.build-amd64.outputs) }}' + echo '${{ steps.meta.outputs.PY_VERSION }}' + ARM_DIGEST=${{ needs.build-arm64.outputs[steps.meta.outputs.PY_VERSION] }} + AMD_DIGEST=${{ needs.build-amd64.outputs[steps.meta.outputs.PY_VERSION] }} + IMAGE_NAME=${{ steps.meta.outputs.PACKAGE }}:python${{ matrix.python-version }} + docker manifest create $IMAGE_NAME --amend ${{ steps.meta.outputs.PACKAGE }}@${ARM_DIGEST} --amend ${{ steps.meta.outputs.PACKAGE }}@${AMD_DIGEST} + docker manifest push $IMAGE_NAME \ No newline at end of file