Skip to content

fix(deploy): per-color port pairing for blue/green services (editor 5… #318

fix(deploy): per-color port pairing for blue/green services (editor 5…

fix(deploy): per-color port pairing for blue/green services (editor 5… #318

Workflow file for this run

name: Security Audit
on:
push:
branches: [main]
pull_request:
# Block PRs introducing high+ CVEs before they reach main.
branches: [main]
schedule:
# Chaque lundi à 06:00 UTC
- cron: '0 6 * * 1'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
defaults:
run:
shell: bash
jobs:
# ─────────────────────────────────────────────
# Audit JS/TS — pnpm audit
# ─────────────────────────────────────────────
audit-js:
name: Audit JS/TS dependencies
runs-on: [self-hosted, linux, x64, hetzner, qrcom]
timeout-minutes: 10
steps:
- uses: actions/checkout@v7
- uses: pnpm/action-setup@v6
# Runner system Node bumped to 22 (2026-06-13, image qrcom/github-runner:noble-node22)
# → v6's @pnpm/exe bootstrap works. No version input: pnpm reads
# packageManager (pnpm@10.28.0) from package.json (single source of truth).
- uses: actions/setup-node@v6
with:
node-version: '24'
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Run pnpm audit (high+ severity)
run: pnpm audit --audit-level=high
- name: Snapshot full audit report (artifact)
if: always()
run: pnpm audit --json > audit-report.json || true
- name: Upload audit report
if: always()
uses: actions/upload-artifact@v7
with:
name: pnpm-audit-${{ github.run_id }}
path: audit-report.json
retention-days: 30
# ─────────────────────────────────────────────
# Audit Python — pip-audit
# ─────────────────────────────────────────────
audit-python:
name: Audit Python dependencies
runs-on: [self-hosted, linux, x64, hetzner, qrcom]
timeout-minutes: 10
steps:
- uses: actions/checkout@v7
- uses: actions/setup-python@v6
with:
python-version: '3.12'
cache: 'pip'
- name: Upgrade pip (clear pip's own CVEs before audit)
run: python -m pip install --upgrade pip
- name: Install pip-audit
run: pip install pip-audit
- name: Install project dependencies
run: pip install -r requirements.txt -r requirements-dev.txt
- name: Run pip-audit
run: pip-audit --strict --desc
# ─────────────────────────────────────────────
# Lockfile integrity
# ─────────────────────────────────────────────
lockfile-integrity:
name: Lockfile integrity check
runs-on: [self-hosted, linux, x64, hetzner, qrcom]
timeout-minutes: 5
steps:
- uses: actions/checkout@v7
- uses: pnpm/action-setup@v6
# Runner system Node bumped to 22 (2026-06-13, image qrcom/github-runner:noble-node22)
# → v6's @pnpm/exe bootstrap works. No version input: pnpm reads
# packageManager (pnpm@10.28.0) from package.json (single source of truth).
- uses: actions/setup-node@v6
with:
node-version: '24'
cache: 'pnpm'
- name: Verify lockfile is up-to-date
run: pnpm install --frozen-lockfile