From c228913908cad3d5657b03c451f67523e53eb2a2 Mon Sep 17 00:00:00 2001 From: "Nguyen, Tung" Date: Fri, 30 Jul 2021 17:58:16 +1000 Subject: [PATCH] Add trigger options Include pipeline caching behaviors and notification setting --- client/pipeline.go | 8 +++++ codefresh/resource_pipeline.go | 51 +++++++++++++++++++++++++++++ codefresh/resource_pipeline_test.go | 43 ++++++++++++++++++++---- docs/resources/pipeline.md | 10 ++++++ 4 files changed, 106 insertions(+), 6 deletions(-) diff --git a/client/pipeline.go b/client/pipeline.go index 57b1af72..f854d7a8 100644 --- a/client/pipeline.go +++ b/client/pipeline.go @@ -48,6 +48,7 @@ type Trigger struct { ModifiedFilesGlob string `json:"modifiedFilesGlob,omitempty"` Provider string `json:"provider,omitempty"` Disabled bool `json:"disabled,omitempty"` + Options *TriggerOptions `json:"options,omitempty"` PullRequestAllowForkEvents bool `json:"pullRequestAllowForkEvents,omitempty"` CommitStatusTitle string `json:"commitStatusTitle,omitempty"` Context string `json:"context,omitempty"` @@ -56,6 +57,13 @@ type Trigger struct { Variables []Variable `json:"variables,omitempty"` } +type TriggerOptions struct { + NoCache string `json:"noCache,omitempty"` + NoCfCache string `json:"noCfCache,omitempty"` + ResetVolume string `json:"resetVolume,omitempty"` + EnableNotifications string `json:"enableNotifications,omitempty"` +} + type RuntimeEnvironment struct { Name string `json:"name,omitempty"` Memory string `json:"memory,omitempty"` diff --git a/codefresh/resource_pipeline.go b/codefresh/resource_pipeline.go index 2c0c4c9a..677db0fe 100644 --- a/codefresh/resource_pipeline.go +++ b/codefresh/resource_pipeline.go @@ -183,6 +183,34 @@ func resourcePipeline() *schema.Resource { Optional: true, Default: false, }, + "options": { + Type: schema.TypeList, + Optional: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "no_cache": { + Type: schema.TypeBool, + Optional: true, + Default: false, + }, + "no_cf_cache": { + Type: schema.TypeBool, + Optional: true, + Default: false, + }, + "reset_volume": { + Type: schema.TypeBool, + Optional: true, + Default: false, + }, + "enable_notifications": { + Type: schema.TypeBool, + Optional: true, + Default: false, + }, + }, + }, + }, "pull_request_allow_fork_events": { Type: schema.TypeBool, Optional: true, @@ -541,6 +569,17 @@ func flattenSpecRuntimeEnvironment(spec cfClient.RuntimeEnvironment) []map[strin } } +func flattenTriggerOptions(options cfClient.TriggerOptions) []map[string]interface{} { + return []map[string]interface{}{ + { + "no_cache": options.NoCache, + "no_cf_cache": options.NoCfCache, + "reset_volume": options.ResetVolume, + "enable_notifications": options.EnableNotifications, + }, + } +} + func flattenTriggers(triggers []cfClient.Trigger) []map[string]interface{} { var res = make([]map[string]interface{}, len(triggers)) for i, trigger := range triggers { @@ -556,6 +595,9 @@ func flattenTriggers(triggers []cfClient.Trigger) []map[string]interface{} { m["comment_regex"] = trigger.CommentRegex m["modified_files_glob"] = trigger.ModifiedFilesGlob m["disabled"] = trigger.Disabled + if trigger.Options != nil { + m["options"] = flattenTriggerOptions(*trigger.Options) + } m["pull_request_allow_fork_events"] = trigger.PullRequestAllowForkEvents m["commit_status_title"] = trigger.CommitStatusTitle m["provider"] = trigger.Provider @@ -649,6 +691,15 @@ func mapResourceToPipeline(d *schema.ResourceData) *cfClient.Pipeline { } variables := d.Get(fmt.Sprintf("spec.0.trigger.%v.variables", idx)).(map[string]interface{}) codefreshTrigger.SetVariables(variables) + if _, ok := d.GetOk(fmt.Sprintf("spec.0.trigger.%v.options", idx)); ok { + options := cfClient.TriggerOptions{ + NoCache: d.Get(fmt.Sprintf("spec.0.trigger.%v.options.0.no_cache", idx)).(string), + NoCfCache: d.Get(fmt.Sprintf("spec.0.trigger.%v.options.0.no_cf_cache", idx)).(string), + ResetVolume: d.Get(fmt.Sprintf("spec.0.trigger.%v.options.0.reset_volume", idx)).(string), + EnableNotifications: d.Get(fmt.Sprintf("spec.0.trigger.%v.options.0.enable_notifications", idx)).(string), + } + codefreshTrigger.Options = &options + } if _, ok := d.GetOk(fmt.Sprintf("spec.0.trigger.%v.runtime_environment", idx)); ok { triggerRuntime := cfClient.RuntimeEnvironment{ Name: d.Get(fmt.Sprintf("spec.0.trigger.%v.runtime_environment.0.name", idx)).(string), diff --git a/codefresh/resource_pipeline_test.go b/codefresh/resource_pipeline_test.go index 07ea6750..7cb9423b 100644 --- a/codefresh/resource_pipeline_test.go +++ b/codefresh/resource_pipeline_test.go @@ -268,6 +268,10 @@ func TestAccCodefreshPipeline_Triggers(t *testing.T) { "tags", "git", "shared_context2", + true, + true, + true, + true, "push.tags", "codefresh-contrib/react-sample-app", "triggerTestVar", @@ -284,6 +288,10 @@ func TestAccCodefreshPipeline_Triggers(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "spec.0.trigger.0.name", "commits"), resource.TestCheckResourceAttr(resourceName, "spec.0.trigger.1.name", "tags"), resource.TestCheckResourceAttr(resourceName, "spec.0.trigger.1.contexts.0", "shared_context2"), + resource.TestCheckResourceAttr(resourceName, "spec.0.trigger.1.options.0.no_cache", "true"), + resource.TestCheckResourceAttr(resourceName, "spec.0.trigger.1.options.0.no_cf_cache", "true"), + resource.TestCheckResourceAttr(resourceName, "spec.0.trigger.1.options.0.reset_volume", "true"), + resource.TestCheckResourceAttr(resourceName, "spec.0.trigger.1.options.0.enable_notifications", "true"), ), }, { @@ -310,6 +318,10 @@ func TestAccCodefreshPipeline_Triggers(t *testing.T) { "tags", "git", "shared_context2_update", + true, + true, + false, + false, "push.tags", "codefresh-contrib/react-sample-app", "triggerTestVar", @@ -324,6 +336,10 @@ func TestAccCodefreshPipeline_Triggers(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "spec.0.trigger.0.comment_regex", "/PR comment2/gi"), resource.TestCheckResourceAttr(resourceName, "spec.0.trigger.1.variables.triggerTestVar", "triggerTestValue"), resource.TestCheckResourceAttr(resourceName, "spec.0.trigger.1.contexts.0", "shared_context2_update"), + resource.TestCheckResourceAttr(resourceName, "spec.0.trigger.1.options.0.no_cache", "true"), + resource.TestCheckResourceAttr(resourceName, "spec.0.trigger.1.options.0.no_cf_cache", "true"), + resource.TestCheckResourceAttr(resourceName, "spec.0.trigger.1.options.0.reset_volume", "false"), + resource.TestCheckResourceAttr(resourceName, "spec.0.trigger.1.options.0.enable_notifications", "false"), ), }, }, @@ -703,12 +719,17 @@ func testAccCodefreshPipelineBasicConfigTriggers( trigger1Repo, trigger2Name, trigger2Context, - trigger2Contexts, + trigger2Contexts string, + trigger2NoCache, + trigger2NoCfCache, + trigger2ResetVolume, + trigger2EnableNotifications bool, trigger2Event, trigger2Repo, trigger2VarName, trigger2VarValue, - trigger2CommitStatusTitle string) string { + trigger2CommitStatusTitle string, +) string { return fmt.Sprintf(` resource "codefresh_pipeline" "test" { @@ -753,12 +774,18 @@ resource "codefresh_pipeline" "test" { trigger { name = %q branch_regex = "/.*/gi" - context = %q - contexts = [ - %q - ] + context = %q + contexts = [ + %q + ] description = "" disabled = false + options = { + no_cache = %t + no_cf_cache = %t + reset_volume = %t + enable_notifications = %t + } events = [ %q ] @@ -794,6 +821,10 @@ resource "codefresh_pipeline" "test" { trigger2Name, trigger2Context, trigger2Contexts, + trigger2NoCache, + trigger2NoCfCache, + trigger2ResetVolume, + trigger2EnableNotifications, trigger2Event, trigger2Repo, trigger2VarName, diff --git a/docs/resources/pipeline.md b/docs/resources/pipeline.md index aaa0101c..5c088cc8 100644 --- a/docs/resources/pipeline.md +++ b/docs/resources/pipeline.md @@ -142,6 +142,7 @@ resource "codefresh_pipeline" "test" { - `pull_request_allow_fork_events` - (Optional) Boolean. If this trigger is also applicable to Git forks. - `contexts` - (Optional) A list of strings representing the contexts ([shared_configuration](https://codefresh.io/docs/docs/configure-ci-cd-pipeline/shared-configuration/)) to be loaded when the trigger is executed - `runtime_environment` - (Optional) A collection of `runtime_environment` blocks as documented below. +- `options`: (Optional) A collection `option` blocks as documented below. --- `runtime_environment` supports the following: @@ -153,6 +154,15 @@ resource "codefresh_pipeline" "test" { --- +`options` supports the following: + +- `no_cache` - (Required) Boolean. If true, docker layer cache is disabled. Default false +- `no_cf_cache` - (Optional) Boolean. If true, extra Codefresh caching is disabled. Default false +- `reset_volume` - (Optional) Boolean. If true, all files on volume will be deleted before each execution. Default false +- `enable_notifications` - (Optional) Boolean. If false the pipeline will not send notifications to Slack and status updates back to the Git provider. Default false + +--- + `termination_policy` supports the following: - `on_create_branch` - (Optional) A `on_create_branch` block as documented below.