releases.yml 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. # 当分支 main 有 push 事件,并且此次 push 包含了 packages/stdf/package.json 文件时,执行以下任务
  2. name: RELEASES
  3. on:
  4. push:
  5. branches:
  6. - main
  7. paths:
  8. - 'packages/stdf/package.json'
  9. jobs:
  10. releases:
  11. runs-on: ubuntu-latest
  12. steps:
  13. - name: Checkout
  14. uses: actions/checkout@v4
  15. # 1. 读取 packages/stdf/package.json 中的 version 字段,作为 Releases tag 和 Releases title
  16. - name: Get version
  17. id: version
  18. run: |
  19. echo version=$(cat packages/stdf/package.json | grep version | head -1 | awk -F: '{ print $2 }' | sed 's/[",]//g' | tr -d '[[:space:]]') >> $GITHUB_OUTPUT
  20. # 2. 读取 doc/guide/changelog.md 的第一行内容中 ‘##’ 与 ‘<font’ 之间的内容,再去除空格
  21. - name: Get md_version
  22. id: md_version
  23. run: |
  24. echo md_version=$(cat doc/guide/changelog.md | head -1 | sed 's/## //g' | sed 's/<font.*>//g' | tr -d '[[:space:]]') >> $GITHUB_OUTPUT
  25. # 3. 读取 doc/guide/changelog_en.md 的第一行内容中 ‘##’ 与 ‘<font’ 之间的内容,再去除空格
  26. - name: Get md_version_en
  27. id: md_version_en
  28. run: |
  29. echo md_version_en=$(cat doc/guide/changelog_en.md | head -1 | sed 's/## //g' | sed 's/<font.*>//g' | tr -d '[[:space:]]') >> $GITHUB_OUTPUT
  30. # 4. 比较 Get version 与 Get md_version 和 Get md_version_en 三者的输出内容,如果不相同则此次不需要发布 Release,退出
  31. - name: Check version
  32. run: |
  33. if [[ ${{ steps.version.outputs.version }} != ${{ steps.md_version.outputs.md_version }} ]]; then
  34. echo "This is not a tag push. Skipping."
  35. exit 78
  36. fi
  37. if [[ ${{ steps.version.outputs.version }} != ${{ steps.md_version_en.outputs.md_version_en }} ]]; then
  38. echo "This is not a tag push. Skipping."
  39. exit 78
  40. fi
  41. # 5. 读取 doc/guide/changelog.md 中前两个二级标题之间的内容,包含换行和空格
  42. - name: Get changelog
  43. id: changelog
  44. run: |
  45. echo -e changelog=$(sed -n '1,/##/{/##/!p;}' doc/guide/changelog.md | sed '/^$/d') >> $GITHUB_OUTPUT
  46. # 6. 读取 doc/guide/changelog_en.md 中第一个二级标题与第二个二级标题之间的内容,包含换行和空格
  47. - name: Get changelog_en
  48. id: changelog_en
  49. run: |
  50. echo -e changelog_en=$(sed -n '1,/##/{/##/!p;}' doc/guide/changelog_en.md | sed '/^$/d') >> $GITHUB_OUTPUT
  51. # 7. 作为 latest release 发布本次 Release,body 为 changelog 和 changelog_en 的合并内容,中间使用 --- 分隔
  52. - name: Release
  53. uses: actions/create-release@v1
  54. env:
  55. GITHUB_TOKEN: ${{ secrets.STDF_GITHUB_TOKEN }}
  56. with:
  57. tag_name: v${{ steps.version.outputs.version }}
  58. release_name: v${{ steps.version.outputs.version }}
  59. body: |
  60. ${{ steps.changelog.outputs.changelog }}
  61. ---
  62. ${{ steps.changelog_en.outputs.changelog_en }}
  63. draft: false
  64. prerelease: false