Full reference configuration for the ASCEND framework on GitHub Actions.
ascend-full.yml— Complete four-layer pipeline.
mkdir -p /path/to/your/repo/.github/workflows
cp .github/workflows/ascend-full.yml /path/to/your/repo/.github/workflows/Navigate to Settings → Secrets and variables → Actions and add:
| Secret | Purpose | Required |
|---|---|---|
SONAR_TOKEN |
SonarQube / SonarCloud authentication | Yes (if using Sonar) |
SONAR_HOST_URL |
SonarQube server URL | Yes (if using Sonar) |
SNYK_TOKEN |
Snyk API token | Yes (if using Snyk) |
SEMGREP_APP_TOKEN |
Semgrep SaaS token | Optional |
FOSSA_API_KEY |
FOSSA license compliance | Optional |
ASCEND_SYNC_WEBHOOK |
AI Sync service webhook URL | Optional (Layer 4) |
GitHub Advanced Security enables native SARIF result display in pull requests and provides:
- CodeQL scanning integration
- Secret scanning with push protection
- Dependency review action
Available for all public repos. For private repos, requires GHAS license.
Go to Settings → Branches → Branch protection rules and require the following status checks before merging:
L1 / Quality Gate 1L2 / Quality Gate 2
This enforces Layer 1 and Layer 2 gates as blocking before merge. Layer 3 gates enforce at deployment time.
Adjust thresholds at the top of the workflow file:
env:
ASCEND_QUALITY_GATE_MIN: "0.85" # Composite quality score
ASCEND_CRITICAL_THRESHOLD: "0" # Max critical vulns allowed
ASCEND_HIGH_THRESHOLD: "5" # Max high vulns allowedThe NIST DevSecOps guidelines recommend starting with warning-only mode. To do this:
- Keep all scans enabled.
- Change
exit-code: "1"toexit-code: "0"in Trivy step. - Change
soft_fail: falsetosoft_fail: truein Checkov step. - Remove
--failfrom TruffleHog args. - Review reports for 2–4 weeks, calibrate thresholds, then re-enable blocking mode.
CodeQL matrix job fails for a language not in your project: Remove that language from the matrix.
SonarQube Quality Gate times out: Increase timeout-minutes or check that the quality profile is defined in your SonarQube server.
Trivy blocks on unfixable CVE: The ignore-unfixed: true setting should skip these. If it doesn't, add specific CVEs to .trivyignore.