Changelog.yml 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. name: Changelog
  2. on:
  3. push:
  4. branches: [ "main" ]
  5. pull_request:
  6. branches: [ "main" ]
  7. workflow_dispatch:
  8. env:
  9. CARGO_UNSTABLE_SPARSE_REGISTRY: true
  10. CARGO_TERM_COLOR: always
  11. jobs:
  12. check-changelogs:
  13. name: Check changelogs
  14. runs-on: ubuntu-latest
  15. steps:
  16. - uses: actions/checkout@v3
  17. with:
  18. fetch-depth: 0 # 需要完整提交历史来比较差异
  19. - name: Get changed files
  20. run: |
  21. # 获取基准和当前提交的差异文件列表
  22. git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }} > changed_files.txt
  23. - name: Validate changes
  24. run: |
  25. # 需要检查的目录数组
  26. directories=(
  27. "library/sbi-rt"
  28. "library/sbi-spec"
  29. "library/sbi-testing"
  30. "library/rustsbi"
  31. "library/macros"
  32. )
  33. exit_code=0
  34. while IFS= read -r file; do
  35. for dir in "${directories[@]}"; do
  36. # 检查文件是否属于当前目录
  37. if [[ "$file" == "$dir/"* ]]; then
  38. # 检查对应的CHANGELOG是否被修改
  39. if ! grep -q "^$dir/CHANGELOG.md" changed_files.txt; then
  40. echo "::error file=$dir/CHANGELOG.md::Detected changes in $dir but the corresponding CHANGELOG.md was not updated"
  41. exit_code=1
  42. else
  43. echo "CHANGELOG.md updated for $dir file changes."
  44. fi
  45. break # 已匹配目录,跳出内层循环
  46. fi
  47. done
  48. done < changed_files.txt
  49. exit $exit_code