Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 23 additions & 1 deletion .claude/pipeline.config.json
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,29 @@
"enabled": true,
"auditLevel": "moderate",
"failOnVulnerability": true,
"checkLockfile": true
"checkLockfile": true,
"snyk": {
"enabled": true,
"severityThreshold": "high",
"failOnIssues": false
},
"csp": {
"enabled": true,
"reportOnly": false,
"reportUri": "/api/csp-report"
},
"inputSanitization": {
"enabled": true,
"blockPrivateUrls": true,
"allowLocalhostInDev": true
},
"headers": {
"hsts": true,
"noSniff": true,
"frameOptions": "SAMEORIGIN",
"xssProtection": true,
"referrerPolicy": "strict-origin-when-cross-origin"
}
},
"bundleSize": {
"enabled": true,
Expand Down
46 changes: 46 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,52 @@ jobs:
echo "No app source found — skipping token check"
fi

security-scan:
name: Security Scanning
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'

- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 9

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Run pnpm audit
run: pnpm audit --audit-level moderate
continue-on-error: true

- name: Run Snyk security scan
uses: snyk/actions/node@master
continue-on-error: true
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: --severity-threshold=high

- name: Run security anti-pattern check
run: |
if [ -f "scripts/check-security.sh" ]; then
bash scripts/check-security.sh --no-fail
fi

- name: Upload Snyk report
uses: actions/upload-artifact@v4
if: always()
with:
name: snyk-report
path: snyk-report.json
if-no-files-found: ignore
retention-days: 30

visual-regression:
name: Visual Regression Test
runs-on: ubuntu-latest
Expand Down
36 changes: 36 additions & 0 deletions .snyk
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Snyk (https://snyk.io) policy file
# https://snyk.io/docs/snyk-policy-file/
version: v1.25.0

# Ignores are used to ignore specific vulnerabilities
# Example:
# ignore:
# SNYK-JS-LODASH-567746:
# - '*':
# reason: 'Low severity, no fix available'
# expires: 2026-06-30T00:00:00.000Z

# Patches are automatic fixes
patch: {}

# Exclude paths from scanning
exclude:
global:
- node_modules
- .git
- dist
- build
- coverage
- .claude/visual-qa

# Severity threshold for failing builds
# Options: low, medium, high, critical
severity-threshold: high

# Fail only on fixable issues
fail-on: upgradable

# Language settings
language-settings:
javascript:
package-manager: pnpm
Loading
Loading