diff --git a/cmd/dagger/cmd/compute.go b/cmd/dagger/cmd/compute.go index 4151dc5e..033e5f38 100644 --- a/cmd/dagger/cmd/compute.go +++ b/cmd/dagger/cmd/compute.go @@ -41,7 +41,7 @@ var computeCmd = &cobra.Command{ for _, input := range viper.GetStringSlice("input-string") { parts := strings.SplitN(input, "=", 2) k, v := parts[0], parts[1] - err := st.AddInput(k, dagger.TextInput(v)) + err := st.SetInput(k, dagger.TextInput(v)) if err != nil { lg. Fatal(). @@ -54,7 +54,7 @@ var computeCmd = &cobra.Command{ for _, input := range viper.GetStringSlice("input-dir") { parts := strings.SplitN(input, "=", 2) k, v := parts[0], parts[1] - err := st.AddInput(k, dagger.DirInput(v, []string{})) + err := st.SetInput(k, dagger.DirInput(v, []string{})) if err != nil { lg. Fatal(). @@ -67,7 +67,7 @@ var computeCmd = &cobra.Command{ for _, input := range viper.GetStringSlice("input-git") { parts := strings.SplitN(input, "=", 2) k, v := parts[0], parts[1] - err := st.AddInput(k, dagger.GitInput(v, "", "")) + err := st.SetInput(k, dagger.GitInput(v, "", "")) if err != nil { lg. Fatal(). @@ -98,7 +98,7 @@ var computeCmd = &cobra.Command{ lg.Fatal().Msg("invalid json") } - err = st.AddInput("", dagger.JSONInput(string(content))) + err = st.SetInput("", dagger.JSONInput(string(content))) if err != nil { lg.Fatal().Err(err).Msg("failed to add input") } @@ -121,7 +121,7 @@ var computeCmd = &cobra.Command{ content = plaintext } - err = st.AddInput("", dagger.YAMLInput(string(content))) + err = st.SetInput("", dagger.YAMLInput(string(content))) if err != nil { lg.Fatal().Err(err).Msg("failed to add input") } diff --git a/cmd/dagger/cmd/input/root.go b/cmd/dagger/cmd/input/root.go index 57dd9500..d212ab67 100644 --- a/cmd/dagger/cmd/input/root.go +++ b/cmd/dagger/cmd/input/root.go @@ -34,7 +34,7 @@ func updateDeploymentInput(ctx context.Context, target string, input dagger.Inpu } st := common.GetCurrentDeploymentState(ctx, store) - st.AddInput(target, input) + st.SetInput(target, input) if err := store.UpdateDeployment(ctx, st, nil); err != nil { lg.Fatal().Err(err).Str("deploymentId", st.ID).Str("deploymentName", st.Name).Msg("cannot update deployment") diff --git a/dagger/deployment.go b/dagger/deployment.go index c4b6a64a..5dfd5dbd 100644 --- a/dagger/deployment.go +++ b/dagger/deployment.go @@ -40,7 +40,15 @@ type inputKV struct { Value Input `json:"value,omitempty"` } -func (s *DeploymentState) AddInput(key string, value Input) error { +func (s *DeploymentState) SetInput(key string, value Input) error { + for i, inp := range s.Inputs { + if inp.Key != key { + continue + } + // Remove existing inputs with the same key + s.Inputs = append(s.Inputs[:i], s.Inputs[i+1:]...) + } + s.Inputs = append(s.Inputs, inputKV{Key: key, Value: value}) return nil } diff --git a/dagger/input_test.go b/dagger/input_test.go index c1089051..d3e65fcc 100644 --- a/dagger/input_test.go +++ b/dagger/input_test.go @@ -10,7 +10,7 @@ func TestInputDir(t *testing.T) { st := &DeploymentState{ PlanSource: DirInput("/tmp/source", []string{}), } - require.NoError(t, st.AddInput("www.source", DirInput(".", []string{}))) + require.NoError(t, st.SetInput("www.source", DirInput(".", []string{}))) deployment, err := NewDeployment(st) require.NoError(t, err) diff --git a/dagger/store_test.go b/dagger/store_test.go index abe7cf33..47449be8 100644 --- a/dagger/store_test.go +++ b/dagger/store_test.go @@ -62,7 +62,7 @@ func TestStoreLookupByPath(t *testing.T) { st := &DeploymentState{ Name: "test", } - require.NoError(t, st.AddInput("foo", DirInput("/test/path", []string{}))) + require.NoError(t, st.SetInput("foo", DirInput("/test/path", []string{}))) require.NoError(t, store.CreateDeployment(ctx, st)) // Lookup by path @@ -72,7 +72,7 @@ func TestStoreLookupByPath(t *testing.T) { require.Equal(t, st.ID, r.ID) // Add a new path - require.NoError(t, st.AddInput("bar", DirInput("/test/anotherpath", []string{}))) + require.NoError(t, st.SetInput("bar", DirInput("/test/anotherpath", []string{}))) require.NoError(t, store.UpdateDeployment(ctx, st, nil)) // Lookup by the previous path