security-scan.yml 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. name: Security Scan
  2. on:
  3. push:
  4. pull_request:
  5. schedule:
  6. - cron: '0 3 * * 1'
  7. permissions:
  8. contents: read
  9. jobs:
  10. backend-security:
  11. runs-on: ubuntu-latest
  12. timeout-minutes: 15
  13. steps:
  14. - uses: actions/checkout@v6
  15. - name: Set up Go
  16. uses: actions/setup-go@v6
  17. with:
  18. go-version-file: backend/go.mod
  19. check-latest: false
  20. cache-dependency-path: backend/go.sum
  21. - name: Verify Go version
  22. run: |
  23. go version | grep -q 'go1.27.0'
  24. - name: Run govulncheck
  25. working-directory: backend
  26. run: |
  27. go install golang.org/x/vuln/cmd/govulncheck@latest
  28. govulncheck ./...
  29. frontend-security:
  30. runs-on: ubuntu-latest
  31. steps:
  32. - uses: actions/checkout@v6
  33. - name: Set up pnpm
  34. uses: pnpm/action-setup@v6
  35. with:
  36. version: 9
  37. - name: Set up Node.js
  38. uses: actions/setup-node@v6
  39. with:
  40. node-version: '20'
  41. cache: 'pnpm'
  42. cache-dependency-path: frontend/pnpm-lock.yaml
  43. - name: Install dependencies
  44. working-directory: frontend
  45. run: pnpm install --frozen-lockfile
  46. - name: Run pnpm audit
  47. working-directory: frontend
  48. run: |
  49. pnpm audit --prod --audit-level=high --json > audit.json || true
  50. - name: Check audit exceptions
  51. run: |
  52. python -m pip install 'PyYAML==6.0.2'
  53. python -m unittest discover -s tools -p 'test_check_pnpm_audit_exceptions.py'
  54. python tools/check_pnpm_audit_exceptions.py \
  55. --audit frontend/audit.json \
  56. --exceptions .github/audit-exceptions.yml