feat(spec): version field (#85)

Adds a `version` field to the `jsonnetfile.json`, so that `jb` can automatically recognize too old / too new schema versions, instead of panicking.
This commit is contained in:
Matthias Loibl 2020-02-28 17:41:49 +01:00 committed by GitHub
parent efe0c9e864
commit bcd89fd33d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
23 changed files with 454 additions and 102 deletions

View file

@ -19,10 +19,10 @@ import (
"io/ioutil"
"path/filepath"
kingpin "gopkg.in/alecthomas/kingpin.v2"
"gopkg.in/alecthomas/kingpin.v2"
"github.com/jsonnet-bundler/jsonnet-bundler/pkg/jsonnetfile"
"github.com/jsonnet-bundler/jsonnet-bundler/spec"
v1 "github.com/jsonnet-bundler/jsonnet-bundler/spec/v1"
)
func initCommand(dir string) int {
@ -34,7 +34,7 @@ func initCommand(dir string) int {
return 1
}
s := spec.New()
s := v1.New()
// TODO: disable them by default eventually
// s.LegacyImports = false

View file

@ -22,12 +22,12 @@ import (
"reflect"
"github.com/pkg/errors"
kingpin "gopkg.in/alecthomas/kingpin.v2"
"gopkg.in/alecthomas/kingpin.v2"
"github.com/jsonnet-bundler/jsonnet-bundler/pkg"
"github.com/jsonnet-bundler/jsonnet-bundler/pkg/jsonnetfile"
"github.com/jsonnet-bundler/jsonnet-bundler/spec"
"github.com/jsonnet-bundler/jsonnet-bundler/spec/deps"
v1 "github.com/jsonnet-bundler/jsonnet-bundler/spec/v1"
"github.com/jsonnet-bundler/jsonnet-bundler/spec/v1/deps"
)
func installCommand(dir, jsonnetHome string, uris []string) int {
@ -78,7 +78,7 @@ func installCommand(dir, jsonnetHome string, uris []string) int {
"updating jsonnetfile.json")
kingpin.FatalIfError(
writeChangedJsonnetFile(jblockfilebytes, &spec.JsonnetFile{Dependencies: locked}, filepath.Join(dir, jsonnetfile.LockFile)),
writeChangedJsonnetFile(jblockfilebytes, &v1.JsonnetFile{Dependencies: locked}, filepath.Join(dir, jsonnetfile.LockFile)),
"updating jsonnetfile.lock.json")
return 0
@ -102,7 +102,7 @@ func writeJSONFile(name string, d interface{}) error {
return ioutil.WriteFile(name, b, 0644)
}
func writeChangedJsonnetFile(originalBytes []byte, modified *spec.JsonnetFile, path string) error {
func writeChangedJsonnetFile(originalBytes []byte, modified *v1.JsonnetFile, path string) error {
origJsonnetFile, err := jsonnetfile.Unmarshal(originalBytes)
if err != nil {
return err

View file

@ -24,12 +24,11 @@ import (
"github.com/stretchr/testify/assert"
"github.com/jsonnet-bundler/jsonnet-bundler/pkg/jsonnetfile"
"github.com/jsonnet-bundler/jsonnet-bundler/spec"
"github.com/jsonnet-bundler/jsonnet-bundler/spec/deps"
v1 "github.com/jsonnet-bundler/jsonnet-bundler/spec/v1"
"github.com/jsonnet-bundler/jsonnet-bundler/spec/v1/deps"
)
// TODO: Change legacyImports to false eventually
const initContents = `{"dependencies": [], "legacyImports": true}`
const initContents = `{"version": 1, "dependencies": [], "legacyImports": false}`
func TestInstallCommand(t *testing.T) {
testInstallCommandWithJsonnetHome(t, "vendor")
@ -60,15 +59,15 @@ func testInstallCommandWithJsonnetHome(t *testing.T, jsonnetHome string) {
Name: "OneURL",
URIs: []string{"github.com/jsonnet-bundler/jsonnet-bundler@v0.1.0"},
ExpectedCode: 0,
ExpectedJsonnetFile: []byte(`{"dependencies": [{"source": {"git": {"remote": "https://github.com/jsonnet-bundler/jsonnet-bundler", "subdir": ""}}, "version": "v0.1.0"}], "legacyImports": true}`),
ExpectedJsonnetLockFile: []byte(`{"dependencies": [{"source": {"git": {"remote": "https://github.com/jsonnet-bundler/jsonnet-bundler", "subdir": ""}}, "version": "080f157c7fb85ad0281ea78f6c641eaa570a582f", "sum": "W1uI550rQ66axRpPXA2EZDquyPg/5PHZlvUz1NEzefg="}], "legacyImports": false}`),
ExpectedJsonnetFile: []byte(`{"version": 1, "dependencies": [{"source": {"git": {"remote": "https://github.com/jsonnet-bundler/jsonnet-bundler", "subdir": ""}}, "version": "v0.1.0"}], "legacyImports": false}`),
ExpectedJsonnetLockFile: []byte(`{"version": 1, "dependencies": [{"source": {"git": {"remote": "https://github.com/jsonnet-bundler/jsonnet-bundler", "subdir": ""}}, "version": "080f157c7fb85ad0281ea78f6c641eaa570a582f", "sum": "W1uI550rQ66axRpPXA2EZDquyPg/5PHZlvUz1NEzefg="}], "legacyImports": false}`),
},
{
Name: "Local",
URIs: []string{"jsonnet/foobar"},
ExpectedCode: 0,
ExpectedJsonnetFile: []byte(`{"dependencies": [{"source": {"local": {"directory": "jsonnet/foobar"}}, "version": ""}], "legacyImports": true}`),
ExpectedJsonnetLockFile: []byte(`{"dependencies": [{"source": {"local": {"directory": "jsonnet/foobar"}}, "version": ""}], "legacyImports": false}`),
ExpectedJsonnetFile: []byte(`{"version": 1, "dependencies": [{"source": {"local": {"directory": "jsonnet/foobar"}}, "version": ""}], "legacyImports": false}`),
ExpectedJsonnetLockFile: []byte(`{"version": 1, "dependencies": [{"source": {"local": {"directory": "jsonnet/foobar"}}, "version": ""}], "legacyImports": false}`),
},
}
@ -118,19 +117,19 @@ func TestWriteChangedJsonnetFile(t *testing.T) {
testcases := []struct {
Name string
JsonnetFileBytes []byte
NewJsonnetFile spec.JsonnetFile
NewJsonnetFile v1.JsonnetFile
ExpectWrite bool
}{
{
Name: "NoDiffEmpty",
JsonnetFileBytes: []byte(`{}`),
NewJsonnetFile: spec.New(),
NewJsonnetFile: v1.New(),
ExpectWrite: false,
},
{
Name: "NoDiffNotEmpty",
JsonnetFileBytes: []byte(`{"dependencies": [{"version": "master"}]}`),
NewJsonnetFile: spec.JsonnetFile{
NewJsonnetFile: v1.JsonnetFile{
Dependencies: map[string]deps.Dependency{
"": {
Version: "master",
@ -142,7 +141,7 @@ func TestWriteChangedJsonnetFile(t *testing.T) {
{
Name: "DiffVersion",
JsonnetFileBytes: []byte(`{"dependencies": [{"version": "1.0"}]}`),
NewJsonnetFile: spec.JsonnetFile{
NewJsonnetFile: v1.JsonnetFile{
Dependencies: map[string]deps.Dependency{
"": {
Version: "2.0",
@ -154,7 +153,7 @@ func TestWriteChangedJsonnetFile(t *testing.T) {
{
Name: "Diff",
JsonnetFileBytes: []byte(`{}`),
NewJsonnetFile: spec.JsonnetFile{
NewJsonnetFile: v1.JsonnetFile{
Dependencies: map[string]deps.Dependency{
"github.com/foobar/foobar": {
Source: deps.Source{

View file

@ -20,7 +20,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/jsonnet-bundler/jsonnet-bundler/spec/deps"
"github.com/jsonnet-bundler/jsonnet-bundler/spec/v1/deps"
)
func TestParseDependency(t *testing.T) {

View file

@ -19,12 +19,12 @@ import (
"os"
"path/filepath"
kingpin "gopkg.in/alecthomas/kingpin.v2"
"gopkg.in/alecthomas/kingpin.v2"
"github.com/jsonnet-bundler/jsonnet-bundler/pkg"
"github.com/jsonnet-bundler/jsonnet-bundler/pkg/jsonnetfile"
"github.com/jsonnet-bundler/jsonnet-bundler/spec"
"github.com/jsonnet-bundler/jsonnet-bundler/spec/deps"
v1 "github.com/jsonnet-bundler/jsonnet-bundler/spec/v1"
"github.com/jsonnet-bundler/jsonnet-bundler/spec/v1/deps"
)
func updateCommand(dir, jsonnetHome string, urls ...*url.URL) int {
@ -48,7 +48,7 @@ func updateCommand(dir, jsonnetHome string, urls ...*url.URL) int {
writeJSONFile(filepath.Join(dir, jsonnetfile.File), jsonnetFile),
"updating jsonnetfile.json")
kingpin.FatalIfError(
writeJSONFile(filepath.Join(dir, jsonnetfile.LockFile), spec.JsonnetFile{Dependencies: locked}),
writeJSONFile(filepath.Join(dir, jsonnetfile.LockFile), v1.JsonnetFile{Dependencies: locked}),
"updating jsonnetfile.lock.json")
return 0
}