teleo-codex/.github/workflows/mirror-pr-to-forgejo.yml
m3taversal 99f7e26997
Some checks are pending
Mirror PR to Forgejo / mirror (pull_request) Waiting to run
leo: add skills/submit.md + GitHub→Forgejo mirror workflow
- What: New submit skill (PR mechanics for all agents) + GitHub Actions
  workflow that mirrors external contributor PRs to Forgejo for eval
- Why: Agents need a single reference for the Forgejo PR workflow.
  External contributors need a path from GitHub to our eval pipeline.
- submit.md complements extract.md: extract = how to produce claims,
  submit = how to get them into the knowledge base

Pentagon-Agent: Leo <B9E87C91-8D2A-42C0-AA43-4874B1A67642>
Model: claude-opus-4-6
2026-03-09 14:11:04 +00:00

106 lines
4 KiB
YAML

name: Mirror PR to Forgejo
on:
pull_request:
types: [opened, synchronize, reopened]
jobs:
mirror:
runs-on: ubuntu-latest
steps:
- name: Comment on PR
uses: actions/github-script@v7
with:
script: |
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
});
// Don't double-comment
const botComment = comments.find(c => c.body.includes('mirror-to-forgejo'));
if (botComment) return;
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: `<!-- mirror-to-forgejo -->
👋 Thanks for your contribution! This repo uses [Forgejo](https://git.livingip.xyz/teleo/teleo-codex) as its primary git host. Your PR is being mirrored there for automated review.
**What happens next:**
- Your branch is being pushed to our Forgejo instance
- A corresponding PR will be created for our 3-agent review pipeline
- Leo (cross-domain), a domain peer, and a self-review agent will evaluate your changes
- If approved, it merges on Forgejo and syncs back here automatically
You don't need to do anything — we'll update this PR with the review results.
*Teleo eval pipeline — [git.livingip.xyz](https://git.livingip.xyz/teleo/teleo-codex)*`
});
- name: Checkout PR branch
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.ref }}
fetch-depth: 0
- name: Mirror branch to Forgejo
env:
FORGEJO_TOKEN: ${{ secrets.FORGEJO_MIRROR_TOKEN }}
run: |
BRANCH="${{ github.event.pull_request.head.ref }}"
# Add Forgejo remote
git remote add forgejo "https://github-mirror:${FORGEJO_TOKEN}@git.livingip.xyz/teleo/teleo-codex.git"
# Push the branch
git push forgejo "HEAD:refs/heads/${BRANCH}" --force
echo "Branch ${BRANCH} pushed to Forgejo"
- name: Create PR on Forgejo
env:
FORGEJO_TOKEN: ${{ secrets.FORGEJO_MIRROR_TOKEN }}
run: |
BRANCH="${{ github.event.pull_request.head.ref }}"
TITLE="${{ github.event.pull_request.title }}"
BODY="${{ github.event.pull_request.body }}"
GH_PR="${{ github.event.pull_request.number }}"
GH_AUTHOR="${{ github.event.pull_request.user.login }}"
# Check if PR already exists for this branch
EXISTING=$(curl -s -H "Authorization: token ${FORGEJO_TOKEN}" \
"https://git.livingip.xyz/api/v1/repos/teleo/teleo-codex/pulls?state=open" \
| jq -r ".[] | select(.head.ref == \"${BRANCH}\") | .number")
if [ -n "$EXISTING" ]; then
echo "PR already exists on Forgejo: #${EXISTING}"
exit 0
fi
# Create PR on Forgejo
PR_BODY="Mirrored from GitHub PR #${GH_PR} by @${GH_AUTHOR}
${BODY}
---
*Mirrored automatically from [GitHub PR #${GH_PR}](https://github.com/living-ip/teleo-codex/pull/${GH_PR})*"
RESPONSE=$(curl -s -X POST \
-H "Authorization: token ${FORGEJO_TOKEN}" \
-H "Content-Type: application/json" \
-d "$(jq -n --arg title "$TITLE" --arg body "$PR_BODY" --arg head "$BRANCH" \
'{title: $title, body: $body, head: $head, base: "main"}')" \
"https://git.livingip.xyz/api/v1/repos/teleo/teleo-codex/pulls")
FORGEJO_PR=$(echo "$RESPONSE" | jq -r '.number // empty')
if [ -n "$FORGEJO_PR" ]; then
echo "Created Forgejo PR #${FORGEJO_PR}"
else
echo "Failed to create Forgejo PR:"
echo "$RESPONSE"
exit 1
fi