Skip to content

Fetch the release dependencies once, and give the API job V8 - #59

Merged
ResurrectedTrader merged 1 commit into
mainfrom
release-shared-deps
Sep 28, 2026
Merged

ResurrectedTrader merged 1 commit into
mainfrom
release-shared-deps

Conversation

@ResurrectedTrader

Copy link
Copy Markdown
Owner

The v2.2.0 release run failed in the API docs job. Nothing was tagged or published, so the release can simply be re-run once this lands.

Why it failed. Since #35, V8 is no longer in the repository; the build fetches it through the FetchV8 target. extract_api.py compiles the bindings against the V8 headers, but the API job never builds anything, so nothing fetched them:

error: V8 headers not found at ...\dependencies\v8\15.6.8\x86-release\include

gen_dts.py then failed with FileNotFoundError: api.json, which hid the real cause. PR CI never runs the extraction, so this first showed up on a release.

Duplicate work. build and api start at the same time. On a cold cache, each downloaded V8 and compiled all 11 vcpkg packages separately.

Change

  • New deps job:
    • builds both vcpkg manifests (solution and tests, x86-windows-static) into the binary cache and saves it;
    • fetches V8 with build.ps1 deps (only the FetchV8 target, which compiles nothing) and saves it under the existing v8-<os>-<version> key. It skips the fetch when that cache already exists.
  • build now needs deps. It restores both caches from that run and no longer saves the vcpkg cache. If the V8 cache misses, its own FetchV8 still downloads.
  • api now needs deps and restores both caches, with a build.ps1 deps fallback on a miss. Each command in the Generate step now checks its exit code.

Trade-off: build and api now wait for deps. On a warm cache that is a restore plus a quick vcpkg check. On a cold cache it replaces the two jobs downloading and compiling the same things in parallel.

Tested: YAML parses, and the job graph is version, deps → build, api → release → deploy-docs. It has not run on Actions; the next release run is its test.

🤖 Generated with Claude Code

The API job has not been able to run since V8 left the repository: it
extracts the bindings with libclang against the V8 headers, and nothing in
that job fetched them. `Build` gets them only because its build runs
FetchV8. The first release since then failed in extract_api.py ("V8 headers
not found"), and gen_dts.py then reported a missing api.json that hid the
cause.

`build` and `api` also start at the same time, so on a cold cache each one
downloaded V8 and compiled every vcpkg package on its own.

A `deps` job now does both once:
- it builds both vcpkg manifests into the binary cache and saves it;
- it fetches V8 with `build.ps1 deps` (the FetchV8 target alone) and saves
  it under the key the build already used.
`build` and `api` restore both from that run. `build` no longer saves the
vcpkg cache. Each keeps its own fallback on a miss: the build's FetchV8, and
an explicit `build.ps1 deps` in `api`.

The API job also checks each command's exit code, so a failed extraction
stops the step instead of surfacing as a later missing file.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@ResurrectedTrader
ResurrectedTrader merged commit 6e262d9 into main Sep 28, 2026
1 check passed
@ResurrectedTrader
ResurrectedTrader deleted the release-shared-deps branch September 28, 2026 21:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant