name: Release Core Package on: workflow_dispatch: inputs: version_type: description: 'Version bump type' required: true type: choice options: - patch - minor - major default: 'patch' custom_version: description: 'Custom version (optional, overrides version_type)' required: false type: string jobs: release: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20.x' registry-url: 'https://registry.npmjs.org' cache: 'npm' - 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: Install dependencies run: npm ci - name: Run tests run: | cd packages/core npm run test:ci - name: Determine version id: version run: | cd packages/core CURRENT_VERSION=$(node -p "require('./package.json').version") echo "current_version=$CURRENT_VERSION" >> $GITHUB_OUTPUT if [ -n "${{ github.event.inputs.custom_version }}" ]; then NEW_VERSION="${{ github.event.inputs.custom_version }}" echo "Using custom version: $NEW_VERSION" else # 使用 npm version 命令计算新版本(但不实际提交) npm version ${{ github.event.inputs.version_type }} --no-git-tag-version NEW_VERSION=$(node -p "require('./package.json').version") echo "Bumping ${{ github.event.inputs.version_type }} version: $CURRENT_VERSION → $NEW_VERSION" # 恢复 package.json 以便后续步骤重新修改 git checkout package.json fi echo "new_version=$NEW_VERSION" >> $GITHUB_OUTPUT - name: Update package version run: | cd packages/core npm version ${{ steps.version.outputs.new_version }} --no-git-tag-version - name: Build package run: | cd packages/core npm run build:npm - name: Publish to npm run: | cd packages/core/dist npm publish env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - name: Create Git tag run: | git tag -a "core-v${{ steps.version.outputs.new_version }}" -m "Release @esengine/ecs-framework v${{ steps.version.outputs.new_version }}" git push origin "core-v${{ steps.version.outputs.new_version }}" # 发布成功后,创建 PR 更新版本号 update-version-pr: needs: release if: success() runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20.x' cache: 'npm' - 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: Install dependencies run: npm ci - name: Update version in package.json run: | cd packages/core if [ -n "${{ github.event.inputs.custom_version }}" ]; then NEW_VERSION="${{ github.event.inputs.custom_version }}" npm version $NEW_VERSION --no-git-tag-version --allow-same-version else npm version ${{ github.event.inputs.version_type }} --no-git-tag-version NEW_VERSION=$(node -p "require('./package.json').version") fi echo "NEW_VERSION=$NEW_VERSION" >> $GITHUB_ENV # 验证文件已修改 git diff --exit-code package.json && echo "::error::No version change detected" && exit 1 || true echo "Updated package.json to version: $NEW_VERSION" cat package.json | grep version - name: Create Pull Request id: cpr uses: peter-evans/create-pull-request@v6 with: token: ${{ secrets.GITHUB_TOKEN }} commit-message: "chore(core): bump version to ${{ env.NEW_VERSION }}" committer: github-actions[bot] author: github-actions[bot] branch: release/core-v${{ env.NEW_VERSION }} delete-branch: true title: "chore(core): Release v${{ env.NEW_VERSION }}" body: | ## 🚀 发布 @esengine/ecs-framework v${{ env.NEW_VERSION }} / Release @esengine/ecs-framework v${{ env.NEW_VERSION }} **中文说明** 此 PR 在成功发布到 npm 后更新核心包的版本号。 ### 变更内容 - ✅ 更新 `packages/core/package.json` → `${{ env.NEW_VERSION }}` ### 发布信息 - 📦 **版本类型**: `${{ github.event.inputs.version_type }}` - 🏷️ **Git 标签**: `core-v${{ env.NEW_VERSION }}` - 📦 **npm 包**: https://www.npmjs.com/package/@esengine/ecs-framework/v/${{ env.NEW_VERSION }} ### 下一步 - [ ] 审查变更内容 - [ ] 合并此 PR 以更新仓库中的版本号 --- **English Description** This PR updates the core package version after successful npm release. ### Changes - ✅ Updated `packages/core/package.json` → `${{ env.NEW_VERSION }}` ### Release Information - 📦 **Version Type**: `${{ github.event.inputs.version_type }}` - 🏷️ **Git Tag**: `core-v${{ env.NEW_VERSION }}` - 📦 **npm Package**: https://www.npmjs.com/package/@esengine/ecs-framework/v/${{ env.NEW_VERSION }} ### Next Steps - [ ] Review the changes - [ ] Merge this PR to update the version in the repository --- *此 PR 由发布工作流自动创建 / This PR was automatically created by the release workflow.* labels: | release core automated pr add-paths: | packages/core/package.json - name: Check PR creation run: | echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}" echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}"