diff --git a/CHANGELOG.md b/CHANGELOG.md index 9eaf946f..ddaebcfb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,38 @@ +### v0.7.0 + +Next major release of the spec, with a lot of tooling improvements, wording clarifications, and one breaking schema change from the previous release. + +Spec changes since v0.6.1: +- The `mount` objects in pod manifests now refer directly to a path rather than referencing an app's mountPoint. This makes it easier for implementations to provide supplementary, arbitrary mounts in pods without needing to modify app sections in the pod manifest. This is a breaking schema change; however, implementations are suggested to preserve similar behaviour to the previous three-level mount mappings by continuing to use mountPoints name fields to generate mount<->volume mappings (#364, #495) +- The resource/cpu unit has changed to cpu cores, instead of millicores (#468) +- The wording around unpacking of ACI dependencies was reworked to clarify the expected order of unpacking (#425, #431, #494) +- The wording around mounting volumes was expanded to advise much more explicit behaviour and protect various attack vectors for hosts (#431, #494) +- App sections now support a `supplementaryGroups` field, which allows users to specify a list of additional GIDs that the processes of the app should run with (#339) +- A new "Dependency Matching" section better explains the label matching process during dependency resolution (#469) +- Clarified wording around the "empty" volume type (#449) + +Tooling changes and features: +- Added an `IsValidOSArch` function implementations can use +- When patching ACIs that do not have an `app` section in their manifest, actool will now automatically inject an App iff the user specifies an exec statement (#473, #489) +- actool now warns if a manifest's ACVersion is too old (#322) +- The NewCompressedReader function in the aci package now returns an io.ReadCloser instead of an io.Reader to facilitate closing the reader in the case of xz compression. (#462) +- Added a new last-ditch parser of pod and image manifests to facilitate retrieving some debugging information for badly-formed manifests (#477) + +Schema and tooling bugfixes: +- actool now validates layouts before opening output file so that it does not create empty files or truncate existing ones if a layout is invalid (#322) +- Fixed a panic when `actool patch-manifest` is supplied with an ACI with no app section in its ImageManifest (#473) +- ACE validator's name is ACName compatible (#448) +- ACE validator's mountpoint checking is now more robust on Linux and works on FreeBSD (#467) +- `build_aci` now works if NO_SIGNATURE is set +- `build_aci` properly generates an armored signature (#460) +- Fixed a typo in the ACE validator (uid should be uuid) (#485) + +Other changes: +- Rewrote the kubernetes import path in Godeps (#471) +- pkg/device is now buildable on OS X (#486) +- schema code is now tested against Go 1.5 +- Added explicit reference to RFC2119 regarding wording + ### v0.6.1 Minor release of the spec; the most important change is adjusting the type for diff --git a/README.md b/README.md index e8a24aa0..8796b89a 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ $ find /tmp/my-app/ $ cat /tmp/my-app/manifest { "acKind": "ImageManifest", - "acVersion": "0.6.1", + "acVersion": "0.7.0", "name": "my-app", "labels": [ {"name": "os", "value": "linux"}, @@ -113,7 +113,7 @@ and verify that the manifest was embedded appropriately $ tar xf /tmp/my-app.aci manifest -O | python -m json.tool { "acKind": "ImageManifest", - "acVersion": "0.6.1", + "acVersion": "0.7.0", "annotations": null, "app": { "environment": [], diff --git a/VERSION b/VERSION index 7961dbbf..ae4b16e0 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.6.1+git +0.7.0+git diff --git a/ace/image_manifest_main.json b/ace/image_manifest_main.json index 188dfdb7..01ac6cdf 100644 --- a/ace/image_manifest_main.json +++ b/ace/image_manifest_main.json @@ -1,9 +1,9 @@ { - "acVersion": "0.6.1", + "acVersion": "0.7.0", "acKind": "ImageManifest", "name": "coreos.com/ace-validator-main", "labels": [ - { "name": "version", "value": "0.6.1" }, + { "name": "version", "value": "0.7.0" }, { "name": "os", "value": "linux" }, { "name": "arch", "value": "amd64" } ], diff --git a/ace/image_manifest_sidekick.json b/ace/image_manifest_sidekick.json index e7e7185f..c7e41cdb 100644 --- a/ace/image_manifest_sidekick.json +++ b/ace/image_manifest_sidekick.json @@ -1,9 +1,9 @@ { - "acVersion": "0.6.1", + "acVersion": "0.7.0", "acKind": "ImageManifest", "name": "coreos.com/ace-validator-sidekick", "labels": [ - { "name": "version", "value": "0.6.1" }, + { "name": "version", "value": "0.7.0" }, { "name": "os", "value": "linux" }, { "name": "arch", "value": "amd64" } ], diff --git a/aci/file_test.go b/aci/file_test.go index 7d70ed90..75aac23f 100644 --- a/aci/file_test.go +++ b/aci/file_test.go @@ -28,7 +28,7 @@ func newTestACI(usedotslash bool) (*os.File, error) { return nil, err } - manifestBody := `{"acKind":"ImageManifest","acVersion":"0.6.1","name":"example.com/app"}` + manifestBody := `{"acKind":"ImageManifest","acVersion":"0.7.0","name":"example.com/app"}` gw := gzip.NewWriter(tf) tw := tar.NewWriter(gw) diff --git a/examples/image.json b/examples/image.json index 18ef275e..72599265 100644 --- a/examples/image.json +++ b/examples/image.json @@ -1,6 +1,6 @@ { "acKind": "ImageManifest", - "acVersion": "0.6.1", + "acVersion": "0.7.0", "name": "example.com/reduce-worker", "labels": [ { diff --git a/examples/pod_runtime.json b/examples/pod_runtime.json index b095beb2..65dc4197 100644 --- a/examples/pod_runtime.json +++ b/examples/pod_runtime.json @@ -1,6 +1,6 @@ { "acKind": "PodManifest", - "acVersion": "0.6.1", + "acVersion": "0.7.0", "apps": [ { "name": "reduce-worker", diff --git a/pkg/acirenderer/acirenderer_test.go b/pkg/acirenderer/acirenderer_test.go index d28b80b8..d0e4924a 100644 --- a/pkg/acirenderer/acirenderer_test.go +++ b/pkg/acirenderer/acirenderer_test.go @@ -2149,7 +2149,7 @@ func TestEmptyRootFsDir(t *testing.T) { ` { "acKind": "ImageManifest", - "acVersion": "0.6.1", + "acVersion": "0.7.0", "name": "example.com/test_empty_rootfs" } `, @@ -2175,7 +2175,7 @@ func TestEmptyRootFsDir(t *testing.T) { ` { "acKind": "ImageManifest", - "acVersion": "0.6.1", + "acVersion": "0.7.0", "name": "example.com/test_empty_rootfs_pwl", "pathWhitelist": ["foo"] } diff --git a/schema/image_test.go b/schema/image_test.go index dd9aeb37..b7091bfd 100644 --- a/schema/image_test.go +++ b/schema/image_test.go @@ -20,7 +20,7 @@ func TestEmptyApp(t *testing.T) { imj := ` { "acKind": "ImageManifest", - "acVersion": "0.6.1", + "acVersion": "0.7.0", "name": "example.com/test" } ` diff --git a/schema/lastditch/image_test.go b/schema/lastditch/image_test.go index 0efe9e05..ff25d0f6 100644 --- a/schema/lastditch/image_test.go +++ b/schema/lastditch/image_test.go @@ -26,7 +26,7 @@ func TestImageManifestWithInvalidName(t *testing.T) { imj := ` { "acKind": "ImageManifest", - "acVersion": "0.6.1", + "acVersion": "0.7.0", "name": "` + invalidName + `" } ` @@ -35,7 +35,7 @@ func TestImageManifestWithInvalidName(t *testing.T) { } expected := ImageManifest{ ACKind: "ImageManifest", - ACVersion: "0.6.1", + ACVersion: "0.7.0", Name: invalidName, } im := ImageManifest{} @@ -51,7 +51,7 @@ func TestBogusImageManifest(t *testing.T) { bogus := []string{` { "acKind": "Bogus", - "acVersion": "0.6.1", + "acVersion": "0.7.0", } `, ` diff --git a/schema/lastditch/pod_test.go b/schema/lastditch/pod_test.go index af0b3826..503a2999 100644 --- a/schema/lastditch/pod_test.go +++ b/schema/lastditch/pod_test.go @@ -82,7 +82,7 @@ func TestBogusPodManifest(t *testing.T) { ` { "acKind": "Bogus", - "acVersion": "0.6.1", + "acVersion": "0.7.0", } `, ` @@ -107,7 +107,7 @@ func podJ(apps, extra string) string { { %s "acKind": "PodManifest", - "acVersion": "0.6.1", + "acVersion": "0.7.0", "apps": [%s] }`, extra, apps) } @@ -118,7 +118,7 @@ func podI(apps ...RuntimeApp) PodManifest { apps = AppList{} } return PodManifest{ - ACVersion: "0.6.1", + ACVersion: "0.7.0", ACKind: "PodManifest", Apps: apps, } diff --git a/schema/version.go b/schema/version.go index 412a6348..26df5fa8 100644 --- a/schema/version.go +++ b/schema/version.go @@ -22,7 +22,7 @@ const ( // version represents the canonical version of the appc spec and tooling. // For now, the schema and tooling is coupled with the spec itself, so // this must be kept in sync with the VERSION file in the root of the repo. - version string = "0.6.1+git" + version string = "0.7.0+git" ) var ( diff --git a/spec/aci.md b/spec/aci.md index 4386255e..f287a494 100644 --- a/spec/aci.md +++ b/spec/aci.md @@ -78,7 +78,7 @@ JSON Schema for the Image Manifest (app image manifest, ACI manifest), conformin ```json { "acKind": "ImageManifest", - "acVersion": "0.6.1", + "acVersion": "0.7.0", "name": "example.com/reduce-worker", "labels": [ { diff --git a/spec/pods.md b/spec/pods.md index 2a8b01ef..336dd26a 100644 --- a/spec/pods.md +++ b/spec/pods.md @@ -28,7 +28,7 @@ JSON Schema for the Pod Manifest, conforming to [RFC4627](https://tools.ietf.org ```json { - "acVersion": "0.6.1", + "acVersion": "0.7.0", "acKind": "PodManifest", "apps": [ {