A jsonnet package manager.
Find a file
Frederic Branczyk 766a0c7fd8
Merge pull request #51 from davidovich/restore-symlinks
restore symlinks from tar archive
2019-10-25 09:50:15 +02:00
cmd/jb Check errors or explicitly ignore 2019-10-10 17:47:41 +02:00
pkg restore symlinks from tar archive 2019-10-24 22:41:13 -04:00
scripts Initial commit 2018-04-24 16:01:37 +01:00
spec Create LocalSource as type for local dependencies 2019-07-23 14:01:25 -07:00
vendor Update vendor/ after updating to Go 1.13 2019-10-09 15:42:55 +02:00
.drone.jsonnet Introduce Go 1.13 to use stdlib error wrapping 2019-10-09 15:40:14 +02:00
.drone.yml Introduce Go 1.13 to use stdlib error wrapping 2019-10-09 15:40:14 +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.1.0 2019-04-23 17:03:40 +02:00
Dockerfile Initial commit 2018-04-24 16:01:37 +01:00
go.mod pkg: Write tests for TestInsertDependency, TestFileExists, TestLoadJsonnetfile 2019-07-23 13:36:18 -07:00
go.sum Use Drone as the CI with a working pipeline (#28) 2019-04-23 14:26:40 +02:00
LICENSE Initial commit 2018-04-24 16:01:37 +01:00
Makefile Actually run go test on packages 2019-07-23 14:00:17 -07:00
README.md Update README.md 2019-08-13 15:27:02 +02:00
VERSION Release v0.1.0 2019-04-23 17:03:40 +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 get github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb

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).
      --jsonnetpkg-home="vendor"  
              The directory used to cache packages in.

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

  init
    Initialize a new empty jsonnetfile

  install [<uris>...]
    Install all dependencies or install specific ones

  update
    Update all dependencies.


Design

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