chore(packages) Use compose-go v2

This prepares the next release. We need to support the compose v2 syntax
as soon as possible to avoid accumulating technical debt.
This commit is contained in:
2025-10-18 14:43:16 +02:00
parent 9bd1ebb59a
commit 569ca195df
22 changed files with 133 additions and 131 deletions

View File

@@ -12,7 +12,7 @@ import (
"katenary.io/internal/generator/labels/labelstructs"
"katenary.io/internal/logger"
"github.com/compose-spec/compose-go/types"
"github.com/compose-spec/compose-go/v2/types"
"github.com/invopop/jsonschema"
"gopkg.in/yaml.v3"
)
@@ -70,35 +70,37 @@ func OverrideWithConfig(project *types.Project) {
log.Fatal(err)
return
}
for i, p := range project.Services {
for _, p := range project.Services {
name := p.Name
if project.Services[i].Labels == nil {
project.Services[i].Labels = make(map[string]string)
}
mustGetLabelContent := func(o any, s *types.ServiceConfig, labelName string) {
err := getLabelContent(o, s, labelName)
mustGetLabelContent := func(o any, labelName string) {
s, ok := project.Services[name]
if !ok {
return
}
err := getLabelContent(o, &s, labelName)
if err != nil {
log.Fatal(err)
}
project.Services[name] = s
}
if s, ok := services[name]; ok {
mustGetLabelContent(s.MainApp, &project.Services[i], labels.LabelMainApp)
mustGetLabelContent(s.Values, &project.Services[i], labels.LabelValues)
mustGetLabelContent(s.Secrets, &project.Services[i], labels.LabelSecrets)
mustGetLabelContent(s.Ports, &project.Services[i], labels.LabelPorts)
mustGetLabelContent(s.Ingress, &project.Services[i], labels.LabelIngress)
mustGetLabelContent(s.HealthCheck, &project.Services[i], labels.LabelHealthCheck)
mustGetLabelContent(s.SamePod, &project.Services[i], labels.LabelSamePod)
mustGetLabelContent(s.Description, &project.Services[i], labels.LabelDescription)
mustGetLabelContent(s.Ignore, &project.Services[i], labels.LabelIgnore)
mustGetLabelContent(s.Dependencies, &project.Services[i], labels.LabelDependencies)
mustGetLabelContent(s.ConfigMapFiles, &project.Services[i], labels.LabelConfigMapFiles)
mustGetLabelContent(s.MapEnv, &project.Services[i], labels.LabelMapEnv)
mustGetLabelContent(s.CronJob, &project.Services[i], labels.LabelCronJob)
mustGetLabelContent(s.EnvFrom, &project.Services[i], labels.LabelEnvFrom)
mustGetLabelContent(s.ExchangeVolumes, &project.Services[i], labels.LabelExchangeVolume)
mustGetLabelContent(s.ValuesFrom, &project.Services[i], labels.LabelValuesFrom)
mustGetLabelContent(s.MainApp, labels.LabelMainApp)
mustGetLabelContent(s.Values, labels.LabelValues)
mustGetLabelContent(s.Secrets, labels.LabelSecrets)
mustGetLabelContent(s.Ports, labels.LabelPorts)
mustGetLabelContent(s.Ingress, labels.LabelIngress)
mustGetLabelContent(s.HealthCheck, labels.LabelHealthCheck)
mustGetLabelContent(s.SamePod, labels.LabelSamePod)
mustGetLabelContent(s.Description, labels.LabelDescription)
mustGetLabelContent(s.Ignore, labels.LabelIgnore)
mustGetLabelContent(s.Dependencies, labels.LabelDependencies)
mustGetLabelContent(s.ConfigMapFiles, labels.LabelConfigMapFiles)
mustGetLabelContent(s.MapEnv, labels.LabelMapEnv)
mustGetLabelContent(s.CronJob, labels.LabelCronJob)
mustGetLabelContent(s.EnvFrom, labels.LabelEnvFrom)
mustGetLabelContent(s.ExchangeVolumes, labels.LabelExchangeVolume)
mustGetLabelContent(s.ValuesFrom, labels.LabelValuesFrom)
}
}
logger.Info("Katenary file loaded successfully, the services are now configured.")
@@ -129,6 +131,9 @@ func getLabelContent(o any, service *types.ServiceConfig, labelName string) erro
val = strings.TrimSpace(string(c))
}
if service.Labels == nil {
service.Labels = types.Labels{}
}
service.Labels[labelName] = val
return nil
}

View File

@@ -1,13 +1,14 @@
package katenaryfile
import (
"context"
"os"
"path/filepath"
"testing"
"katenary.io/internal/generator/labels"
"github.com/compose-spec/compose-go/cli"
"github.com/compose-spec/compose-go/v2/cli"
)
func TestBuildSchema(t *testing.T) {
@@ -53,13 +54,13 @@ webapp:
cli.WithWorkingDirectory(tmpDir),
cli.WithDefaultConfigPath,
)
project, err := cli.ProjectFromOptions(options)
project, err := cli.ProjectFromOptions(context.TODO(), options)
if err != nil {
t.Fatalf("Failed to create project from options: %s", err.Error())
}
OverrideWithConfig(project)
w := project.Services[0].Labels
w := project.Services["webapp"].Labels
if v, ok := w[labels.LabelPorts]; !ok {
t.Fatal("Expected ports to be defined", v)
}
@@ -103,13 +104,13 @@ webapp:
cli.WithWorkingDirectory(tmpDir),
cli.WithDefaultConfigPath,
)
project, err := cli.ProjectFromOptions(options)
project, err := cli.ProjectFromOptions(context.TODO(), options)
if err != nil {
t.Fatalf("Failed to create project from options: %s", err.Error())
}
OverrideWithConfig(project)
w := project.Services[0].Labels
w := project.Services["webapp"].Labels
if v, ok := w[labels.LabelPorts]; !ok {
t.Fatal("Expected ports to be defined", v)
}
@@ -158,13 +159,13 @@ webapp:
cli.WithWorkingDirectory(tmpDir),
cli.WithDefaultConfigPath,
)
project, err := cli.ProjectFromOptions(options)
project, err := cli.ProjectFromOptions(context.TODO(), options)
if err != nil {
t.Fatalf("Failed to create project from options: %s", err.Error())
}
OverrideWithConfig(project)
w := project.Services[0].Labels
w := project.Services["webapp"].Labels
if v, ok := w[labels.LabelConfigMapFiles]; !ok {
t.Fatal("Expected configmap-files to be defined", v)
}