ci: refine release-please make CI release react and jotai packages when #18
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: release-please | |
on: | |
push: | |
branches: | |
- main | |
workflow_dispatch: | |
permissions: | |
contents: write | |
pull-requests: write | |
jobs: | |
release: | |
runs-on: ubuntu-latest | |
outputs: | |
releases_created: ${{ steps.release.outputs.releases_created }} | |
steps: | |
- name: Release Please | |
id: release | |
uses: googleapis/release-please-action@v4 | |
with: | |
# Use manifest mode with workspace-aware config | |
config-file: release-please-config.json | |
manifest-file: .release-please-manifest.json | |
include-component-in-tag: true | |
publish: | |
needs: release | |
if: ${{ needs.release.outputs.releases_created == 'true' }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Install pnpm | |
uses: pnpm/action-setup@v4 | |
with: | |
version: 9 | |
- name: Setup Node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '20' | |
registry-url: 'https://registry.npmjs.org' | |
cache: 'pnpm' | |
- name: Install dependencies | |
run: pnpm install --frozen-lockfile | |
- name: Build all packages | |
run: pnpm -r build | |
- name: Publish changed packages to npm | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | |
run: | | |
set -euo pipefail | |
echo "Finding unpublished workspace packages..." | |
filters="" | |
for pkgjson in packages/*/package.json; do | |
name=$(jq -r '.name' "$pkgjson") | |
version=$(jq -r '.version' "$pkgjson") | |
private=$(jq -r '(.private // false)' "$pkgjson") | |
if [ "$private" = "true" ]; then | |
echo "Skipping private package $name" | |
continue | |
fi | |
if npm view "$name@$version" version > /dev/null 2>&1; then | |
echo "Already published: $name@$version" | |
else | |
echo "Will publish: $name@$version" | |
filters+=" --filter $name" | |
fi | |
done | |
if [ -z "$filters" ]; then | |
echo "No unpublished packages detected. Skipping publish." | |
exit 0 | |
fi | |
# Publish only the unpublished ones in topo order | |
echo "Publishing: $filters" | |
pnpm -r $filters publish --access public --no-git-checks |