Skip to content

perf: Remove async-graphql from turborepo-lib#12017

Merged
anthonyshew merged 2 commits into
mainfrom
shew/remove-async-graphql-from-lib
Feb 26, 2026
Merged

perf: Remove async-graphql from turborepo-lib#12017
anthonyshew merged 2 commits into
mainfrom
shew/remove-async-graphql-from-lib

Conversation

@anthonyshew

Copy link
Copy Markdown
Contributor

Summary

  • Add turborepo_query::execute_query() API that encapsulates GraphQL schema construction and query execution
  • Move SCHEMA_QUERY introspection constant into turborepo-query
  • Rewrite commands/query.rs to use the new API instead of async-graphql types directly
  • Remove async-graphql from turborepo-lib's dependencies

Why

turborepo-lib sits on the critical build path — every second of its compile time is a second added to the total wall clock. It still depended on async-graphql solely for Schema::new, Request, Variables, and ServerError in commands/query.rs. Moving these behind a higher-level API in turborepo-query drops the proc-macro expansion cost from turborepo-lib's compilation.

This completes the async-graphql extraction started in #12007.

For reviewers

The QueryErrorLocation struct carries line/column info from GraphQL errors so commands/query.rs can still produce miette diagnostics with source spans, without touching async_graphql::ServerError directly.

Remove the git2 and libgit2-sys dependencies entirely. libgit2-sys was a
25-second serial C compilation on the critical build path — the single
largest bottleneck in the build.

Production code changes:
- hash_object.rs: Replace git2::Oid::hash_file with gix_object::compute_hash
  (gix-object was already compiled transitively, zero new crates added)
- Remove all #[cfg(feature = "git2")] conditional compilation
- Collapse dual codepaths (git2 + CLI) into single CLI codepaths for
  ls-tree, status, worktree detection, and branch/SHA queries
- repo_index.rs: Use gix-index path unconditionally (was already preferred)
- turborepo-boundaries: Drop gitignore check (was already the fallback)

Test changes:
- Replace all git2 test fixtures with git CLI subprocess calls
- Add regression test verifying blob hashes match `git hash-object`
Move GraphQL schema construction and query execution behind a
turborepo_query::execute_query() API. This is the last async-graphql
usage in turborepo-lib — removing it drops the proc-macro expansion
cost from the critical-path turborepo-lib compilation.

Also moves the SCHEMA_QUERY introspection constant and error location
types into turborepo-query where they belong.
@anthonyshew anthonyshew requested a review from a team as a code owner February 26, 2026 22:39
@anthonyshew anthonyshew requested review from tknickman and removed request for a team February 26, 2026 22:39
@vercel

vercel Bot commented Feb 26, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
examples-basic-web Ready Ready Preview, Comment, Open in v0 Feb 26, 2026 10:39pm
examples-designsystem-docs Ready Ready Preview, Comment, Open in v0 Feb 26, 2026 10:39pm
examples-gatsby-web Ready Ready Preview, Comment, Open in v0 Feb 26, 2026 10:39pm
examples-kitchensink-blog Ready Ready Preview, Comment, Open in v0 Feb 26, 2026 10:39pm
examples-nonmonorepo Ready Ready Preview, Comment, Open in v0 Feb 26, 2026 10:39pm
examples-svelte-web Ready Ready Preview, Comment, Open in v0 Feb 26, 2026 10:39pm
examples-tailwind-web Ready Ready Preview, Comment, Open in v0 Feb 26, 2026 10:39pm
examples-vite-web Ready Ready Preview, Comment, Open in v0 Feb 26, 2026 10:39pm
turbo-site Ready Ready Preview, Comment, Open in v0 Feb 26, 2026 10:39pm
turborepo-agents Ready Ready Preview, Comment, Open in v0 Feb 26, 2026 10:39pm
turborepo-test-coverage Ready Ready Preview, Comment, Open in v0 Feb 26, 2026 10:39pm

@github-actions

Copy link
Copy Markdown
Contributor

Coverage Report

Metric Coverage
Lines 78.37%
Functions 49.92%
Branches 0.00%

View full report

@anthonyshew anthonyshew merged commit 7c8a4a0 into main Feb 26, 2026
53 of 54 checks passed
@anthonyshew anthonyshew deleted the shew/remove-async-graphql-from-lib branch February 26, 2026 22:57
github-actions Bot added a commit that referenced this pull request Feb 27, 2026
## Release v2.8.12-canary.3

Versioned docs: https://v2-8-12-canary-3.turborepo.dev

### Changes

- fix: Prevent peerDependencies from overwriting concrete dependency
specifiers (#12004) (`a038409`)
- ci: Trigger prysk integration tests via `cargo nextest` (#11999)
(`2053ede`)
- release(turborepo): 2.8.12-canary.2 (#12005) (`dccfdf0`)
- fix: Resolve correct nested package version in bun lockfile pruning
(#12008) (`95dff45`)
- refactor: Replace shell-based fixture setup with pure Rust (#12006)
(`a743e38`)
- fix: Resolve all lockfile pruning test failures (#12009) (`21dcaed`)
- perf: Extract query module into turborepo-query crate (#12007)
(`0604379`)
- refactor: Migrate dry-json prysk tests to Rust + insta snapshots
(#12010) (`2606f3f`)
- perf: Deduplicate petgraph, fixedbitset, and dashmap (#12011)
(`9b11ef6`)
- refactor: Migrate persistent-dependencies and task-dependencies to
Rust + insta (#12012) (`9aab7b5`)
- test: Add lockfile-tests fixture for issue #12013 (#12014) (`bae81f7`)
- perf: Remove libgit2/git2 dependency, replace with gix-object (#12015)
(`fbf50e5`)
- refactor: Migrate daemon, jsonc, query, edit-turbo-json tests to Rust
(#12016) (`bf730d5`)
- perf: Remove async-graphql from turborepo-lib (#12017) (`7c8a4a0`)
- refactor: Migrate inference and run-logging tests to Rust (#12018)
(`dc4f922`)
- refactor: Migrate run-caching and strict-env-vars tests to Rust
(#12020) (`c07645d`)
- fix: Mark lockfile-aware-caching/bun prysk test as flaky (#12021)
(`c60f0c1`)
- fix: Add nextest retries for flaky tests (#12027) (`9d90270`)
- refactor: Migrate prune and run-summary tests to Rust (#12022)
(`329bdb5`)
- ci: Increase Rust test partitions from 4 to 10 (#12028) (`0c1bd47`)
- fix: Add nextest retries for flaky prysk tests (#12030) (`9b66431`)
- ci: Use larger runners for macOS Rust tests (#12029) (`9479a54`)
- fix: Add nextest retries for flaky
prune_test::test_prune_composable_config (#12032) (`b47e099`)
- fix: Suppress npm upgrade notices in Rust integration tests (#12033)
(`f698b04`)
- ci: Disable flaky Rust unit tests from release pipeline (#12034)
(`829b351`)

---------

Co-authored-by: Turbobot <turbobot@vercel.com>
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