diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 0000000..7aa8ef7 --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,11 @@ +changelog: + categories: + - title: 🏕 Features + labels: + - '*' + exclude: + labels: + - dependencies + - title: 👒 Dependencies + labels: + - dependencies diff --git a/.github/workflows/cd-build-image.yml b/.github/workflows/cd-prod.yml similarity index 54% rename from .github/workflows/cd-build-image.yml rename to .github/workflows/cd-prod.yml index 46bd21f..038d307 100644 --- a/.github/workflows/cd-build-image.yml +++ b/.github/workflows/cd-prod.yml @@ -1,34 +1,47 @@ -name: Build & Publish Docker Image +name: Build & Deploy to PROD on: release: types: [published] + branches: [main] + + workflow_call: + inputs: + tag_name: + description: Docker image tag / Release tag + required: true + type: string + target_commitish: + description: Branch to build from + required: true + type: string jobs: deploy: - if: github.event.release.target_commitish == 'main' - name: Build & Deploy spacedf-backend Docker Image + if: ${{ inputs.target_commitish == 'main' || github.event.release.target_commitish == 'main' }} + name: Build & Deploy runs-on: ubuntu-latest permissions: contents: read packages: write + env: + RELEASE_TAG: ${{ inputs.tag_name || github.event.release.tag_name }} + steps: - name: Checkout code uses: actions/checkout@v4 with: - ref: ${{ github.event.release.tag_name }} - + ref: ${{ env.RELEASE_TAG }} + # Enable multi-arch - name: Set up QEMU uses: docker/setup-qemu-action@v3 - # Enable buildx - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - # Login to GHCR - name: Login to GHCR uses: docker/login-action@v3 with: @@ -36,18 +49,16 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - # Generate Docker metadata - - name: Docker metadata + - name: Generate Docker metadata id: meta uses: docker/metadata-action@v5 with: images: ghcr.io/${{ github.repository }} tags: | - type=semver,pattern={{version}},value=${{ github.event.release.tag_name }} - type=semver,pattern={{major}}.{{minor}},value=${{ github.event.release.tag_name }} - type=semver,pattern={{major}},value=${{ github.event.release.tag_name }} + type=semver,pattern={{version}},value=${{ env.RELEASE_TAG }} + type=semver,pattern={{major}}.{{minor}},value=${{ env.RELEASE_TAG }} + type=semver,pattern={{major}},value=${{ env.RELEASE_TAG }} - # Build & Push image - name: Build & Push Docker image uses: docker/build-push-action@v5 with: @@ -57,5 +68,4 @@ jobs: platforms: linux/amd64,linux/arm64 tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} - secrets: | - GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} + secrets: github_token=${{ secrets.GH_PAT }} diff --git a/.github/workflows/dispatch-release.yml b/.github/workflows/dispatch-release.yml new file mode 100644 index 0000000..2bd6d32 --- /dev/null +++ b/.github/workflows/dispatch-release.yml @@ -0,0 +1,33 @@ +name: Dispatch Release & Deploy to PROD +on: + repository_dispatch: + types: + - release-mpa-service + +jobs: + create-release: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v6 + + - name: Client payload + run: | + cat <<'EOF' + ${{ toJson(github.event.client_payload) }} + EOF + + - name: Release + if: ${{ github.event.client_payload.release_target_commitish == 'main' }} + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ github.event.client_payload.release_tag }} + generate_release_notes: true + target_commitish: 'main' + + deploy-prod: + uses: ./.github/workflows/cd-prod.yml + needs: [create-release] + with: + tag_name: ${{ github.event.client_payload.release_tag }} + target_commitish: ${{ github.event.client_payload.release_target_commitish }}