diff --git a/internal/discovery/discovery.go b/internal/discovery/discovery.go index 5f5e687..6269169 100644 --- a/internal/discovery/discovery.go +++ b/internal/discovery/discovery.go @@ -11,10 +11,16 @@ import ( // Job describes a single (project, service, config_files) update to execute. type Job struct { - Project string - Service string - WorkingDir string + Project string + Service string + WorkingDir string ConfigFiles []string + // Image is the full image reference the update request asked for. + // Compose jobs ignore it (compose.yml already pins the reference to + // pull); Swarm jobs need it to know what to set on the service spec. + Image string + // ServiceID is the Swarm service ID. Empty for Compose jobs. + ServiceID string // Refused is true when the WorkingDir falls outside STACKS_ROOT. // The job is returned so the caller can surface a per-job "refused" // result, but it MUST NOT be executed. @@ -74,6 +80,7 @@ func (d *Discovery) FindJobs(ctx context.Context, image string) ([]Job, error) { Service: cl.Service, WorkingDir: cl.WorkingDir, ConfigFiles: cl.ConfigFiles, + Image: image, Refused: refused, RefusedReason: reason, }) diff --git a/internal/discovery/discovery_test.go b/internal/discovery/discovery_test.go index 285d83a..c1f5b0a 100644 --- a/internal/discovery/discovery_test.go +++ b/internal/discovery/discovery_test.go @@ -153,3 +153,20 @@ func TestFindJobs_NonComposeContainerIsSkipped(t *testing.T) { require.NoError(t, err) require.Empty(t, jobs) } + +func TestFindJobs_PopulatesImageField(t *testing.T) { + fake := &fakeDockerClient{containers: []types.Container{ + mkContainer("registry.example.com/myapp:v1", mkComposeLabels( + "myapp-prod", "web", + "/home/shcizo/self-hosted/myapp-prod", + "/home/shcizo/self-hosted/myapp-prod/docker-compose.yml", + true, + )), + }} + d := discovery.New(fake, "/home/shcizo/self-hosted", "se.shcizo.auto-update") + jobs, err := d.FindJobs(context.Background(), "registry.example.com/myapp") + require.NoError(t, err) + require.Len(t, jobs, 1) + require.Equal(t, "registry.example.com/myapp", jobs[0].Image) + require.Empty(t, jobs[0].ServiceID) +}