diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index 366e073..2f84e2f 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -1,12 +1,12 @@ name: canary -# One real run a day against opensea.io, and the only workflow in this repo +# One real run a week (Mondays) against opensea.io, and the only workflow in this repo # that touches the site. tests.yml (deliberately) never does — see its own # header for why the two are separate. # # THIS CANARY NEEDS NO SECRETS, AND THAT IS THE POINT # --------------------------------------------------- -# A canary that cannot pass must SKIP rather than go red every day, +# A canary that cannot pass must SKIP rather than go red on every run, # because a check that is always red teaches everyone to ignore checks. The # other half of that rule: a canary that CAN pass without a # credential should never be gated on one. @@ -15,7 +15,7 @@ name: canary # (AS24940) on 2026-09-17: every page kind, every mode and every locale # answered HTTP 200 with no key, no proxy and no account, and OpenSea's own # GraphQL endpoint — which is where every page after the first comes from — -# answered an anonymous POST. So this runs a real three-mode scrape daily +# answered an anonymous POST. So this runs a real three-mode scrape weekly # from a bare GitHub runner and is EXPECTED GREEN. # # That is not a convenience. It is what keeps the README's central claim @@ -48,10 +48,6 @@ on: schedule: # 06:20 UTC. Off the hour, because everything else in the world runs on # it and a queued runner adds nothing but latency. - - cron: "20 6 * * *" - # Mondays: the same jobs, WITH the paid secrets (proxy, Scraping Browser, - # captcha key). On the daily run above those secrets read as empty, so - # it takes the free no-secret route and bills nothing. - cron: "20 6 * * 1" workflow_dispatch: @@ -82,7 +78,7 @@ jobs: - name: Walk a collection's items id: items env: - OPENSEA_PROXY: ${{ (github.event_name != 'schedule' || github.event.schedule == '20 6 * * 1') && secrets.OPENSEA_PROXY || '' }} + OPENSEA_PROXY: ${{ secrets.OPENSEA_PROXY }} # `set +e`: GitHub runs `run:` steps under `bash -e`, so a non-zero # command aborts the step BEFORE the following echo, and # continue-on-error does not change that — it stops the step failing @@ -248,7 +244,7 @@ jobs: - name: Scrape OpenSea's own ranking id: ranking env: - OPENSEA_PROXY: ${{ (github.event_name != 'schedule' || github.event.schedule == '20 6 * * 1') && secrets.OPENSEA_PROXY || '' }} + OPENSEA_PROXY: ${{ secrets.OPENSEA_PROXY }} run: | set +e python3 playwright_scraper.py \ @@ -328,7 +324,7 @@ jobs: - name: Scrape a collection's sales feed id: activity env: - OPENSEA_PROXY: ${{ (github.event_name != 'schedule' || github.event.schedule == '20 6 * * 1') && secrets.OPENSEA_PROXY || '' }} + OPENSEA_PROXY: ${{ secrets.OPENSEA_PROXY }} run: | set +e python3 playwright_scraper.py \ diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d64e78..136c268 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,9 +16,7 @@ was written, because anyone can read it with `git show v0.1.0:CHANGELOG.md`. ### Changed -- CI only: the canary's optional paid secret `OPENSEA_PROXY` now reaches it only on a new weekly - run (Mondays 06:20 UTC) and on a manual dispatch. The daily run keeps its - schedule and takes the free route without them, so it bills nothing. +- CI only: the canary now runs weekly (Mondays 06:20 UTC) and on a manual dispatch, with its optional secret `OPENSEA_PROXY` passed on every run; the daily schedule is removed. ## [0.2.0] - 2026-10-16 diff --git a/README.md b/README.md index dbcfbaa..f28a04a 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ sales feed of only sales. Two unrelated datacentre networks, one afternoon. So the paid products here buy **volume from many addresses, a specific country, browser infrastructure you do not run, and a solver for the day Cloudflare does issue its managed challenge** — not access. The -[canary](#the-canary) re-runs that scrape every morning, precisely so that +[canary](#the-canary) re-runs that scrape every Monday, precisely so that this claim is retested without anyone remembering to. --- @@ -474,7 +474,7 @@ row one of them lacks would read as `removed`. ## The canary `.github/workflows/canary.yml` runs a real three-mode scrape against -opensea.io every morning **with no secrets**, and is expected green. It +opensea.io every Monday **with no secrets**, and is expected green. It asserts pagination reached at least three pages, that the price ladder ascends and its priced rows match OpenSea's own `listedItemCount`, that ranks are contiguous across pages, that `--activity sales` returns only sales, and