active-releases.yml 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. # 当分支 main 有 push 事件,并且提交信息包含 [active releases] 时触发,表示主动触发此 Action
  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. # Set as the latest release 并发布本次 Release,body 为上一步的两个内容合并为一个字符串,中间使用 --- 分隔
  9. name: Auto releases
  10. on:
  11. push:
  12. branches:
  13. - main
  14. if: "contains(github.event.head_commit.message, '[active releases]')"
  15. jobs:
  16. releases:
  17. runs-on: ubuntu-latest
  18. steps:
  19. - name: Checkout
  20. uses: actions/checkout@v2
  21. # 读取 components/package.json 中的 version 字段,作为 Releases tag 和 Releases title
  22. - name: Get version
  23. id: version
  24. run: |
  25. echo version=$(cat components/package.json | grep version | head -1 | awk -F: '{ print $2 }' | sed 's/[",]//g' | tr -d '[[:space:]]') >> $GITHUB_OUTPUT
  26. # 读取仓库内的 /doc/guide/changelog.md 的第一行内容,去除 ## 和空格
  27. - name: Get md_version
  28. id: md_version
  29. run: |
  30. echo md_version=$(cat doc/guide/changelog.md | head -1 | sed 's/## //g' | tr -d '[[:space:]]') >> $GITHUB_OUTPUT
  31. # 读取仓库内的 /doc/guide/changelog_en.md 的第一行内容,去除 ## 和空格
  32. - name: Get md_version_en
  33. id: md_version_en
  34. run: |
  35. echo md_version_en=$(cat doc/guide/changelog_en.md | head -1 | sed 's/## //g' | tr -d '[[:space:]]') >> $GITHUB_OUTPUT
  36. # 比较 Get version 与 Get md_version 和 Get md_version_en 三者的输出内容,如果不相同则此次不需要发布 Release,退出
  37. - name: Check version
  38. run: |
  39. if [[ ${{ steps.version.outputs.version }} != ${{ steps.md_version.outputs.md_version }} ]]; then
  40. echo "This is not a tag push. Skipping."
  41. exit 78
  42. fi
  43. if [[ ${{ steps.version.outputs.version }} != ${{ steps.md_version_en.outputs.md_version_en }} ]]; then
  44. echo "This is not a tag push. Skipping."
  45. exit 78
  46. fi
  47. # 读取仓库内的 /doc/guide/changelog.md 中前两个二级标题之间的内容,包含换行和空格
  48. - name: Get changelog
  49. id: changelog
  50. run: |
  51. echo changelog=$(sed -n '1,/##/{/##/!p;}' doc/guide/changelog.md | sed '/^$/d') >> $GITHUB_OUTPUT
  52. # 读取仓库内的 /doc/guide/changelog_en.md 中第一个二级标题与第二个二级标题之间的内容,包含换行和空格
  53. - name: Get changelog_en
  54. id: changelog_en
  55. run: |
  56. echo changelog_en=$(sed -n '1,/##/{/##/!p;}' doc/guide/changelog_en.md | sed '/^$/d') >> $GITHUB_OUTPUT
  57. # 作为 latest release 发布本次 Release,body 为 changelog 和 changelog_en 的合并内容,中间使用 --- 分隔
  58. - name: Release
  59. uses: actions/create-release@v1
  60. env:
  61. GITHUB_TOKEN: ${{ secrets.STDF_GITHUB_TOKEN }}
  62. with:
  63. tag_name: v${{ steps.version.outputs.version }}
  64. release_name: v${{ steps.version.outputs.version }}
  65. body: |
  66. ${{ steps.changelog.outputs.changelog }}
  67. ---
  68. ${{ steps.changelog_en.outputs.changelog_en }}
  69. draft: false
  70. prerelease: false