jsonnet-bundler/pkg
Matthew Huxtable fe0eca6e7a Correct path resolution to nested local dependencies
The tool failed to properly resolve nested local dependencies to jsonnet
bundles in different directory trees. This arises because the
installation command resolves and installs nested jsonnet local
dependencies relative to the root jsonnetfile, rather than track and
evaluate the installation path relative to the nested library's
jsonnetfile.

Consider a repository with multiple local jsonnet bundles in various
directory trees, organised as follows (lockfiles elided for brevity):

  /top/of/tree
   |- lib/module_A
     |- jsonnetfile.json
   |- lib/module_B
     |- jsonnetfile.json
   |- src/root_module
     |- jsonnetfile.json

The modules depend on each other as follows:

  ┌───────────────────┐   ┌───────────────────┐   ┌───────────────────┐
  │                   │   │                   │   │                   │
  │  src/root_module  │──>│   lib/module_A    │──>│   lib/module_B    │
  │                   │   │                   │   │                   │
  └───────────────────┘   └───────────────────┘   └───────────────────┘

where X ──> Y indicates bundle X depends on bundle Y, expressed by
adding a dependency of type local in bundle X's jsonnetfile.json, whose
path is the relative path from bundle X to bundle Y in the directory
structure. For example, src/root_module will express a local dependency
on path ../lib/module_A to depend on library module A.

Invoking jb install in src/root_module will result in an error:

  jb: error: failed to install packages: downloading: symlink destination path does not exist: %w:
    stat /top/of/tree/src/module_B: no such file or directory

This occurs because jsonnet-bundler improperly attempts to resolve the
nested dependency on library module B relative to the root module path,
i.e. src/root_module.  The correct behaviour is to perform such
resolution relative to the depending module's jsonnetfile.json, i.e.
relative to lib/module_A.
2021-12-28 19:38:39 +00:00
..
jsonnetfile fix: unmarshal legacyImports 2020-02-28 23:22:41 +01:00
git.go Replace / in version by - 2021-07-19 18:39:14 +02:00
interface.go Refactor git deps install and make local deps install work 2019-07-23 15:07:35 -07:00
local.go Correct path resolution to nested local dependencies 2021-12-28 19:38:39 +00:00
local_test.go Add missing license header 2020-05-06 18:58:00 +03:00
packages.go Correct path resolution to nested local dependencies 2021-12-28 19:38:39 +00:00
packages_test.go feat(spec): version field (#85) 2020-02-28 17:41:49 +01:00