Changeset AI Release - Create PR #2
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Changeset AI Release | |
| run-name: Changeset AI Release ${{ github.actor != 'R00-B0T' && '- Create PR' || '- Approve & Release' }} | |
| on: | |
| pull_request: | |
| types: [closed, opened, synchronize, labeled] | |
| env: | |
| REPO_PATH: ${{ github.repository }} | |
| GIT_REF: ${{ github.head_ref }} | |
| jobs: | |
| changeset-pr-version-bump: | |
| if: > | |
| github.event_name == 'pull_request' && | |
| github.event.pull_request.merged == true && | |
| github.event.pull_request.base.ref == 'main' && | |
| github.actor != 'R00-B0T' | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| steps: | |
| - name: Git Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ env.GIT_REF }} | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20 | |
| cache: 'npm' | |
| - name: Install Dependencies | |
| run: npm install | |
| - name: Check for changesets | |
| id: check-changesets | |
| run: | | |
| NEW_CHANGESETS=$(find .changeset -name "*.md" ! -name "README.md" | wc -l | tr -d ' ') | |
| echo "Changesets diff with previous version: $NEW_CHANGESETS" | |
| echo "new_changesets=$NEW_CHANGESETS" >> $GITHUB_OUTPUT | |
| - name: Changeset Pull Request | |
| if: steps.check-changesets.outputs.new_changesets != '0' | |
| id: changesets | |
| uses: changesets/action@v1 | |
| with: | |
| commit: "changeset version bump" | |
| title: "Changeset version bump" | |
| version: npm run version-packages # This performs the changeset version bump | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.ROO_GITHUB_TOKEN }} | |
| changeset-pr-approve-merge: | |
| name: Auto approve and merge Bump version PRs | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| if: > | |
| github.event_name == 'pull_request' && | |
| github.event.pull_request.base.ref == 'main' && | |
| github.actor == 'R00-B0T' && | |
| contains(github.event.pull_request.title, 'Changeset version bump') | |
| steps: | |
| - name: Checkout Repo | |
| uses: actions/checkout@v4 | |
| with: | |
| token: ${{ secrets.ROO_GITHUB_TOKEN }} | |
| fetch-depth: 0 | |
| ref: ${{ env.GIT_REF }} | |
| - name: Get version | |
| id: get_version | |
| run: | | |
| VERSION=$(git show HEAD:package.json | jq -r '.version') | |
| echo "version=$VERSION" >> $GITHUB_OUTPUT | |
| PREV_VERSION=$(git show origin/main:package.json | jq -r '.version') | |
| echo "prev_version=$PREV_VERSION" >> $GITHUB_OUTPUT | |
| echo "version=$VERSION" | |
| echo "prev_version=$PREV_VERSION" | |
| - name: Release Notes Prompt | |
| id: ai_prompt | |
| run: | | |
| # Get today's date in YYYY-MM-DD format | |
| TODAY=$(date +'%Y-%m-%d %H:%M') | |
| echo "BASE_PROMPT<<EOF" >> $GITHUB_OUTPUT | |
| echo "Based on the following 'PR Information', please generate concise and informative release notes to be read by developers. | |
| Format the release notes with markdown, and always use this structure: a descriptive and very short title (no more than 8 words) with heading level 2, a paragraph with a summary of changes (no header), and sections for '🚀 New Features & Improvements', '🐛 Bugs Fixed' and '🔧 Other Updates', with heading level 3, skip respectively the sections if not applicable, | |
| finally include the following markdown comment with the PR merged date: <!-- PR_DATE: $TODAY -->. | |
| Avoid being repetitive and focus on the most important changes and their impact, don't mention version bumps, nor changeset files, nor environment variables, nor syntax updates. | |
| PR Information:" >> $GITHUB_OUTPUT | |
| echo "EOF" >> $GITHUB_OUTPUT | |
| # Github outputs: 'RELEASE_NOTES' and 'OPENAI_PROMPT' | |
| - name: AI Release Notes | |
| if: ${{ !contains(github.event.pull_request.labels.*.name, 'openai-edited') }} | |
| uses: RooVetGit/Roo-GHA/.github/actions/ai-release-notes@main | |
| id: ai_release_notes | |
| with: | |
| GHA_PAT: ${{ secrets.ROO_GITHUB_TOKEN }} | |
| OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} | |
| model_name: gpt-4o-mini | |
| repo_path: ${{ env.REPO_PATH }} | |
| git_ref: ${{ env.GIT_REF }} | |
| custom_prompt: ${{ steps.ai_prompt.outputs.BASE_PROMPT }} | |
| - name: Update Changeset Changelog | |
| if: ${{ !contains(github.event.pull_request.labels.*.name, 'openai-edited') }} | |
| env: | |
| VERSION: ${{ steps.get_version.outputs.version }} | |
| PREV_VERSION: ${{ steps.get_version.outputs.prev_version }} | |
| NEW_CONTENT: ${{ steps.ai_release_notes.outputs.RELEASE_NOTES }} | |
| run: python .github/scripts/overwrite_changeset_changelog.py | |
| - name: Push Changelog updates | |
| if: ${{ !contains(github.event.pull_request.labels.*.name, 'openai-edited') }} | |
| run: | | |
| git config user.name "R00-B0T" | |
| git config user.email [email protected] | |
| git status | |
| echo "Updating changelog.md..." | |
| git add CHANGELOG.md | |
| git commit -m "Updating changeset changelog" | |
| echo "--------------------------------------------------------------------------------" | |
| echo "Pushing to remote..." | |
| echo "--------------------------------------------------------------------------------" | |
| git push | |
| - name: Add openai-edited label | |
| if: ${{ !contains(github.event.pull_request.labels.*.name, 'openai-edited') }} | |
| uses: actions/github-script@v7 | |
| with: | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| script: | | |
| await github.rest.issues.addLabels({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: context.issue.number, | |
| labels: ['openai-edited'] | |
| }); | |
| - name: Auto approve PR | |
| if: contains(github.event.pull_request.labels.*.name, 'openai-edited') | |
| uses: hmarr/auto-approve-action@v4 | |
| with: | |
| review-message: "I'm approving since it's a bump version PR" | |
| - name: Enable automerge on PR | |
| if: contains(github.event.pull_request.labels.*.name, 'openai-edited') | |
| run: gh pr merge --squash --auto ${{ github.event.pull_request.number }} | |
| env: | |
| GH_TOKEN: ${{ secrets.ROO_GITHUB_TOKEN }} | |
| github-release: | |
| runs-on: ubuntu-latest | |
| if: > | |
| github.event_name == 'pull_request' && | |
| github.event.pull_request.merged == true && | |
| github.event.pull_request.base.ref == 'main' && | |
| github.actor == 'R00-B0T' && | |
| contains(github.event.pull_request.title, 'Changeset version bump') | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Checkout Repo | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ github.event.pull_request.head.sha }} | |
| fetch-depth: 0 | |
| - name: Get version | |
| id: get_version | |
| run: | | |
| VERSION=$(git show HEAD:package.json | jq -r '.version') | |
| echo "version=$VERSION" >> $GITHUB_OUTPUT | |
| # Outputs: 'release-notes' | |
| - name: Parse CHANGELOG.md | |
| id: changelog | |
| env: | |
| CHANGELOG_PATH: CHANGELOG.md | |
| VERSION: ${{ steps.get_version.outputs.version }} | |
| run: python .github/scripts/parse_changeset_changelog.py | |
| - name: Create or Update Release | |
| uses: softprops/action-gh-release@v2 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| tag_name: v${{ steps.get_version.outputs.version }} | |
| name: Release v${{ steps.get_version.outputs.version }} | |
| draft: false | |
| prerelease: false | |
| append_body: false | |
| make_latest: true | |
| body: ${{ steps.changelog.outputs.release-notes }} |