diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index aa42b2e6..a616abc4 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -3,103 +3,50 @@ 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" + version: + description: "Version to build, e.g. 1.8.0" required: true - default: "ghcr" - type: choice - options: - - "ghcr" - - "dockerhub" + production: + description: "Set true for prod build, false for dev build" + required: true + default: false jobs: build: runs-on: blacksmith-4vcpu-ubuntu-2404 steps: - - name: Checkout repository - uses: actions/checkout@v5 + - uses: actions/checkout@v5 with: fetch-depth: 1 - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 + - uses: docker/setup-qemu-action@v3 with: - platforms: arm64 + platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6 - - name: Setup Blacksmith Builder - uses: useblacksmith/setup-docker-builder@v1 + - uses: useblacksmith/setup-docker-builder@v1 - - 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 GitHub Container Registry - if: github.event.inputs.registry != 'dockerhub' - uses: docker/login-action@v3 + - uses: docker/login-action@v3 with: registry: ghcr.io username: lukegus password: ${{ secrets.GHCR_TOKEN }} - - name: Login to Docker Hub - if: github.event.inputs.registry == 'dockerhub' - uses: docker/login-action@v3 + - uses: docker/login-action@v3 + if: ${{ github.event.inputs.production == 'true' }} with: username: bugattiguy527 password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Determine Docker image tag - run: | - REPO_OWNER=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]') - echo "REPO_OWNER=$REPO_OWNER" >> $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 - - if [ "${{ github.event.inputs.registry }}" == "dockerhub" ]; then - echo "REGISTRY=docker.io" >> $GITHUB_ENV - echo "IMAGE_NAME=bugattiguy527/termix" >> $GITHUB_ENV - else - echo "REGISTRY=ghcr.io" >> $GITHUB_ENV - echo "IMAGE_NAME=lukegus/termix" >> $GITHUB_ENV - fi - - - name: Build and Push Multi-Arch Docker Image + - name: Build and Push to GHCR uses: useblacksmith/build-push-action@v2 with: context: . file: ./docker/Dockerfile push: true - platforms: linux/amd64,linux/arm64 - tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} + platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6 + tags: | + ${{ github.event.inputs.production == 'true' && format('ghcr.io/lukegus/termix:release-{0}', github.event.inputs.version) || format('ghcr.io/lukegus/termix:dev-{0}', github.event.inputs.version) }} + ${{ github.event.inputs.production == 'true' && 'ghcr.io/lukegus/termix:latest' || '' }} labels: | org.opencontainers.image.source=https://github.com/${{ github.repository }} org.opencontainers.image.revision=${{ github.sha }} @@ -108,8 +55,26 @@ jobs: BUILDKIT_CONTEXT_KEEP_GIT_DIR=1 outputs: type=registry,compression=zstd,compression-level=19 - - name: Cleanup Docker Images Locally - if: always() - run: | + - name: Build and Push to Docker Hub + if: ${{ github.event.inputs.production == 'true' }} + uses: useblacksmith/build-push-action@v2 + with: + context: . + file: ./docker/Dockerfile + push: true + platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6 + tags: | + docker.io/bugattiguy527/termix:release-${{ github.event.inputs.version }} + docker.io/bugattiguy527/termix:latest + labels: | + org.opencontainers.image.source=https://github.com/${{ github.repository }} + org.opencontainers.image.revision=${{ github.sha }} + build-args: | + BUILDKIT_INLINE_CACHE=1 + BUILDKIT_CONTEXT_KEEP_GIT_DIR=1 + outputs: type=registry,compression=zstd,compression-level=19 + + - run: | docker image prune -af docker system prune -af --volumes + if: always()