diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 9fd2336..ade7595 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -2,9 +2,16 @@ name: Publish Docker Image on: push: + branches: + - main tags: - "v*" workflow_dispatch: + inputs: + platforms: + description: "Comma-separated Docker platforms to build" + required: false + default: "linux/amd64" env: IMAGE_NAME: webchat2api @@ -22,7 +29,44 @@ jobs: - name: Checkout uses: actions/checkout@v4 + - name: Prepare Docker build settings + id: build_settings + shell: bash + env: + REQUESTED_PLATFORMS: ${{ github.event.inputs.platforms || '' }} + run: | + if [[ "${GITHUB_EVENT_NAME}" == "workflow_dispatch" && -n "${REQUESTED_PLATFORMS}" ]]; then + platforms="${REQUESTED_PLATFORMS}" + elif [[ "${GITHUB_REF_TYPE}" == "tag" ]]; then + platforms="linux/amd64,linux/arm64" + else + platforms="linux/amd64" + fi + + platforms="${platforms//[[:space:]]/}" + if [[ -z "${platforms}" ]]; then + platforms="linux/amd64" + fi + + IFS=',' read -ra requested_platforms <<< "${platforms}" + for platform in "${requested_platforms[@]}"; do + if [[ "${platform}" != "linux/amd64" && "${platform}" != "linux/arm64" ]]; then + echo "Unsupported Docker platform: ${platform}. Supported platforms: linux/amd64,linux/arm64" >&2 + exit 1 + fi + done + + if [[ "${platforms}" == *,* ]]; then + cache_mode="max" + else + cache_mode="min" + fi + + echo "platforms=${platforms}" >> "$GITHUB_OUTPUT" + echo "cache_mode=${cache_mode}" >> "$GITHUB_OUTPUT" + - name: Set up QEMU + if: ${{ contains(steps.build_settings.outputs.platforms, 'arm') }} uses: docker/setup-qemu-action@v3 with: platforms: arm64 @@ -64,9 +108,9 @@ jobs: context: . file: ./Dockerfile target: app - platforms: linux/amd64,linux/arm64 + platforms: ${{ steps.build_settings.outputs.platforms }} push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha - cache-to: type=gha,mode=max + cache-to: type=gha,mode=${{ steps.build_settings.outputs.cache_mode }}