This repository was archived by the owner on Aug 19, 2026. It is now read-only.
Merge pull request #40 from mi-examples/fix-remove-issue-numbers #9
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: Beta Release | |
| on: | |
| push: | |
| branches: | |
| - develop | |
| jobs: | |
| detect-packages: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| packages: ${{ steps.set-packages.outputs.packages }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Get changed packages | |
| id: set-packages | |
| run: | | |
| # Set error handling to continue on errors | |
| set +e | |
| echo "Starting package detection..." | |
| # Initialize with empty array | |
| packages="[]" | |
| # Simple approach: check if packages directory has any changes | |
| if git rev-parse HEAD~1 >/dev/null 2>&1; then | |
| # Check if any files in packages directory changed | |
| package_changes=$(git diff --name-only HEAD~1 HEAD | grep "^packages/" || echo "") | |
| if [[ -n "$package_changes" ]]; then | |
| # Extract package names from changed files | |
| package_names=$(echo "$package_changes" | cut -d'/' -f2 | sort -u | grep -v '^$' || echo "") | |
| if [[ -n "$package_names" ]]; then | |
| # Convert to JSON array | |
| packages=$(echo "$package_names" | tr '\n' ',' | sed 's/,$//' | sed 's/^/\["/; s/,/","/g; s/$/"/') | |
| packages="[$packages]" | |
| # Validate JSON | |
| if ! echo "$packages" | jq . >/dev/null 2>&1; then | |
| echo "Warning: Invalid JSON generated, using empty array" | |
| packages="[]" | |
| fi | |
| fi | |
| fi | |
| fi | |
| # Always ensure we have valid output | |
| echo "packages=$packages" >> $GITHUB_OUTPUT | |
| echo "Final packages output: $packages" | |
| echo "✅ Package detection completed successfully" | |
| # Reset error handling | |
| set -e | |
| # Release pp-dev first (core package) | |
| beta-release-pp-dev: | |
| needs: detect-packages | |
| if: ${{ contains(fromJSON(needs.detect-packages.outputs.packages), 'pp-dev') }} | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| id-token: write | |
| pull-requests: write | |
| defaults: | |
| run: | |
| working-directory: packages/pp-dev | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20 | |
| registry-url: https://registry.npmjs.org/ | |
| cache: 'npm' | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Build package | |
| run: npm run build | |
| - name: Verify build output | |
| run: | | |
| if [[ ! -d "dist" ]]; then | |
| echo "Error: Build output directory 'dist' not found" | |
| exit 1 | |
| fi | |
| echo "Build verification passed" | |
| - name: Configure Git | |
| run: | | |
| git config --global user.name "github-actions[bot]" | |
| git config --global user.email "github-actions[bot]@users.noreply.github.com" | |
| - name: Beta Release | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| NODE_AUTH_TOKEN: ${{ secrets.npm_token }} | |
| NPM_TOKEN: ${{ secrets.npm_token }} | |
| run: | | |
| echo "Running beta release for package: pp-dev" | |
| npm run release | |
| - name: Comment on commit | |
| if: success() | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const { data: releases } = await github.rest.repos.listReleases({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| per_page: 1 | |
| }); | |
| if (releases.length > 0) { | |
| const latestRelease = releases[0]; | |
| if (latestRelease.tag_name.includes('beta')) { | |
| await github.rest.repos.createCommitComment({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| commit_sha: context.sha, | |
| body: `🚀 **Beta Release Created!**\n\nPackage \`pp-dev\` has been released as beta version \`${latestRelease.tag_name}\`\n\n**Release Notes:**\n${latestRelease.body || 'No release notes available'}\n\n**Download:** [${latestRelease.tag_name}](${latestRelease.html_url})` | |
| }); | |
| } | |
| } | |
| # Release create-pp-dev second (depends on pp-dev) | |
| beta-release-create-pp-dev: | |
| needs: [detect-packages, beta-release-pp-dev] | |
| if: ${{ contains(fromJSON(needs.detect-packages.outputs.packages), 'create-pp-dev') }} | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| id-token: write | |
| pull-requests: write | |
| defaults: | |
| run: | |
| working-directory: packages/create-pp-dev | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20 | |
| registry-url: https://registry.npmjs.org/ | |
| cache: 'npm' | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Build package | |
| run: npm run build | |
| - name: Verify build output | |
| run: | | |
| if [[ ! -d "dist" ]]; then | |
| echo "Error: Build output directory 'dist' not found" | |
| exit 1 | |
| fi | |
| echo "Build verification passed" | |
| - name: Configure Git | |
| run: | | |
| git config --global user.name "github-actions[bot]" | |
| git config --global user.email "github-actions[bot]@users.noreply.github.com" | |
| - name: Verify pp-dev dependency | |
| run: | | |
| echo "Verifying pp-dev release exists..." | |
| git fetch --tags origin | |
| if ! git tag --list | grep -q "^v[0-9]"; then | |
| echo "Error: pp-dev tag not found. Cannot proceed with create-pp-dev release." | |
| exit 1 | |
| fi | |
| echo "pp-dev dependency verified successfully" | |
| - name: Update pp-dev dependency to latest version | |
| run: | | |
| echo "Updating pp-dev dependency to latest stable version..." | |
| # Get the latest stable pp-dev version from git tags (excluding beta versions) | |
| latest_pp_dev_version=$(git tag --list "v*" | grep -v "beta\|alpha\|rc\|pre" | sort -V | tail -n1 | sed 's/^v//') | |
| echo "Latest stable pp-dev version: $latest_pp_dev_version" | |
| if [[ -z "$latest_pp_dev_version" ]]; then | |
| echo "Error: Could not determine latest stable pp-dev version" | |
| exit 1 | |
| fi | |
| # Update package.json dependency | |
| npm pkg set "dependencies.@metricinsights/pp-dev" "^$latest_pp_dev_version" | |
| # Update template package.json files | |
| find . -name "package.json" -path "*/template-*/*" -exec sed -i "s/\"@metricinsights\/pp-dev\": \"[^\"]*\"/\"@metricinsights\/pp-dev\": \"^$latest_pp_dev_version\"/g" {} \; | |
| # Update any other version references in template files | |
| find . -path "*/template-*/*" -type f -name "*.json" -exec sed -i "s/\"@metricinsights\/pp-dev\": \"[^\"]*\"/\"@metricinsights\/pp-dev\": \"^$latest_pp_dev_version\"/g" {} \; | |
| echo "Updated pp-dev dependency to stable version ^$latest_pp_dev_version" | |
| # Show the changes | |
| echo "Updated package.json:" | |
| grep "@metricinsights/pp-dev" package.json | |
| echo "Updated template files:" | |
| find . -path "*/template-*/*" -name "package.json" -exec grep -l "@metricinsights/pp-dev" {} \; | |
| - name: Commit dependency updates | |
| run: | | |
| if [[ -n "$(git status --porcelain)" ]]; then | |
| echo "Committing dependency updates..." | |
| git add . | |
| git commit -m "chore(deps): update pp-dev dependency to latest version" | |
| git push origin HEAD:develop | |
| else | |
| echo "No dependency updates to commit" | |
| fi | |
| - name: Beta Release | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| NODE_AUTH_TOKEN: ${{ secrets.npm_token }} | |
| NPM_TOKEN: ${{ secrets.npm_token }} | |
| run: | | |
| echo "Running beta release for package: create-pp-dev" | |
| npm run release | |
| - name: Comment on commit | |
| if: success() | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const { data: releases } = await github.rest.repos.listReleases({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| per_page: 1 | |
| }); | |
| if (releases.length > 0) { | |
| const latestRelease = releases[0]; | |
| if (latestRelease.tag_name.includes('beta')) { | |
| await github.rest.repos.createCommitComment({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| commit_sha: context.sha, | |
| body: `🚀 **Beta Release Created!**\n\nPackage \`create-pp-dev\` has been released as beta version \`${latestRelease.tag_name}\`\n\n**Release Notes:**\n${latestRelease.body || 'No release notes available'}\n\n**Download:** [${latestRelease.tag_name}](${latestRelease.html_url})` | |
| }); | |
| } | |
| } |