A jsonnet package manager.
Find a file
sh0rez fd5f7f108a
feat(install): skip dependencies
Allows `installing` a package without pulling dependencies of that
package. This comes in handy when having multiple directories on
`JPATH`, which overlay each other.

Because dependencies may be already present at lesser ranked import
paths, it's not required to pull them, when only needing to bump a
single one.
2020-04-22 22:34:02 +02:00
cmd/jb feat(install): skip dependencies 2020-04-22 22:34:02 +02:00
pkg feat(install): skip dependencies 2020-04-22 22:34:02 +02:00
scripts fix: generate-help-script 2020-03-02 16:43:11 +01:00
spec feat(install): skip dependencies 2020-04-22 22:34:02 +02:00
tool/rewrite feat(spec): version field (#85) 2020-02-28 17:41:49 +01:00
vendor chore(vendor): github.com/stretchr/testify/require 2019-10-29 22:10:16 +01:00
.drone.jsonnet feat(spec): version field (#85) 2020-02-28 17:41:49 +01:00
.drone.yml feat(spec): version field (#85) 2020-02-28 17:41:49 +01: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 doc(release): CHANGELOG for v0.3.0 (#83) 2020-02-28 18:30:54 +01:00
Dockerfile Initial commit 2018-04-24 16:01:37 +01:00
go.mod chore(vendor): embedmd 2019-10-29 22:18:22 +01:00
go.sum chore(vendor): embedmd 2019-10-29 22:18:22 +01:00
LICENSE Initial commit 2018-04-24 16:01:37 +01:00
Makefile fix: generate-help-script 2020-03-02 16:43:11 +01:00
README.md doc: update README 2020-03-17 17:42:08 +01:00
VERSION *: update VERSION file to latest tag (#95) 2020-03-22 11:44:58 +01: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

GO111MODULE="on" go get github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb

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.

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/coreos/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.

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

  init
    Initialize a new empty jsonnetfile

  install [<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