auto-releases.yml 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. # 当分支 main 有 push 事件,并且此次 push 包含了 components 目录下的文件时,执行以下任务
  2. # 读取 components/package.json 中的 version 字段,作为 Releases tag 和 Releases title
  3. # 读取仓库内的 /doc/guide/changelog.md 的第一行内容,去除 ## 和空格,与 components/package.json 中的 version 字段比较
  4. # 如果不相同则此次不需要发布 Release,退出
  5. # 如果相同则继续往下执行
  6. # 进入到 .github 目录下,执行 pnpm install,再执行 node releases.js,生成 releases.txt 文件
  7. # releases.js 实现:读取仓库内的 /doc/guide/changelog.md 和 /doc/guide/changelog_en.md 中第一个二级标题与第二个二级标题之间的内容
  8. # 将两个内容合并为一个字符串,中间使用 --- 分隔
  9. # 组成内容示例为:
  10. # - 新增了一个功能。
  11. # ---
  12. # - Add a new feature.
  13. # 将合并的内容作为 Releases describe
  14. # Set as the latest release 并发布本次 Release
  15. name: Auto releases
  16. on:
  17. push:
  18. branches:
  19. - main
  20. paths:
  21. - 'components/**'
  22. jobs:
  23. releases:
  24. runs-on: ubuntu-latest
  25. steps:
  26. - name: Checkout
  27. uses: actions/checkout@v2
  28. # 读取 components/package.json 中的 version 字段,作为 Releases tag 和 Releases title
  29. - name: Get version
  30. id: version
  31. run: |
  32. echo version=$(cat components/package.json | grep version | head -1 | awk -F: '{ print $2 }' | sed 's/[",]//g' | tr -d '[[:space:]]') >> $GITHUB_OUTPUT
  33. # 读取仓库内的 /doc/guide/changelog.md 的第一行内容,去除 ## 和空格,
  34. - name: Get md_version
  35. id: md_version
  36. run: |
  37. echo md_version=$(cat doc/guide/changelog.md | head -1 | sed 's/## //g' | tr -d '[[:space:]]') >> $GITHUB_OUTPUT
  38. # 比较 Get version 与 Get md_version 的输出内容,如果不相同则此次不需要发布 Release,退出
  39. - name: Check version
  40. run: |
  41. if [[ ${{ steps.version.outputs.version }} != ${{ steps.md_version.outputs.md_version }} ]]; then
  42. echo "This is not a tag push. Skipping."
  43. exit 78
  44. fi
  45. - name: Setup Node.js environment
  46. uses: actions/setup-node@v1
  47. with:
  48. node-version: 18.x
  49. # 安装 pnpm
  50. - name: Install pnpm
  51. run: |
  52. npm install -g pnpm
  53. # cd 到 .github 目录下,执行 pnpm install,执行 node releases.js,生成 releases.txt 文件
  54. - name: Install dependencies and generate releases.txt
  55. run: |
  56. cd .github
  57. pnpm install
  58. node releases.js
  59. # cd 到 .github 目录下,读取 releases.txt 文件内容,保留其中的换行与空格,作为 Releases describe
  60. - name: Get body
  61. id: body
  62. run: |
  63. cd .github
  64. echo -e body=$(cat releases.txt) >> $GITHUB_OUTPUT
  65. # 作为 latest release 发布本次 Release
  66. - name: Release
  67. uses: actions/create-release@v1
  68. env:
  69. GITHUB_TOKEN: ${{ secrets.STDF_GITHUB_TOKEN }}
  70. with:
  71. tag_name: ${{ steps.version.outputs.version }}
  72. release_name: ${{ steps.version.outputs.version }}
  73. body: ${{ steps.body.outputs.body }}
  74. draft: false
  75. prerelease: false