Skip to content

ci: refine release-please make CI release react and jotai packages when #18

ci: refine release-please make CI release react and jotai packages when

ci: refine release-please make CI release react and jotai packages when #18

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