ci / test (push) Successful in 35s
venture.yml: install Chromium for the browser pass (#157) The first Claude ventures launched without the browser pass (no Chrome on the runner): no headless checks, no contact sheet for the portfolio. One step installs Chromium in the job image; venture.py's chrome() finds it. Merged on the owner's word, CI green (run 1014). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD
71 lines
4.2 KiB
YAML
71 lines
4.2 KiB
YAML
name: venture
|
|
# The venture loop: trending repos -> pitches -> board -> launch plan -> launch page on Pages -> 7 days of signups.
|
|
# Every 6 hours it advances whatever is due (cheap when nothing is); a new venture card starts once a day,
|
|
# or right away: Actions -> venture -> Run workflow -> tick "Start a new venture now" (gh workflow run venture.yml -f start=true).
|
|
# Batches: TIME_VENTURE_BATCH=3 (or Run workflow -> batch) runs k ventures at once in one milestone.
|
|
# Off until TIME_VENTURE=on. Signups come in through .github/ISSUE_TEMPLATE/early-access.yml.
|
|
on:
|
|
schedule:
|
|
- cron: "27 */6 * * *" # every 6 hours (was every 20 minutes, paused for Venice spend); Claude seats now
|
|
workflow_dispatch:
|
|
inputs:
|
|
start:
|
|
description: "Start a new venture now, even if today's has already run"
|
|
type: boolean
|
|
default: false
|
|
batch:
|
|
description: "Start a venture batch now: one scout, the board's top k, launched together (k = TIME_VENTURE_BATCH, or 3)"
|
|
type: boolean
|
|
default: false
|
|
permissions:
|
|
contents: write
|
|
issues: write
|
|
pages: write
|
|
statuses: write
|
|
concurrency:
|
|
group: venture
|
|
cancel-in-progress: false
|
|
jobs:
|
|
tick:
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 40
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
with:
|
|
sparse-checkout: .github/time
|
|
persist-credentials: false # the worker's shell must not find the token in .git/config
|
|
# the browser pass (headless checks + the contact sheet the portfolio shows) needs Chrome; the job image has none
|
|
- run: command -v chromium || (apt-get update -qq && apt-get install -y -qq --no-install-recommends chromium >/dev/null)
|
|
- run: python3 .github/time/venture.py tick
|
|
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 }} # the `time` bot: opens and merges PRs (Gitea denies that to the Actions identity)
|
|
TIME_RUN_IMAGE: node:22-bookworm # the worker's shell runs in a throwaway container, not next to these secrets
|
|
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} # optional: a backend per venture (cloudflare.py)
|
|
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_START: ${{ inputs.start && '1' || '' }}
|
|
TIME_VENTURE_BATCH_START: ${{ inputs.batch && '1' || '' }}
|
|
TIME_VENTURE_BATCH: ${{ vars.TIME_VENTURE_BATCH }} # k; set, a batch replaces the daily single card
|
|
TIME_VENTURE_BATCH_HOLD_HOURS: ${{ vars.TIME_VENTURE_BATCH_HOLD_HOURS }} # launch-together hold (default 6)
|
|
TIME_VENTURE_HEAVY: ${{ vars.TIME_VENTURE_HEAVY }} # worker runs at once per tick (default 3)
|
|
TIME_VENTURE_PITCH: ${{ vars.TIME_VENTURE_PITCH }} # default haiku,sonnet,opus
|
|
TIME_VENTURE_BOARD: ${{ vars.TIME_VENTURE_BOARD }} # default haiku,sonnet,opus
|
|
TIME_VENTURE_CHAIR: ${{ vars.TIME_VENTURE_CHAIR }} # default fable
|
|
TIME_VENTURE_JUDGE: ${{ vars.TIME_VENTURE_JUDGE }} # default fable
|
|
TIME_VENTURE_ESCALATE: ${{ vars.TIME_VENTURE_ESCALATE }} # second fix round, default claude:opus
|
|
TIME_VENTURE_PAGES_DOMAIN: ${{ vars.TIME_VENTURE_PAGES_DOMAIN }} # default yolopreneur.lol
|
|
TIME_TRUSTED: ${{ vars.TIME_TRUSTED }} # whose /time retry counts
|
|
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' }} # the builder; the heartbeat's TIME_WORKER is its own
|
|
TIME_WORKER_STEPS: ${{ vars.TIME_WORKER_STEPS }}
|
|
TIME_WORKER_MAX_TOKENS: ${{ vars.TIME_WORKER_MAX_TOKENS }}
|