better interoperability with docker-compose on version label

Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
This commit is contained in:
Nicolas De Loof 2021-06-16 10:55:44 +02:00
parent 9ea051f64e
commit df9fa2d2d8
No known key found for this signature in database
GPG key ID: 9858809D6F8F6E7E
5 changed files with 28 additions and 6 deletions

View file

@ -16,6 +16,14 @@
package api
import (
"fmt"
"github.com/hashicorp/go-version"
"github.com/docker/compose-cli/internal"
)
const (
// ProjectLabel allow to track resource related to a compose project
ProjectLabel = "com.docker.compose.project"
@ -42,3 +50,15 @@ const (
// VersionLabel stores the compose tool version used to run application
VersionLabel = "com.docker.compose.version"
)
var ComposeVersion string
func init() {
v, err := version.NewVersion(internal.Version)
if err == nil {
segments := v.Segments()
if len(segments) > 2 {
ComposeVersion = fmt.Sprintf("%d.%d.%d", segments[0], segments[1], segments[2])
}
}
}

View file

@ -38,7 +38,6 @@ import (
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"github.com/docker/compose-cli/internal"
"github.com/docker/compose-cli/pkg/api"
"github.com/docker/compose-cli/pkg/progress"
"github.com/docker/compose-cli/pkg/utils"
@ -141,7 +140,7 @@ func prepareNetworks(project *types.Project) {
for k, network := range project.Networks {
network.Labels = network.Labels.Add(api.NetworkLabel, k)
network.Labels = network.Labels.Add(api.ProjectLabel, project.Name)
network.Labels = network.Labels.Add(api.VersionLabel, internal.Version)
network.Labels = network.Labels.Add(api.VersionLabel, api.ComposeVersion)
project.Networks[k] = network
}
}
@ -184,7 +183,7 @@ func (s *composeService) ensureProjectVolumes(ctx context.Context, project *type
for k, volume := range project.Volumes {
volume.Labels = volume.Labels.Add(api.VolumeLabel, k)
volume.Labels = volume.Labels.Add(api.ProjectLabel, project.Name)
volume.Labels = volume.Labels.Add(api.VersionLabel, internal.Version)
volume.Labels = volume.Labels.Add(api.VersionLabel, api.ComposeVersion)
err := s.ensureVolume(ctx, volume)
if err != nil {
return err
@ -216,7 +215,7 @@ func (s *composeService) getCreateOptions(ctx context.Context, p *types.Project,
labels[api.ProjectLabel] = p.Name
labels[api.ServiceLabel] = service.Name
labels[api.VersionLabel] = internal.Version
labels[api.VersionLabel] = api.ComposeVersion
if _, ok := service.Labels[api.OneoffLabel]; !ok {
labels[api.OneoffLabel] = "False"
}

View file

@ -21,7 +21,7 @@ import (
"path/filepath"
"testing"
"github.com/docker/compose-cli/internal"
"github.com/docker/compose-cli/pkg/api"
"github.com/compose-spec/compose-go/types"
composetypes "github.com/compose-spec/compose-go/types"
@ -78,6 +78,6 @@ func TestPrepareNetworkLabels(t *testing.T) {
assert.DeepEqual(t, project.Networks["skynet"].Labels, types.Labels(map[string]string{
"com.docker.compose.network": "skynet",
"com.docker.compose.project": "myProject",
"com.docker.compose.version": internal.Version,
"com.docker.compose.version": api.ComposeVersion,
}))
}