A jsonnet package manager.
Find a file
2023-09-25 14:40:39 +02:00
cmd/jb Fix broken integration test 2022-06-22 16:33:46 +02:00
pkg feat: add gitlab source for gitlab package registry 2023-09-25 14:40:39 +02:00
scripts fix: generate-help-script 2020-03-02 16:43:11 +01:00
spec feat: add gitlab source for gitlab package registry 2023-09-25 14:40:39 +02:00
tool/rewrite feat(spec): version field (#85) 2020-02-28 17:41:49 +01:00
.drone.jsonnet Update Go in CI and busybox to 1.35 2022-06-22 16:26:42 +02:00
.drone.yml Update Go in CI and busybox to 1.35 2022-06-22 16:26:42 +02:00
.gitignore Initial commit 2018-04-24 16:01:37 +01:00
.header Initial commit 2018-04-24 16:01:37 +01:00
CHANGELOG.md Release v0.5.1 2022-06-22 16:38:12 +02:00
Dockerfile Update Go in CI and busybox to 1.35 2022-06-22 16:26:42 +02:00
flake.lock feat: add nix flake 2023-05-23 18:30:41 +02:00
flake.nix feat: add gitlab source for gitlab package registry 2023-09-25 14:40:39 +02:00
go.mod chore: remove vendor folder 2023-05-24 18:39:35 +02:00
go.sum chore: remove vendor folder 2023-05-24 18:39:35 +02:00
LICENSE Initial commit 2018-04-24 16:01:37 +01:00
Makefile Adds arm64 to MacOS binary compilation 2022-10-20 10:46:54 -05:00
README.md update readme so install method works for Go 1.17+ too 2021-11-19 09:53:31 +01:00
VERSION Release v0.5.1 2022-06-22 16:38:12 +02:00

jsonnet-bundler

NOTE: This project is alpha stage. Flags, configuration, behavior and design may change significantly in following releases.

The jsonnet-bundler is a package manager for Jsonnet.

Install

go install -a github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb@latest

NOTE: please use a recent Go version to do this, ideally Go 1.13 or greater.

This will put jb in $(go env GOPATH)/bin. If you encounter the error jb: command not found after installation then you may need to add that directory to your $PATH as shown in their docs.

Package Install

  • Arch Linux AUR
  • Mac OS X via Homebrew: brew install jsonnet-bundler
  • Fedora (>= 32): sudo dnf install golang-github-jsonnet-bundler

Features

  • Fetches transitive dependencies
  • Can vendor subtrees, as opposed to whole repositories

Current Limitations

  • Always downloads entire dependent repositories, even when updating
  • If two dependencies depend on the same package (diamond problem), they must require the same version

Example Usage

Initialize your project:

mkdir myproject
cd myproject
jb init

The existence of the jsonnetfile.json file means your directory is now a jsonnet-bundler package that can define dependencies.

To depend on another package (another Github repository): Note that your dependency need not be initialized with a jsonnetfile.json. If it is not, it is assumed it has no transitive dependencies.

jb install https://github.com/anguslees/kustomize-libsonnet

Now write myconfig.jsonnet, which can import a file from that package. Remember to use -J vendor when running Jsonnet to include the vendor tree.

local kustomize = import 'kustomize-libsonnet/kustomize.libsonnet';

local my_resource = {
  metadata: {
    name: 'my-resource',
  },
};

kustomize.namePrefix('staging-')(my_resource)

To depend on a package that is in a subtree of a Github repo (this package also happens to bring in a transitive dependency):

jb install https://github.com/prometheus-operator/prometheus-operator/jsonnet/prometheus-operator

Note that if you are copy pasting from the Github website's address bar, remove the tree/master from the path.

If pushed to Github, your project can now be referenced from other packages in the same way, with its dependencies fetched automatically.

All command line flags

$ jb -h
usage: jb [<flags>] <command> [<args> ...]

A jsonnet package manager

Flags:
  -h, --help     Show context-sensitive help (also try --help-long and
                 --help-man).
      --version  Show application version.
      --jsonnetpkg-home="vendor"  
                 The directory used to cache packages in.
  -q, --quiet    Suppress any output from git command.

Commands:
  help [<command>...]
    Show help.

  init
    Initialize a new empty jsonnetfile

  install [<flags>] [<uris>...]
    Install new dependencies. Existing ones are silently skipped

  update [<uris>...]
    Update all or specific dependencies.

  rewrite
    Automatically rewrite legacy imports to absolute ones


Design

This is an implemention of the design specified in this document: https://docs.google.com/document/d/1czRScSvvOiAJaIjwf3CogOULgQxhY9MkiBKOQI1yR14/edit#heading=h.upn4d5pcxy4c