Skip to content

Commit

Permalink
cli/compose/schema: make version: "3" equivalent to "3.x" (latest)
Browse files Browse the repository at this point in the history
Previously, `version: "3"` was equivalent to `version: "3.0"`, which
caused confusion for many users, as they expected it to be "3.x".

docker-compose and docker compose (v2) have adopted the compose-spec
(https://compose-spec.io), which no longer has a version field in
the compose file, and always picks the "latest" supported version.

This changes how `docker stack` interprets "major" version numbers
specified in compose-files:

When only the major version ("3") is specified, it is now equivalent
to "3.x" (latest supported v3 schema).

Compose-files that specify both major and minor version (e.g. "3.0"
or "3.1") continue to use the existing behavior; validation is down-
graded to the specified version and will produce an error if options
are used that are not supported in that schema version. This allows
users to locally verify that a composse-file does not use options
that are not supported in the intended deployment environment (for
example if the deploy environment only supports older versions of
the schema).

Signed-off-by: Sebastiaan van Stijn <[email protected]>
  • Loading branch information
thaJeztah committed Feb 26, 2022
1 parent 8667ccd commit 85ebdc1
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 5 deletions.
7 changes: 3 additions & 4 deletions cli/compose/schema/schema.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ func init() {
}

// Version returns the version of the config, defaulting to the latest "3.x"
// version (3.10).
// version (3.10). If only the major version "3" is specified, it is used as
// version "3.x" and returns the default version (latest 3.x).
func Version(config map[string]interface{}) string {
version, ok := config[versionField]
if !ok {
Expand All @@ -51,10 +52,8 @@ func Version(config map[string]interface{}) string {

func normalizeVersion(version string) string {
switch version {
case "":
case "", "3":
return defaultVersion
case "3":
return "3.0"
default:
return version
}
Expand Down
2 changes: 1 addition & 1 deletion cli/compose/schema/schema_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,6 @@ func TestValidateCredentialSpecs(t *testing.T) {
version string
expectedErr string
}{
{version: "3", expectedErr: "credential_spec"},
{version: "3.0", expectedErr: "credential_spec"},
{version: "3.1", expectedErr: "credential_spec"},
{version: "3.2", expectedErr: "credential_spec"},
Expand All @@ -100,6 +99,7 @@ func TestValidateCredentialSpecs(t *testing.T) {
{version: "3.8"},
{version: "3.9"},
{version: "3.10"},
{version: "3"},
{version: ""},
}

Expand Down

0 comments on commit 85ebdc1

Please sign in to comment.