Skip to content

Commit f43c59b

Browse files
committed
feat: Enable publishing for manual merging of PRs
1 parent 75af5f5 commit f43c59b

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
name: release-please
2+
3+
on:
4+
push:
5+
# Detects when a release PR is merged and publishes the package
6+
branches:
7+
- main
8+
9+
permissions:
10+
contents: write
11+
pull-requests: write
12+
13+
jobs:
14+
detect-and-publish:
15+
runs-on: ubuntu-24.04
16+
outputs:
17+
package_released: ${{ steps.detect_package.outputs.package_name }}
18+
package_version: ${{ steps.detect_package.outputs.package_version }}
19+
steps:
20+
- uses: actions/checkout@v5
21+
22+
- name: Node.js LTS
23+
uses: actions/setup-node@v5
24+
with:
25+
node-version: 24.x
26+
27+
- name: Run Release Please to update PRs and create releases
28+
uses: googleapis/release-please-action@v4
29+
id: release
30+
with:
31+
token: ${{ secrets.RELEASE_PLEASE_TOKEN }} # TODO: Change token on prod
32+
33+
- name: Detect which package was released
34+
id: detect_package
35+
run: |
36+
echo "🔍 Checking if a release PR was just merged..."
37+
38+
# Get the commit message of the merge
39+
COMMIT_MSG=$(git log -1 --pretty=format:"%s")
40+
echo "Latest commit: $COMMIT_MSG"
41+
42+
# Check if this is a release PR merge (release-please creates commits like "chore(main): release cli 4.1.2")
43+
if [[ "$COMMIT_MSG" =~ ^chore\(main\):\ release\ ([a-z-]+)\ ([0-9]+\.[0-9]+\.[0-9]+) ]]; then
44+
PACKAGE_NAME="${BASH_REMATCH[1]}"
45+
PACKAGE_VERSION="${BASH_REMATCH[2]}"
46+
47+
echo "🎉 Detected release for package: $PACKAGE_NAME@$PACKAGE_VERSION"
48+
echo "package_name=$PACKAGE_NAME" >> $GITHUB_OUTPUT
49+
echo "package_version=$PACKAGE_VERSION" >> $GITHUB_OUTPUT
50+
echo "package_path=packages/$PACKAGE_NAME" >> $GITHUB_OUTPUT
51+
echo "is_release=true" >> $GITHUB_OUTPUT
52+
else
53+
echo "ℹ️ This commit is not a release PR merge"
54+
echo "is_release=false" >> $GITHUB_OUTPUT
55+
fi
56+
57+
- name: Verify package directory exists
58+
if: steps.detect_package.outputs.is_release == 'true'
59+
run: |
60+
PACKAGE_PATH="${{ steps.detect_package.outputs.package_path }}"
61+
if [ ! -d "$PACKAGE_PATH" ]; then
62+
echo "❌ Package directory $PACKAGE_PATH does not exist!"
63+
exit 1
64+
fi
65+
66+
if [ ! -f "$PACKAGE_PATH/package.json" ]; then
67+
echo "❌ No package.json found in $PACKAGE_PATH!"
68+
exit 1
69+
fi
70+
71+
echo "✅ Package directory $PACKAGE_PATH exists and contains package.json"
72+
73+
- name: Install dependencies
74+
if: steps.detect_package.outputs.is_release == 'true'
75+
run: |
76+
cd "${{ steps.detect_package.outputs.package_path }}"
77+
echo "📦 Installing dependencies for ${{ steps.detect_package.outputs.package_name }}@${{ steps.detect_package.outputs.package_version }}"
78+
npm ci
79+
80+
- name: Publish to NPM
81+
if: steps.detect_package.outputs.is_release == 'true'
82+
run: |
83+
cd "${{ steps.detect_package.outputs.package_path }}"
84+
echo "🚀 Publishing ${{ steps.detect_package.outputs.package_name }}@${{ steps.detect_package.outputs.package_version }} to NPM..."
85+
86+
# TODO: Uncomment the following lines when ready to publish
87+
# npm publish --access public
88+
89+
echo "✅ Successfully published ${{ steps.detect_package.outputs.package_name }}@${{ steps.detect_package.outputs.package_version }}"
90+
91+
create-release:
92+
runs-on: ubuntu-24.04
93+
needs: detect-and-publish
94+
if: needs.detect-and-publish.outputs.package_released != ''
95+
steps:
96+
- uses: actions/checkout@v5
97+
98+
- name: Run Release Please to create tags
99+
uses: googleapis/release-please-action@v4
100+
id: release
101+
with:
102+
token: ${{ secrets.RELEASE_PLEASE_TOKEN }} # TODO: Change token on prod

0 commit comments

Comments
 (0)