feature: add support for sparse checkouts #3410
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
This PR adds support for Git partial clones and sparse checkouts to the Buildkite Agent, enabling users to clone only specific directories from large repositories (monorepos).
Problem being solved:
Solution:
--filter
and--depth
flagsAlternatives considered:
Context
This addresses the common request from users with large monorepos who want to optimize their build times. Similar to features available in other CI/CD platforms.
Changes
New Environment Variables:
BUILDKITE_GIT_SPARSE_CHECKOUT
- Enable sparse checkout (boolean)BUILDKITE_GIT_SPARSE_CHECKOUT_PATHS
- Comma-separated paths to includeBUILDKITE_GIT_CLONE_DEPTH
- Clone depth for shallow clonesBUILDKITE_GIT_CLONE_FILTER
- Filter specification (e.g., "tree:0")New CLI Flags:
--git-sparse-checkout Enable sparse checkout for partial clones
--git-sparse-checkout-paths value Paths to include in sparse checkout (comma-separated)
--git-clone-depth value Clone depth for shallow clones (e.g., "200")
--git-clone-filter value Filter specification for partial clones (e.g., "tree:0")
Code Changes:
gitSparseCheckoutInit()
andgitSparseCheckoutSet()
functions--no-checkout
when sparse checkout is enabledExample Usage:
Testing
Additional Testing: