diff --git a/cmpserver/plugin/plugin.go b/cmpserver/plugin/plugin.go index f8b63b4f5b2db..5c9190c3ceb39 100644 --- a/cmpserver/plugin/plugin.go +++ b/cmpserver/plugin/plugin.go @@ -225,7 +225,16 @@ func (s *Service) generateManifestGeneric(stream GenerateManifestStream) error { if !strings.HasPrefix(appPath, workDir) { return errors.New("illegal appPath: out of workDir bound") } - response, err := s.generateManifest(ctx, appPath, metadata.GetEnv()) + + log.Debugf("Plugin using workdir: %s", workDir) + + envEntries := metadata.GetEnv() + envEntries = append(envEntries, &apiclient.EnvEntry{ + Name: "ARGOCD_REPO_SERVER_CMP_WORKDIR", + Value: workDir, + }) + + response, err := s.generateManifest(ctx, appPath, envEntries) if err != nil { return fmt.Errorf("error generating manifests: %w", err) } diff --git a/cmpserver/plugin/plugin_test.go b/cmpserver/plugin/plugin_test.go index 3c6e4363248f9..01b04c8a507ba 100644 --- a/cmpserver/plugin/plugin_test.go +++ b/cmpserver/plugin/plugin_test.go @@ -675,6 +675,28 @@ func TestService_GenerateManifest(t *testing.T) { }) } +func TestService_EnvironmentVariables(t *testing.T) { + configFilePath := "./testdata/kustomize/config" + service, err := newService(configFilePath) + require.NoError(t, err) + + t.Run("ARGOCD_REPO_SERVER_CMP_WORKDIR is set", func(t *testing.T) { + service.WithGenerateCommand(Command{ + Command: []string{"sh", "-c"}, + Args: []string{"echo -n $ARGOCD_REPO_SERVER_CMP_WORKDIR"}, + }) + + s, err := NewMockGenerateManifestStream("./testdata/kustomize", "./testdata/kustomize", nil) + require.NoError(t, err) + err = service.generateManifestGeneric(s) + require.NoError(t, err) + require.NotNil(t, s.response) + require.NotEmpty(t, s.response.Manifests) + envWorkDir := s.response.Manifests[0] + assert.NotEmpty(t, envWorkDir, "Environment variable ARGOCD_REPO_SERVER_CMP_WORKDIR should not be empty") + }) +} + type MockMatchRepositoryStream struct { metadataSent bool fileSent bool