Skip to content

Commit 566f73c

Browse files
authored
fix(worfklows): fix concurrency of version bump and release workflows. Version bump now triggers release workflow on success. (#41)
1 parent 524ac86 commit 566f73c

File tree

2 files changed

+59
-9
lines changed

2 files changed

+59
-9
lines changed

.github/workflows/release.yml

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@ on:
1313
- patch
1414
- minor
1515
- major
16-
push:
17-
branches: [ main ]
16+
version:
17+
description: 'Version number (for auto-triggered releases)'
18+
required: false
19+
type: 'string'
1820

1921
jobs:
2022
release:
@@ -24,14 +26,13 @@ jobs:
2426
contents: write
2527
issues: write
2628
pull-requests: write
27-
if: "!contains(github.event.head_commit.message, 'skip ci') && !contains(github.event.head_commit.message, 'chore(release)')"
2829

2930
steps:
3031
- name: Checkout
3132
uses: actions/checkout@v4
3233
with:
3334
fetch-depth: 0
34-
token: ${{ secrets.GH_TOKEN || secrets.GITHUB_TOKEN }}
35+
token: ${{ secrets.GITHUB_TOKEN }}
3536

3637
- name: Setup Node.js
3738
uses: actions/setup-node@v4
@@ -70,13 +71,48 @@ jobs:
7071
- name: Test
7172
run: pnpm test:ci
7273

74+
- name: Check for Draft Release
75+
if: github.event.inputs.version != ''
76+
env:
77+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
78+
run: |
79+
VERSION="${{ github.event.inputs.version }}"
80+
echo "Checking for draft release v$VERSION"
81+
82+
# Check if draft release exists
83+
RELEASE_EXISTS=$(gh release view v$VERSION --json isDraft 2>/dev/null || echo "{}")
84+
IS_DRAFT=$(echo "$RELEASE_EXISTS" | jq -r '.isDraft // false')
85+
86+
if [ "$IS_DRAFT" != "true" ]; then
87+
echo "No draft release found for v$VERSION, creating one..."
88+
gh release create v$VERSION \
89+
--draft \
90+
--title "v$VERSION" \
91+
--notes "Release v$VERSION"
92+
else
93+
echo "Draft release v$VERSION found"
94+
fi
95+
7396
- name: Release
7497
env:
75-
GITHUB_TOKEN: ${{ secrets.GH_TOKEN || secrets.GITHUB_TOKEN }}
98+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
7699
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
77100
run: |
78-
if [ "${{ github.event_name }}" = "workflow_dispatch" ] && [ "${{ github.event.inputs.releaseType }}" != "auto" ]; then
101+
if [ "${{ github.event.inputs.releaseType }}" != "auto" ]; then
102+
# Manual release with specific type
79103
pnpm release --release-as ${{ github.event.inputs.releaseType }}
80104
else
105+
# Auto release (triggered by version-bump workflow)
81106
pnpm release
82107
fi
108+
109+
- name: Publish Draft Release
110+
if: github.event.inputs.version != ''
111+
env:
112+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
113+
run: |
114+
VERSION="${{ github.event.inputs.version }}"
115+
echo "Publishing draft release v$VERSION"
116+
117+
# Convert draft to published release
118+
gh release edit v$VERSION --draft=false

.github/workflows/version-bump.yml

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,15 @@ jobs:
1212
contents: write
1313
issues: write
1414
pull-requests: write
15+
actions: write # Added for triggering workflows
1516
if: '!contains(github.event.head_commit.message, ''skip ci'') && !contains(github.event.head_commit.message, ''chore(release)'')'
1617

1718
steps:
1819
- name: Checkout
1920
uses: actions/checkout@v4
2021
with:
2122
fetch-depth: 0
22-
token: ${{ secrets.GH_TOKEN || secrets.GITHUB_TOKEN }}
23+
token: ${{ secrets.GITHUB_TOKEN }}
2324

2425
- name: Setup Node.js
2526
uses: actions/setup-node@v4
@@ -59,24 +60,27 @@ jobs:
5960

6061
- name: Test Release (Dry Run)
6162
env:
62-
GITHUB_TOKEN: ${{ secrets.GH_TOKEN || secrets.GITHUB_TOKEN }}
63+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
6364
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
6465
run: pnpm release:dry-run
6566

6667
- name: Update or Create GitHub Release Draft
68+
id: create_release
6769
env:
68-
GITHUB_TOKEN: ${{ secrets.GH_TOKEN || secrets.GITHUB_TOKEN }}
70+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
6971
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
7072
run: |
7173
# Get the next version from semantic-release
7274
VERSION=$(npx semantic-release --dry-run | grep -oP 'The next release version is \K[0-9]+\.[0-9]+\.[0-9]+' || echo "")
7375
7476
if [ -z "$VERSION" ]; then
7577
echo "No version change detected, skipping release creation"
78+
echo "version=" >> $GITHUB_OUTPUT
7679
exit 0
7780
fi
7881
7982
echo "Next version will be: $VERSION"
83+
echo "version=$VERSION" >> $GITHUB_OUTPUT
8084
8185
# Update package.json version
8286
npm version $VERSION --no-git-tag-version
@@ -147,3 +151,13 @@ jobs:
147151
git add package.json
148152
git commit -m "chore(release): bump version to $VERSION [skip ci]"
149153
git push
154+
155+
- name: Trigger Release Workflow
156+
if: steps.create_release.outputs.version != ''
157+
env:
158+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
159+
run: |
160+
echo "Triggering release workflow for version ${{ steps.create_release.outputs.version }}"
161+
gh workflow run release.yml \
162+
--field releaseType=auto \
163+
--field version=${{ steps.create_release.outputs.version }}

0 commit comments

Comments
 (0)