Create Release PR #1
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: Create Release PR | |
on: | |
workflow_dispatch: | |
inputs: | |
version: | |
description: 'Version type' | |
required: true | |
type: choice | |
options: | |
- patch | |
- minor | |
- major | |
jobs: | |
create-release-pr: | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
pull-requests: write | |
steps: | |
- name: Checkout | |
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
with: | |
persist-credentials: false | |
- name: Configure Git | |
run: | | |
git config user.name "github-actions[bot]" | |
git config user.email "github-actions[bot]@users.noreply.github.com" | |
- name: Setup Node.js | |
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 | |
with: | |
node-version: 'lts/*' | |
# No need to install dependencies - npm version works without them | |
- name: Version bump | |
id: version | |
run: | | |
npm version "$VERSION_TYPE" --no-git-tag-version | |
VERSION=$(jq -r '.version' package.json) | |
echo "version=$VERSION" >> $GITHUB_OUTPUT | |
env: | |
VERSION_TYPE: ${{ github.event.inputs.version }} | |
- name: Get release notes | |
id: release-notes | |
run: | | |
# Get the default branch | |
DEFAULT_BRANCH=$(gh api "repos/$GITHUB_REPOSITORY" --jq '.default_branch') | |
# Get the latest release tag using GitHub API | |
# Use the exit code to determine if a release exists | |
if LAST_TAG=$(gh api "repos/$GITHUB_REPOSITORY/releases/latest" --jq '.tag_name' 2>/dev/null); then | |
echo "Previous release found: $LAST_TAG" | |
else | |
LAST_TAG="" | |
echo "No previous releases found - this will be the first release" | |
fi | |
# Generate release notes - only include previous_tag_name if we have a valid previous tag | |
echo "Generating release notes for tag: v$VERSION" | |
if [ -n "$LAST_TAG" ]; then | |
echo "Using previous tag: $LAST_TAG" | |
RELEASE_NOTES=$(gh api \ | |
--method POST \ | |
-H "Accept: application/vnd.github+json" \ | |
"/repos/$GITHUB_REPOSITORY/releases/generate-notes" \ | |
-f "tag_name=v$VERSION" \ | |
-f "target_commitish=$DEFAULT_BRANCH" \ | |
-f "previous_tag_name=$LAST_TAG" \ | |
--jq '.body') | |
else | |
echo "Generating notes from all commits" | |
RELEASE_NOTES=$(gh api \ | |
--method POST \ | |
-H "Accept: application/vnd.github+json" \ | |
"/repos/$GITHUB_REPOSITORY/releases/generate-notes" \ | |
-f "tag_name=v$VERSION" \ | |
-f "target_commitish=$DEFAULT_BRANCH" \ | |
--jq '.body') | |
fi | |
# Set release notes as environment variable | |
echo "RELEASE_NOTES<<EOF" >> $GITHUB_ENV | |
echo "$RELEASE_NOTES" >> $GITHUB_ENV | |
echo "EOF" >> $GITHUB_ENV | |
env: | |
GH_TOKEN: ${{ github.token }} | |
VERSION: ${{ steps.version.outputs.version }} | |
GITHUB_REPOSITORY: ${{ github.repository }} | |
- name: Create Pull Request | |
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8 | |
with: | |
branch: release/v${{ steps.version.outputs.version }} | |
delete-branch: true | |
title: "Release v${{ steps.version.outputs.version }}" | |
body: | | |
${{ env.RELEASE_NOTES }} | |
commit-message: "chore: release v${{ steps.version.outputs.version }}" | |
labels: | | |
Type: Release | |
assignees: ${{ github.actor }} | |
draft: true |