Spaces:
Running
Running
name: Update Stable Branch | |
on: | |
push: | |
branches: | |
- main | |
permissions: | |
contents: write | |
jobs: | |
prepare-release: | |
if: contains(github.event.head_commit.message, '#release') | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Configure Git | |
run: | | |
git config --global user.name 'github-actions[bot]' | |
git config --global user.email 'github-actions[bot]@users.noreply.github.com' | |
- name: Setup Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '20' | |
- name: Install pnpm | |
uses: pnpm/action-setup@v2 | |
with: | |
version: latest | |
run_install: false | |
- name: Get pnpm store directory | |
id: pnpm-cache | |
shell: bash | |
run: | | |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT | |
- name: Setup pnpm cache | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} | |
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} | |
restore-keys: | | |
${{ runner.os }}-pnpm-store- | |
- name: Get Current Version | |
id: current_version | |
run: | | |
CURRENT_VERSION=$(node -p "require('./package.json').version") | |
echo "version=$CURRENT_VERSION" >> $GITHUB_OUTPUT | |
- name: Install semver | |
run: pnpm add -g semver | |
- name: Determine Version Bump | |
id: version_bump | |
run: | | |
COMMIT_MSG="${{ github.event.head_commit.message }}" | |
if [[ $COMMIT_MSG =~ "#release:major" ]]; then | |
echo "bump=major" >> $GITHUB_OUTPUT | |
elif [[ $COMMIT_MSG =~ "#release:minor" ]]; then | |
echo "bump=minor" >> $GITHUB_OUTPUT | |
else | |
echo "bump=patch" >> $GITHUB_OUTPUT | |
fi | |
- name: Bump Version | |
id: bump_version | |
run: | | |
NEW_VERSION=$(semver -i ${{ steps.version_bump.outputs.bump }} ${{ steps.current_version.outputs.version }}) | |
echo "new_version=$NEW_VERSION" >> $GITHUB_OUTPUT | |
- name: Update Package.json | |
run: | | |
NEW_VERSION=${{ steps.bump_version.outputs.new_version }} | |
pnpm version $NEW_VERSION --no-git-tag-version --allow-same-version | |
- name: Prepare changelog script | |
run: chmod +x .github/scripts/generate-changelog.sh | |
- name: Generate Changelog | |
id: changelog | |
env: | |
NEW_VERSION: ${{ steps.bump_version.outputs.new_version }} | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: .github/scripts/generate-changelog.sh | |
- name: Get the latest commit hash and version tag | |
run: | | |
echo "COMMIT_HASH=$(git rev-parse HEAD)" >> $GITHUB_ENV | |
echo "NEW_VERSION=${{ steps.bump_version.outputs.new_version }}" >> $GITHUB_ENV | |
- name: Commit and Tag Release | |
run: | | |
git pull | |
git add package.json pnpm-lock.yaml changelog.md | |
git commit -m "chore: release version ${{ steps.bump_version.outputs.new_version }}" | |
git tag "v${{ steps.bump_version.outputs.new_version }}" | |
git push | |
git push --tags | |
- name: Update Stable Branch | |
run: | | |
if ! git checkout stable 2>/dev/null; then | |
echo "Creating new stable branch..." | |
git checkout -b stable | |
fi | |
git merge main --no-ff -m "chore: release version ${{ steps.bump_version.outputs.new_version }}" | |
git push --set-upstream origin stable --force | |
- name: Create GitHub Release | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
VERSION="v${{ steps.bump_version.outputs.new_version }}" | |
gh release create "$VERSION" \ | |
--title "Release $VERSION" \ | |
--notes "${{ steps.changelog.outputs.content }}" \ | |
--target stable |