name: CodeQL (SAST) on: push: branches: [main, develop] pull_request: branches: [main, develop] schedule: # Every Sunday at 02:00 UTC — catches CVEs disclosed during the week - cron: '0 2 * * 0' permissions: contents: read security-events: write actions: read concurrency: group: codeql-${{ github.ref }} cancel-in-progress: true jobs: analyze: name: Analyze ${{ matrix.language }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: language: [javascript-typescript] steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Initialize CodeQL uses: github/codeql-action/init@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2 with: languages: ${{ matrix.language }} # OWASP top-10 + injection + auth flaws + prototype pollution queries: security-extended,security-and-quality - name: Autobuild uses: github/codeql-action/autobuild@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2 - name: Perform analysis uses: github/codeql-action/analyze@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2 with: category: /language:${{ matrix.language }} # GitHub Advanced Security dashboard upload requires paid plan. # SARIF saved as a downloadable artifact instead. upload: false output: /tmp/codeql-results - name: Upload SARIF as artifact uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 continue-on-error: true with: name: codeql-sarif-${{ matrix.language }} path: /tmp/codeql-results/*.sarif retention-days: 7