diff --git a/.github/workflows/manual-release.yaml b/.github/workflows/manual-release.yaml deleted file mode 100644 index 03f6695f8..000000000 --- a/.github/workflows/manual-release.yaml +++ /dev/null @@ -1,193 +0,0 @@ -name: Manual Release - -on: - workflow_dispatch: - inputs: - version_bump: - description: Version bump type - required: true - default: beta - type: choice - options: - - beta - - alpha - - patch - - minor - - major - -permissions: - contents: write - packages: write - -jobs: - release: - runs-on: ubuntu-latest - 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-file: ".nvmrc" - cache: npm - registry-url: https://registry.npmjs.org - - - name: Install dependencies - run: npm ci - - - name: Run tests and validation - run: | - npm run validate - npm run format:check - npm run lint - - - name: Configure Git - run: | - git config user.name "github-actions[bot]" - git config user.email "github-actions[bot]@users.noreply.github.com" - - - name: Bump version - run: | - case "${{ github.event.inputs.version_bump }}" in - alpha|beta) npm version prerelease --no-git-tag-version --preid=${{ github.event.inputs.version_bump }} ;; - *) npm version ${{ github.event.inputs.version_bump }} --no-git-tag-version ;; - esac - - - name: Get new version and previous tag - id: version - run: | - echo "new_version=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT - echo "previous_tag=$(git describe --tags --abbrev=0)" >> $GITHUB_OUTPUT - - - name: Update installer package.json - run: | - sed -i 's/"version": ".*"/"version": "${{ steps.version.outputs.new_version }}"/' tools/installer/package.json - - # TODO: Re-enable web bundles once tools/cli/bundlers/ is restored - # - name: Generate web bundles - # run: npm run bundle - - - name: Commit version bump - run: | - git add . - git commit -m "release: bump to v${{ steps.version.outputs.new_version }}" - - - name: Generate release notes - id: release_notes - run: | - # Get commits since last tag - COMMITS=$(git log ${{ steps.version.outputs.previous_tag }}..HEAD --pretty=format:"- %s" --reverse) - - # Categorize commits - FEATURES=$(echo "$COMMITS" | grep -E "^- (feat|Feature)" || true) - FIXES=$(echo "$COMMITS" | grep -E "^- (fix|Fix)" || true) - CHORES=$(echo "$COMMITS" | grep -E "^- (chore|Chore)" || true) - OTHERS=$(echo "$COMMITS" | grep -v -E "^- (feat|Feature|fix|Fix|chore|Chore|release:|Release:)" || true) - - # Build release notes - cat > release_notes.md << 'EOF' - ## 🚀 What's New in v${{ steps.version.outputs.new_version }} - - EOF - - if [ ! -z "$FEATURES" ]; then - echo "### ✨ New Features" >> release_notes.md - echo "$FEATURES" >> release_notes.md - echo "" >> release_notes.md - fi - - if [ ! -z "$FIXES" ]; then - echo "### 🐛 Bug Fixes" >> release_notes.md - echo "$FIXES" >> release_notes.md - echo "" >> release_notes.md - fi - - if [ ! -z "$OTHERS" ]; then - echo "### 📦 Other Changes" >> release_notes.md - echo "$OTHERS" >> release_notes.md - echo "" >> release_notes.md - fi - - if [ ! -z "$CHORES" ]; then - echo "### 🔧 Maintenance" >> release_notes.md - echo "$CHORES" >> release_notes.md - echo "" >> release_notes.md - fi - - cat >> release_notes.md << 'EOF' - - ## 📦 Installation - - ```bash - npx bmad-method install - ``` - - **Full Changelog**: https://github.com/bmad-code-org/BMAD-METHOD/compare/${{ steps.version.outputs.previous_tag }}...v${{ steps.version.outputs.new_version }} - EOF - - # Output for GitHub Actions - echo "RELEASE_NOTES<> $GITHUB_OUTPUT - cat release_notes.md >> $GITHUB_OUTPUT - echo "EOF" >> $GITHUB_OUTPUT - - - name: Create and push tag - run: | - # Check if tag already exists - if git rev-parse "v${{ steps.version.outputs.new_version }}" >/dev/null 2>&1; then - echo "Tag v${{ steps.version.outputs.new_version }} already exists, skipping tag creation" - else - git tag -a "v${{ steps.version.outputs.new_version }}" -m "Release v${{ steps.version.outputs.new_version }}" - git push origin "v${{ steps.version.outputs.new_version }}" - fi - - - name: Push changes to main - run: | - if git push origin HEAD:main 2>/dev/null; then - echo "✅ Successfully pushed to main branch" - else - echo "⚠️ Could not push to main (protected branch). This is expected." - echo "📝 Version bump and tag were created successfully." - fi - - - name: Publish to NPM - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - run: | - VERSION="${{ steps.version.outputs.new_version }}" - if [[ "$VERSION" == *"alpha"* ]]; then - echo "Publishing alpha prerelease version with --tag alpha" - npm publish --tag alpha - elif [[ "$VERSION" == *"beta"* ]]; then - echo "Publishing beta prerelease version with --tag latest" - npm publish --tag latest - else - echo "Publishing stable version with --tag latest" - npm publish --tag latest - fi - - - name: Create GitHub Release - uses: softprops/action-gh-release@v2 - with: - tag_name: v${{ steps.version.outputs.new_version }} - name: "BMad Method v${{ steps.version.outputs.new_version }}" - body: | - ${{ steps.release_notes.outputs.RELEASE_NOTES }} - draft: false - prerelease: ${{ contains(steps.version.outputs.new_version, 'alpha') || contains(steps.version.outputs.new_version, 'beta') }} - - - name: Summary - run: | - echo "## 🎉 Successfully released v${{ steps.version.outputs.new_version }}!" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo "### 📦 Distribution" >> $GITHUB_STEP_SUMMARY - echo "- **NPM**: Published with @latest tag" >> $GITHUB_STEP_SUMMARY - echo "- **GitHub Release**: https://github.com/bmad-code-org/BMAD-METHOD/releases/tag/v${{ steps.version.outputs.new_version }}" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo "### ✅ Installation" >> $GITHUB_STEP_SUMMARY - echo "\`\`\`bash" >> $GITHUB_STEP_SUMMARY - echo "npx bmad-method@${{ steps.version.outputs.new_version }} install" >> $GITHUB_STEP_SUMMARY - echo "\`\`\`" >> $GITHUB_STEP_SUMMARY diff --git a/package.json b/package.json index 3d66a3be3..d7b3d0052 100644 --- a/package.json +++ b/package.json @@ -41,10 +41,6 @@ "lint:md": "markdownlint-cli2 \"**/*.md\"", "prepare": "command -v husky >/dev/null 2>&1 && husky || exit 0", "rebundle": "node tools/cli/bundlers/bundle-web.js rebundle", - "release:major": "gh workflow run \"Manual Release\" -f version_bump=major", - "release:minor": "gh workflow run \"Manual Release\" -f version_bump=minor", - "release:patch": "gh workflow run \"Manual Release\" -f version_bump=patch", - "release:watch": "gh run watch", "test": "npm run test:schemas && npm run test:install && npm run validate:schemas && npm run lint && npm run lint:md && npm run format:check", "test:coverage": "c8 --reporter=text --reporter=html npm run test:schemas", "test:install": "node test/test-installation-components.js", diff --git a/tools/docs/BUNDLE_DISTRIBUTION_SETUP.md b/tools/docs/BUNDLE_DISTRIBUTION_SETUP.md deleted file mode 100644 index f206ee7f2..000000000 --- a/tools/docs/BUNDLE_DISTRIBUTION_SETUP.md +++ /dev/null @@ -1,95 +0,0 @@ -# Bundle Distribution Setup (For Maintainers) - -**Audience:** BMAD maintainers setting up bundle auto-publishing - ---- - -## One-Time Setup - -Run these commands once to enable auto-publishing: - -```bash -# 1. Create bmad-bundles repo -gh repo create bmad-code-org/bmad-bundles --public --description "BMAD Web Bundles" - -# 2. Ensure `main` exists (GitHub Pages API requires a source branch) -git clone git@github.com:bmad-code-org/bmad-bundles.git -cd bmad-bundles -printf '# bmad-bundles\n\nStatic bundles published from BMAD-METHOD.\n' > README.md -git add README.md -git commit -m "Initial commit" -git push origin main -cd - - -# 3. Enable GitHub Pages (API replacement for removed --enable-pages flag) -gh api repos/bmad-code-org/bmad-bundles/pages --method POST -f source[branch]=main -f source[path]=/ -# (Optional) confirm status -gh api repos/bmad-code-org/bmad-bundles/pages --jq '{status,source}' - -# 4. Create GitHub PAT and add as secret -# Go to: https://github.com/settings/tokens/new -# Scopes: repo (full control) -# Name: bmad-bundles-ci -# Then add as secret: -gh secret set BUNDLES_PAT --repo bmad-code-org/BMAD-METHOD -# (paste PAT when prompted) -``` - -If the Pages POST returns `409`, the site already exists. If it returns `422` about `main` missing, redo step 2 to push the initial commit. - -**Done.** Bundles auto-publish on every main merge. - ---- - -## How It Works - -**On main merge:** - -- `.github/workflows/bundle-latest.yaml` runs -- Publishes to: `https://bmad-code-org.github.io/bmad-bundles/` - -**On release:** - -- `npm run release:patch` runs `.github/workflows/manual-release.yaml` -- Attaches bundles to: `https://github.com/bmad-code-org/BMAD-METHOD/releases/latest` - ---- - -## Testing - -```bash -# Test latest channel -git push origin main -# Wait 2 min, then: curl https://bmad-code-org.github.io/bmad-bundles/ - -# Test stable channel -npm run release:patch -# Check: gh release view -``` - ---- - -## Troubleshooting - -**"Permission denied" or auth errors** - -```bash -# Verify PAT secret exists -gh secret list --repo bmad-code-org/BMAD-METHOD | grep BUNDLES_PAT - -# If missing, recreate PAT and add secret: -gh secret set BUNDLES_PAT --repo bmad-code-org/BMAD-METHOD -``` - -**GitHub Pages not updating / need to re-check config** - -```bash -gh api repos/bmad-code-org/bmad-bundles/pages --jq '{status,source,html_url}' -``` - ---- - -## Distribution URLs - -**Stable:** `https://github.com/bmad-code-org/BMAD-METHOD/releases/latest` -**Latest:** `https://bmad-code-org.github.io/bmad-bundles/`