From 56cbc4cf2a49eff96cdf1ebaa2b095dfbe084fa5 Mon Sep 17 00:00:00 2001 From: jehrr <79864894+jehrr@users.noreply.github.com> Date: Fri, 16 Oct 2026 11:56:35 +0000 Subject: [PATCH] Run every canary job weekly on Mondays The canary now has a single Monday cron. The daily cron is removed, and so is the gating that held the paid job or secret back to the Monday run: a scheduled run and a manual dispatch now run every job the same way, with each secret mapped plainly. A job that needs a secret still fails, naming it, when the secret is missing. Wording that said the canary (or its free half) runs daily now says weekly (Mondays). Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01CKsd7q25N19WzUZjrAdzx8 --- .github/workflows/canary.yml | 10 +++------- CHANGELOG.md | 4 +--- CONTRIBUTING.md | 7 +++---- README.md | 4 ++-- 4 files changed, 9 insertions(+), 16 deletions(-) diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index 37d7899..edafddf 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -1,9 +1,9 @@ -# One real run of each mode against goodreads.com, daily. tests.yml +# One real run of each mode against goodreads.com, weekly (Mondays). tests.yml # (deliberately) never touches the site. # # No secrets are needed, and that is the point of running it: the README's # central claim is "no key, no proxy, no account", and an ungated scheduled -# canary is that sentence under test every morning. +# canary is that sentence under test every Monday. # Every mode ran from a datacentre VPS when this repo was written # (2026-09-27), AWS WAF's challenge included, which the browser passes by # itself; a GitHub runner is a datacentre address too. Its first dispatch @@ -26,10 +26,6 @@ name: canary on: schedule: # 05:40 UTC. Not on the hour: every scheduled workflow fires at :00. - - cron: "40 5 * * *" - # 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: "40 5 * * 1" workflow_dispatch: @@ -64,7 +60,7 @@ jobs: pages: 3 floor: 85 env: - GOODREADS_PROXY: ${{ (github.event_name != 'schedule' || github.event.schedule == '40 5 * * 1') && secrets.GOODREADS_PROXY || '' }} + GOODREADS_PROXY: ${{ secrets.GOODREADS_PROXY }} steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 diff --git a/CHANGELOG.md b/CHANGELOG.md index 03c019b..1455178 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,9 +11,7 @@ said so at the top of its release notes. ### Changed -- CI only: the canary's optional paid secret `GOODREADS_PROXY` now reaches it only on a new weekly - run (Mondays 05:40 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 05:40 UTC) and on a manual dispatch, with its optional secret `GOODREADS_PROXY` passed on every run; the daily schedule is removed. ## [0.2.0] — 2026-10-15 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9ed0f64..ba7f8ff 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -81,13 +81,12 @@ history needs a decision, not a red check on every push. Then the rest of the presentation, in the order that matters: 1. `python3 smoke_test.py` green, and the canary dispatched at least once. - It runs daily with no secrets at all and is expected to be green, + It runs weekly (Mondays) with no secrets at all and is expected to be green, because no mode needs a credential and a green badge there is exactly the claim the README makes. If a run is refused for the runner's address, the canary's `GOODREADS_PROXY` secret (an exit elsewhere) is - used on the weekly (Monday) run and on a manual dispatch, with no - workflow edit; the daily run stays on the runner's own address and - bills nothing. + used on every scheduled run and on a manual dispatch, with no + workflow edit. 2. The repo description, homepage and topics set: the description names the site and what it really publishes, the topics are what people search for. 3. Only then the row in the org profile README — and check it with an diff --git a/README.md b/README.md index 9277308..a8f48ac 100644 --- a/README.md +++ b/README.md @@ -209,7 +209,7 @@ Surveyed 2026-09-27: | | reviews | book detail | listings | notes | |---|---|---|---|---| -| **this repo** | every review, by cursor, with rating / language / text filters and three orderings | 44 columns, rating distribution, per-language review counts | lists, authors, search, shelves, series | three engines, exit codes that tell blocked from empty from partial, run sidecar, daily canary | +| **this repo** | every review, by cursor, with rating / language / text filters and three orderings | 44 columns, rating distribution, per-language review counts | lists, authors, search, shelves, series | three engines, exit codes that tell blocked from empty from partial, run sidecar, weekly canary | | [maria-antoniak/goodreads-scraper](https://github.com/maria-antoniak/goodreads-scraper) | capped at 300 | yes | shelves | its README says it no longer works since the redesign | | [havanagrawal/GoodreadsScraper](https://github.com/havanagrawal/GoodreadsScraper) | no | yes | lists, authors | Scrapy; last push 2024 | | [Apify epctex/goodreads-scraper](https://apify.com/epctex/goodreads-scraper) | optional | yes | search, list, genre, author, shelf | $15/month rental plus compute | @@ -268,7 +268,7 @@ key refused and re-read, a refused parameter, a language the book has no reviews in, a throttle, and a book run from a listing with one book refused. The [canary](.github/workflows/canary.yml) runs a real scrape of each mode -daily **with no secrets**, which is what keeps "no account needed" honest. +weekly (Mondays) **with no secrets**, which is what keeps "no account needed" honest. Its first dispatch (2026-09-27, a GitHub-hosted runner, no proxy, region not checked) came back complete in all three modes: 300 of 79,610 books on the Best Books Ever list, 5 books of the Lord of the Rings series with their