Skip to content

Security Scan

Security Scan #681

Workflow file for this run

name: Security Scan
# Run security scans on push, PR, and weekly schedule
on:
push:
branches: [main, develop]
pull_request:
branches: [main, develop]
schedule:
# Run weekly security scan every Monday at 00:00 UTC
- cron: '0 0 * * 1'
workflow_dispatch: # Allow manual triggers
jobs:
# ================================
# NPM Audit
# ================================
npm-audit:
name: NPM Security Audit
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'npm'
- name: Install dependencies
run: npm ci --ignore-scripts
- name: Run npm audit
run: npm audit --audit-level=moderate
continue-on-error: true
- name: Run npm audit (production only)
run: npm audit --production --audit-level=high
- name: Check for outdated packages
run: npm outdated || true
# ================================
# Snyk Security Scan
# ================================
snyk-scan:
name: Snyk Vulnerability Scan
runs-on: ubuntu-latest
if: github.event_name != 'schedule' # Skip on scheduled runs to avoid rate limiting
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
- name: Run Snyk to check for vulnerabilities
uses: snyk/actions/node@master
continue-on-error: true
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: --severity-threshold=high
# ================================
# CodeQL Security Analysis
# ================================
codeql-analysis:
name: CodeQL Security Analysis
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: javascript
queries: security-and-quality
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
# ================================
# Dependency Review (PR only)
# ================================
dependency-review:
name: Dependency Review
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
permissions:
contents: read
pull-requests: write
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Dependency Review
uses: actions/dependency-review-action@v4
with:
fail-on-severity: high
comment-summary-in-pr: always
# ================================
# Docker Image Scan
# ================================
docker-scan:
name: Docker Image Security Scan
runs-on: ubuntu-latest
if: github.event_name != 'schedule'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Build Docker image
run: docker build -t codepark:test .
- name: Run Trivy vulnerability scanner
uses: aquasecurity/trivy-action@master
with:
image-ref: codepark:test
format: 'sarif'
output: 'trivy-results.sarif'
severity: 'CRITICAL,HIGH'
- name: Upload Trivy results to GitHub Security
uses: github/codeql-action/upload-sarif@v3
if: always()
with:
sarif_file: 'trivy-results.sarif'
# ================================
# Secret Scanning
# ================================
secret-scan:
name: Secret Scanning
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: TruffleHog Secret Scan
uses: trufflesecurity/trufflehog@main
with:
path: ./
base: ${{ github.event.repository.default_branch }}
head: HEAD
# ================================
# Security Summary
# ================================
security-summary:
name: Security Scan Summary
runs-on: ubuntu-latest
needs: [npm-audit, codeql-analysis]
if: always()
steps:
- name: Security Scan Complete
run: |
echo "✅ Security scans completed"
echo "Review the results above for any vulnerabilities"
echo "📊 Check the Security tab for detailed reports"