name: Publish Next on: push: branches: [main] paths: - "src/**" - "tools/cli/**" - "package.json" concurrency: group: publish-next cancel-in-progress: true permissions: id-token: write contents: read jobs: publish: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Node 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 run: npm test - name: Derive next prerelease version run: | NEXT_VER=$(npm view bmad-method@next version 2>/dev/null || echo "") LATEST_VER=$(npm view bmad-method@latest version 2>/dev/null || echo "") # Determine the best base version for the next prerelease BASE=$(node -e " const semver = require('semver'); const next = process.argv[1] || null; const latest = process.argv[2] || null; if (!next && !latest) process.exit(0); if (!next) { console.log(latest); process.exit(0); } if (!latest) { console.log(next); process.exit(0); } // If latest is newer than next's base, use latest (next prerelease will be based on it) const nextBase = next.replace(/-next\.\d+$/, ''); console.log(semver.gt(latest, nextBase) ? latest : next); " "$NEXT_VER" "$LATEST_VER") if [ -n "$BASE" ]; then npm version "$BASE" --no-git-tag-version --allow-same-version fi npm version prerelease --preid=next --no-git-tag-version - name: Publish to npm run: npm publish --tag next --provenance env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}