diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index ba1b904..8ddeb0e 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -1,17 +1,11 @@ name: Build and Push Docker Image - on: - # ① Run when a release is published … release: types: [published] - - # ② … or when a SemVer-style tag is pushed (with or without “v” prefix) push: tags: - - 'v*' # v1.2.3 - - '*.*.*' # 1.2.3 - - # ③ Manual trigger (optional) + - 'v*' + - '*.*.*' workflow_dispatch: env: @@ -24,11 +18,23 @@ jobs: permissions: contents: read packages: write - steps: - - uses: actions/checkout@v4 + - name: Checkout repository + uses: actions/checkout@v4 - - uses: docker/setup-buildx-action@v3 + - name: Free up disk space + run: | + sudo rm -rf /usr/share/dotnet \ + /usr/local/lib/android \ + /opt/ghc \ + /opt/hostedtoolcache/CodeQL + sudo docker system prune -af + sudo apt-get -y autoremove + sudo apt-get -y autoclean + df -h + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 - name: Log in to Docker Hub uses: docker/login-action@v3 @@ -37,34 +43,27 @@ jobs: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - # --------------------------------------------- - # Tag & label generation – never create :latest - # --------------------------------------------- - name: Extract metadata id: meta uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - flavor: | - latest=false # ban implicit :latest tags: | - # Tags coming from a pushed Git tag type=ref,event=tag + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=raw,value=latest,enable={{is_default_branch}} + type=raw,value={{date 'YYYYMMDD-HHmmss'}}-{{sha}},enable=${{ github.event_name == 'workflow_dispatch' }} + flavor: | + latest=false - # Release event → use the release tag name - type=raw,value=${{ github.event.release.tag_name }},enable=${{ github.event_name == 'release' }} - type=semver,pattern={{version}},enable=${{ github.event_name == 'release' }} - type=semver,pattern={{major}}.{{minor}},enable=${{ github.event_name == 'release' }} - type=semver,pattern={{major}},enable=${{ github.event_name == 'release' }} - - # Fail fast if no tags were produced - - name: Abort when tag list is empty - if: ${{ steps.meta.outputs.tags == '' }} + - name: Debug metadata run: | - echo "::error ::No Docker tags were generated for this event. Did you trigger the workflow without a Git tag or Release tag?" - exit 1 + echo "Tags: ${{ steps.meta.outputs.tags }}" + echo "Labels: ${{ steps.meta.outputs.labels }}" - - name: Build and push image + - name: Build and push Docker image uses: docker/build-push-action@v5 with: context: . @@ -74,4 +73,10 @@ jobs: labels: ${{ steps.meta.outputs.labels }} platforms: linux/amd64 outputs: type=registry - no-cache: true \ No newline at end of file + no-cache: true + + - name: Clean up after build + if: always() + run: | + docker system prune -af --volumes + df -h \ No newline at end of file