This repository was archived by the owner on Aug 19, 2026. It is now read-only.
Merge pull request #39 from mi-examples/fix-remove-issue-numbers #8
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: | | |
| # Get files changed in the last commit | |
| # Handle case where there might be only one commit | |
| if git rev-parse HEAD~1 >/dev/null 2>&1; then | |
| changed_files=$(git diff --name-only HEAD~1 HEAD 2>/dev/null || echo "") | |
| else | |
| # If only one commit exists, get all files in the repository | |
| changed_files=$(git ls-files 2>/dev/null || echo "") | |
| fi | |
| packages="[]" | |
| if [[ -n "$changed_files" ]]; then | |
| # Extract unique package names from changed files | |
| package_dirs=($(echo "$changed_files" | grep -o 'packages/[^/]*' | cut -d'/' -f2 | sort -u | grep -v '^$')) | |
| # If we have changed packages, format as JSON array | |
| if [[ ${#package_dirs[@]} -gt 0 ]]; then | |
| # More robust JSON formatting | |
| packages=$(printf '"%s",' "${package_dirs[@]}" | sed 's/,$//' | sed 's/^/\[/; s/$/\]/') | |
| # Validate the generated JSON | |
| if ! echo "$packages" | jq . >/dev/null 2>&1; then | |
| echo "Warning: Generated invalid JSON, falling back to empty array" | |
| packages="[]" | |
| fi | |
| fi | |
| fi | |
| echo "packages=$packages" >> $GITHUB_OUTPUT | |
| echo "Changed packages: $packages" | |
| echo "Debug - packages output format: '$packages'" | |
| echo "Debug - JSON validation: $(echo "$packages" | jq . 2>/dev/null || echo "INVALID JSON")" | |
| echo "Debug - Number of commits: $(git rev-list --count HEAD)" | |
| echo "Debug - Can access HEAD~1: $(git rev-parse HEAD~1 >/dev/null 2>&1 && echo "YES" || echo "NO")" | |
| # Always exit successfully - empty packages array is valid | |
| echo "✅ Package detection completed successfully" | |
| # 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})` | |
| }); | |
| } | |
| } |