mirror of
https://github.com/TECHNOFAB11/jsonnet-bundler.git
synced 2025-12-12 16:10:04 +01:00
* feat: go-like import style jb now creates a directory structure inside of vendor/ that is similar to how go does (github.com/grafana/jsonnet-libs). This is reflected in the final import paths, which means they will be go-like * refactor(spec/deps): named regexs * feat: make goImportStyle configurable Defaults to off, can be enabled in `jsonnetfile.json` * fix: integration test * doc: license headers * fix(deps): remove GO_IMPORT_STYLE not an option anymore, will always do so and symlink * feat: symlink to legacy location * feat: allow to disable legacy links * fix(test): legacyImports in integration tests * fix(spec): test * fix: respect legacyName aliases It was possible to alias packages by changing `name` previously. While names are now absolute (and computed), legacy links should still respect old aliases to avoid breaking code. * fix(test): integration * fix(init): keep legacyImports enabled for now * feat: rewrite imports adds a command to automatically rewrite imports from legacy to absolute style * fix(tool): rewrite confused by prefixing packages When a package was a prefix of another one, it broke. Fixed that by using a proper regular expression. Added a test to make sure it works as expected * Update cmd/jb/init.go * fix: exclude local packages from legacy linking They actually still use the old style, which is fine. LegacyLinking messed them up, but from now on it just ignores symlinks that match a localPackage.
117 lines
3.1 KiB
Markdown
117 lines
3.1 KiB
Markdown
# 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](http://jsonnet.org/).
|
|
|
|
|
|
## 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](https://golang.org/doc/code.html#GOPATH).
|
|
|
|
## 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:
|
|
|
|
```sh
|
|
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.*
|
|
|
|
```sh
|
|
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.
|
|
|
|
```jsonnet
|
|
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):
|
|
|
|
```sh
|
|
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
|
|
|
|
[embedmd]:# (_output/help.txt)
|
|
```txt
|
|
$ 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 all dependencies or install specific ones
|
|
|
|
update
|
|
Update all 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
|