Audit CI/CD, repo security, and org settings across GitHub, GitLab, Azure DevOps.
735
Audit workflows, branch protection, repository security features, and organization settings across an entire GitHub organization — or Azure DevOps projects.
Reports are generated in JSON, HTML, and SARIF formats.
curl -fsSL https://raw.githubusercontent.com/accuknox/gh-audit/main/install.sh | sh
This downloads the latest pre-built binary for your platform and installs it to /usr/local/bin (or ~/.local/bin if not writable). You can control the install directory and version:
VERSION=0.1.0 INSTALL_DIR=~/bin curl -fsSL https://raw.githubusercontent.com/accuknox/gh-audit/main/install.sh | sh
Download the latest binary for your platform from the Releases page.
git clone https://github.com/accuknox/gh-audit.git
cd gh-audit
pip install .
pip install -e ".[dev]"
Create a fine-grained Personal Access Token (classic PATs are not supported):
Export the token:
export GH_AUDIT_TOKEN=github_pat_...
Create a Personal Access Token with the following scopes:
https://dev.azure.com/{your-org}/_usersSettings/tokensExport the token:
export ADO_AUDIT_TOKEN=...
pipeaudit --config audit-config.yaml
pipeaudit --org my-org --output report.json --html report.html --sarif report.sarif
pipeaudit --org my-org --repos my-org/frontend my-org/backend:develop
pipeaudit --config audit-config.yaml --skip-identity
pipeaudit --platform azure --org my-ado-org --output report.json --html report.html
pipeaudit --platform azure --org my-ado-org --projects MyProject BackendProject
Create an audit-config.yaml:
org: my-org
output: report.json
html_output: report.html
sarif_output: report.sarif
include_archived: false
include_forks: false
skip_identity: false
skip_repo_security: false
skip_org_settings: false
skip_apps_and_tokens: false
updated_within_months: 3
platform: azure
org: my-ado-org
projects:
- MyProject
- BackendProject
output: report.json
html_output: report.html
sarif_output: report.sarif
skip_identity: false
skip_project_settings: false
skip_pipeline_security: false
include_disabled_repos: false
updated_within_months: 3
Every audit produces a 0-100 risk score and a letter grade for the organization and each individual repository.
Each unique rule violation deducts points from a perfect score of 100. The penalty uses diminishing returns — the first instance of a rule costs the full severity weight, but additional instances of the same rule add only +1 point each, capped at 2x the base weight. This means 50 unpinned-action findings are penalized similarly to 5, because they reflect the same underlying practice gap.
| Severity | Base Weight | Max per Rule (2x) |
|---|---|---|
| Critical | 10 | 20 |
| High | 7 | 14 |
| Medium | 4 | 8 |
| Low | 2 | 4 |
| Info | 0.5 | 1 |
Example: A rule with severity high (base=7):
Repository score = max(0, 100 - sum of per-rule penalties)
The score reflects how many different security issues a repo has, not just the raw count of findings.
Organization score = repo_average - org_penalties - identity_penalties - apps_tokens_penalties
The org score starts as the average of all repo scores, then deducts penalties for org-level findings (ORG001-ORG005), identity/access findings (IAM001-IAM011), and apps & tokens findings (APP001-APP005, PAT001-PAT005). Each category is capped at 15 points to prevent any single category from dominating the score (max total org deduction = 45 points).
| Grade | Score Range | Interpretation |
|---|---|---|
| A+ | 97-100 | Excellent — minimal or no findings |
| A | 93-96 | Strong security posture |
| A- | 90-92 | Good, with minor improvements possible |
| B+/B/B- | 80-89 | Adequate, some findings need attention |
| C+/C/C- | 70-79 | Needs improvement — multiple medium+ findings |
| D | 60-69 | Poor — significant security gaps |
| F | <60 | Critical — immediate remediation required |
audit_metadata.org_score and per-repo score fieldsinvocations[0].properties.riskScoreMIT
Content type
Image
Digest
sha256:6d9f3fd69…
Size
51.5 MB
Last updated
4 months ago
docker pull accuknox/pipeauditor:v1.2.alpha