name: Docker Build Production on: release: types: [published] jobs: commit-version-bump: name: Commit version bump to repository runs-on: ubuntu-latest permissions: contents: write outputs: commit-sha: ${{ steps.commit.outputs.commit-sha }} steps: - name: Generate GitHub App Token id: app-token uses: actions/create-github-app-token@v1 with: app-id: ${{ secrets.COMMIT_BOT_APP_ID }} private-key: ${{ secrets.COMMIT_BOT_APP_PRIVATE_KEY }} - name: Checkout 🛎 uses: actions/checkout@v4 with: token: ${{ steps.app-token.outputs.token }} - name: Extract Version From Tag Name run: echo "VERSION_NUM=$(echo ${{ github.event.release.tag_name }} | sed 's/^v//')" >> $GITHUB_ENV - name: Configure Git run: | git config user.name "mealie-commit-bot[bot]" git config user.email "mealie-commit-bot[bot]@users.noreply.github.com" - name: Update all version strings run: | sed -i 's/^version = "[^"]*"/version = "${{ env.VERSION_NUM }}"/' pyproject.toml sed -i '/^name = "mealie"$/,/^version = / s/^version = "[^"]*"/version = "${{ env.VERSION_NUM }}"/' uv.lock sed -i 's/\("version": "\)[^"]*"/\1${{ env.VERSION_NUM }}"/' frontend/package.json sed -i 's/:v[0-9]*\.[0-9]*\.[0-9]*/:v${{ env.VERSION_NUM }}/' docs/docs/documentation/getting-started/installation/installation-checklist.md sed -i 's/:v[0-9]*\.[0-9]*\.[0-9]*/:v${{ env.VERSION_NUM }}/' docs/docs/documentation/getting-started/installation/sqlite.md sed -i 's/:v[0-9]*\.[0-9]*\.[0-9]*/:v${{ env.VERSION_NUM }}/' docs/docs/documentation/getting-started/installation/postgres.md - name: Commit and push changes id: commit run: | git add pyproject.toml frontend/package.json uv.lock docs/ git commit -m "chore: bump version to ${{ github.event.release.tag_name }}" git push origin HEAD:${{ github.event.repository.default_branch }} echo "commit-sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT - name: Move release tag to new commit run: | git tag -f ${{ github.event.release.tag_name }} git push -f origin ${{ github.event.release.tag_name }} backend-tests: name: "Backend Server Tests" uses: ./.github/workflows/test-backend.yml needs: - commit-version-bump frontend-tests: name: "Frontend Tests" uses: ./.github/workflows/test-frontend.yml needs: - commit-version-bump build-package: name: Build Package uses: ./.github/workflows/build-package.yml needs: - commit-version-bump with: tag: ${{ github.event.release.tag_name }} publish: permissions: contents: read packages: write # The id-token write permission is needed to connect to Depot.dev # as part of the partial-builder.yml action. It needs to be declared # in the parent action, as noted here: # https://github.com/orgs/community/discussions/76409#discussioncomment-8131390 id-token: write name: Build Tagged Release uses: ./.github/workflows/publish.yml needs: - backend-tests - frontend-tests - build-package with: tag: ${{ github.event.release.tag_name }} tags: | hkotel/mealie:latest ghcr.io/${{ github.repository }}:latest secrets: DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} rollback-on-failure: name: Rollback version commit if deployment fails needs: - commit-version-bump - publish if: always() && needs.publish.result == 'failure' runs-on: ubuntu-latest permissions: contents: write steps: - name: Generate GitHub App Token id: app-token uses: actions/create-github-app-token@v1 with: app-id: ${{ secrets.COMMIT_BOT_APP_ID }} private-key: ${{ secrets.COMMIT_BOT_APP_PRIVATE_KEY }} - name: Checkout 🛎 uses: actions/checkout@v4 with: token: ${{ steps.app-token.outputs.token }} fetch-depth: 0 - name: Configure Git run: | git config user.name "mealie-commit-bot[bot]" git config user.email "mealie-commit-bot[bot]@users.noreply.github.com" - name: Delete release tag run: | git push --delete origin ${{ github.event.release.tag_name }} - name: Revert version bump commit run: | git revert --no-edit ${{ needs.commit-version-bump.outputs.commit-sha }} git push origin HEAD:${{ github.event.repository.default_branch }} notify-discord: name: Notify Discord needs: - publish if: success() runs-on: ubuntu-latest steps: - name: Discord notification env: DISCORD_WEBHOOK: ${{ secrets.DISCORD_RELEASE_WEBHOOK }} uses: Ilshidur/action-discord@0.3.2 with: args: "🚀 Version {{ EVENT_PAYLOAD.release.tag_name }} of Mealie has been released. See the release notes https://github.com/mealie-recipes/mealie/releases/tag/{{ EVENT_PAYLOAD.release.tag_name }}"