Skip to content

Commit 39a9083

Browse files
ci: run the suite weekly against re-resolved dependencies
Every trigger on this workflow was caused by someone pushing, so the suite only ever ran against the versions `uv.lock` pins. That is the right thing for a pull request and the wrong thing as the only signal: a `langgraph` minor that breaks the runtime is invisible here until a user on a fresh install hits it. Issue #103 is the standing form of the complaint -- the extras are unbounded and the lockfile hides what the next major would do. Adds a Monday cron and one job that re-resolves every range from scratch (`uv lock --upgrade`) and runs the suite against the newest versions pyproject.toml's constraints allow. The job is gated to `schedule` and `workflow_dispatch`: on pull requests it would turn someone's branch red for an upstream release that branch did not cause. The re-resolved lockfile diff is printed whether or not the suite passes, because a green run against moved dependencies is the evidence needed to widen a range or drop a pin. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent cf984f7 commit 39a9083

1 file changed

Lines changed: 41 additions & 0 deletions

File tree

‎.github/workflows/ci.yml‎

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,13 @@ on:
44
push:
55
branches: [main]
66
pull_request:
7+
# Mondays, 06:00 UTC. Every other trigger here is caused by someone pushing,
8+
# so without this the suite is only ever run against the dependency versions
9+
# `uv.lock` pins -- see the `upstream-drift` job for what that hides. Note
10+
# GitHub disables a scheduled workflow after 60 days with no repository
11+
# activity, so a long quiet spell stops these runs rather than failing them.
12+
schedule:
13+
- cron: "0 6 * * 1"
714
workflow_dispatch:
815

916
permissions:
@@ -167,6 +174,40 @@ jobs:
167174
# `addopts` in pyproject.toml supplies `-m 'not live'`.
168175
run: uv run pytest
169176

177+
upstream-drift:
178+
# `uv.lock` is what every other job resolves against, so nothing in this
179+
# workflow would notice a new `langgraph` minor breaking the runtime until a
180+
# user on a fresh `pip install grapharc` hit it. Issue #103 is the standing
181+
# form of that complaint: the extras are unbounded and the lockfile hides
182+
# what the next major would do. This job re-resolves every range from
183+
# scratch and runs the suite against the newest versions the constraints in
184+
# pyproject.toml actually allow.
185+
#
186+
# Scheduled and manual only, deliberately. A pull request has to be judged
187+
# against the lockfile it ships; if this ran on PRs, an upstream release on
188+
# the morning of a review would turn someone else's branch red for a reason
189+
# that branch did not cause.
190+
name: upstream drift (unlocked deps)
191+
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
192+
runs-on: ubuntu-latest
193+
steps:
194+
- uses: actions/checkout@v4
195+
- uses: astral-sh/setup-uv@v5
196+
with:
197+
python-version: "3.12"
198+
enable-cache: true
199+
- name: Re-resolve every dependency to the newest allowed version
200+
run: uv lock --upgrade
201+
- name: Report what moved
202+
# Printed whether or not the suite then passes: a green run against
203+
# moved dependencies is the useful half of this job, because it is the
204+
# evidence that a range can be widened or a pin dropped.
205+
run: git --no-pager diff --stat -- uv.lock
206+
- name: Sync and test against the re-resolved versions
207+
run: |
208+
uv sync --all-extras --group dev
209+
uv run pytest
210+
170211
build:
171212
name: build and check the distribution
172213
runs-on: ubuntu-latest

0 commit comments

Comments
 (0)