Files
time/.github/workflows/venture-loop.yml
T
teahubxyzandClaude 0112590a41
ci / test (push) Successful in 42s
sync / sync (push) Successful in 6s
venture-loop.yml: quote the step name with a colon in it (YAML read it as a key: a jobless failed run)
Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: open-workflows-venture-loop
2026-10-20 05:24:58 +00:00

84 lines
4.0 KiB
YAML

name: venture loop
# The venture loop, stage by stage: the same card and beats as venture.yml's tick, walked as one step per stage so the
# whole loop is a workflow Havre's /open (https://havre.yolopreneur.lol/open/, Workflows → Import) shows as a chain of
# nodes. Each step runs `venture.py stage <card> <at>`: it advances the card once if it stands at <at>, else does
# nothing, so one run carries a new card from scout to launch, and a re-run picks up wherever the card stands.
# Off until TIME_VENTURE=on, like venture.yml; the two share every secret and variable.
on:
workflow_dispatch:
inputs:
card:
description: "The venture card to advance (an issue number), or `new` to open today's card first"
type: string
default: new
permissions:
contents: write
issues: write
pages: write
statuses: write
concurrency:
group: venture
cancel-in-progress: false
jobs:
loop:
runs-on: ubuntu-latest
timeout-minutes: 60
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
VENICE_API_KEY: ${{ secrets.VENICE_API_KEY }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
TIME_TOKEN: ${{ secrets.TIME_TOKEN }}
TIME_RUN_IMAGE: node:22-bookworm
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
TIME_DAILY_USD: ${{ vars.TIME_DAILY_USD }}
TIME_MONTHLY_USD: ${{ vars.TIME_MONTHLY_USD }}
TIME_VENTURE_DOMAIN: ${{ vars.TIME_VENTURE_DOMAIN }}
TIME_VENTURE_AI_MODEL: ${{ vars.TIME_VENTURE_AI_MODEL }}
TIME_VENTURE: ${{ vars.TIME_VENTURE }}
TIME_VENTURE_PITCH: ${{ vars.TIME_VENTURE_PITCH }}
TIME_VENTURE_BOARD: ${{ vars.TIME_VENTURE_BOARD }}
TIME_VENTURE_CHAIR: ${{ vars.TIME_VENTURE_CHAIR }}
TIME_VENTURE_JUDGE: ${{ vars.TIME_VENTURE_JUDGE }}
TIME_VENTURE_ESCALATE: ${{ vars.TIME_VENTURE_ESCALATE }}
TIME_VENTURE_PAGES_DOMAIN: ${{ vars.TIME_VENTURE_PAGES_DOMAIN }}
TIME_TRUSTED: ${{ vars.TIME_TRUSTED }}
TIME_CAP_SLACK: ${{ vars.TIME_CAP_SLACK }}
TIME_ANTHROPIC_API: ${{ vars.TIME_ANTHROPIC_API }}
TIME_VENTURE_MEASURE_DAYS: ${{ vars.TIME_VENTURE_MEASURE_DAYS }}
TIME_WORKER: ${{ vars.TIME_VENTURE_WORKER || 'claude:sonnet' }}
TIME_WORKER_STEPS: ${{ vars.TIME_WORKER_STEPS }}
TIME_WORKER_MAX_TOKENS: ${{ vars.TIME_WORKER_MAX_TOKENS }}
steps:
- uses: actions/checkout@v5
with:
sparse-checkout: .github/time
persist-credentials: false
- name: chromium, for the checks
run: command -v chromium || (apt-get update -qq && apt-get install -y -qq --no-install-recommends chromium >/dev/null)
- name: the card
run: |
card="${{ inputs.card }}"
if [ "$card" = new ] || [ -z "$card" ]; then card=$(python3 .github/time/venture.py stage new | tail -1); fi
echo "card=$card" >> "$GITHUB_ENV" && echo "venture card #$card"
- name: scout (trending repos)
run: python3 .github/time/venture.py stage "$card" new
- name: research and pick (the lead), or pitches (the board)
run: python3 .github/time/venture.py stage "$card" scouted
- name: board vote (a batch, or no lead)
run: python3 .github/time/venture.py stage "$card" pitched
- name: plan (launch plan, signal issue, LAUNCH.md)
run: python3 .github/time/venture.py stage "$card" picked
- name: build (the worker, on the Pages branch)
run: python3 .github/time/venture.py stage "$card" planned
- name: check, fix or polish, judge; launch when it passes
run: |
for round in 1 2 3 4 5; do
python3 .github/time/venture.py stage "$card" built | tee /tmp/round.txt
grep -q "built -> built" /tmp/round.txt || break
done
- name: launch a venture held for its batch
run: python3 .github/time/venture.py stage "$card" ready
- name: "measure (7 days on: signups against the plan's lines)"
run: python3 .github/time/venture.py stage "$card" launched