releases-stdf.yml 3.7 KB

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