autosnippet
Version:
Extract code patterns into a knowledge base for AI coding assistants
103 lines (89 loc) • 3.59 kB
YAML
# AutoSnippet Guard CI/CD Check
# Auto-generated by AutoSnippet. Do not edit manually.
# Automatically runs Guard compliance checks on push and PR.
#
# Usage: Copy this file to your project's .github/workflows/ directory.
name: AutoSnippet Guard Check
on:
push:
branches: [main, develop]
pull_request:
branches: [main, develop]
jobs:
guard:
runs-on: ubuntu-latest
name: Guard Compliance Check
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
- name: Install AutoSnippet
run: npm install -g autosnippet
- name: Initialize workspace
run: asd setup --dir .
- name: Run Guard CI check
id: guard-check
continue-on-error: true
run: |
asd guard:ci . \
--report json \
--output guard-report.json \
--max-warnings 20 \
--min-score 70
- name: Upload Guard Report
uses: actions/upload-artifact@v4
if: always()
with:
name: guard-report
path: guard-report.json
retention-days: 30
- name: Comment PR with results
if: github.event_name == 'pull_request' && always()
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
try {
const report = JSON.parse(fs.readFileSync('guard-report.json', 'utf8'));
const { qualityGate, summary } = report;
const icon = qualityGate.status === 'PASS' ? '✅' : qualityGate.status === 'WARN' ? '⚠️' : '❌';
const body = [
`## ${icon} Guard Compliance Report`,
'',
`| Metric | Value |`,
`|--------|-------|`,
`| Quality Gate | ${qualityGate.status} (Score: ${qualityGate.score}/100) |`,
`| Files Scanned | ${summary.filesScanned} |`,
`| Errors | ${summary.errors} |`,
`| Warnings | ${summary.warnings} |`,
].join('\n');
await github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body,
});
} catch (err) {
console.log('Could not post PR comment:', err.message);
}
- name: Evaluate Guard results
if: always()
run: |
if [ ! -f guard-report.json ]; then
echo "⚠️ Guard report not found, skipping evaluation"
exit 0
fi
STATUS=$(node -e "const r=JSON.parse(require('fs').readFileSync('guard-report.json','utf8'));console.log(r.qualityGate.status)")
SCORE=$(node -e "const r=JSON.parse(require('fs').readFileSync('guard-report.json','utf8'));console.log(r.qualityGate.score)")
ERRORS=$(node -e "const r=JSON.parse(require('fs').readFileSync('guard-report.json','utf8'));console.log(r.summary.errors)")
WARNINGS=$(node -e "const r=JSON.parse(require('fs').readFileSync('guard-report.json','utf8'));console.log(r.summary.warnings)")
echo "Quality Gate: $STATUS Score: $SCORE/100"
echo "Errors: $ERRORS Warnings: $WARNINGS"
if [ "$STATUS" = "FAIL" ]; then
echo "❌ Quality Gate FAIL — see Guard report for details"
exit 1
fi
echo "✅ Quality Gate passed"