Skip to content

Pipeline — Implement #97

Pipeline — Implement

Pipeline — Implement #97

name: Pipeline — Implement
on:
schedule:
- cron: '45 */8 * * *' # every 8 hours
workflow_dispatch:
permissions:
actions: write # workflow_dispatch to pages.yml
contents: write
issues: write
concurrency:
group: pipeline-implement
cancel-in-progress: false
jobs:
run:
runs-on: ubuntu-latest
timeout-minutes: 50
env:
DARTMOUTH_CHAT_API_KEY: ${{ secrets.DARTMOUTH_CHAT_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v5
with: { ref: main }
- uses: actions/setup-python@v6
with: { python-version: "3.11", cache: pip }
- run: pip install -e ".[dev]"
- run: python -m llmxive preflight
- name: Run implementer pass
run: python -m llmxive run --max-tasks 6 --stage tasked
- run: python -c "from llmxive.agents.status_reporter import regenerate_web_data; from pathlib import Path; regenerate_web_data(repo_root=Path('.'))"
- name: Commit + push
id: commit
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add state/ projects/ web/data/ || true
if git diff --cached --quiet; then echo "no changes"; echo "pushed=false" >> "$GITHUB_OUTPUT"; else
git commit -m "pipeline(implement): 8h tick"
for i in 1 2 3 4 5; do
git pull --rebase origin main && git push && break
echo "push attempt $i failed; retrying..." >&2
sleep $((5 * i))
done
echo "pushed=true" >> $GITHUB_OUTPUT
fi
- name: Trigger Pages deploy
# GitHub suppresses workflow triggers from GITHUB_TOKEN pushes (to
# prevent infinite cron loops); workflow_dispatch invoked from another
# workflow DOES fire regardless. Without this, pages.yml never
# redeploys after a cron tick even though we touched web/data/.
if: steps.commit.outputs.pushed == 'true'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh workflow run pages.yml --ref main