From 2a0aac3887d6c5a4a957e700fd5801747ffa8729 Mon Sep 17 00:00:00 2001 From: Ethan Terrero Date: Tue, 28 Apr 2026 12:05:48 -0700 Subject: [PATCH 01/10] add inital CI with lint, typecheck, and test jobs --- .github/workflows/ci.yml | 100 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..76ead761 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,100 @@ +name: CI + +on: + pull_request: + push: + branches: [main] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} + +env: + CARGO_TERM_COLOR: always + RUSTFLAGS: -D warnings + +jobs: + lint-ts: + name: Lint (TS / Biome) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + with: + version: 10.30.3 + - uses: actions/setup-node@v4 + with: + node-version-file: .nvmrc + cache: pnpm + - run: pnpm install --frozen-lockfile + - run: pnpm lint:ts + + lint-rust: + name: Lint (Rust / clippy + rustfmt) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@nightly + with: + components: clippy, rustfmt + - uses: Swatinem/rust-cache@v2 + - name: cargo +nightly fmt --check + run: cargo +nightly fmt --all -- --check + - name: cargo +nightly clippy -D warnings + run: cargo +nightly clippy --workspace --all-targets -- -D warnings + + typecheck-ts: + name: Typecheck (TS) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + with: + version: 10.30.3 + - uses: actions/setup-node@v4 + with: + node-version-file: .nvmrc + cache: pnpm + - run: pnpm install --frozen-lockfile + - run: pnpm check:ts + - run: pnpm check:ts:test + + check-rust: + name: Check (Rust) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@1.86.0 + - uses: Swatinem/rust-cache@v2 + - run: cargo check --workspace --all-targets + + test-ts: + name: Test (TS) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + with: + version: 10.30.3 + - uses: actions/setup-node@v4 + with: + node-version-file: .nvmrc + cache: pnpm + - run: pnpm install --frozen-lockfile + - run: pnpm test:ts + + test-rust: + name: Test (Rust) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@1.86.0 + - uses: Swatinem/rust-cache@v2 + # cu-bench-* tests load pre-built .so files via mollusk; they run in the + # dedicated bench job with the Solana toolchain installed. + - run: > + cargo test --workspace + --exclude cu-bench-dropset + --exclude cu-bench-tests + --exclude cu-bench-pack-orders + --exclude cu-bench-to-order-info From d3b356b8fbbfb09e0d5e9426f09509331caeae33 Mon Sep 17 00:00:00 2001 From: Ethan Terrero Date: Tue, 28 Apr 2026 12:08:30 -0700 Subject: [PATCH 02/10] add timeouts for runaway tests --- .github/workflows/ci.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 76ead761..15f2f407 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,6 +9,9 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} +permissions: + contents: read + env: CARGO_TERM_COLOR: always RUSTFLAGS: -D warnings @@ -17,6 +20,7 @@ jobs: lint-ts: name: Lint (TS / Biome) runs-on: ubuntu-latest + timeout-minutes: 10 steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 @@ -32,6 +36,7 @@ jobs: lint-rust: name: Lint (Rust / clippy + rustfmt) runs-on: ubuntu-latest + timeout-minutes: 25 steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@nightly @@ -46,6 +51,7 @@ jobs: typecheck-ts: name: Typecheck (TS) runs-on: ubuntu-latest + timeout-minutes: 10 steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 @@ -62,6 +68,7 @@ jobs: check-rust: name: Check (Rust) runs-on: ubuntu-latest + timeout-minutes: 20 steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@1.86.0 @@ -71,6 +78,7 @@ jobs: test-ts: name: Test (TS) runs-on: ubuntu-latest + timeout-minutes: 15 steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 @@ -86,6 +94,7 @@ jobs: test-rust: name: Test (Rust) runs-on: ubuntu-latest + timeout-minutes: 30 steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@1.86.0 From dc8e5fdc3a96723524fa462a2cb70d85fbfcb1bb Mon Sep 17 00:00:00 2001 From: Ethan Terrero Date: Tue, 28 Apr 2026 14:25:49 -0700 Subject: [PATCH 03/10] benchmarking --- .github/workflows/bench.yml | 77 +++++++++++++++++++++++++++++++++++++ .github/workflows/ci.yml | 2 +- 2 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/bench.yml diff --git a/.github/workflows/bench.yml b/.github/workflows/bench.yml new file mode 100644 index 00000000..9aa705e0 --- /dev/null +++ b/.github/workflows/bench.yml @@ -0,0 +1,77 @@ +name: Benchmarks + +on: + pull_request: + paths: + - "Cargo.toml" + - "Cargo.lock" + - "rust-toolchain.toml" + - "program/**" + - "cu-bench/**" + - "client/**" + - "interface/**" + - "instruction-macros/**" + - "price/**" + - "services/**" + - "transaction-parser/**" + - ".github/workflows/bench.yml" + push: + branches: [main] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} + +permissions: + contents: read + +env: + CARGO_TERM_COLOR: always + SOLANA_VERSION: v3.1.9 + +jobs: + bench: + name: CU Benchmarks + runs-on: ubuntu-latest + timeout-minutes: 45 + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + with: + version: 10.30.3 + - uses: actions/setup-node@v4 + with: + node-version-file: .nvmrc + cache: pnpm + - uses: dtolnay/rust-toolchain@1.86.0 + - uses: Swatinem/rust-cache@v2 + - run: pnpm install --frozen-lockfile + + - name: Cache Solana toolchain + id: solana-cache + uses: actions/cache@v4 + with: + path: | + ~/.local/share/solana/install + ~/.cache/solana + key: solana-${{ env.SOLANA_VERSION }}-${{ runner.os }} + + - name: Install Solana CLI + if: steps.solana-cache.outputs.cache-hit != 'true' + run: sh -c "$(curl -sSfL https://release.anza.xyz/${SOLANA_VERSION}/install)" + + - name: Add Solana to PATH + run: echo "$HOME/.local/share/solana/install/active_release/bin" >> "$GITHUB_PATH" + + - run: solana --version + + - name: Bench dropset + run: pnpm bench:dropset + - name: Bench manifest + run: pnpm bench:manifest + - name: Bench phoenix + run: pnpm bench:phoenix + - name: Bench pack-orders + run: pnpm bench:pack-orders + - name: Bench to-order-info + run: pnpm bench:to-order-info diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 15f2f407..b8e63b24 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -100,7 +100,7 @@ jobs: - uses: dtolnay/rust-toolchain@1.86.0 - uses: Swatinem/rust-cache@v2 # cu-bench-* tests load pre-built .so files via mollusk; they run in the - # dedicated bench job with the Solana toolchain installed. + # bench workflow with the Solana toolchain installed. - run: > cargo test --workspace --exclude cu-bench-dropset From e423c4c5ab08fb7ec58ebc9ccb9d5dbb7f27fa9d Mon Sep 17 00:00:00 2001 From: Ethan Terrero Date: Sat, 2 May 2026 13:23:14 -0700 Subject: [PATCH 04/10] add --locked so CI fails on lockfile drift --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b8e63b24..2796d07b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -46,7 +46,7 @@ jobs: - name: cargo +nightly fmt --check run: cargo +nightly fmt --all -- --check - name: cargo +nightly clippy -D warnings - run: cargo +nightly clippy --workspace --all-targets -- -D warnings + run: cargo +nightly clippy --workspace --all-targets --locked -- -D warnings typecheck-ts: name: Typecheck (TS) @@ -73,7 +73,7 @@ jobs: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@1.86.0 - uses: Swatinem/rust-cache@v2 - - run: cargo check --workspace --all-targets + - run: cargo check --workspace --all-targets --locked test-ts: name: Test (TS) @@ -102,7 +102,7 @@ jobs: # cu-bench-* tests load pre-built .so files via mollusk; they run in the # bench workflow with the Solana toolchain installed. - run: > - cargo test --workspace + cargo test --workspace --locked --exclude cu-bench-dropset --exclude cu-bench-tests --exclude cu-bench-pack-orders From dff0926a3bdd16e6a1bdd1e84d15a34cc343ee43 Mon Sep 17 00:00:00 2001 From: Ethan Terrero Date: Wed, 6 May 2026 13:11:58 -0700 Subject: [PATCH 05/10] ci done with pinned nightly --- .github/workflows/ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2796d07b..e37de23b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,8 +39,9 @@ jobs: timeout-minutes: 25 steps: - uses: actions/checkout@v4 - - uses: dtolnay/rust-toolchain@nightly + - uses: dtolnay/rust-toolchain@master with: + toolchain: nightly-2026-04-15 components: clippy, rustfmt - uses: Swatinem/rust-cache@v2 - name: cargo +nightly fmt --check From 0525d958734007c25abce295b21c202fa1849311 Mon Sep 17 00:00:00 2001 From: Ethan Terrero Date: Tue, 12 May 2026 18:21:19 -0700 Subject: [PATCH 06/10] split CI into lint, test, and typecheck workflows - Move from a single ci.yml to per-job workflows so failures don't block unrelated checks. - test.yml: set NEXT_PUBLIC_CLUSTER for the frontend build, and exclude client + dropset-taker-bot from cargo test (mollusk-based tests rely on the bench workflow's Solana toolchain). - lint.yml: pin nightly-2026-04-15 on both the toolchain install and the cargo invocations so rustfmt resolves correctly. --- .github/workflows/ci.yml | 110 -------------------------------- .github/workflows/lint.yml | 55 ++++++++++++++++ .github/workflows/test.yml | 60 +++++++++++++++++ .github/workflows/typecheck.yml | 48 ++++++++++++++ 4 files changed, 163 insertions(+), 110 deletions(-) delete mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/lint.yml create mode 100644 .github/workflows/test.yml create mode 100644 .github/workflows/typecheck.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index e37de23b..00000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,110 +0,0 @@ -name: CI - -on: - pull_request: - push: - branches: [main] - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} - -permissions: - contents: read - -env: - CARGO_TERM_COLOR: always - RUSTFLAGS: -D warnings - -jobs: - lint-ts: - name: Lint (TS / Biome) - runs-on: ubuntu-latest - timeout-minutes: 10 - steps: - - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v4 - with: - version: 10.30.3 - - uses: actions/setup-node@v4 - with: - node-version-file: .nvmrc - cache: pnpm - - run: pnpm install --frozen-lockfile - - run: pnpm lint:ts - - lint-rust: - name: Lint (Rust / clippy + rustfmt) - runs-on: ubuntu-latest - timeout-minutes: 25 - steps: - - uses: actions/checkout@v4 - - uses: dtolnay/rust-toolchain@master - with: - toolchain: nightly-2026-04-15 - components: clippy, rustfmt - - uses: Swatinem/rust-cache@v2 - - name: cargo +nightly fmt --check - run: cargo +nightly fmt --all -- --check - - name: cargo +nightly clippy -D warnings - run: cargo +nightly clippy --workspace --all-targets --locked -- -D warnings - - typecheck-ts: - name: Typecheck (TS) - runs-on: ubuntu-latest - timeout-minutes: 10 - steps: - - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v4 - with: - version: 10.30.3 - - uses: actions/setup-node@v4 - with: - node-version-file: .nvmrc - cache: pnpm - - run: pnpm install --frozen-lockfile - - run: pnpm check:ts - - run: pnpm check:ts:test - - check-rust: - name: Check (Rust) - runs-on: ubuntu-latest - timeout-minutes: 20 - steps: - - uses: actions/checkout@v4 - - uses: dtolnay/rust-toolchain@1.86.0 - - uses: Swatinem/rust-cache@v2 - - run: cargo check --workspace --all-targets --locked - - test-ts: - name: Test (TS) - runs-on: ubuntu-latest - timeout-minutes: 15 - steps: - - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v4 - with: - version: 10.30.3 - - uses: actions/setup-node@v4 - with: - node-version-file: .nvmrc - cache: pnpm - - run: pnpm install --frozen-lockfile - - run: pnpm test:ts - - test-rust: - name: Test (Rust) - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - uses: actions/checkout@v4 - - uses: dtolnay/rust-toolchain@1.86.0 - - uses: Swatinem/rust-cache@v2 - # cu-bench-* tests load pre-built .so files via mollusk; they run in the - # bench workflow with the Solana toolchain installed. - - run: > - cargo test --workspace --locked - --exclude cu-bench-dropset - --exclude cu-bench-tests - --exclude cu-bench-pack-orders - --exclude cu-bench-to-order-info diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 00000000..0a5d40e3 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,55 @@ +name: Lint + +on: + pull_request: + push: + branches: [main] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} + +permissions: + contents: read + +env: + CARGO_TERM_COLOR: always + RUSTFLAGS: -D warnings + +jobs: + ts: + name: TS + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + with: + version: 10.30.3 + - uses: actions/setup-node@v4 + with: + node-version-file: .nvmrc + cache: pnpm + - run: pnpm install --frozen-lockfile + - run: pnpm lint:ts + + rust: + name: Rust + runs-on: ubuntu-latest + timeout-minutes: 25 + steps: + - uses: actions/checkout@v4 + # rustfmt.toml uses unstable_features (imports_granularity, group_imports, + # wrap_comments, ...), so fmt and clippy must run on a pinned nightly. + - uses: dtolnay/rust-toolchain@master + with: + toolchain: nightly-2026-04-15 + components: clippy, rustfmt + - uses: Swatinem/rust-cache@v2 + with: + cache-on-failure: true + shared-key: rust-nightly-${{ runner.os }} + - name: cargo fmt --check + run: cargo +nightly-2026-04-15 fmt --all -- --check + - name: cargo clippy -D warnings + run: cargo +nightly-2026-04-15 clippy --workspace --all-targets --locked -- -D warnings diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..145260af --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,60 @@ +name: Test + +on: + pull_request: + push: + branches: [main] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} + +permissions: + contents: read + +env: + CARGO_TERM_COLOR: always + RUSTFLAGS: -D warnings + +jobs: + ts: + name: TS + runs-on: ubuntu-latest + timeout-minutes: 15 + # turbo's `test` task dependsOn `build`, which builds the frontend. + # next build evaluates env validation, so NEXT_PUBLIC_CLUSTER must be set. + env: + NEXT_PUBLIC_CLUSTER: localnet + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + with: + version: 10.30.3 + - uses: actions/setup-node@v4 + with: + node-version-file: .nvmrc + cache: pnpm + - run: pnpm install --frozen-lockfile + - run: pnpm test:ts + + rust: + name: Rust + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@1.86.0 + - uses: Swatinem/rust-cache@v2 + with: + cache-on-failure: true + shared-key: rust-stable-${{ runner.os }} + # These crates load pre-built .so files via mollusk; they run in the + # bench workflow with the Solana toolchain installed. + - run: > + cargo test --workspace --locked + --exclude client + --exclude dropset-taker-bot + --exclude cu-bench-dropset + --exclude cu-bench-tests + --exclude cu-bench-pack-orders + --exclude cu-bench-to-order-info diff --git a/.github/workflows/typecheck.yml b/.github/workflows/typecheck.yml new file mode 100644 index 00000000..884501c2 --- /dev/null +++ b/.github/workflows/typecheck.yml @@ -0,0 +1,48 @@ +name: Typecheck + +on: + pull_request: + push: + branches: [main] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} + +permissions: + contents: read + +env: + CARGO_TERM_COLOR: always + RUSTFLAGS: -D warnings + +jobs: + ts: + name: TS + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + with: + version: 10.30.3 + - uses: actions/setup-node@v4 + with: + node-version-file: .nvmrc + cache: pnpm + - run: pnpm install --frozen-lockfile + - run: pnpm check:ts + - run: pnpm check:ts:test + + rust: + name: Rust + runs-on: ubuntu-latest + timeout-minutes: 20 + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@1.86.0 + - uses: Swatinem/rust-cache@v2 + with: + cache-on-failure: true + shared-key: rust-stable-${{ runner.os }} + - run: cargo check --workspace --all-targets --locked From 091adf271499501720dc285fe1e9703464611374 Mon Sep 17 00:00:00 2001 From: Ethan Terrero Date: Tue, 12 May 2026 18:21:31 -0700 Subject: [PATCH 07/10] fix borsh import in pack-orders bench cu-bench-pack-orders fails to compile under bench-program-B because `BorshBatchReplaceData::try_from_slice` needs `BorshDeserialize` in scope. Add the import gated on the borsh-derive feature. --- cu-bench/programs/pack-orders/src/lib.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cu-bench/programs/pack-orders/src/lib.rs b/cu-bench/programs/pack-orders/src/lib.rs index 7bf001f0..5fa3f1e7 100644 --- a/cu-bench/programs/pack-orders/src/lib.rs +++ b/cu-bench/programs/pack-orders/src/lib.rs @@ -19,6 +19,8 @@ program_entrypoint!(process_instruction); no_allocator!(); nostd_panic_handler!(); +#[cfg(feature = "borsh-derive")] +use borsh::BorshDeserialize; use dropset_interface::state::user_order_sectors::MAX_ORDERS_USIZE; use price::OrderInfoArgs; From f0dac87d9ae2a65bccea1c83b5a12d359c0c6261 Mon Sep 17 00:00:00 2001 From: Ethan Terrero Date: Wed, 13 May 2026 12:52:18 -0700 Subject: [PATCH 08/10] gate borsh import on bench-program-B not borsh-derive cu-bench-tests enables `borsh-derive` on cu-bench-pack-orders without `bench-program-B`. Under that combination the import was active but the call site (gated on bench-program-B) was not, tripping clippy's unused-imports lint under `-D warnings`. Matching the import's cfg to the call site fixes it. --- cu-bench/programs/pack-orders/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cu-bench/programs/pack-orders/src/lib.rs b/cu-bench/programs/pack-orders/src/lib.rs index 5fa3f1e7..0c7103a6 100644 --- a/cu-bench/programs/pack-orders/src/lib.rs +++ b/cu-bench/programs/pack-orders/src/lib.rs @@ -19,7 +19,7 @@ program_entrypoint!(process_instruction); no_allocator!(); nostd_panic_handler!(); -#[cfg(feature = "borsh-derive")] +#[cfg(feature = "bench-program-B")] use borsh::BorshDeserialize; use dropset_interface::state::user_order_sectors::MAX_ORDERS_USIZE; use price::OrderInfoArgs; From e586fd44566585575866e26e4d6dcecab3cb0bf9 Mon Sep 17 00:00:00 2001 From: Ethan Terrero Date: Wed, 13 May 2026 14:14:44 -0700 Subject: [PATCH 09/10] apply rustfmt fixups after merging main cargo fmt --check flagged formatting drift introduced by PR #106 once its changes landed in the PR's merge ref. Reformat the assert and remove an extra blank line so fmt --check is clean against main. --- interface/src/events/tests.rs | 5 ++++- interface/src/state/linked_list.rs | 1 - 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/interface/src/events/tests.rs b/interface/src/events/tests.rs index 8b8aee04..4d460881 100644 --- a/interface/src/events/tests.rs +++ b/interface/src/events/tests.rs @@ -52,7 +52,10 @@ fn test_fill_event_tagged_len_matches_written_bytes() { let tagged = event.pack_tagged(); assert_eq!(FillEventInstructionData::LEN, 22); - assert_eq!(FillEventInstructionData::LEN_WITH_TAG, FillEventInstructionData::LEN + 1); + assert_eq!( + FillEventInstructionData::LEN_WITH_TAG, + FillEventInstructionData::LEN + 1 + ); assert_eq!(untagged.len(), FillEventInstructionData::LEN); assert_eq!(tagged.len(), FillEventInstructionData::LEN_WITH_TAG); assert_eq!(tagged[0], FillEventInstructionData::TAG_BYTE); diff --git a/interface/src/state/linked_list.rs b/interface/src/state/linked_list.rs index f2151c88..9048d8c0 100644 --- a/interface/src/state/linked_list.rs +++ b/interface/src/state/linked_list.rs @@ -167,7 +167,6 @@ impl<'a, T: LinkedListHeaderOperations> LinkedList<'a, T> { /// /// Caller guarantees `index` is in-bounds. pub unsafe fn remove_at(&mut self, index: SectorIndex) { - let num_sectors = self.sectors.len() / Sector::LEN; assert!((index as usize) < num_sectors); let (prev_index, next_index) = { From 5f0cd7e2b6741c73e2473fa91479fc8ac3e19a48 Mon Sep 17 00:00:00 2001 From: Ethan Terrero Date: Wed, 13 May 2026 14:14:57 -0700 Subject: [PATCH 10/10] install cargo-expand for instruction-macros tests `instruction-macros-test-fixtures` uses macrotest, which shells out to `cargo expand`. Use taiki-e/install-action to install a binary release rather than building from source. --- .github/workflows/test.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 145260af..64ded8df 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -48,6 +48,11 @@ jobs: with: cache-on-failure: true shared-key: rust-stable-${{ runner.os }} + # instruction-macros-test-fixtures uses macrotest, which shells out to + # `cargo expand` to verify macro output. + - uses: taiki-e/install-action@v2 + with: + tool: cargo-expand # These crates load pre-built .so files via mollusk; they run in the # bench workflow with the Solana toolchain installed. - run: >