From 8a21375ab7224eceec5e56a72361b762c3333a7e Mon Sep 17 00:00:00 2001 From: nikhilsbhat Date: Wed, 31 Jul 2024 20:14:48 +0530 Subject: [PATCH] Fix GetPipelineFiles to handle both pipelines and path to pipelines --- Makefile | 4 +- configrepo.go | 40 +++--- configrepo_test.go | 26 ++-- gocd.go | 2 +- pipeline_config_test.go | 305 +++++++++++++++++++++++++++++++++++----- types.go | 12 +- 6 files changed, 313 insertions(+), 76 deletions(-) diff --git a/Makefile b/Makefile index cf07a8c..68c1f02 100644 --- a/Makefile +++ b/Makefile @@ -30,10 +30,10 @@ local.build: local.check ## Generates the artifact with the help of 'go build' GOVERSION=${GOVERSION} BUILD_ENVIRONMENT=${BUILD_ENVIRONMENT} goreleaser build --rm-dist publish: local.check ## Builds and publishes the app - GOVERSION=${GOVERSION} BUILD_ENVIRONMENT=${BUILD_ENVIRONMENT} PLUGIN_PATH=${APP_DIR} goreleaser release --rm-dist + GOVERSION=${GOVERSION} BUILD_ENVIRONMENT=${BUILD_ENVIRONMENT} PLUGIN_PATH=${APP_DIR} goreleaser release --clean mock.publish: local.check ## Builds and mocks app release - GOVERSION=${GOVERSION} BUILD_ENVIRONMENT=${BUILD_ENVIRONMENT} PLUGIN_PATH=${APP_DIR} goreleaser release --skip-publish --rm-dist + GOVERSION=${GOVERSION} BUILD_ENVIRONMENT=${BUILD_ENVIRONMENT} PLUGIN_PATH=${APP_DIR} goreleaser release --skip=publish --clean lint: ## Lint's application for errors, it is a linters aggregator (https://github.com/golangci/golangci-lint). if [ -z "${DEV}" ]; then golangci-lint run --color always ; else docker run --rm -v $(APP_DIR):/app -w /app golangci/golangci-lint:v1.46.2-alpine golangci-lint run --color always ; fi diff --git a/configrepo.go b/configrepo.go index 49388de..aac0eb4 100644 --- a/configrepo.go +++ b/configrepo.go @@ -335,41 +335,39 @@ func (conf *client) SetPipelineFiles(pipelines []PipelineFiles) map[string]strin // GetPipelineFiles reads the pipeline file or recursively read the directory to get all the pipelines matching the pattern and transforms to []PipelineFiles // So that SetPipelineFiles can convert them to format that ConfigRepoPreflightCheck understands. -func (conf *client) GetPipelineFiles(pathAndPattern ...string) ([]PipelineFiles, error) { - path := pathAndPattern[0] - patterns := pathAndPattern[1:] - +func (conf *client) GetPipelineFiles(path string, pipelines []string, patterns ...string) ([]PipelineFiles, error) { var pipelineFiles []PipelineFiles - fileInfo, err := os.Stat(pathAndPattern[0]) - if err != nil { - return nil, err - } + if len(pipelines) != 0 { + for _, goCDPipeline := range pipelines { + conf.logger.Debugf("finding absolute path of the pipeline '%s'", goCDPipeline) + _, err := os.Stat(goCDPipeline) + if err != nil { + return nil, err + } - if !fileInfo.IsDir() { - conf.logger.Debugf("pipeline files path '%s' is a file finding absolute path of the same", path) + absFilePath, err := filepath.Abs(goCDPipeline) + if err != nil { + return pipelineFiles, err + } - absFilePath, err := filepath.Abs(path) - if err != nil { - return pipelineFiles, err + _, fileName := filepath.Split(absFilePath) + pipelineFiles = append(pipelineFiles, PipelineFiles{ + Name: fileName, + Path: absFilePath, + }) } - _, fileName := filepath.Split(absFilePath) - pipelineFiles = append(pipelineFiles, PipelineFiles{ - Name: fileName, - Path: absFilePath, - }) - return pipelineFiles, nil } - if len(pathAndPattern) <= 1 { + if len(patterns) == 0 { return nil, &errors.GoCDSDKError{Message: "pipeline files pattern not passed (ex: *.gocd.yaml)"} } conf.logger.Debugf("pipeline files path '%s' is a directory, finding all the files matching the pattern '%s'", path, strings.Join(patterns, ",")) - if err = filepath.Walk(path, func(path string, info os.FileInfo, err error) error { + if err := filepath.Walk(path, func(path string, info os.FileInfo, err error) error { if err != nil { return err } diff --git a/configrepo_test.go b/configrepo_test.go index 82abcd9..01ff82a 100644 --- a/configrepo_test.go +++ b/configrepo_test.go @@ -585,7 +585,7 @@ func Test_client_ConfigRepoPreflightCheck(t *testing.T) { client := gocd.NewClient(server.URL, auth, "debug", nil) - pipelineFiles, err := client.GetPipelineFiles("internal/fixtures", "*_config.json") + pipelineFiles, err := client.GetPipelineFiles("internal/fixtures", nil, "*_config.json") assert.NoError(t, err) pipelineMap := client.SetPipelineFiles(pipelineFiles) @@ -601,7 +601,7 @@ func Test_client_ConfigRepoPreflightCheck(t *testing.T) { client := gocd.NewClient(server.URL, auth, "info", nil) - pipelineFiles, err := client.GetPipelineFiles("internal/fixtures", "*_config.json") + pipelineFiles, err := client.GetPipelineFiles("internal/fixtures", nil, "*_config.json") assert.NoError(t, err) pipelineMap := client.SetPipelineFiles(pipelineFiles) @@ -617,7 +617,7 @@ func Test_client_ConfigRepoPreflightCheck(t *testing.T) { nil, false, nil) client := gocd.NewClient(server.URL, auth, "info", nil) - pipelineFiles, err := client.GetPipelineFiles("internal/fixtures", "*_config.json") + pipelineFiles, err := client.GetPipelineFiles("internal/fixtures", nil, "*_config.json") assert.NoError(t, err) pipelineMap := client.SetPipelineFiles(pipelineFiles) @@ -634,7 +634,7 @@ func Test_client_ConfigRepoPreflightCheck(t *testing.T) { false, nil) client := gocd.NewClient(server.URL, auth, "info", nil) - pipelineFiles, err := client.GetPipelineFiles("internal/fixtures", "*_config.json") + pipelineFiles, err := client.GetPipelineFiles("internal/fixtures", nil, "*_config.json") assert.NoError(t, err) pipelineMap := client.SetPipelineFiles(pipelineFiles) @@ -649,7 +649,7 @@ func Test_client_ConfigRepoPreflightCheck(t *testing.T) { false, nil) client := gocd.NewClient(server.URL, auth, "info", nil) - pipelineFiles, err := client.GetPipelineFiles("internal/fixtures", "*_config.json") + pipelineFiles, err := client.GetPipelineFiles("internal/fixtures", nil, "*_config.json") assert.NoError(t, err) pipelineMap := client.SetPipelineFiles(pipelineFiles) @@ -665,7 +665,7 @@ func Test_client_ConfigRepoPreflightCheck(t *testing.T) { client.SetRetryCount(1) client.SetRetryWaitTime(1) - pipelineFiles, err := client.GetPipelineFiles("internal/fixtures", "*_config.json") + pipelineFiles, err := client.GetPipelineFiles("internal/fixtures", nil, "*_config.json") assert.NoError(t, err) pipelineMap := client.SetPipelineFiles(pipelineFiles) @@ -687,7 +687,7 @@ func Test_client_ConfigRepoPreflightCheck(t *testing.T) { homeDir, err := os.UserHomeDir() assert.NoError(t, err) - pipelineFiles, err := client.GetPipelineFiles(filepath.Join(homeDir, "opensource/gocd-git-path-sample"), "*.gocd.yaml") + pipelineFiles, err := client.GetPipelineFiles(filepath.Join(homeDir, "opensource/gocd-git-path-sample"), nil, "*.gocd.yaml") assert.NoError(t, err) pipeliness := client.SetPipelineFiles(pipelineFiles) @@ -762,7 +762,7 @@ func Test_client_GetPipelineFiles(t *testing.T) { }, } - actual, err := client.GetPipelineFiles("internal/fixtures", "*_config.json") + actual, err := client.GetPipelineFiles("internal/fixtures", nil, "*_config.json") assert.NoError(t, err) assert.Equal(t, len(expected), len(actual)) assert.Equal(t, expected, actual) @@ -771,15 +771,15 @@ func Test_client_GetPipelineFiles(t *testing.T) { t.Run("should error out while parsing directory to fetch the pipelines since pattern is missing", func(t *testing.T) { client := gocd.NewClient("http://localhost:8156/go", auth, "debug", nil) - actual, err := client.GetPipelineFiles("internal/fixture", "*_config.json") - assert.EqualError(t, err, "stat internal/fixture: no such file or directory") + actual, err := client.GetPipelineFiles("internal/fixture", nil, "*_config.json") + assert.EqualError(t, err, "lstat internal/fixture: no such file or directory") assert.Nil(t, actual) }) t.Run("should error out while parsing directory due to wrong path", func(t *testing.T) { client := gocd.NewClient("http://localhost:8156/go", auth, "debug", nil) - actual, err := client.GetPipelineFiles("internal/fixtures") + actual, err := client.GetPipelineFiles("internal/fixtures", nil) assert.EqualError(t, err, "pipeline files pattern not passed (ex: *.gocd.yaml)") assert.Nil(t, actual) }) @@ -794,7 +794,7 @@ func Test_client_GetPipelineFiles(t *testing.T) { }, } - actual, err := client.GetPipelineFiles("internal/fixtures/mail_server_config.json") + actual, err := client.GetPipelineFiles("", []string{"internal/fixtures/mail_server_config.json"}) assert.NoError(t, err) assert.Equal(t, expected, actual) }) @@ -802,7 +802,7 @@ func Test_client_GetPipelineFiles(t *testing.T) { t.Run("should error out while identifying the pipeline files due to wrong path", func(t *testing.T) { client := gocd.NewClient("http://localhost:8156/go", auth, "debug", nil) - actual, err := client.GetPipelineFiles("internal/fixture/mail_server_config.json") + actual, err := client.GetPipelineFiles("", []string{"internal/fixture/mail_server_config.json"}) assert.EqualError(t, err, "stat internal/fixture/mail_server_config.json: no such file or directory") assert.Nil(t, actual) }) diff --git a/gocd.go b/gocd.go index 5af0828..21ba8f0 100644 --- a/gocd.go +++ b/gocd.go @@ -42,7 +42,7 @@ type GoCd interface { ConfigRepoTriggerUpdate(name string) (map[string]string, error) ConfigRepoPreflightCheck(pipelines map[string]string, pluginID string, repoID string) (bool, error) SetPipelineFiles(pipelines []PipelineFiles) map[string]string - GetPipelineFiles(pathAndPattern ...string) ([]PipelineFiles, error) + GetPipelineFiles(path string, pipelines []string, patterns ...string) ([]PipelineFiles, error) EnableMaintenanceMode() error DisableMaintenanceMode() error GetMaintenanceModeInfo() (Maintenance, error) diff --git a/pipeline_config_test.go b/pipeline_config_test.go index 682d795..10e7753 100644 --- a/pipeline_config_test.go +++ b/pipeline_config_test.go @@ -27,38 +27,69 @@ func Test_client_GetPipelineConfig(t *testing.T) { LabelTemplate: "${COUNT}", LockBehavior: "lockOnFailure", Name: "new_pipeline", + Template: "", Origin: gocd.PipelineOrigin{ - Type: "config_repo", - ID: "sample_config", + Type: "config_repo", ID: "sample_config", }, Parameters: []gocd.PipelineEnvironmentVariables{}, EnvironmentVariables: []gocd.PipelineEnvironmentVariables{}, Materials: []gocd.Material{ { - Type: "git", - Fingerprint: "", + Type: "git", Fingerprint: "", Attributes: gocd.Attribute{ URL: "git@github.com:sample_repo/example.git", + Username: "", + Password: "", + EncryptedPassword: "", Branch: "master", AutoUpdate: true, CheckExternals: false, UseTickets: false, + View: "", + Port: "", + ProjectPath: "", + Domain: "", + Ref: "", + Name: "", + Stage: "", + Pipeline: "", IgnoreForScheduling: false, Destination: "dest", InvertFilter: false, + SubmoduleFolder: "", ShallowClone: false, + Origin: map[string]string(nil), Filter: struct { Ignore []string "json:\"ignore,omitempty\" yaml:\"ignore,omitempty\"" }{Ignore: []string(nil)}, }, + RepoURL: "", Config: gocd.MaterialConfig{ + Type: "", + Fingerprint: "", Attributes: gocd.Attribute{ + URL: "", + Username: "", + Password: "", + EncryptedPassword: "", + Branch: "", AutoUpdate: false, CheckExternals: false, UseTickets: false, + View: "", + Port: "", + ProjectPath: "", + Domain: "", + Ref: "", + Name: "", + Stage: "", + Pipeline: "", IgnoreForScheduling: false, + Destination: "", InvertFilter: false, + SubmoduleFolder: "", ShallowClone: false, + Origin: map[string]string(nil), Filter: struct { Ignore []string "json:\"ignore,omitempty\" yaml:\"ignore,omitempty\"" }{Ignore: []string(nil)}, @@ -76,14 +107,64 @@ func Test_client_GetPipelineConfig(t *testing.T) { CleanWorkingDirectory: false, NeverCleanupArtifacts: false, Approval: gocd.PipelineApprovalConfig{ - Type: "success", - AllowOnlyOnSuccess: false, + Type: "success", AllowOnlyOnSuccess: false, Authorization: gocd.AuthorizationConfig{ - Roles: []string{}, Users: []string{}, + Roles: []string{}, + Users: []string{}, }, }, EnvironmentVariables: []gocd.PipelineEnvironmentVariables{}, - Job: []gocd.PipelineJobConfig(nil), + Jobs: []gocd.PipelineJobConfig{ + { + Name: "defaultJob", + RunInstanceCount: interface{}(nil), + ElasticProfileID: "", + Timeout: 0, + EnvironmentVariables: []gocd.PipelineEnvironmentVariables{}, + Resources: []string{}, + Tasks: []gocd.PipelineTaskConfig{ + { + Type: "exec", + Attributes: gocd.TaskAttributeConfig{ + IsSourceAFile: false, + ArtifactID: "", + ArtifactOrigin: "", + Command: "ls", + WorkingDirectory: "", + Pipeline: "", + Stage: "", + Job: "", + Source: "", + Destination: "", + Configuration: []gocd.PluginConfiguration(nil), + RunIf: []string{"passed"}, + Arguments: []string(nil), + PluginConfiguration: struct { + ID string "json:\"id,omitempty\" yaml:\"id,omitempty\"" + Version string "json:\"version,omitempty\" yaml:\"version,omitempty\"" + }{ID: "", Version: ""}, + OnCancel: struct { + RunIf []string "json:\"run_if,omitempty\" yaml:\"run_if,omitempty\"" + Command string "json:\"command,omitempty\" yaml:\"command,omitempty\"" + Arguments []string "json:\"arguments,omitempty\" yaml:\"arguments,omitempty\"" + WorkingDirectory string "json:\"working_directory,omitempty\" yaml:\"working_directory,omitempty\"" + }{RunIf: []string(nil), Command: "", Arguments: []string(nil), WorkingDirectory: ""}, + }, + }, + }, + Tabs: []gocd.PipelineTab{}, + Artifacts: []gocd.PipelineArtifact{ + { + Type: "external", + Source: "", + Destination: "", + ArtifactID: "", + StoreID: "dockerhub", + Configuration: []map[string]string{{"key": "Image", "value": "gocd/gocd-server"}, {"key": "Tag", "value": "v${GO_PIPELINE_LABEL}"}}, + }, + }, + }, + }, }, { Name: "s2", @@ -99,13 +180,64 @@ func Test_client_GetPipelineConfig(t *testing.T) { }, }, EnvironmentVariables: []gocd.PipelineEnvironmentVariables{}, - Job: []gocd.PipelineJobConfig(nil), + Jobs: []gocd.PipelineJobConfig{ + { + Name: "j2", RunInstanceCount: interface{}(nil), + ElasticProfileID: "", + Timeout: 0, + EnvironmentVariables: []gocd.PipelineEnvironmentVariables{}, + Resources: []string{}, + Tasks: []gocd.PipelineTaskConfig{ + { + Type: "fetch", + Attributes: gocd.TaskAttributeConfig{ + IsSourceAFile: false, + ArtifactID: "docker-image", + ArtifactOrigin: "external", + Command: "", + WorkingDirectory: "", + Pipeline: "", + Stage: "defaultStage", + Job: "defaultJob", + Source: "", + Destination: "", + Configuration: []gocd.PluginConfiguration(nil), + RunIf: []string{}, Arguments: []string(nil), PluginConfiguration: struct { + ID string "json:\"id,omitempty\" yaml:\"id,omitempty\"" + Version string "json:\"version,omitempty\" yaml:\"version,omitempty\"" + }{ID: "", Version: ""}, + OnCancel: struct { + RunIf []string "json:\"run_if,omitempty\" yaml:\"run_if,omitempty\"" + Command string "json:\"command,omitempty\" yaml:\"command,omitempty\"" + Arguments []string "json:\"arguments,omitempty\" yaml:\"arguments,omitempty\"" + WorkingDirectory string "json:\"working_directory,omitempty\" yaml:\"working_directory,omitempty\"" + }{RunIf: []string(nil), Command: "", Arguments: []string(nil), WorkingDirectory: ""}, + }, + }, + }, + Tabs: []gocd.PipelineTab{}, + Artifacts: []gocd.PipelineArtifact{}, + }, + }, }, }, - TrackingTool: gocd.PipelineTracingToolConfig{}, - Timer: gocd.PipelineTimerConfig{}, - CreateOptions: gocd.PipelineCreateOptions{}, - ETAG: "cbc5f2d5b9c13a2cc1b1efb3d8a6155d", + TrackingTool: gocd.PipelineTracingToolConfig{ + Type: "", + Attributes: struct { + URLPattern string "json:\"url_pattern,omitempty\" yaml:\"url_pattern,omitempty\"" + Regex string "json:\"regex,omitempty\" yaml:\"regex,omitempty\"" + }{URLPattern: "", Regex: ""}, + }, + Timer: gocd.PipelineTimerConfig{ + Spec: "", + OnlyOnChanges: false, + }, + CreateOptions: gocd.PipelineCreateOptions{ + PausePipeline: false, + PauseReason: "", + }, + Config: map[string]interface{}(nil), + ETAG: "cbc5f2d5b9c13a2cc1b1efb3d8a6155d", } actual, err := client.GetPipelineConfig("new_pipeline") @@ -278,6 +410,7 @@ func Test_client_UpdatePipelineConfig(t *testing.T) { LabelTemplate: "${COUNT}", LockBehavior: "lockOnFailure", Name: "new_pipeline", + Template: "", Origin: gocd.PipelineOrigin{ Type: "config_repo", ID: "sample_config", @@ -290,31 +423,33 @@ func Test_client_UpdatePipelineConfig(t *testing.T) { Fingerprint: "", Attributes: gocd.Attribute{ URL: "git@github.com:sample_repo/example.git", + Username: "", + Password: "", + EncryptedPassword: "", Branch: "master", AutoUpdate: true, CheckExternals: false, UseTickets: false, + View: "", + Port: "", + ProjectPath: "", + Domain: "", + Ref: "", + Name: "", + Stage: "", + Pipeline: "", IgnoreForScheduling: false, Destination: "dest", InvertFilter: false, + SubmoduleFolder: "", ShallowClone: false, + Origin: map[string]string(nil), Filter: struct { Ignore []string "json:\"ignore,omitempty\" yaml:\"ignore,omitempty\"" }{Ignore: []string(nil)}, - }, - Config: gocd.MaterialConfig{ - Attributes: gocd.Attribute{ - AutoUpdate: false, - CheckExternals: false, - UseTickets: false, - IgnoreForScheduling: false, - InvertFilter: false, - ShallowClone: false, - Filter: struct { - Ignore []string "json:\"ignore,omitempty\" yaml:\"ignore,omitempty\"" - }{Ignore: []string(nil)}, - }, - }, + }, RepoURL: "", Config: gocd.MaterialConfig{Type: "", Fingerprint: "", Attributes: gocd.Attribute{URL: "", Username: "", Password: "", EncryptedPassword: "", Branch: "", AutoUpdate: false, CheckExternals: false, UseTickets: false, View: "", Port: "", ProjectPath: "", Domain: "", Ref: "", Name: "", Stage: "", Pipeline: "", IgnoreForScheduling: false, Destination: "", InvertFilter: false, SubmoduleFolder: "", ShallowClone: false, Origin: map[string]string(nil), Filter: struct { + Ignore []string "json:\"ignore,omitempty\" yaml:\"ignore,omitempty\"" + }{Ignore: []string(nil)}}}, CanTriggerUpdate: false, MaterialUpdateInProgress: false, Messages: []map[string]string(nil), @@ -330,11 +465,58 @@ func Test_client_UpdatePipelineConfig(t *testing.T) { Type: "success", AllowOnlyOnSuccess: false, Authorization: gocd.AuthorizationConfig{ - Roles: []string{}, Users: []string{}, + Roles: []string{}, + Users: []string{}, }, }, EnvironmentVariables: []gocd.PipelineEnvironmentVariables{}, - Job: []gocd.PipelineJobConfig(nil), + Jobs: []gocd.PipelineJobConfig{ + { + Name: "defaultJob", + RunInstanceCount: interface{}(nil), + ElasticProfileID: "", + Timeout: 0, + EnvironmentVariables: []gocd.PipelineEnvironmentVariables{}, + Resources: []string{}, + Tasks: []gocd.PipelineTaskConfig{{ + Type: "exec", + Attributes: gocd.TaskAttributeConfig{ + IsSourceAFile: false, + ArtifactID: "", + ArtifactOrigin: "", + Command: "ls", + WorkingDirectory: "", + Pipeline: "", + Stage: "", + Job: "", + Source: "", + Destination: "", + Configuration: []gocd.PluginConfiguration(nil), + RunIf: []string{"passed"}, + Arguments: []string(nil), + PluginConfiguration: struct { + ID string "json:\"id,omitempty\" yaml:\"id,omitempty\"" + Version string "json:\"version,omitempty\" yaml:\"version,omitempty\"" + }{ID: "", Version: ""}, + OnCancel: struct { + RunIf []string "json:\"run_if,omitempty\" yaml:\"run_if,omitempty\"" + Command string "json:\"command,omitempty\" yaml:\"command,omitempty\"" + Arguments []string "json:\"arguments,omitempty\" yaml:\"arguments,omitempty\"" + WorkingDirectory string "json:\"working_directory,omitempty\" yaml:\"working_directory,omitempty\"" + }{RunIf: []string(nil), Command: "", Arguments: []string(nil), WorkingDirectory: ""}, + }, + }}, + Tabs: []gocd.PipelineTab{}, + Artifacts: []gocd.PipelineArtifact{{ + Type: "external", + Source: "", + Destination: "", + ArtifactID: "", + StoreID: "dockerhub", + Configuration: []map[string]string{{"key": "Image", "value": "gocd/gocd-server"}, {"key": "Tag", "value": "v${GO_PIPELINE_LABEL}"}}, + }}, + }, + }, }, { Name: "s2", @@ -350,13 +532,68 @@ func Test_client_UpdatePipelineConfig(t *testing.T) { }, }, EnvironmentVariables: []gocd.PipelineEnvironmentVariables{}, - Job: []gocd.PipelineJobConfig(nil), + Jobs: []gocd.PipelineJobConfig{ + { + Name: "j2", + RunInstanceCount: interface{}(nil), + ElasticProfileID: "", + Timeout: 0, + EnvironmentVariables: []gocd.PipelineEnvironmentVariables{}, + Resources: []string{}, + Tasks: []gocd.PipelineTaskConfig{ + { + Type: "fetch", + Attributes: gocd.TaskAttributeConfig{ + IsSourceAFile: false, + ArtifactID: "docker-image", + ArtifactOrigin: "external", + Command: "", + WorkingDirectory: "", + Pipeline: "", + Stage: "defaultStage", + Job: "defaultJob", + Source: "", + Destination: "", + Configuration: []gocd.PluginConfiguration(nil), + RunIf: []string{}, + Arguments: []string(nil), + PluginConfiguration: struct { + ID string "json:\"id,omitempty\" yaml:\"id,omitempty\"" + Version string "json:\"version,omitempty\" yaml:\"version,omitempty\"" + }{ + ID: "", + Version: "", + }, + OnCancel: struct { + RunIf []string "json:\"run_if,omitempty\" yaml:\"run_if,omitempty\"" + Command string "json:\"command,omitempty\" yaml:\"command,omitempty\"" + Arguments []string "json:\"arguments,omitempty\" yaml:\"arguments,omitempty\"" + WorkingDirectory string "json:\"working_directory,omitempty\" yaml:\"working_directory,omitempty\"" + }{ + RunIf: []string(nil), + Command: "", + Arguments: []string(nil), + WorkingDirectory: "", + }, + }, + }, + }, + Tabs: []gocd.PipelineTab{}, + Artifacts: []gocd.PipelineArtifact{}, + }, + }, }, }, - TrackingTool: gocd.PipelineTracingToolConfig{}, - Timer: gocd.PipelineTimerConfig{}, - CreateOptions: gocd.PipelineCreateOptions{}, - ETAG: "cbc5f2d5b9c13a2cc1b1efb3d8a6155d", + TrackingTool: gocd.PipelineTracingToolConfig{ + Type: "", + Attributes: struct { + URLPattern string "json:\"url_pattern,omitempty\" yaml:\"url_pattern,omitempty\"" + Regex string "json:\"regex,omitempty\" yaml:\"regex,omitempty\"" + }{URLPattern: "", Regex: ""}, + }, + Timer: gocd.PipelineTimerConfig{Spec: "", OnlyOnChanges: false}, + CreateOptions: gocd.PipelineCreateOptions{PausePipeline: false, PauseReason: ""}, + Config: map[string]interface{}(nil), ETAG: "cbc5f2d5b9c13a2cc1b1efb3d8a6155d", } input := gocd.PipelineConfig{ diff --git a/types.go b/types.go index 105364f..245c4a0 100644 --- a/types.go +++ b/types.go @@ -743,7 +743,7 @@ type PipelineStageConfig struct { NeverCleanupArtifacts bool `json:"never_cleanup_artifacts,omitempty" yaml:"never_cleanup_artifacts,omitempty"` Approval PipelineApprovalConfig `json:"approval,omitempty" yaml:"approval,omitempty"` EnvironmentVariables []PipelineEnvironmentVariables `json:"environment_variables,omitempty" yaml:"environment_variables,omitempty"` - Job []PipelineJobConfig `json:"job,omitempty" yaml:"job,omitempty"` + Jobs []PipelineJobConfig `json:"jobs,omitempty" yaml:"jobs,omitempty"` } // PipelineJobConfig holds information of pipeline job. @@ -781,10 +781,12 @@ type PipelineTab struct { // PipelineArtifact holds information on artifacts defined in pipeline. type PipelineArtifact struct { - Type string `json:"type,omitempty" yaml:"type,omitempty"` - ArtifactID string `json:"artifact_id,omitempty" yaml:"artifact_id,omitempty"` - StoreID string `json:"store_id,omitempty" yaml:"store_id,omitempty"` - Configuration []PluginConfiguration `json:"configuration,omitempty" yaml:"configuration,omitempty"` + Type string `json:"type,omitempty" yaml:"type,omitempty"` + Source string `json:"source,omitempty" yaml:"source,omitempty"` + Destination string `json:"destination,omitempty" yaml:"destination,omitempty"` + ArtifactID string `json:"id,omitempty" yaml:"id,omitempty"` + StoreID string `json:"store_id,omitempty" yaml:"store_id,omitempty"` + Configuration []map[string]string `json:"configuration,omitempty" yaml:"configuration,omitempty"` } // PipelineTaskConfig holds information of the tasks defined in jobs of GoCD pipeline.