ci-pr.yml 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. name: ci-pr
  2. on:
  3. # PR 触发:用于主分支合并前的快速回归
  4. pull_request:
  5. branches:
  6. - main
  7. - master
  8. # 手动触发:便于在分支上临时复跑
  9. workflow_dispatch:
  10. permissions:
  11. contents: read
  12. jobs:
  13. skillsLint:
  14. name: skills-lint
  15. runs-on: ubuntu-latest
  16. timeout-minutes: 10
  17. steps:
  18. - name: 拉取代码
  19. uses: actions/checkout@v4
  20. - name: 校验 skills、agents 与路由评测样本
  21. run: |
  22. bash ./run_local_skills.sh --validate-only
  23. unitFull:
  24. name: unit-full
  25. runs-on: ubuntu-latest
  26. timeout-minutes: 60
  27. steps:
  28. - name: 拉取代码
  29. uses: actions/checkout@v4
  30. - name: 安装 xmake
  31. uses: xmake-io/github-action-setup-xmake@v1
  32. with:
  33. xmake-version: latest
  34. - name: 安装 clang/llvm(覆盖率工具)
  35. run: |
  36. sudo apt-get update
  37. sudo apt-get install -y clang llvm
  38. - name: 单元测试 full 模式(8 组配置全覆盖,跳过覆盖率)
  39. run: |
  40. chmod +x ./run_local_base.sh
  41. UNIT_MODE=full \
  42. UNIT_SKIP_COV=1 \
  43. UNIT_STOP_ON_FAIL=1 \
  44. bash ./run_local_base.sh
  45. # 即使 full 模式跳过覆盖率,也保留执行产物,便于失败排查
  46. - name: 上传单测产物
  47. if: always()
  48. uses: actions/upload-artifact@v4
  49. with:
  50. name: unit-full-artifacts
  51. path: |
  52. coverage/
  53. build/
  54. if-no-files-found: ignore
  55. retention-days: 7
  56. fuzzQuick:
  57. name: fuzz-quick-default
  58. runs-on: ubuntu-latest
  59. timeout-minutes: 35
  60. steps:
  61. - name: 拉取代码
  62. uses: actions/checkout@v4
  63. - name: 安装 xmake
  64. uses: xmake-io/github-action-setup-xmake@v1
  65. with:
  66. xmake-version: latest
  67. - name: 安装 clang/llvm(fuzzer + 覆盖率工具)
  68. run: |
  69. sudo apt-get update
  70. sudo apt-get install -y clang llvm
  71. - name: Fuzz quick 模式(跳过覆盖率)
  72. env:
  73. # PR 只跑一组默认语义,优先保证反馈速度
  74. RYANJSON_STRICT_OBJECT_KEY_CHECK: "false"
  75. RYANJSON_DEFAULT_ADD_AT_HEAD: "true"
  76. RYANJSON_SNPRINTF_SUPPORT_SCIENTIFIC: "true"
  77. run: |
  78. chmod +x ./run_local_fuzz.sh
  79. FUZZ_MODE=quick \
  80. FUZZ_SKIP_COV=1 \
  81. FUZZ_MAX_TOTAL_TIME=45 \
  82. FUZZ_WORKERS=2 \
  83. FUZZ_JOBS=2 \
  84. bash ./run_local_fuzz.sh
  85. - name: 上传 fuzz 产物
  86. if: always()
  87. uses: actions/upload-artifact@v4
  88. with:
  89. name: fuzz-quick-default-artifacts
  90. path: |
  91. coverage/
  92. build/
  93. *.log
  94. if-no-files-found: ignore
  95. retention-days: 7