Auto Publish #23
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 工作流名称 | |
| name: Auto Publish | |
| # 运行时显示的名称 | |
| run-name: Auto Publish | |
| # 触发条件配置 | |
| on: | |
| push: | |
| tags: | |
| - 'v*' | |
| # 定义工作流中的作业 | |
| jobs: | |
| build: | |
| # 指定运行环境为最新版本的ubuntu | |
| runs-on: ubuntu-latest | |
| steps: | |
| # 步骤1: 检出代码 | |
| - name: CheckOut Code | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ github.ref_name }} | |
| # 步骤2: 设置pnpm包管理器 | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| # 步骤3: 设置Node.js环境 | |
| - name: Setup Node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20 # 使用Node.js 20版本 | |
| registry-url: 'https://registry.npmjs.org' # 设置npm registry地址 | |
| # 步骤4: 获取pnpm缓存目录路径 | |
| - name: Get pnpm store directory | |
| id: pnpm-cache | |
| run: | | |
| echo "pnpm_cache_dir=$(pnpm store path)" >> $GITHUB_OUTPUT | |
| # 步骤5: 配置pnpm缓存 | |
| - uses: actions/cache@v3 | |
| name: Setup pnpm cache | |
| with: | |
| path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }} | |
| # 使用操作系统类型和pnpm-lock.yaml的哈希值作为缓存键 | |
| key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-pnpm-store- | |
| # 步骤6: 安装项目依赖 | |
| - name: Install dependencies | |
| run: pnpm i --no-frozen-lockfile | |
| # 步骤7: 构建组件 | |
| - name: Run Build Components | |
| run: pnpm build | |
| - name: Parse Publish tag | |
| id: parse_tag | |
| run: | | |
| tag_name="${GITHUB_REF#refs/tags/}" | |
| if [[ "$tag_name" == *alpha* ]]; then | |
| echo "dist_tag=alpha" >> "$GITHUB_OUTPUT" | |
| elif [[ "$tag_name" == *beta* ]]; then | |
| echo "dist_tag=beta" >> "$GITHUB_OUTPUT" | |
| elif [[ "$tag_name" == *rc* ]]; then | |
| echo "dist_tag=rc" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "dist_tag=latest" >> "$GITHUB_OUTPUT" | |
| fi | |
| - name: Verify clean working directory | |
| run: | | |
| if [[ -n "$(git status --porcelain)" ]]; then | |
| echo "Working directory is not clean" | |
| exit 1 | |
| fi | |
| - name: Verify package version match tag | |
| run: | | |
| tag_name="${GITHUB_REF#refs/tags/}" | |
| package_version=$(pnpm lerna list --scope=@opentiny/tiny-robot --json | jq -r '.[0].version') | |
| if [[ "$tag_name" != "v$package_version" ]]; then | |
| echo "Tag name $tag_name does not match package version $package_version" | |
| exit 1 | |
| fi | |
| # 步骤8: 发布组件到NPM | |
| - name: Publish components | |
| run: pnpm lerna publish from-package --pre-dist-tag ${{steps.parse_tag.outputs.dist_tag}} --yes | |
| env: | |
| # 使用NPM令牌进行身份验证 | |
| NODE_AUTH_TOKEN: ${{ secrets.NPM_OPENTINY_ROBOT_TOKEN }} | |
| # 步骤9: 发布组件到GitHub Release | |
| - name: Release | |
| if: ${{ steps.parse_tag.outputs.dist_tag == 'latest' }} | |
| uses: softprops/action-gh-release@v1 | |
| with: | |
| tag_name: ${{ github.ref_name }} | |
| generate_release_notes: true | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }} | |
| # 步骤10: 发布文档到GitHub Pages | |
| - name: Build VitePress | |
| run: pnpm -F docs build --base=/tiny-robot/${{steps.parse_tag.outputs.dist_tag}}/ | |
| - name: Verify build output | |
| run: ls -la ./docs/dist | |
| - name: Deploy docs | |
| uses: peaceiris/actions-gh-pages@v3 | |
| with: | |
| github_token: ${{ secrets.GITHUB_TOKEN }} | |
| publish_dir: ./docs/dist | |
| destination_dir: ./${{steps.parse_tag.outputs.dist_tag}}/ | |
| keep_files: true | |
| force_orphan: false | |
| user_name: 'github-actions[bot]' | |
| user_email: 'github-actions[bot]@users.noreply.github.com' |