Expand description
Deterministic Git and snapshot source manifests. Deterministic source selection for remote builds.
Snapshot inputs are limited to the selected project tree, a small set of workspace build files, and caller-selected workspace-relative paths. Source paths must use slash separators and cannot be absolute, drive-prefixed, UNC, traversing, Windows-reserved, or normalization/case-colliding. Original UTF-8 names are retained while NFC-plus-lowercase collision keys protect materialization on normalizing or case-insensitive filesystems.
.ferryignore is read only at the workspace and project roots. Its safe
subset accepts blank lines, hash-prefixed comments, and literal relative
paths. A trailing slash is accepted; every rule excludes both the literal
path and its descendants. Negation, glob syntax, escaping, absolute paths,
whitespace at line edges, and non-portable names are rejected. Ignore rules
can never re-include built-in sensitive paths.
Caller exclusions use the same portable workspace-relative path model and
take precedence over selected roots and ignore rules. The workspace root
itself (.) cannot be excluded. Sensitive paths take precedence over all
caller policy and are reported without traversing their contents.
Source ZIPs contain manifest files only: no embedded manifest, directory entries, links, or platform metadata beyond one normalized executable bit. ZIP metadata is fixed and entries follow manifest order, producing identical bytes for identical inputs. The separately transported manifest remains the worker’s source of truth. Hard-linked source files are refused on Unix and Windows. Windows link counts are queried from retained file handles so path replacement cannot substitute the object whose link state is inspected. Callers may supply portable executable-mode metadata for selected files; this carries executable intent from filesystems which do not expose Unix mode bits. A live Unix executable bit is never cleared by portable metadata.
Structs§
- GitSnapshot
Descriptor - Strict binding for one operation-scoped GitHub dirty-source snapshot.
- Planned
Source File - One local file selected by a bundle plan.
- Source
Archive - Integrity descriptor for the deterministic source ZIP transport.
- Source
Archive Limits - Bounds enforced for source ZIP transport and extraction.
- Source
Bundle Descriptor - Versioned binding between one deterministic source ZIP and its manifest.
- Source
Bundle Plan - Deterministic source selection and local inputs needed to materialize it.
- Source
Bundle Request - Local request used to select source for a snapshot.
- Source
Limits - Resource bounds applied while selecting or verifying snapshot source.
- Source
Manifest - Canonical description of a source snapshot.
- Source
Manifest Entry - One content-addressed regular file in a source manifest.
Enums§
- Ignore
Rule Reason - Reason a .ferryignore line was rejected.
- Portable
Path Reason - Portable-path validation failure.
- Source
Error - Source planning or verification failure.
- Source
Limit Kind - Resource limit that was exceeded.
- Source
Mode - How a remote provider obtains source input.
Constants§
- GIT_
SNAPSHOT_ ARCHIVE_ PATH - Fixed source archive path in a Git snapshot orphan commit.
- GIT_
SNAPSHOT_ DESCRIPTOR_ PATH - Fixed source descriptor path in a Git snapshot orphan commit.
- GIT_
SNAPSHOT_ DESCRIPTOR_ SCHEMA_ VERSION - Current Git snapshot descriptor schema.
- GIT_
SNAPSHOT_ REF_ PREFIX - Private custom namespace for operation-scoped source snapshot commits.
- GIT_
SNAPSHOT_ TREE_ PATHS - Exact sorted regular-file tree required in a Git snapshot orphan commit.
- MAX_
GIT_ SNAPSHOT_ BYTES - Maximum complete payload of one GitHub dirty-source snapshot orphan commit.
- MAX_
GIT_ SNAPSHOT_ DESCRIPTOR_ BYTES - Maximum canonical Git snapshot descriptor size, including its final newline.
- MAX_
SOURCE_ BUNDLE_ DESCRIPTOR_ BYTES - Maximum canonical source-bundle descriptor size, including its final newline.
- MAX_
SOURCE_ TRAVERSAL_ ENTRIES - Defensive ceiling for selected directory entries and manifest path nodes.
- SOURCE_
BUNDLE_ DESCRIPTOR_ SCHEMA_ VERSION - Current source-bundle descriptor schema.
Functions§
- canonical_
git_ snapshot_ descriptor_ bytes - Encode a validated Git snapshot descriptor in its one canonical byte representation.
- create_
source_ bundle_ archive - Create and atomically publish a deterministic source ZIP.
- git_
snapshot_ archive_ limits - Return strict source and ZIP limits for GitHub dirty-source snapshots.
- git_
snapshot_ ref - Derive the only allowed Git snapshot ref for an operation.
- plan_
source_ bundle - Select allowed source files and compute a deterministic manifest.
- validate_
source_ manifest - Validate canonical ordering, bounds, paths, and digests in a manifest.
- verify_
and_ extract_ source_ bundle - Verify and extract an untrusted source ZIP below a fresh destination.
- verify_
and_ extract_ source_ bundle_ with_ parent_ handle - Verify and extract an untrusted source ZIP using an already retained exact destination-parent handle instead of reopening that parent by pathname.
- verify_
materialized_ bundle - Verify an already materialized bundle directory against a manifest.
- verify_
source_ bundle_ plan - Re-scan a plan’s original inputs and require an exact manifest match.
- verify_
source_ manifest - Re-scan a request and require an exact match with an expected manifest.
- write_
source_ bundle_ descriptor_ file - Validate and atomically publish a source-bundle descriptor as canonical JSON.