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 secrets: DOCKERHUB_USERNAME: required: true DOCKERHUB_TOKEN: required: true 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 #v7.0.0 - name: Set up Docker Buildx uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c #v4.2.0 - name: Log in to Docker Hub uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 #v4.4.0 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Determine tags id: tags env: INPUT_TAG: ${{ inputs.tag }} EVENT_NAME: ${{ github.event_name }} COMMIT_SHA: ${{ github.sha }} run: | TAGS="" if [ -n "$INPUT_TAG" ]; then # Called from release workflow or manual dispatch if [[ ! "$INPUT_TAG" =~ ^[A-Za-z0-9_][A-Za-z0-9_.-]{0,127}$ ]]; then echo "Invalid Docker tag" >&2 exit 1 fi TAGS="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${INPUT_TAG}" TAGS="${TAGS},${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest" elif [ "$EVENT_NAME" = "push" ]; then # Push to main (nightly): tag with nightly and commit SHA SHORT_SHA=${COMMIT_SHA:0:7} TAGS="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:nightly" TAGS="${TAGS},${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:nightly-${SHORT_SHA}" fi printf 'tags=%s\n' "$TAGS" >> "$GITHUB_OUTPUT" - name: Build and push Docker image uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a #v7.3.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