Repository navigation
Conversation
ChangelogNo changelog entry. Semantic Diff6 commits · Full page Reuse CI caches across dependency changes and delete superseded ones7fdcd8f · cknitt + Claude · Nov 09, 2026, 13:53 UTC A change of the opam files missed every OPAM cache, so CI rebuilt the environments from scratch (9 to 16 minutes on master today, on every push of a pull request that changes them), and left the old ones behind: the repository's caches exceed the 10 GB limit, so live ones get evicted. The environment and build state of the previous dependencies are now restored and updated, and master deletes superseded generations when it saves. The coverage build state no longer changes key with every compiler commit. DO NOT MERGE: change an opam file to test the cache fallbackf70d1c8 · cknitt · Nov 09, 2026, 13:54 UTC Drops before review. Brace the prefix in the coverage build state key4123ff1 · cknitt + Claude · Nov 09, 2026, 14:16 UTC
Don't let opam rebuild a restored switch for its system packages3b0ece7 · cknitt + Claude · Nov 09, 2026, 14:17 UTC On Linux, opam took the packages that setup-linux-dependencies unpacks without dpkg for removed and recompiled all 64 packages of the restored switch (6 to 9 minutes); the fallback now skips system dependencies. |
✅ Compiler benchmarksAllocated wordsIn total: 683,548,340 → 683,548,644 (±0.00%). None of the 261 benchmarks changed by 0.1% or more. InstructionsIn total: 9,664,671,823 → 9,664,671,823 (±0.00%). None of the 33 benchmarks changed by 0.1% or more. Output sizeIn total: 25,569,598 → 25,569,598 (±0.00%). None of the 13 benchmarks changed by 0.1% or more. Pull request 560a751 compared with base b82d944 in this run. |
rescript
@rescript/belt
@rescript/darwin-arm64
@rescript/linux-arm64
@rescript/linux-x64
@rescript/runtime
@rescript/win32-x64
commit: |
|
Developer playground preview: https://rescript-lang.github.io/rescript/dev-playground/?version=pr-9279 |
|
@codex review |
Codex Review Summary: ✅ CompletedThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c55472024f
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@codex review |
|
Codex Review: Didn't find any major issues. 🚀 Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #9279 +/- ##
==========================================
+ Coverage 81.93% 81.97% +0.03%
==========================================
Files 456 456
Lines 65517 65613 +96
==========================================
+ Hits 53679 53783 +104
+ Misses 11838 11830 -8 🚀 New features to boost your workflow:
|
A change of the opam files missed every OPAM cache, so CI rebuilt the environments from scratch (9 to 16 minutes on master today, on every push of a pull request that changes them), and left the old ones behind: the repository's caches exceed the 10 GB limit, so live ones get evicted. The environment and build state of the previous dependencies are now restored and updated, and master deletes superseded generations when it saves. The coverage build state no longer changes key with every compiler commit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Kbf3gKHFTuMrZosy3Nb5Qc Signed-off-by: Christoph Knittel <ck@cca.io>
`$prefix6d99…` named a variable that doesn't exist, so the key was empty and the coverage job failed to restore its build state. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Kbf3gKHFTuMrZosy3Nb5Qc Signed-off-by: Christoph Knittel <ck@cca.io>
On Linux, opam took the packages that setup-linux-dependencies unpacks without dpkg for removed and recompiled all 64 packages of the restored switch (6 to 9 minutes); the fallback now skips system dependencies. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Kbf3gKHFTuMrZosy3Nb5Qc Signed-off-by: Christoph Knittel <ck@cca.io>
Codex review: the job relied on the repository's default token permissions for the cache deletions of master pushes, which now fail instead of being ignored. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Kbf3gKHFTuMrZosy3Nb5Qc Signed-off-by: Christoph Knittel <ck@cca.io>
560a751 to
2cf79a9
Compare
ChangelogNo changelog entry. Semantic Diff8 commits · Full page Reuse CI caches across dependency changes and delete superseded ones5d81756 · cknitt + Claude · Nov 09, 2026, 13:53 UTC A change of the opam files missed every OPAM cache, so CI rebuilt the environments from scratch (9 to 16 minutes on master today, on every push of a pull request that changes them), and left the old ones behind: the repository's caches exceed the 10 GB limit, so live ones get evicted. The environment and build state of the previous dependencies are now restored and updated, and master deletes superseded generations when it saves. The coverage build state no longer changes key with every compiler commit. Brace the prefix in the coverage build state key014e1ea · cknitt + Claude · Nov 09, 2026, 14:16 UTC
Don't let opam rebuild a restored switch for its system packages4a1637f · cknitt + Claude · Nov 09, 2026, 14:17 UTC On Linux, opam took the packages that setup-linux-dependencies unpacks without dpkg for removed and recompiled all 64 packages of the restored switch (6 to 9 minutes); the fallback now skips system dependencies. Grant build-compiler the permission to delete caches2cf79a9 · cknitt + Claude · Nov 09, 2026, 19:57 UTC Codex review: the job relied on the repository's default token permissions for the cache deletions of master pushes, which now fail instead of being ignored. Restore earlier OPAM environments for pull requests only and stop pruningd965a5e · cknitt + Claude · Nov 10, 2026, 14:52 UTC A restored environment is only ever added to, and master saved it under the new key: a pin dropped from the opam files, a removed dependency or a missed upgrade stayed in every later environment, and only a prefix bump recovered. Pushes now build a missing environment anew, and only pull requests restore an earlier one. The pruning of superseded caches is gone: GitHub evicts the least recently used caches first, which are those, and its errors could fail master builds. On a fallback, opam keeps the installed packages as they are and bypasses only the two system packages it misreads, so new system dependencies are still installed. Review
Unpin restored environments and resolve one job from scratch3b8e0af · cknitt + Claude · Nov 10, 2026, 18:06 UTC Review fixes for the pull request fallback. Pins of earlier dependencies are dropped before the install, which pins what the opam files still pin; the OCaml 5.0 job never restores an earlier environment, so a dependency change still gets one fresh resolution before the merge; and Windows installs read the bash_env that ocaml/setup-ocaml writes. The depext bypass now applies to every install, and only environments resolved from scratch are saved. The build state keys no longer end in a hash of the opam files, so master keeps one state per job. |
✅ Compiler benchmarksAllocated wordsIn total: 683,223,534 → 683,223,697 (±0.00%). Generated projects: 923,212,498 → 923,212,548 (±0.00%). None of the 265 benchmarks changed by 0.1% or more. InstructionsIn total: 9,666,123,297 → 9,666,123,297 (±0.00%). None of the 33 benchmarks changed by 0.1% or more. Output sizeIn total: 25,841,785 → 25,841,785 (±0.00%). None of the 13 benchmarks changed by 0.1% or more. Pull request af15778 compared with base dcedd5d in this run. |
|
Developer playground preview: https://rescript-lang.github.io/rescript/dev-playground/?version=pr-9279 |
…ning A restored environment is only ever added to, and master saved it under the new key: a pin dropped from the opam files, a removed dependency or a missed upgrade stayed in every later environment, and only a prefix bump recovered. Pushes now build a missing environment anew, and only pull requests restore an earlier one. The pruning of superseded caches is gone: GitHub evicts the least recently used caches first, which are those, and its errors could fail master builds. On a fallback, opam keeps the installed packages as they are and bypasses only the two system packages it misreads, so new system dependencies are still installed. Review: Why keep the build state's fallback on master? dune rebuilds what the new dependencies change, so a restored state can't go stale. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Kbf3gKHFTuMrZosy3Nb5Qc Signed-off-by: Christoph Knittel <ck@cca.io>
Review fixes for the pull request fallback. Pins of earlier dependencies are dropped before the install, which pins what the opam files still pin; the OCaml 5.0 job never restores an earlier environment, so a dependency change still gets one fresh resolution before the merge; and Windows installs read the bash_env that ocaml/setup-ocaml writes. The depext bypass now applies to every install, and only environments resolved from scratch are saved. The build state keys no longer end in a hash of the opam files, so master keeps one state per job. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Kbf3gKHFTuMrZosy3Nb5Qc Signed-off-by: Christoph Knittel <ck@cca.io>
Dropped before merging; it makes this pull request's CI take the fallback path. Signed-off-by: Christoph Knittel <ck@cca.io>
2b2f393 to
449b4bd
Compare
It made this pull request's CI take the fallback path: the restored jobs set up OPAM in 35 to 61 seconds, the OCaml 5.0 job resolved from scratch. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Kbf3gKHFTuMrZosy3Nb5Qc Signed-off-by: Christoph Knittel <ck@cca.io>
|
@codex review |
|
Codex Review: Didn't find any major issues. Delightful! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
Two problems with the hash-keyed caches:
compiler/**. So every master push saved a new ~300 MB coverage state, and each change of the opam files left a superseded generation of every compiler state behind. This is why the repository's caches exceed the 10 GB limit (10.8 GB).Changes:
setup-ocamlrestores the newest environment with the same prefix and updates it. Before installing, it unpins all packages;opam install . --deps-only …re-pins whatever the opam files still pin.opam update --repositoriesmakes new versions available, andopam reinstall --forget-pendingleaves the installed packages as they are, as on an exact hit. On Windows, the install reads thebash_envthatocaml/setup-ocamlwrites.restore-earlierinput ofsetup-ocaml(defaulttrue) controls the fallback per job.binaryen, which we install by hand, andmusl-tools, whichsetup-linux-dependenciesunpacks without dpkg. Withdepext-bypassset for them before every install, opam neither installs them a second time nor misreads them as removed in a restored environment; the latter had rebuilt all 64 packages of the switch. Other system dependencies are still installed.A change to
opam-repositoriesneeds a newcache-prefix, since a restored environment keeps its repositories; the action now says so in a comment. Superseded caches are not pruned: GitHub evicts the least recently used caches first, and those are never used again.To test this, a temporary commit appended a comment to
tools.opam; a later commit reverts it. In run 42871956970, the restored jobs set up OPAM in 35–61 s, against 6–16 min for a full setup. The OCaml 5.0 job resolved from scratch in 618 s. In the ARM Linux job, luv was unpinned and re-pinned to the same fork commit, andopam installprinted "Nothing to do". Coverage passed.🤖 Generated with Claude Code
https://claude.ai/code/session_01Kbf3gKHFTuMrZosy3Nb5Qc