name: Alpha Release on: push: branches: - test workflow_dispatch: concurrency: ${{ github.workflow }}-${{ github.ref }} jobs: alpha: name: Alpha Release runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup pnpm uses: pnpm/action-setup@v4 with: version: 10 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20.x' cache: 'pnpm' registry-url: 'https://registry.npmjs.org/' - name: Install dependencies run: pnpm install --frozen-lockfile - name: Run tests run: pnpm run test:ci - name: Release alpha version run: | # 确保在正确的分支 git checkout test # 获取当前时间戳和短commit hash TIMESTAMP=$(date +%Y%m%d%H%M%S) SHORT_COMMIT=$(git rev-parse --short HEAD) # 读取当前版本,移除任何现有的预发布标识 CURRENT_VERSION=$(node -p "require('./package.json').version.split('-')[0]") # 生成唯一的alpha版本号:base-alpha.timestamp.commit ALPHA_VERSION="${CURRENT_VERSION}-alpha.${TIMESTAMP}.${SHORT_COMMIT}" echo "生成alpha版本号: $ALPHA_VERSION" # 直接设置版本号 npm version $ALPHA_VERSION --no-git-tag-version # 使用pnpm发布alpha版本 pnpm publish --tag alpha --no-git-checks # 输出版本信息供后续步骤使用 echo "ALPHA_VERSION=$ALPHA_VERSION" >> $GITHUB_ENV env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} NPM_TOKEN: ${{ secrets.ORG_NPM_TOKEN }} NODE_AUTH_TOKEN: ${{ secrets.ORG_NPM_TOKEN }} - name: Comment on related PRs if: success() uses: actions/github-script@v7 with: script: | const { execSync } = require('child_process'); // 获取alpha版本号 const version = process.env.ALPHA_VERSION; // 查找相关的PR const { data: prs } = await github.rest.pulls.list({ owner: context.repo.owner, repo: context.repo.repo, state: 'open', base: 'test' }); const comment = `🚀 **Alpha版本已发布!** 📦 版本号: \`${version}\` 🔗 安装命令: \`npx dpml-prompt@${version} \` 或者: \`npx dpml-prompt@alpha \` 📚 使用示例: \`\`\`bash npx dpml-prompt@${version} hello npx dpml-prompt@${version} init npx dpml-prompt@${version} action \`\`\` 💡 你可以使用这个alpha版本测试最新的test分支功能。 🧪 **Alpha定位**: 精选功能测试版本,适合功能验证和用户测试。`; // 为每个相关PR添加评论 for (const pr of prs) { await github.rest.issues.createComment({ owner: context.repo.owner, repo: context.repo.repo, issue_number: pr.number, body: comment }); }