Skip to content
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

Merge pull request #39 from mi-examples/fix-remove-issue-numbers

Merge pull request #39 from mi-examples/fix-remove-issue-numbers #8

Workflow file for this run

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})`
});
}
}