name: "Release Docker" permissions: contents: read packages: write env: POSTGRES_USER: "unicorn_user" POSTGRES_PASSWORD: "magical_password" POSTGRES_DB: "calendso" DATABASE_HOST: "database:5432" on: push: tags: - "v*" # in case manual trigger is needed workflow_dispatch: inputs: RELEASE_TAG: description: "Tag to build (e.g., v6.0.5)" required: true PUSH_IMAGE: description: "Push the Docker image to DockerHub" type: boolean default: true jobs: release-amd64: name: "Release AMD64" runs-on: blacksmith-4vcpu-ubuntu-2404 steps: - name: checkout uses: actions/checkout@v4 with: ref: ${{ inputs.RELEASE_TAG || github.ref }} - name: "Determine tag" run: | if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then echo "RELEASE_TAG=${{ inputs.RELEASE_TAG }}" >> $GITHUB_ENV else echo "RELEASE_TAG=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV fi - name: Build and test Docker image uses: ./.github/actions/docker-build-and-test with: platform: "linux/amd64" platform-suffix: "" dockerhub-username: ${{ secrets.DOCKERHUB_USERNAME }} dockerhub-token: ${{ secrets.DOCKERHUB_TOKEN }} github-token: ${{ secrets.GITHUB_TOKEN }} postgres-user: ${{ env.POSTGRES_USER }} postgres-password: ${{ env.POSTGRES_PASSWORD }} postgres-db: ${{ env.POSTGRES_DB }} database-host: ${{ env.DATABASE_HOST }} push-image: ${{ (github.event_name == 'push' || inputs.PUSH_IMAGE) && 'true' || 'false' }} use-as-latest: "true" - name: Notify Slack on Success if: success() uses: slackapi/slack-github-action@v1.24.0 with: payload: | { "text": ":large_green_circle: Workflow *${{ github.workflow }}* (AMD64) succeeded in job *${{ github.job }}*.\nSee: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" } env: SLACK_WEBHOOK_URL: ${{ secrets.CI_SLACK_WEBHOOK_URL }} - name: Notify Slack on Failure if: failure() uses: slackapi/slack-github-action@v1.24.0 with: payload: | { "text": ":red_circle: Workflow *${{ github.workflow }}* (AMD64) failed in job *${{ github.job }}*.\nSee: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" } env: SLACK_WEBHOOK_URL: ${{ secrets.CI_SLACK_WEBHOOK_URL }} release-arm: name: "Release ARM" runs-on: ubuntu-24.04-arm steps: - name: checkout uses: actions/checkout@v4 with: ref: ${{ inputs.RELEASE_TAG || github.ref }} - name: "Determine tag" run: | if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then echo "RELEASE_TAG=${{ inputs.RELEASE_TAG }}" >> $GITHUB_ENV else echo "RELEASE_TAG=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV fi - name: Build and test Docker image uses: ./.github/actions/docker-build-and-test with: platform: "arm64" platform-suffix: "-arm" dockerhub-username: ${{ secrets.DOCKERHUB_USERNAME }} dockerhub-token: ${{ secrets.DOCKERHUB_TOKEN }} github-token: ${{ secrets.GITHUB_TOKEN }} postgres-user: ${{ env.POSTGRES_USER }} postgres-password: ${{ env.POSTGRES_PASSWORD }} postgres-db: ${{ env.POSTGRES_DB }} database-host: ${{ env.DATABASE_HOST }} push-image: ${{ (github.event_name == 'push' || inputs.PUSH_IMAGE) && 'true' || 'false' }} - name: Notify Slack on Success if: success() uses: slackapi/slack-github-action@v1.24.0 with: payload: | { "text": ":large_green_circle: Workflow *${{ github.workflow }}* (ARM) succeeded in job *${{ github.job }}*.\nSee: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" } env: SLACK_WEBHOOK_URL: ${{ secrets.CI_SLACK_WEBHOOK_URL }} - name: Notify Slack on Failure if: failure() uses: slackapi/slack-github-action@v1.24.0 with: payload: | { "text": ":red_circle: Workflow *${{ github.workflow }}* (ARM) failed in job *${{ github.job }}*.\nSee: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" } env: SLACK_WEBHOOK_URL: ${{ secrets.CI_SLACK_WEBHOOK_URL }}