CI/CD Integration
Run GEO audits automatically in your CI/CD pipeline. Catch regressions before they hit production.
Quick Start (GitHub Actions)
Add this to .github/workflows/geo-audit.yml:
name: GEO Audit
on: [push]
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: Auriti-Labs/geo-optimizer-skill@v1
with:
url: https://yoursite.com
Thatβs it. The action installs Python, installs geo-optimizer-skill, runs the audit, and reports the score.
Inputs
| Input | Required | Default | Description |
|---|---|---|---|
url |
β | β | URL to audit |
threshold |
β | 0 |
Minimum score (0-100). Fails if score is below. |
format |
β | json |
Output format: json, sarif, junit, text |
output-file |
β | geo-report |
Base name for the output file (no extension) |
fail-on-warning |
β | false |
Fail on warnings too |
Outputs
| Output | Description |
|---|---|
score |
GEO citability score (0-100) |
band |
Score band: critical, foundation, good, excellent |
report-path |
Path to the generated report file |
Examples
Enforce a minimum score
- uses: Auriti-Labs/geo-optimizer-skill@v1
with:
url: https://yoursite.com
threshold: 70
The step fails if the score drops below 70.
SARIF upload (GitHub Security tab)
- uses: Auriti-Labs/geo-optimizer-skill@v1
with:
url: https://yoursite.com
format: sarif
When format: sarif, results automatically appear in the Security tab of your repo under Code Scanning alerts.
Note: SARIF upload requires
security-events: writepermission.
Post results as a PR comment
- uses: Auriti-Labs/geo-optimizer-skill@v1
id: geo
with:
url: https://yoursite.com
- uses: actions/github-script@v7
if: github.event_name == 'pull_request'
with:
script: |
const score = '$';
const band = '$';
const emoji = score >= 80 ? 'π’' : score >= 60 ? 'π‘' : 'π΄';
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: `## ${emoji} GEO Audit Results\n\n| Metric | Value |\n|--------|-------|\n| Score | **${score}**/100 |\n| Band | \`${band}\` |\n\n_Powered by [GEO Optimizer](https://github.com/Auriti-Labs/geo-optimizer-skill)_`
});
JUnit output (for CI dashboards)
- uses: Auriti-Labs/geo-optimizer-skill@v1
with:
url: https://yoursite.com
format: junit
output-file: geo-results
- uses: dorny/test-reporter@v1
with:
name: GEO Audit
path: geo-results.xml
reporter: java-junit
Scheduled weekly audit
name: Weekly GEO Audit
on:
schedule:
- cron: "0 6 * * 1" # Every Monday at 6 AM UTC
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: Auriti-Labs/geo-optimizer-skill@v1
id: geo
with:
url: https://yoursite.com
threshold: 60
- name: Summary
run: |
echo "## GEO Score: $/100" >> "$GITHUB_STEP_SUMMARY"
Platform Support
The action runs on all GitHub-hosted runners:
- β
ubuntu-latest - β
macos-latest - β
windows-latest
Python 3.9+ is supported.
GitLab CI
geo-audit:
image: python:3.12-slim
stage: test
script:
- pip install geo-optimizer-skill
- geo audit --url https://yoursite.com --format json --output geo-report.json
- |
SCORE=$(python3 -c "import json; print(json.load(open('geo-report.json'))['score'])")
echo "GEO Score: ${SCORE}/100"
if [ "${SCORE}" -lt 60 ]; then
echo "Score below threshold!"
exit 1
fi
artifacts:
paths:
- geo-report.json
expire_in: 30 days
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- if: $CI_COMMIT_BRANCH == "main"
Jenkins
pipeline {
agent any
stages {
stage('GEO Audit') {
steps {
sh '''
pip install geo-optimizer-skill
geo audit --url https://yoursite.com --format json --output geo-report.json
'''
script {
def report = readJSON file: 'geo-report.json'
echo "GEO Score: ${report.score}/100 (${report.band})"
if (report.score < 60) {
error "GEO score ${report.score} is below threshold 60"
}
}
}
post {
always {
archiveArtifacts artifacts: 'geo-report.json'
}
}
}
}
}
Generic CI (any platform)
The core is just two commands:
pip install geo-optimizer-skill
geo audit --url https://yoursite.com --format json --output report.json
Parse the JSON to get score (integer 0-100) and band (string). Use these to gate deployments or trigger alerts.