name: Security on: push: branches: [main] pull_request: branches: [main] schedule: # Run security scans every Monday at 09:00 UTC - cron: '0 9 * * 1' concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: codeql: name: CodeQL Analysis runs-on: ubuntu-latest timeout-minutes: 10 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: typescript queries: security-extended - name: Autobuild uses: github/codeql-action/autobuild@v3 - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v3 npm-audit: name: NPM Audit runs-on: ubuntu-latest timeout-minutes: 5 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 - name: Run npm audit run: npm audit --audit-level=moderate all-security-checks-pass: name: All Security Checks Pass runs-on: ubuntu-latest needs: [codeql, npm-audit] steps: - name: All security checks passed run: echo "All security checks passed successfully!"