hydra icon indicating copy to clipboard operation
hydra copied to clipboard

Support relative paths in hydra-build-products to enable relocatable derivations

Open roberth opened this issue 1 month ago • 0 comments

Support relative paths in hydra-build-products to enable relocatable derivations

Is your feature request related to a problem? Please describe.

Currently, hydra-build-products requires absolute store paths in the path field. This prevents derivation outputs that are perfectly relocatable from verifying this fact, as specifying build products forces them to contain self-references.

For example, a derivation output at /nix/store/abc-foo must write:

doc none /nix/store/abc-foo/manual.pdf

This absolute path creates a self-reference in the output, making it non-relocatable even if the output would otherwise be position-independent.

The validation in src/hydra-queue-runner/build-result.cc:88 explicitly rejects non-absolute paths:

if (product.path == "" || product.path[0] != '/') continue;

Describe the solution you'd like

Support relative paths in hydra-build-products that are resolved relative to the output path. For example:

doc none manual.pdf

This would be resolved to $out/manual.pdf internally by Hydra, allowing the derivation to remain relocatable while still declaring its build products.

Alternatively, support an explicit output-relative syntax like:

doc none $out/manual.pdf

Describe alternatives you've considered

  1. Status quo: Continue requiring absolute paths, accepting that all derivations with build products will have self-references
  2. Store-path-relative paths: Allow paths like abc-foo/manual.pdf that are relative to the store directory, though this still encodes the hash
  3. Special sentinel paths: Use a placeholder like @OUTPUT@/manual.pdf that Hydra replaces, though this is more complex

Additional context

This issue affects reproducibility and content-addressability efforts, where minimizing self-references is important for enabling features like:

  • Content-addressed derivations that can be deduplicated across different store paths
  • Binary cache sharing where outputs might be relocated
  • Verification that outputs are truly position-independent

Related code: src/hydra-queue-runner/build-result.cc:84-90

cc @Ericson2314

roberth avatar Dec 05 '25 02:12 roberth