diff --git a/pkg/compose/build.go b/pkg/compose/build.go index 5af6bd8e89a..d3bccf76bcc 100644 --- a/pkg/compose/build.go +++ b/pkg/compose/build.go @@ -49,6 +49,8 @@ import ( "github.com/moby/buildkit/util/progress/progressui" specs "github.com/opencontainers/image-spec/specs-go/v1" "github.com/sirupsen/logrus" + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/trace" // required to get default driver registered _ "github.com/docker/buildx/driver/docker" @@ -60,8 +62,11 @@ func (s *composeService) Build(ctx context.Context, project *types.Project, opti return err } return progress.RunWithTitle(ctx, func(ctx context.Context) error { - _, err := s.build(ctx, project, options, nil) - return err + return tracing.SpanWrapFunc("project/build", tracing.ProjectOptions(ctx, project), + func(ctx context.Context) error { + _, err := s.build(ctx, project, options, nil) + return err + })(ctx) }, s.stdinfo(), "Building") } @@ -100,6 +105,7 @@ func (s *composeService) build(ctx context.Context, project *types.Project, opti return nil, err } if bake { + trace.SpanFromContext(ctx).SetAttributes(attribute.String("builder", "bake")) return s.doBuildBake(ctx, project, serviceToBuild, options) } @@ -196,6 +202,7 @@ func (s *composeService) build(ctx context.Context, project *types.Project, opti serviceName := fmt.Sprintf("Service %s", name) if !buildkitEnabled { + trace.SpanFromContext(ctx).SetAttributes(attribute.String("builder", "classic")) cw.Event(progress.BuildingEvent(serviceName)) id, err := s.doBuildClassic(ctx, project, service, options) if err != nil { @@ -219,6 +226,7 @@ func (s *composeService) build(ctx context.Context, project *types.Project, opti return err } + trace.SpanFromContext(ctx).SetAttributes(attribute.String("builder", "buildkit")) digest, err := s.doBuildBuildkit(ctx, name, buildOptions, w, nodes) if err != nil { return err diff --git a/pkg/compose/watch.go b/pkg/compose/watch.go index 31c811e77e2..cff1d4f0b9b 100644 --- a/pkg/compose/watch.go +++ b/pkg/compose/watch.go @@ -33,6 +33,7 @@ import ( ccli "github.com/docker/cli/cli/command/container" pathutil "github.com/docker/compose/v2/internal/paths" "github.com/docker/compose/v2/internal/sync" + "github.com/docker/compose/v2/internal/tracing" "github.com/docker/compose/v2/pkg/api" "github.com/docker/compose/v2/pkg/watch" "github.com/docker/docker/api/types/container" @@ -522,7 +523,16 @@ func (s *composeService) rebuild(ctx context.Context, project *types.Project, se options.LogTo.Log(api.WatchLogger, fmt.Sprintf("Rebuilding service(s) %q after changes were detected...", services)) // restrict the build to ONLY this service, not any of its dependencies options.Build.Services = services - imageNameToIdMap, err := s.build(ctx, project, *options.Build, nil) + + var ( + imageNameToIdMap map[string]string + err error + ) + err = tracing.SpanWrapFunc("project/build", tracing.ProjectOptions(ctx, project), + func(ctx context.Context) error { + imageNameToIdMap, err = s.build(ctx, project, *options.Build, nil) + return err + })(ctx) if err != nil { options.LogTo.Log(api.WatchLogger, fmt.Sprintf("Build failed. Error: %v", err)) return err