name: Publish Release # This workflow is triggered ONLY when a new release is created in GitHub on: release: types: [ created ] jobs: build: name: Build Release Artifact runs-on: ubuntu-latest steps: - name: Checkout code # Checks out the specific Git tag associated with the release uses: actions/checkout@v4 - name: Set up JDK 21 uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '21' cache: 'gradle' - name: Build with Gradle run: ./gradlew build - name: Upload JAR artifact for publisher job uses: actions/upload-artifact@v4 with: name: app-jar path: build/libs/*.jar # Adjust path if needed retention-days: 1 publish: name: Publish to GitHub Container Registry runs-on: ubuntu-latest needs: build # This job waits for the 'build' job to succeed permissions: contents: read packages: write steps: - name: Checkout code uses: actions/checkout@v4 - name: Download JAR artifact from build job uses: actions/download-artifact@v4 with: name: app-jar path: build/libs - name: Log in to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Extract metadata for Docker id: meta uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository }} tags: | # Tag with the release version (e.g., v1.2.3) type=raw,value=${{ github.ref_name }} # Also tag as 'latest' type=raw,value=latest - name: Build and push Docker image uses: docker/build-push-action@v6 with: context: . push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }}