Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: open-workflows-venture-loop
84 lines
4.0 KiB
YAML
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
|