mirror of
https://github.com/pezkuwichain/pwap.git
synced 2026-06-11 22:21:01 +00:00
06ed9734c6
* Faz 3.1 — All CI jobs moved to self-hosted pwap-runner (DEV VPS).
No more dependency on GitHub-hosted runners — supply-chain attack
surface from GHA runner image compromise eliminated.
* Faz 3.3 — Automatic rollback on health-check fail. Each deploy stamps
/.deploy-sha into the artifact. On health-check failure, the deploy
job reads the previous SHA from the live site, pulls that image, and
redeploys. Telegram notification differentiates: rolled-back-OK,
rollback-also-failed, no-prev-available, manual-rollback-needed.
* E.3 — cosign keyless image signing. build-image signs the GHCR
manifest via Sigstore Fulcio (OIDC, no long-lived keys). deploy-app
and deploy-pex verify the signature before extracting /dist —
unsigned or tampered images cannot deploy. Identity-pinned to this
workflow file.
* E.5 — Subresource Integrity (SRI). vite-plugin-subresource-integrity
injects sha384 integrity= into <script>/<link> tags at build time.
CDN/proxy compromise cannot inject tampered JS — browser blocks on
hash mismatch.
* E.2 — Dependabot triage. 14 alerts: 7 high + 4 moderate cleared via
npm audit fix + npm overrides (elliptic, create-ecdh). 6 low
(transitive in vite-plugin-node-polyfills chain) accepted; the
upstream fix proposes a semver-major DOWNGRADE which makes no sense.
* E.1 — Branch protection on main: CI Gate ✅ required, 1 review
required, force-push and deletion blocked.
59 lines
1.5 KiB
YAML
59 lines
1.5 KiB
YAML
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: pwap-runner
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
language: [javascript-typescript]
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Initialize CodeQL
|
|
uses: github/codeql-action/init@v3
|
|
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@v3
|
|
|
|
- name: Perform analysis
|
|
uses: github/codeql-action/analyze@v3
|
|
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@v4
|
|
continue-on-error: true
|
|
with:
|
|
name: codeql-sarif-${{ matrix.language }}
|
|
path: /tmp/codeql-results/*.sarif
|
|
retention-days: 7
|