auto-releases.yml 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. # 当分支 main 有 push 事件,并且此次 push 包含了 components 目录下的文件时,执行以下任务
  2. # 读取 components/package.json 中的 version 字段,作为 Releases tag 和 Releases title
  3. # 读取仓库内的 /doc/guide/changelog.md 和 /doc/guide/changelog_en.md 的第一行内容,去除 ## 和空格,与 components/package.json 中的 version 字段比较
  4. # 如果不相同则此次不需要发布 Release,退出
  5. # 如果相同则继续往下执行
  6. # 读取仓库内的 /doc/guide/changelog.md 中前两个二级标题之间的内容,包含换行和空格
  7. # 读取仓库内的 /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. # 进入到 .github 目录下,执行 pnpm install,再执行 node releases.js,生成 releases.txt 文件
  16. # releases.js 实现:读取仓库内的 /doc/guide/changelog.md 和 /doc/guide/changelog_en.md 中第一个二级标题与第二个二级标题之间的内容
  17. # 将两个内容合并为一个字符串,中间使用 --- 分隔
  18. name: Auto releases
  19. on:
  20. push:
  21. branches:
  22. - main
  23. paths:
  24. - 'components/**'
  25. jobs:
  26. releases:
  27. runs-on: ubuntu-latest
  28. steps:
  29. - name: Checkout
  30. uses: actions/checkout@v2
  31. # 读取 components/package.json 中的 version 字段,作为 Releases tag 和 Releases title
  32. - name: Get version
  33. id: version
  34. run: |
  35. echo version=$(cat components/package.json | grep version | head -1 | awk -F: '{ print $2 }' | sed 's/[",]//g' | tr -d '[[:space:]]') >> $GITHUB_OUTPUT
  36. # 读取仓库内的 /doc/guide/changelog.md 的第一行内容,去除 ## 和空格
  37. - name: Get md_version
  38. id: md_version
  39. run: |
  40. echo md_version=$(cat doc/guide/changelog.md | head -1 | sed 's/## //g' | tr -d '[[:space:]]') >> $GITHUB_OUTPUT
  41. # 读取仓库内的 /doc/guide/changelog_en.md 的第一行内容,去除 ## 和空格
  42. - name: Get md_version_en
  43. id: md_version_en
  44. run: |
  45. echo md_version_en=$(cat doc/guide/changelog_en.md | head -1 | sed 's/## //g' | tr -d '[[:space:]]') >> $GITHUB_OUTPUT
  46. # 比较 Get version 与 Get md_version 和 Get md_version_en 三者的输出内容,如果不相同则此次不需要发布 Release,退出
  47. - name: Check version
  48. run: |
  49. if [[ ${{ steps.version.outputs.version }} != ${{ steps.md_version.outputs.md_version }} ]]; then
  50. echo "This is not a tag push. Skipping."
  51. exit 78
  52. fi
  53. if [[ ${{ steps.version.outputs.version }} != ${{ steps.md_version_en.outputs.md_version_en }} ]]; then
  54. echo "This is not a tag push. Skipping."
  55. exit 78
  56. fi
  57. # 读取仓库内的 /doc/guide/changelog.md 中前两个二级标题之间的内容,包含换行和空格
  58. - name: Get changelog
  59. id: changelog
  60. run: |
  61. echo changelog=$(sed -n '1,/##/{/##/!p;}' doc/guide/changelog.md | sed '/^$/d') >> $GITHUB_OUTPUT
  62. # 读取仓库内的 /doc/guide/changelog_en.md 中第一个二级标题与第二个二级标题之间的内容,包含换行和空格
  63. - name: Get changelog_en
  64. id: changelog_en
  65. run: |
  66. echo changelog_en=$(sed -n '1,/##/{/##/!p;}' doc/guide/changelog_en.md | sed '/^$/d') >> $GITHUB_OUTPUT
  67. # 将 Get changelog 和 Get changelog_en 两个输出内容合并为一个字符串,中间使用 --- 分隔,其中的换行和空格保留,--- 单独占一行
  68. - name: Get body
  69. id: body
  70. run: |
  71. echo body=$(cat <<EOF
  72. ${{ steps.changelog.outputs.changelog }}
  73. ---
  74. ${{ steps.changelog_en.outputs.changelog_en }}
  75. EOF
  76. ) >> $GITHUB_OUTPUT
  77. # 作为 latest release 发布本次 Release
  78. - name: Release
  79. uses: actions/create-release@v1
  80. env:
  81. GITHUB_TOKEN: ${{ secrets.STDF_GITHUB_TOKEN }}
  82. with:
  83. tag_name: ${{ steps.version.outputs.version }}
  84. release_name: ${{ steps.version.outputs.version }}
  85. body: ${{ steps.body.outputs.body }}
  86. draft: false
  87. prerelease: false
  88. # - name: Setup Node.js environment
  89. # uses: actions/setup-node@v1
  90. # with:
  91. # node-version: 18.x
  92. # # 安装 pnpm
  93. # - name: Install pnpm
  94. # run: |
  95. # npm install -g pnpm
  96. # # cd 到 .github 目录下,执行 pnpm install,执行 node releases.js,生成 releases.txt 文件
  97. # - name: Install dependencies and generate releases.txt
  98. # run: |
  99. # cd .github
  100. # pnpm install
  101. # node releases.js
  102. # # cd 到 .github 目录下,读取 releases.txt 文件内容,保留其中的换行与空格,作为 Releases describe
  103. # - name: Get body
  104. # id: body
  105. # run: |
  106. # cd .github
  107. # echo body=$(cat releases.txt) >> $GITHUB_OUTPUT