# 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"
