name: Build and Push donut-sync Docker Image on: push: branches: [main] paths: - "donut-sync/**" workflow_call: inputs: tag: description: "Docker tag (e.g., v1.0.0)" required: true type: string workflow_dispatch: inputs: tag: description: "Docker tag (e.g., v1.0.0, latest)" required: true default: "latest" permissions: contents: read env: REGISTRY: docker.io IMAGE_NAME: donutbrowser/donut-sync jobs: build-and-push: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2 - name: Set up Docker Buildx uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd #v4.0.0 - name: Log in to Docker Hub uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 #v4.1.0 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Determine tags id: tags run: | TAGS="" INPUT_TAG="${{ inputs.tag }}" if [ -n "$INPUT_TAG" ]; then # Called from release workflow or manual dispatch TAGS="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${INPUT_TAG}" TAGS="${TAGS},${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest" elif [ "${{ github.event_name }}" = "push" ]; then # Push to main (nightly): tag with nightly and commit SHA SHORT_SHA=$(echo "${{ github.sha }}" | cut -c1-7) TAGS="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:nightly" TAGS="${TAGS},${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:nightly-${SHORT_SHA}" fi echo "tags=${TAGS}" >> "$GITHUB_OUTPUT" echo "Tags: ${TAGS}" - name: Build and push Docker image uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f #v7.1.0 with: context: . file: ./donut-sync/Dockerfile push: true tags: ${{ steps.tags.outputs.tags }} cache-from: type=gha cache-to: type=gha,mode=max platforms: linux/amd64,linux/arm64