Files
prose-contracts/.gitea/workflows/pr-pipeline.yaml
T
Agent Zero 8f89603c31
PR Pipeline — Authorize → Validate → Review → Merge / auth (pull_request) Successful in 1s
PR Pipeline — Authorize → Validate → Review → Merge / validate (pull_request) Failing after 1s
PR Pipeline — Authorize → Validate → Review → Merge / lint (pull_request) Has been skipped
PR Pipeline — Authorize → Validate → Review → Merge / ai-review (pull_request) Has been skipped
PR Pipeline — Authorize → Validate → Review → Merge / gate (pull_request) Has been skipped
fix: use IP 192.168.68.17:3000 instead of git.sysloggh.net hostname for CI checkout
The Gitea Actions runner cannot resolve the internal hostname
git.sysloggh.net during checkout. Using the direct IP address
resolves the DNS resolution issue in CI pipeline steps.
2026-07-06 18:54:12 -04:00

107 lines
3.8 KiB
YAML

name: PR Pipeline — Authorize → Validate → Review → Merge
on:
push:
branches: [master]
paths:
- '**.prose.md'
- 'scripts/**.sh'
- '**.yaml'
- '**.yml'
pull_request:
types: [opened, synchronize, reopened]
paths:
- '**.prose.md'
- 'scripts/**.sh'
- '**.yaml'
- '**.yml'
jobs:
auth:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
run: |
git clone --depth=50 "http://192.168.68.17:3000/${{ gitea.repository }}.git" .
git fetch origin "${{ gitea.ref }}" --depth=50
git checkout "${{ gitea.sha }}"
- name: Authorization check
run: bash scripts/prose-auth-check.sh
validate:
runs-on: ubuntu-latest
needs: auth
steps:
- name: Checkout repository
run: |
git clone --depth=50 "http://192.168.68.17:3000/${{ gitea.repository }}.git" .
git fetch origin "${{ gitea.ref }}" --depth=50
git checkout "${{ gitea.sha }}"
- name: YAML frontmatter validation
run: |
echo "=== Prose Contract Frontmatter Validation ==="
FAILED=0
for f in $(find . -name "*.prose.md" -not -path "./.git/*" -not -path "./runs/*"); do
FM=$(sed -n '/^---$/,/^---$/p' "$f" | sed '1d;$d')
[ -z "$FM" ] && { echo " ❌ $f: No YAML frontmatter"; FAILED=$((FAILED+1)); continue; }
KIND=$(echo "$FM" | grep '^kind:' | awk '{print $2}')
case "$KIND" in
function|responsibility|gateway|pattern|test|template|architecture|enforcement) echo " ✅ $f: kind=$KIND" ;;
*) echo " ❌ $f: Invalid kind='$KIND'"; FAILED=$((FAILED+1)) ;;
esac
echo "$FM" | grep -q '^name:' || { echo " ❌ $f: Missing name"; FAILED=$((FAILED+1)); }
echo "$FM" | grep -q '^description:' || { echo " ❌ $f: Missing description"; FAILED=$((FAILED+1)); }
done
[ $FAILED -gt 0 ] && { echo "❌ FRONTMATTER FAILED ($FAILED error(s))"; exit 1; }
echo "✅ Frontmatter validation passed"
lint:
runs-on: ubuntu-latest
needs: validate
steps:
- name: Checkout repository
run: |
git clone --depth=50 "http://192.168.68.17:3000/${{ gitea.repository }}.git" .
git fetch origin "${{ gitea.ref }}" --depth=50
git checkout "${{ gitea.sha }}"
- name: Structure + regression + consistency lint
run: bash scripts/prose-lint.sh
ai-review:
runs-on: ubuntu-latest
needs: validate
steps:
- name: Checkout repository
run: |
git clone --depth=50 "http://192.168.68.17:3000/${{ gitea.repository }}.git" .
git fetch origin "${{ gitea.ref }}" --depth=50
git checkout "${{ gitea.sha }}"
- name: AI-powered contract review
env:
LITELLM_URL: ${{ secrets.LITELLM_URL }}
LITELLM_KEY: ${{ secrets.LITELLM_KEY }}
run: bash scripts/prose-ai-review.sh
gate:
runs-on: ubuntu-latest
needs: [auth, validate, lint, ai-review]
if: success()
steps:
- name: Merge gate
run: |
echo "╔══════════════════════════════════════╗"
echo "║ ALL CHECKS PASSED — SAFE TO MERGE ║"
echo "╚══════════════════════════════════════╝"
echo ""
echo " ✅ auth — authorized agent"
echo " ✅ validate — frontmatter valid"
echo " ✅ lint — structure + no regressions"
echo " ✅ ai-review — no contradictions with ground truth"
echo ""
echo "Merge this PR to deploy to main."