# 当分支 main 有 push 事件,并且此次 push 包含了 components 目录下的文件时,执行以下任务 # 读取 components/package.json 中的 version 字段,作为 Releases tag 和 Releases title # 读取仓库内的 /doc/guide/changelog.md 的第一行内容,去除 ## 和空格,与 components/package.json 中的 version 字段比较 # 如果不相同则此次不需要发布 Release,退出 # 如果相同则继续往下执行 # 进入到 .github/workflows 目录下,执行 pnpm install,再执行 node releases.js,生成 releases.md 文件 # releases.js 实现:读取仓库内的 /doc/guide/changelog.md 和 /doc/guide/changelog_en.md 中第一个二级标题与第二个二级标题之间的内容 # 将两个内容合并为一个字符串,中间使用 --- 分隔 # 组成内容示例为: # - 新增了一个功能。 # --- # - Add a new feature. # 将合并的内容作为 Releases describe # Set as the latest release 并发布本次 Release # 删除 releases.md 文件 name: Auto releases on: push: branches: - main paths: - 'components/**' jobs: releases: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 # 读取 components/package.json 中的 version 字段,作为 Releases tag 和 Releases title - name: Get version id: version run: | echo version=$(cat components/package.json | grep version | head -1 | awk -F: '{ print $2 }' | sed 's/[",]//g' | tr -d '[[:space:]]') >> $GITHUB_OUTPUT # echo ::set-output name=version::$(cat components/package.json | grep version | head -1 | awk -F: '{ print $2 }' | sed 's/[",]//g' | tr -d '[[:space:]]') # 读取仓库内的 /doc/guide/changelog.md 的第一行内容,去除 ## 和空格, - name: Get md_version id: md_version run: | echo md_version=$(cat doc/guide/changelog.md | head -1 | sed 's/## //g' | tr -d '[[:space:]]') >> $GITHUB_OUTPUT # echo ::set-output name=md_version::$(cat doc/guide/changelog.md | head -1 | sed 's/## //g' | tr -d '[[:space:]]') # 比较 Get version 与 Get md_version 的输出内容,如果不相同则此次不需要发布 Release,退出 - name: Check version run: | if [[ ${{ steps.version.outputs.version }} != ${{ steps.md_version.outputs.md_version }} ]]; then echo "This is not a tag push. Skipping." exit 78 fi - name: Setup Node.js environment uses: actions/setup-node@v1 with: node-version: 18.x # 安装 pnpm - name: Install pnpm run: | npm install -g pnpm # cd 到 .github/workflows 目录下,执行 pnpm install - name: Install dependencies run: | cd .github/workflows pnpm install # 执行 node releases.js,生成 releases.md 文件 - name: Generate releases.md run: | cd .github/workflows node releases.js # 读取 releases.md 文件内容,作为 Releases describe - name: Get body id: body run: | echo body=$(cat releases.md) >> $GITHUB_OUTPUT # echo ::set-output name=body::$(cat releases.md) # 作为 latest release 发布本次 Release - name: Release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.STDF_GITHUB_TOKEN }} with: tag_name: ${{ steps.version.outputs.version }} release_name: ${{ steps.version.outputs.version }} body: ${{ steps.body.outputs.body }} draft: false prerelease: false # 删除 releases.md 文件 - name: Remove releases.md run: | rm releases.md