name: Security Scan on: push: branches: [ main ] pull_request: branches: [ main ] schedule: - cron: '0 6 * * 1' # Weekly on Monday at 6 AM jobs: security: name: Security Vulnerability Scan runs-on: ubuntu-latest permissions: security-events: write actions: read contents: read steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '18' cache: 'npm' - name: Install dependencies run: npm ci - name: Run npm audit run: npm audit --audit-level=high - name: Initialize CodeQL uses: github/codeql-action/init@v3 with: languages: javascript - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v3 docker-security: name: Docker Security Scan runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Build Docker image for scanning run: docker build -t quixotic:scan . - name: Run Trivy vulnerability scanner uses: aquasecurity/trivy-action@master with: image-ref: 'quixotic:scan' format: 'sarif' output: 'trivy-results.sarif' - name: Upload Trivy scan results uses: github/codeql-action/upload-sarif@v3 if: always() with: sarif_file: 'trivy-results.sarif'