mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-23 00:53:38 +02:00
Merge master and preserve qualified runner paths
Retain both hosted cache scopes. Use shared test-home teardown and restore owned directory permissions for the observed Mac ENOTEMPTY failure while keeping unrelated errors visible. Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
commit
665c155472
206 files changed
+24713
-26016
No files matched your search
@@ -475,6 +475,42 @@ jobs:
|
||||
# Restore only. Never let a pull request evict master's entry.
|
||||
save-if: false
|
||||
|
||||
# The Runner's own crate is the one thing the entry above leaves out:
|
||||
# rust-cache drops workspace crates when it saves, and a fresh checkout
|
||||
# would invalidate cargo's mtime fingerprints for them anyway. So this
|
||||
# job compiled paperclip-runner-core in release mode on every run,
|
||||
# 28-49s (runs 38169436532 to 38183149920, 2026-10-11), while 221 of
|
||||
# the 239 master commits of the preceding week left its inputs alone.
|
||||
# The master Rust lane in release-verify.yml saves that crate's release
|
||||
# artifacts (about 70 MB) under a key made from the compiler, the
|
||||
# checkout root and a hash of every input the build reads. A pull
|
||||
# request whose merge tree carries byte-identical inputs restores them
|
||||
# and marks them newer than the checkout, so cargo keeps them; any
|
||||
# other pull request misses and compiles exactly as before. Exact key
|
||||
# only: a prefix match would hand cargo another revision's output. The
|
||||
# path list and the key live in scripts/runner-release-crate-cache.mjs
|
||||
# and must match the writer's; a guard test holds them together.
|
||||
- name: Compute the Runner release crate cache key
|
||||
id: runner_release_crate_key
|
||||
run: echo "scope=$(node scripts/runner-release-crate-cache.mjs scope)" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Restore the Runner release crate (read only)
|
||||
id: runner_release_crate
|
||||
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||
with:
|
||||
path: |
|
||||
packages/paperclip-runner/runner/target/release/.fingerprint/paperclip-runner-core-*
|
||||
packages/paperclip-runner/runner/target/release/deps/libpaperclip_runner_core-*
|
||||
packages/paperclip-runner/runner/target/release/deps/paperclip_runner_core-*.d
|
||||
packages/paperclip-runner/runner/target/release/deps/paperclip_runnerd-*
|
||||
packages/paperclip-runner/runner/target/release/paperclip-runnerd
|
||||
packages/paperclip-runner/runner/target/release/paperclip-runnerd.d
|
||||
key: runner-release-crate-v1-${{ steps.runner_release_crate_key.outputs.scope }}-${{ hashFiles('packages/paperclip-runner/rust-toolchain.toml', 'packages/paperclip-runner/runner/Cargo.toml', 'packages/paperclip-runner/runner/Cargo.lock', 'packages/paperclip-runner/runner/crates/**', 'packages/paperclip-runner/protocol/**', 'packages/paperclip-runner/test-fixtures/**', 'packages/paperclip-runner/test/fixtures/**', 'tests/runner-e2e/fixtures/**') }}
|
||||
|
||||
- name: Mark the restored Runner release crate current
|
||||
if: ${{ steps.runner_release_crate.outputs.cache-hit == 'true' }}
|
||||
run: node scripts/runner-release-crate-cache.mjs mark-current
|
||||
|
||||
- name: Typecheck workspaces whose build scripts skip TypeScript
|
||||
run: pnpm run typecheck:build-gaps
|
||||
|
||||
@@ -749,10 +785,12 @@ jobs:
|
||||
command: check:static
|
||||
- lane_label: rust
|
||||
command: check:runner
|
||||
release_crate: true
|
||||
- lane_label: vitest 1/2
|
||||
command: test:typescript:vitest --shard=1/2
|
||||
- lane_label: vitest 2/2
|
||||
command: test:typescript:vitest --shard=2/2
|
||||
release_crate: true
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
@@ -878,6 +916,49 @@ jobs:
|
||||
# Restore only. Never let a pull request evict master's entry.
|
||||
save-if: false
|
||||
|
||||
# The Runner's own crate is the one thing the entry above leaves out:
|
||||
# rust-cache drops workspace crates when it saves, and a fresh checkout
|
||||
# would invalidate cargo's mtime fingerprints for them anyway. So this
|
||||
# job compiled paperclip-runner-core in release mode on every run,
|
||||
# 28-49s (runs 38169436532 to 38183149920, 2026-10-11), while 221 of
|
||||
# the 239 master commits of the preceding week left its inputs alone.
|
||||
# The master Rust lane in release-verify.yml saves that crate's release
|
||||
# artifacts (about 70 MB) under a key made from the compiler, the
|
||||
# checkout root and a hash of every input the build reads. A pull
|
||||
# request whose merge tree carries byte-identical inputs restores them
|
||||
# and marks them newer than the checkout, so cargo keeps them; any
|
||||
# other pull request misses and compiles exactly as before. Exact key
|
||||
# only: a prefix match would hand cargo another revision's output. The
|
||||
# path list and the key live in scripts/runner-release-crate-cache.mjs
|
||||
# and must match the writer's; a guard test holds them together.
|
||||
#
|
||||
# Only the lanes that build the release crate restore it: the Rust
|
||||
# lane's release tests link the lib, and the final vitest shard hosts
|
||||
# the server's native-runner suite, which builds the binary in its
|
||||
# beforeAll. The static and first vitest lanes run no cargo at all.
|
||||
- name: Compute the Runner release crate cache key
|
||||
id: runner_release_crate_key
|
||||
if: ${{ matrix.release_crate == true }}
|
||||
run: echo "scope=$(node scripts/runner-release-crate-cache.mjs scope)" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Restore the Runner release crate (read only)
|
||||
id: runner_release_crate
|
||||
if: ${{ matrix.release_crate == true }}
|
||||
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||
with:
|
||||
path: |
|
||||
packages/paperclip-runner/runner/target/release/.fingerprint/paperclip-runner-core-*
|
||||
packages/paperclip-runner/runner/target/release/deps/libpaperclip_runner_core-*
|
||||
packages/paperclip-runner/runner/target/release/deps/paperclip_runner_core-*.d
|
||||
packages/paperclip-runner/runner/target/release/deps/paperclip_runnerd-*
|
||||
packages/paperclip-runner/runner/target/release/paperclip-runnerd
|
||||
packages/paperclip-runner/runner/target/release/paperclip-runnerd.d
|
||||
key: runner-release-crate-v1-${{ steps.runner_release_crate_key.outputs.scope }}-${{ hashFiles('packages/paperclip-runner/rust-toolchain.toml', 'packages/paperclip-runner/runner/Cargo.toml', 'packages/paperclip-runner/runner/Cargo.lock', 'packages/paperclip-runner/runner/crates/**', 'packages/paperclip-runner/protocol/**', 'packages/paperclip-runner/test-fixtures/**', 'packages/paperclip-runner/test/fixtures/**', 'tests/runner-e2e/fixtures/**') }}
|
||||
|
||||
- name: Mark the restored Runner release crate current
|
||||
if: ${{ steps.runner_release_crate.outputs.cache-hit == 'true' }}
|
||||
run: node scripts/runner-release-crate-cache.mjs mark-current
|
||||
|
||||
- name: Verify Paperclip Runner
|
||||
# pnpm appends trailing args to the end of the script's shell chain,
|
||||
# so the vitest lanes' --shard lands on `vitest run`. Do not add a
|
||||
@@ -1013,6 +1094,42 @@ jobs:
|
||||
# Restore only. Never let a pull request evict master's entry.
|
||||
save-if: false
|
||||
|
||||
# The Runner's own crate is the one thing the entry above leaves out:
|
||||
# rust-cache drops workspace crates when it saves, and a fresh checkout
|
||||
# would invalidate cargo's mtime fingerprints for them anyway. So this
|
||||
# job compiled paperclip-runner-core in release mode on every run,
|
||||
# 28-49s (runs 38169436532 to 38183149920, 2026-10-11), while 221 of
|
||||
# the 239 master commits of the preceding week left its inputs alone.
|
||||
# The master Rust lane in release-verify.yml saves that crate's release
|
||||
# artifacts (about 70 MB) under a key made from the compiler, the
|
||||
# checkout root and a hash of every input the build reads. A pull
|
||||
# request whose merge tree carries byte-identical inputs restores them
|
||||
# and marks them newer than the checkout, so cargo keeps them; any
|
||||
# other pull request misses and compiles exactly as before. Exact key
|
||||
# only: a prefix match would hand cargo another revision's output. The
|
||||
# path list and the key live in scripts/runner-release-crate-cache.mjs
|
||||
# and must match the writer's; a guard test holds them together.
|
||||
- name: Compute the Runner release crate cache key
|
||||
id: runner_release_crate_key
|
||||
run: echo "scope=$(node scripts/runner-release-crate-cache.mjs scope)" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Restore the Runner release crate (read only)
|
||||
id: runner_release_crate
|
||||
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||
with:
|
||||
path: |
|
||||
packages/paperclip-runner/runner/target/release/.fingerprint/paperclip-runner-core-*
|
||||
packages/paperclip-runner/runner/target/release/deps/libpaperclip_runner_core-*
|
||||
packages/paperclip-runner/runner/target/release/deps/paperclip_runner_core-*.d
|
||||
packages/paperclip-runner/runner/target/release/deps/paperclip_runnerd-*
|
||||
packages/paperclip-runner/runner/target/release/paperclip-runnerd
|
||||
packages/paperclip-runner/runner/target/release/paperclip-runnerd.d
|
||||
key: runner-release-crate-v1-${{ steps.runner_release_crate_key.outputs.scope }}-${{ hashFiles('packages/paperclip-runner/rust-toolchain.toml', 'packages/paperclip-runner/runner/Cargo.toml', 'packages/paperclip-runner/runner/Cargo.lock', 'packages/paperclip-runner/runner/crates/**', 'packages/paperclip-runner/protocol/**', 'packages/paperclip-runner/test-fixtures/**', 'packages/paperclip-runner/test/fixtures/**', 'tests/runner-e2e/fixtures/**') }}
|
||||
|
||||
- name: Mark the restored Runner release crate current
|
||||
if: ${{ steps.runner_release_crate.outputs.cache-hit == 'true' }}
|
||||
run: node scripts/runner-release-crate-cache.mjs mark-current
|
||||
|
||||
- name: Build Runner Evalbook viewer
|
||||
run: pnpm --filter @paperclipai/paperclip-runner build:issue-thread
|
||||
|
||||
@@ -1259,6 +1376,42 @@ jobs:
|
||||
# Restore only. Never let a pull request evict master's entry.
|
||||
save-if: false
|
||||
|
||||
# The Runner's own crate is the one thing the entry above leaves out:
|
||||
# rust-cache drops workspace crates when it saves, and a fresh checkout
|
||||
# would invalidate cargo's mtime fingerprints for them anyway. So this
|
||||
# job compiled paperclip-runner-core in release mode on every run,
|
||||
# 28-49s (runs 38169436532 to 38183149920, 2026-10-11), while 221 of
|
||||
# the 239 master commits of the preceding week left its inputs alone.
|
||||
# The master Rust lane in release-verify.yml saves that crate's release
|
||||
# artifacts (about 70 MB) under a key made from the compiler, the
|
||||
# checkout root and a hash of every input the build reads. A pull
|
||||
# request whose merge tree carries byte-identical inputs restores them
|
||||
# and marks them newer than the checkout, so cargo keeps them; any
|
||||
# other pull request misses and compiles exactly as before. Exact key
|
||||
# only: a prefix match would hand cargo another revision's output. The
|
||||
# path list and the key live in scripts/runner-release-crate-cache.mjs
|
||||
# and must match the writer's; a guard test holds them together.
|
||||
- name: Compute the Runner release crate cache key
|
||||
id: runner_release_crate_key
|
||||
run: echo "scope=$(node scripts/runner-release-crate-cache.mjs scope)" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Restore the Runner release crate (read only)
|
||||
id: runner_release_crate
|
||||
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||
with:
|
||||
path: |
|
||||
packages/paperclip-runner/runner/target/release/.fingerprint/paperclip-runner-core-*
|
||||
packages/paperclip-runner/runner/target/release/deps/libpaperclip_runner_core-*
|
||||
packages/paperclip-runner/runner/target/release/deps/paperclip_runner_core-*.d
|
||||
packages/paperclip-runner/runner/target/release/deps/paperclip_runnerd-*
|
||||
packages/paperclip-runner/runner/target/release/paperclip-runnerd
|
||||
packages/paperclip-runner/runner/target/release/paperclip-runnerd.d
|
||||
key: runner-release-crate-v1-${{ steps.runner_release_crate_key.outputs.scope }}-${{ hashFiles('packages/paperclip-runner/rust-toolchain.toml', 'packages/paperclip-runner/runner/Cargo.toml', 'packages/paperclip-runner/runner/Cargo.lock', 'packages/paperclip-runner/runner/crates/**', 'packages/paperclip-runner/protocol/**', 'packages/paperclip-runner/test-fixtures/**', 'packages/paperclip-runner/test/fixtures/**', 'tests/runner-e2e/fixtures/**') }}
|
||||
|
||||
- name: Mark the restored Runner release crate current
|
||||
if: ${{ steps.runner_release_crate.outputs.cache-hit == 'true' }}
|
||||
run: node scripts/runner-release-crate-cache.mjs mark-current
|
||||
|
||||
# `release.sh` always executes its Step 2/7 workspace build, even when
|
||||
# `--skip-verify` bypasses the initial verification gate. release.sh
|
||||
# also requires a clean working tree, and the install step may have
|
||||
|
||||
@@ -430,6 +430,61 @@ jobs:
|
||||
if: ${{ matrix.lane == 'rust' && github.repository == 'paperclipai/paperclip' && github.event_name == 'push' && github.ref == 'refs/heads/master' && inputs.ref == github.sha }}
|
||||
run: pnpm --filter @paperclipai/paperclip-runner build:rust
|
||||
|
||||
# The dependency cache above deliberately leaves the Runner's own crate
|
||||
# out, so every pull request build compiled paperclip-runner-core in
|
||||
# release mode (28-49s) although most pushes leave its inputs alone.
|
||||
# This master push saves that crate's release artifacts for the readers
|
||||
# in pr-trusted.yml ("Restore the Runner release crate") under a key
|
||||
# made from the compiler, the checkout root and a hash of every input
|
||||
# the build reads, so a reader only ever restores output of inputs
|
||||
# byte-identical to its own. Same writer gate as the dependency cache:
|
||||
# the Rust lane of an own-repository master push. The entry is looked
|
||||
# up first; a push that left the inputs alone already has it. On a
|
||||
# miss the crate is cleaned and built with the exact command the
|
||||
# readers run, so the artifacts carry no test-profile variants. The
|
||||
# path list and the key live in scripts/runner-release-crate-cache.mjs
|
||||
# and must match the readers'; a guard test holds them together.
|
||||
- name: Compute the Runner release crate cache key
|
||||
id: runner_release_crate_key
|
||||
if: ${{ matrix.lane == 'rust' && github.repository == 'paperclipai/paperclip' && github.event_name == 'push' && github.ref == 'refs/heads/master' && inputs.ref == github.sha }}
|
||||
run: echo "scope=$(node scripts/runner-release-crate-cache.mjs scope)" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Check for this push's Runner release crate
|
||||
id: runner_release_crate
|
||||
if: ${{ matrix.lane == 'rust' && github.repository == 'paperclipai/paperclip' && github.event_name == 'push' && github.ref == 'refs/heads/master' && inputs.ref == github.sha }}
|
||||
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||
with:
|
||||
lookup-only: true
|
||||
path: |
|
||||
packages/paperclip-runner/runner/target/release/.fingerprint/paperclip-runner-core-*
|
||||
packages/paperclip-runner/runner/target/release/deps/libpaperclip_runner_core-*
|
||||
packages/paperclip-runner/runner/target/release/deps/paperclip_runner_core-*.d
|
||||
packages/paperclip-runner/runner/target/release/deps/paperclip_runnerd-*
|
||||
packages/paperclip-runner/runner/target/release/paperclip-runnerd
|
||||
packages/paperclip-runner/runner/target/release/paperclip-runnerd.d
|
||||
key: runner-release-crate-v1-${{ steps.runner_release_crate_key.outputs.scope }}-${{ hashFiles('packages/paperclip-runner/rust-toolchain.toml', 'packages/paperclip-runner/runner/Cargo.toml', 'packages/paperclip-runner/runner/Cargo.lock', 'packages/paperclip-runner/runner/crates/**', 'packages/paperclip-runner/protocol/**', 'packages/paperclip-runner/test-fixtures/**', 'packages/paperclip-runner/test/fixtures/**', 'tests/runner-e2e/fixtures/**') }}
|
||||
|
||||
- name: Build the Runner release crate for its cache
|
||||
if: ${{ matrix.lane == 'rust' && github.repository == 'paperclipai/paperclip' && github.event_name == 'push' && github.ref == 'refs/heads/master' && inputs.ref == github.sha && steps.runner_release_crate.outputs.cache-hit != 'true' }}
|
||||
working-directory: packages/paperclip-runner
|
||||
run: |
|
||||
set -euo pipefail
|
||||
cargo clean --release --manifest-path runner/Cargo.toml -p paperclip-runner-core
|
||||
pnpm build:binary
|
||||
|
||||
- name: Save the Runner release crate
|
||||
if: ${{ matrix.lane == 'rust' && github.repository == 'paperclipai/paperclip' && github.event_name == 'push' && github.ref == 'refs/heads/master' && inputs.ref == github.sha && steps.runner_release_crate.outputs.cache-hit != 'true' }}
|
||||
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||
with:
|
||||
path: |
|
||||
packages/paperclip-runner/runner/target/release/.fingerprint/paperclip-runner-core-*
|
||||
packages/paperclip-runner/runner/target/release/deps/libpaperclip_runner_core-*
|
||||
packages/paperclip-runner/runner/target/release/deps/paperclip_runner_core-*.d
|
||||
packages/paperclip-runner/runner/target/release/deps/paperclip_runnerd-*
|
||||
packages/paperclip-runner/runner/target/release/paperclip-runnerd
|
||||
packages/paperclip-runner/runner/target/release/paperclip-runnerd.d
|
||||
key: runner-release-crate-v1-${{ steps.runner_release_crate_key.outputs.scope }}-${{ hashFiles('packages/paperclip-runner/rust-toolchain.toml', 'packages/paperclip-runner/runner/Cargo.toml', 'packages/paperclip-runner/runner/Cargo.lock', 'packages/paperclip-runner/runner/crates/**', 'packages/paperclip-runner/protocol/**', 'packages/paperclip-runner/test-fixtures/**', 'packages/paperclip-runner/test/fixtures/**', 'tests/runner-e2e/fixtures/**') }}
|
||||
|
||||
build:
|
||||
if: ${{ !inputs.runner_binaries_only }}
|
||||
name: Build
|
||||
|
||||
Reference in new issue
Block a user