Merge pull request #81 from nativeui-org/changeset-release/main #221
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 (Changesets) | |
| on: | |
| push: | |
| branches: [main] | |
| tags-ignore: | |
| - '**' | |
| jobs: | |
| release: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| id-token: write | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| token: ${{ secrets.CHANGESETS_TOKEN }} | |
| - uses: pnpm/action-setup@v4 | |
| with: { version: 10 } | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20 | |
| registry-url: https://registry.npmjs.org/ | |
| - run: pnpm install --frozen-lockfile | |
| - name: Build packages | |
| run: | | |
| pnpm -r --filter @native-ui-org/native-modules run build | |
| pnpm install --frozen-lockfile | |
| pnpm -r --filter @native-ui-org/primitives run build | |
| - name: Configure pnpm for npm | |
| run: | | |
| echo "@native-ui-org:registry=https://registry.npmjs.org/" >> ~/.npmrc | |
| echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" >> ~/.npmrc | |
| env: | |
| NPM_TOKEN: ${{ secrets.NPM_TOKEN }} | |
| - name: Create Release PR or Publish | |
| id: changesets | |
| uses: changesets/action@v1 | |
| with: | |
| version: pnpm changeset version | |
| publish: pnpm changeset publish --filter '!@native-ui-org/sandbox' --filter '!@native-ui-org/website' | |
| createGithubReleases: false | |
| title: "chore: release primitives" | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.CHANGESETS_TOKEN }} | |
| NPM_TOKEN: ${{ secrets.NPM_TOKEN }} | |
| NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | |
| - name: Create custom GitHub Releases | |
| if: steps.changesets.outputs.published == 'true' | |
| run: | | |
| for package in $(echo '${{ steps.changesets.outputs.publishedPackages }}' | jq -r '.[] | @base64'); do | |
| pkg=$(echo "$package" | base64 --decode | jq -r '.name') | |
| version=$(echo "$package" | base64 --decode | jq -r '.version') | |
| shortName=$(echo "$pkg" | sed 's/@native-ui-org\///') | |
| tag="${shortName}@${version}" | |
| # Skip if tag already exists | |
| if git rev-parse "$tag" >/dev/null 2>&1; then | |
| echo "ℹ️ Tag ${tag} already exists, skipping this package" | |
| continue | |
| fi | |
| git tag "$tag" | |
| git push origin "$tag" | |
| changelogContent="" | |
| if [ "$shortName" = "sandbox" ]; then | |
| changelogFile="apps/sandbox/CHANGELOG.md" | |
| else | |
| changelogFile="packages/${shortName}/CHANGELOG.md" | |
| fi | |
| if [ -f "$changelogFile" ]; then | |
| changelogContent=$(awk "/^## \[${version}\]/,/^## \[/" "$changelogFile" | head -n -1) | |
| fi | |
| releaseTitle="${shortName}@${version}" | |
| releaseNotesFile=$(mktemp) | |
| echo "## 🚀 Release ${version}" >> "$releaseNotesFile" | |
| echo "" >> "$releaseNotesFile" | |
| if [ -n "$changelogContent" ]; then | |
| echo "### 📝 Changelog" >> "$releaseNotesFile" | |
| echo "" >> "$releaseNotesFile" | |
| echo "$changelogContent" >> "$releaseNotesFile" | |
| echo "" >> "$releaseNotesFile" | |
| fi | |
| echo "### 📥 Installation" >> "$releaseNotesFile" | |
| echo "" >> "$releaseNotesFile" | |
| echo "\`\`\`bash" >> "$releaseNotesFile" | |
| echo "npm install ${pkg}" >> "$releaseNotesFile" | |
| echo "\`\`\`" >> "$releaseNotesFile" | |
| echo "" >> "$releaseNotesFile" | |
| case "$shortName" in | |
| "primitives") | |
| echo "### 📚 Documentation" >> "$releaseNotesFile" | |
| echo "" >> "$releaseNotesFile" | |
| echo "Visit [primitives.nativeui.io](https://primitives.nativeui.io) for full documentation." >> "$releaseNotesFile" | |
| ;; | |
| "native-modules") | |
| echo "### 📚 Documentation" >> "$releaseNotesFile" | |
| echo "" >> "$releaseNotesFile" | |
| echo "Visit [primitives.nativeui.io](https://primitives.nativeui.io) for full documentation." >> "$releaseNotesFile" | |
| ;; | |
| esac | |
| gh release create "$tag" \ | |
| --title "$releaseTitle" \ | |
| --notes-file "$releaseNotesFile" \ | |
| --repo nativeui-org/primitives | |
| rm "$releaseNotesFile" | |
| done | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.CHANGESETS_TOKEN }} | |
| - name: Release Apps (Sandbox & Website) | |
| if: always() | |
| run: | | |
| echo "🔍 Checking for app version changes in this commit..." | |
| echo "Files changed:" | |
| git diff HEAD^ HEAD --name-only | |
| echo "" | |
| # Check sandbox | |
| if git diff HEAD^ HEAD --name-only | grep -q "apps/sandbox/package.json"; then | |
| sandboxVersion=$(jq -r '.version' apps/sandbox/package.json) | |
| tag="sandbox@${sandboxVersion}" | |
| echo "📦 Sandbox version changed to ${sandboxVersion}" | |
| # Check if release already exists | |
| if gh release view "$tag" --repo nativeui-org/primitives >/dev/null 2>&1; then | |
| echo "ℹ️ Release ${tag} already exists, skipping" | |
| else | |
| echo "✅ Creating release for ${tag}" | |
| # Create tag if doesn't exist | |
| if ! git rev-parse "$tag" >/dev/null 2>&1; then | |
| git tag "$tag" | |
| git push origin "$tag" | |
| fi | |
| # Create GitHub Release | |
| releaseNotesFile=$(mktemp) | |
| echo "## 🚀 Sandbox ${sandboxVersion}" >> "$releaseNotesFile" | |
| echo "" >> "$releaseNotesFile" | |
| echo "### 🌐 Live Demo" >> "$releaseNotesFile" | |
| echo "" >> "$releaseNotesFile" | |
| echo "Visit [sandbox-primitives.nativeui.io](https://sandbox-primitives.nativeui.io)" >> "$releaseNotesFile" | |
| gh release create "$tag" \ | |
| --title "$tag" \ | |
| --notes-file "$releaseNotesFile" \ | |
| --repo nativeui-org/primitives | |
| rm "$releaseNotesFile" | |
| echo "✅ Sandbox release created → Vercel deployment will start" | |
| fi | |
| else | |
| echo "ℹ️ No sandbox version change detected" | |
| fi | |
| # Check website | |
| if git diff HEAD^ HEAD --name-only | grep -q "apps/website/package.json"; then | |
| websiteVersion=$(jq -r '.version' apps/website/package.json) | |
| tag="website@${websiteVersion}" | |
| echo "📦 Website version changed to ${websiteVersion}" | |
| # Check if release already exists | |
| if gh release view "$tag" --repo nativeui-org/primitives >/dev/null 2>&1; then | |
| echo "ℹ️ Release ${tag} already exists, skipping" | |
| else | |
| echo "✅ Creating release for ${tag}" | |
| # Create tag if doesn't exist | |
| if ! git rev-parse "$tag" >/dev/null 2>&1; then | |
| git tag "$tag" | |
| git push origin "$tag" | |
| fi | |
| # Create GitHub Release | |
| releaseNotesFile=$(mktemp) | |
| echo "## 🚀 Website ${websiteVersion}" >> "$releaseNotesFile" | |
| echo "" >> "$releaseNotesFile" | |
| echo "### 📚 Documentation" >> "$releaseNotesFile" | |
| echo "" >> "$releaseNotesFile" | |
| echo "Visit [primitives.nativeui.io](https://primitives.nativeui.io)" >> "$releaseNotesFile" | |
| gh release create "$tag" \ | |
| --title "$tag" \ | |
| --notes-file "$releaseNotesFile" \ | |
| --repo nativeui-org/primitives | |
| rm "$releaseNotesFile" | |
| echo "✅ Website release created → Vercel deployment will start" | |
| fi | |
| else | |
| echo "ℹ️ No website version change detected" | |
| fi | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.CHANGESETS_TOKEN }} |