From 2ac2787ec59dd4ca4257dff512d24de025004c5e Mon Sep 17 00:00:00 2001 From: Karmaa <88517757+LukeGus@users.noreply.github.com> Date: Thu, 25 Sep 2025 01:23:21 -0500 Subject: [PATCH] Update docker-image.yml --- .github/workflows/docker-image.yml | 134 +++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 0cb53035..ff8189dd 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -1,5 +1,139 @@ name: Build and Push Docker Image +on: + workflow_dispatch: + inputs: + tag_name: + description: "Custom tag name for the Docker image" + required: false + default: "" + registry: + description: "Docker registry to push to" + required: true + default: "ghcr" + type: choice + options: + - "ghcr" + - "dockerhub" + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v5 + with: + fetch-depth: 1 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + with: + platforms: arm64 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + platforms: linux/amd64,linux/arm64 + driver-opts: | + image=moby/buildkit:master + network=host + + - name: Cache npm dependencies + uses: actions/cache@v4 + with: + path: | + ~/.npm + node_modules + */*/node_modules + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + + - name: Cache Docker layers + uses: actions/cache@v4 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-${{ github.ref_name }}-${{ hashFiles('docker/Dockerfile') }} + restore-keys: | + ${{ runner.os }}-buildx-${{ github.ref_name }}- + ${{ runner.os }}-buildx- + + - name: Login to Docker Registry + if: github.event.inputs.registry == 'dockerhub' || github.event_name == 'push' + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Login to Docker Hub + if: github.event.inputs.registry == 'dockerhub' + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Determine Docker image tag + run: | + echo "REPO_OWNER=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV + if [ "${{ github.event.inputs.tag_name }}" != "" ]; then + IMAGE_TAG="${{ github.event.inputs.tag_name }}" + elif [ "${{ github.ref }}" == "refs/heads/main" ]; then + IMAGE_TAG="latest" + elif [ "${{ github.ref }}" == "refs/heads/development" ]; then + IMAGE_TAG="development-latest" + else + IMAGE_TAG="${{ github.ref_name }}" + fi + echo "IMAGE_TAG=$IMAGE_TAG" >> $GITHUB_ENV + + # Determine registry and image name + if [ "${{ github.event.inputs.registry }}" == "dockerhub" ]; then + echo "REGISTRY=docker.io" >> $GITHUB_ENV + echo "IMAGE_NAME=${{ secrets.DOCKERHUB_USERNAME }}/termix" >> $GITHUB_ENV + else + echo "REGISTRY=ghcr.io" >> $GITHUB_ENV + echo "IMAGE_NAME=${{ env.REPO_OWNER }}/termix" >> $GITHUB_ENV + fi + + - name: Build and Push Multi-Arch Docker Image + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + platforms: linux/amd64,linux/arm64 + tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} + labels: | + org.opencontainers.image.source=https://github.com/${{ github.repository }} + org.opencontainers.image.revision=${{ github.sha }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max + build-args: | + BUILDKIT_INLINE_CACHE=1 + BUILDKIT_CONTEXT_KEEP_GIT_DIR=1 + outputs: type=registry,compression=zstd,compression-level=19 + + - name: Move cache + run: | + rm -rf /tmp/.buildx-cache + mv /tmp/.buildx-cache-new /tmp/.buildx-cache + + - name: Delete all untagged image versions + if: success() && (github.event.inputs.registry != 'dockerhub' && github.event_name == 'push') + uses: quartx-analytics/ghcr-cleaner@v1 + with: + owner-type: user + token: ${{ secrets.GHCR_TOKEN }} + repository-owner: ${{ github.repository_owner }} + delete-untagged: true + + - name: Cleanup Docker Images Locally + if: always() + run: | + docker image prune -af + docker system prune -af --volumesname: Build and Push Docker Image + on: push: branches: