Skip to content

feat: add security scanning and code quality tools #1

feat: add security scanning and code quality tools

feat: add security scanning and code quality tools #1

Workflow file for this run

name: Security Scanning
on:
push:
branches: [main]
pull_request:
branches: [main]
schedule:
# Run weekly on Mondays at 9am UTC
- cron: '0 9 * * 1'
permissions:
contents: read
security-events: write
actions: read
jobs:
# CodeQL Analysis for JavaScript/TypeScript
codeql:
name: CodeQL Analysis
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: javascript-typescript
queries: security-extended,security-and-quality
- name: Autobuild
uses: github/codeql-action/autobuild@v3
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:javascript-typescript"
# Dependency Review - checks for vulnerable dependencies in PRs
dependency-review:
name: Dependency Review
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Dependency Review
uses: actions/dependency-review-action@v4
with:
fail-on-severity: high
deny-licenses: GPL-3.0, AGPL-3.0
allow-licenses: MIT, Apache-2.0, BSD-2-Clause, BSD-3-Clause, ISC
# Trivy for vulnerability scanning
trivy:
name: Trivy Security Scan
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Run Trivy vulnerability scanner
uses: aquasecurity/trivy-action@master
with:
scan-type: 'fs'
scan-ref: '.'
format: 'sarif'
output: 'trivy-results.sarif'
severity: 'CRITICAL,HIGH'
- name: Upload Trivy scan results
uses: github/codeql-action/upload-sarif@v3
if: always()
with:
sarif_file: 'trivy-results.sarif'
# Secret scanning with Gitleaks
gitleaks:
name: Secret Detection
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Gitleaks Scan
uses: gitleaks/gitleaks-action@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# OSSF Scorecard for supply chain security
scorecard:
name: OSSF Scorecard
runs-on: ubuntu-latest
if: github.event_name != 'pull_request'
permissions:
security-events: write
id-token: write
steps:
- name: Checkout
uses: actions/checkout@v6
with:
persist-credentials: false
- name: Run Scorecard
uses: ossf/scorecard-action@v2.4.1
with:
results_file: scorecard-results.sarif
results_format: sarif
publish_results: true
- name: Upload Scorecard results
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: scorecard-results.sarif