diff --git a/server/events/markdown_renderer.go b/server/events/markdown_renderer.go index 18a38cc3c3..124bd74dc8 100644 --- a/server/events/markdown_renderer.go +++ b/server/events/markdown_renderer.go @@ -116,7 +116,7 @@ func (m *MarkdownRenderer) renderProjectResults(results []ProjectResult, common Failure: result.Failure, }) } else if result.PlanSuccess != nil { - result.PlanSuccess.TerraformOutput = m.fmtDiff(result.PlanSuccess.TerraformOutput) + result.PlanSuccess.TerraformOutput = m.fmtPlan(result.PlanSuccess.TerraformOutput) if m.shouldUseWrappedTmpl(vcsHost, result.PlanSuccess.TerraformOutput) { resultData.Rendered = m.renderTemplate(planSuccessWrappedTmpl, *result.PlanSuccess) } else { @@ -166,12 +166,21 @@ func (m *MarkdownRenderer) shouldUseWrappedTmpl(vcsHost models.VCSHostType, outp return strings.Count(output, "\n") > maxUnwrappedLines } -// fmtDiff uses regex's to remove any leading whitespace in front of the +// fmtPlan uses regex's to remove any leading whitespace in front of the // terraform output so that the diff syntax highlighting works. Example: // " - aws_security_group_rule.allow_all" => // "- aws_security_group_rule.allow_all" // We do it for +, ~ and -. -func (m *MarkdownRenderer) fmtDiff(tfOutput string) string { +// It also removes the "Refreshing..." preamble. +func (m *MarkdownRenderer) fmtPlan(tfOutput string) string { + // Plan output contains a lot of "Refreshing..." lines followed by a + // separator. We want to remove everything before that separator. + refreshSeparator := "------------------------------------------------------------------------\n" + sepIdx := strings.Index(tfOutput, refreshSeparator) + if sepIdx > -1 { + tfOutput = tfOutput[sepIdx+len(refreshSeparator):] + } + tfOutput = plusDiffRegex.ReplaceAllString(tfOutput, "+") tfOutput = tildeDiffRegex.ReplaceAllString(tfOutput, "~") return minusDiffRegex.ReplaceAllString(tfOutput, "-") diff --git a/server/events/markdown_renderer_test.go b/server/events/markdown_renderer_test.go index db98850a65..ddebe6edef 100644 --- a/server/events/markdown_renderer_test.go +++ b/server/events/markdown_renderer_test.go @@ -541,12 +541,6 @@ Terraform will perform the following actions:
Show Output $$$diff -Refreshing Terraform state in-memory prior to plan... -The refreshed state will be used to calculate this plan, but will not be -persisted to local or remote state storage. - - ------------------------------------------------------------------------- An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: diff --git a/server/events_controller_e2e_test.go b/server/events_controller_e2e_test.go index c5c899699c..d1b6500cd9 100644 --- a/server/events_controller_e2e_test.go +++ b/server/events_controller_e2e_test.go @@ -486,6 +486,12 @@ func assertCommentEquals(t *testing.T, expFile string, act string, repoDir strin idRegex := regexp.MustCompile(`Creation complete after [0-9]+s \(ID: [0-9]+\)`) act = idRegex.ReplaceAllString(act, "Creation complete after *s (ID: ******************)") + // Replace all null_resource.simple{n} with null_resource.simple because with + // multiple resources they might be created at different times and so the + // output is unordered. + resourceRegex := regexp.MustCompile(`null_resource\.simple\d:`) + act = resourceRegex.ReplaceAllString(act, "null_resource.simple:") + if string(exp) != act { // If in CI, we write the diff to the console. Otherwise we write the diff // to file so we can use our local diff viewer. diff --git a/server/testfixtures/test-repos/modules-yaml/exp-output-autoplan.txt b/server/testfixtures/test-repos/modules-yaml/exp-output-autoplan.txt index f49f7697b1..09151ceef4 100644 --- a/server/testfixtures/test-repos/modules-yaml/exp-output-autoplan.txt +++ b/server/testfixtures/test-repos/modules-yaml/exp-output-autoplan.txt @@ -3,15 +3,7 @@ Ran Plan for 2 projects: 1. workspace: `default` dir: `production` ### 1. workspace: `default` dir: `staging` -
Show Output - ```diff -Refreshing Terraform state in-memory prior to plan... -The refreshed state will be used to calculate this plan, but will not be -persisted to local or remote state storage. - - ------------------------------------------------------------------------- An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: @@ -30,19 +22,10 @@ Plan: 1 to add, 0 to change, 0 to destroy. * :put_litter_in_its_place: To **delete** this plan click [here](lock-url) * :repeat: To **plan** this project again, comment: * `atlantis plan -d staging` -
--- ### 2. workspace: `default` dir: `production` -
Show Output - ```diff -Refreshing Terraform state in-memory prior to plan... -The refreshed state will be used to calculate this plan, but will not be -persisted to local or remote state storage. - - ------------------------------------------------------------------------- An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: @@ -61,7 +44,6 @@ Plan: 1 to add, 0 to change, 0 to destroy. * :put_litter_in_its_place: To **delete** this plan click [here](lock-url) * :repeat: To **plan** this project again, comment: * `atlantis plan -d production` -
--- * :fast_forward: To **apply** all unapplied plans from this pull request, comment: diff --git a/server/testfixtures/test-repos/modules/exp-output-autoplan-only-staging.txt b/server/testfixtures/test-repos/modules/exp-output-autoplan-only-staging.txt index f9ea53e1a3..7b66ebe2a4 100644 --- a/server/testfixtures/test-repos/modules/exp-output-autoplan-only-staging.txt +++ b/server/testfixtures/test-repos/modules/exp-output-autoplan-only-staging.txt @@ -1,14 +1,6 @@ Ran Plan in dir: `staging` workspace: `default` -
Show Output - ```diff -Refreshing Terraform state in-memory prior to plan... -The refreshed state will be used to calculate this plan, but will not be -persisted to local or remote state storage. - - ------------------------------------------------------------------------- An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: @@ -27,7 +19,6 @@ Plan: 1 to add, 0 to change, 0 to destroy. * :put_litter_in_its_place: To **delete** this plan click [here](lock-url) * :repeat: To **plan** this project again, comment: * `atlantis plan -d staging` -
--- * :fast_forward: To **apply** all unapplied plans from this pull request, comment: diff --git a/server/testfixtures/test-repos/modules/exp-output-plan-production.txt b/server/testfixtures/test-repos/modules/exp-output-plan-production.txt index a8ec51fce7..af4c691fa1 100644 --- a/server/testfixtures/test-repos/modules/exp-output-plan-production.txt +++ b/server/testfixtures/test-repos/modules/exp-output-plan-production.txt @@ -1,14 +1,6 @@ Ran Plan in dir: `production` workspace: `default` -
Show Output - ```diff -Refreshing Terraform state in-memory prior to plan... -The refreshed state will be used to calculate this plan, but will not be -persisted to local or remote state storage. - - ------------------------------------------------------------------------- An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: @@ -27,7 +19,6 @@ Plan: 1 to add, 0 to change, 0 to destroy. * :put_litter_in_its_place: To **delete** this plan click [here](lock-url) * :repeat: To **plan** this project again, comment: * `atlantis plan -d production` -
--- * :fast_forward: To **apply** all unapplied plans from this pull request, comment: diff --git a/server/testfixtures/test-repos/modules/exp-output-plan-staging.txt b/server/testfixtures/test-repos/modules/exp-output-plan-staging.txt index f9ea53e1a3..7b66ebe2a4 100644 --- a/server/testfixtures/test-repos/modules/exp-output-plan-staging.txt +++ b/server/testfixtures/test-repos/modules/exp-output-plan-staging.txt @@ -1,14 +1,6 @@ Ran Plan in dir: `staging` workspace: `default` -
Show Output - ```diff -Refreshing Terraform state in-memory prior to plan... -The refreshed state will be used to calculate this plan, but will not be -persisted to local or remote state storage. - - ------------------------------------------------------------------------- An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: @@ -27,7 +19,6 @@ Plan: 1 to add, 0 to change, 0 to destroy. * :put_litter_in_its_place: To **delete** this plan click [here](lock-url) * :repeat: To **plan** this project again, comment: * `atlantis plan -d staging` -
--- * :fast_forward: To **apply** all unapplied plans from this pull request, comment: diff --git a/server/testfixtures/test-repos/simple-yaml/exp-output-autoplan.txt b/server/testfixtures/test-repos/simple-yaml/exp-output-autoplan.txt index 8aed4aa380..96ea52f956 100644 --- a/server/testfixtures/test-repos/simple-yaml/exp-output-autoplan.txt +++ b/server/testfixtures/test-repos/simple-yaml/exp-output-autoplan.txt @@ -3,15 +3,7 @@ Ran Plan for 2 projects: 1. workspace: `staging` dir: `.` ### 1. workspace: `default` dir: `.` -
Show Output - ```diff -Refreshing Terraform state in-memory prior to plan... -The refreshed state will be used to calculate this plan, but will not be -persisted to local or remote state storage. - - ------------------------------------------------------------------------- An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: @@ -30,19 +22,10 @@ Plan: 1 to add, 0 to change, 0 to destroy. * :put_litter_in_its_place: To **delete** this plan click [here](lock-url) * :repeat: To **plan** this project again, comment: * `atlantis plan -d .` -
--- ### 2. workspace: `staging` dir: `.` -
Show Output - ```diff -Refreshing Terraform state in-memory prior to plan... -The refreshed state will be used to calculate this plan, but will not be -persisted to local or remote state storage. - - ------------------------------------------------------------------------- An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: @@ -61,7 +44,6 @@ Plan: 1 to add, 0 to change, 0 to destroy. * :put_litter_in_its_place: To **delete** this plan click [here](lock-url) * :repeat: To **plan** this project again, comment: * `atlantis plan -w staging` -
--- * :fast_forward: To **apply** all unapplied plans from this pull request, comment: diff --git a/server/testfixtures/test-repos/simple/exp-output-apply-var-all.txt b/server/testfixtures/test-repos/simple/exp-output-apply-var-all.txt index 58cc65388f..2a32fa2caf 100644 --- a/server/testfixtures/test-repos/simple/exp-output-apply-var-all.txt +++ b/server/testfixtures/test-repos/simple/exp-output-apply-var-all.txt @@ -3,11 +3,17 @@ Ran Apply for 2 projects: 1. workspace: `new_workspace` dir: `.` ### 1. workspace: `default` dir: `.` +
Show Output + ```diff null_resource.simple: Creating... +null_resource.simple: Creating... +null_resource.simple: Creating... +null_resource.simple: Creation complete after *s (ID: ******************) +null_resource.simple: Creation complete after *s (ID: ******************) null_resource.simple: Creation complete after *s (ID: ******************) -Apply complete! Resources: 1 added, 0 changed, 0 destroyed. +Apply complete! Resources: 3 added, 0 changed, 0 destroyed. Outputs: @@ -15,14 +21,21 @@ var = default_workspace workspace = default ``` +
--- ### 2. workspace: `new_workspace` dir: `.` +
Show Output + ```diff null_resource.simple: Creating... +null_resource.simple: Creating... +null_resource.simple: Creating... +null_resource.simple: Creation complete after *s (ID: ******************) +null_resource.simple: Creation complete after *s (ID: ******************) null_resource.simple: Creation complete after *s (ID: ******************) -Apply complete! Resources: 1 added, 0 changed, 0 destroyed. +Apply complete! Resources: 3 added, 0 changed, 0 destroyed. Outputs: @@ -30,6 +43,7 @@ var = new_workspace workspace = new_workspace ``` +
--- diff --git a/server/testfixtures/test-repos/simple/exp-output-apply-var-default-workspace.txt b/server/testfixtures/test-repos/simple/exp-output-apply-var-default-workspace.txt index 3a5425ba73..71a83e0ff8 100644 --- a/server/testfixtures/test-repos/simple/exp-output-apply-var-default-workspace.txt +++ b/server/testfixtures/test-repos/simple/exp-output-apply-var-default-workspace.txt @@ -1,10 +1,16 @@ Ran Apply in dir: `.` workspace: `default` +
Show Output + ```diff null_resource.simple: Creating... +null_resource.simple: Creating... +null_resource.simple: Creating... +null_resource.simple: Creation complete after *s (ID: ******************) +null_resource.simple: Creation complete after *s (ID: ******************) null_resource.simple: Creation complete after *s (ID: ******************) -Apply complete! Resources: 1 added, 0 changed, 0 destroyed. +Apply complete! Resources: 3 added, 0 changed, 0 destroyed. Outputs: @@ -12,4 +18,5 @@ var = default_workspace workspace = default ``` +
diff --git a/server/testfixtures/test-repos/simple/exp-output-apply-var-new-workspace.txt b/server/testfixtures/test-repos/simple/exp-output-apply-var-new-workspace.txt index 09081bbfc6..17898412f8 100644 --- a/server/testfixtures/test-repos/simple/exp-output-apply-var-new-workspace.txt +++ b/server/testfixtures/test-repos/simple/exp-output-apply-var-new-workspace.txt @@ -1,10 +1,16 @@ Ran Apply in dir: `.` workspace: `new_workspace` +
Show Output + ```diff null_resource.simple: Creating... +null_resource.simple: Creating... +null_resource.simple: Creating... +null_resource.simple: Creation complete after *s (ID: ******************) +null_resource.simple: Creation complete after *s (ID: ******************) null_resource.simple: Creation complete after *s (ID: ******************) -Apply complete! Resources: 1 added, 0 changed, 0 destroyed. +Apply complete! Resources: 3 added, 0 changed, 0 destroyed. Outputs: @@ -12,4 +18,5 @@ var = new_workspace workspace = new_workspace ``` +
diff --git a/server/testfixtures/test-repos/simple/exp-output-apply-var.txt b/server/testfixtures/test-repos/simple/exp-output-apply-var.txt index b9671f90e5..3c0728e445 100644 --- a/server/testfixtures/test-repos/simple/exp-output-apply-var.txt +++ b/server/testfixtures/test-repos/simple/exp-output-apply-var.txt @@ -1,10 +1,16 @@ Ran Apply in dir: `.` workspace: `default` +
Show Output + ```diff null_resource.simple: Creating... +null_resource.simple: Creating... +null_resource.simple: Creating... +null_resource.simple: Creation complete after *s (ID: ******************) +null_resource.simple: Creation complete after *s (ID: ******************) null_resource.simple: Creation complete after *s (ID: ******************) -Apply complete! Resources: 1 added, 0 changed, 0 destroyed. +Apply complete! Resources: 3 added, 0 changed, 0 destroyed. Outputs: @@ -12,4 +18,5 @@ var = overridden workspace = default ``` +
diff --git a/server/testfixtures/test-repos/simple/exp-output-apply.txt b/server/testfixtures/test-repos/simple/exp-output-apply.txt index e8f9022b28..0bfebb4703 100644 --- a/server/testfixtures/test-repos/simple/exp-output-apply.txt +++ b/server/testfixtures/test-repos/simple/exp-output-apply.txt @@ -1,10 +1,16 @@ Ran Apply in dir: `.` workspace: `default` +
Show Output + ```diff null_resource.simple: Creating... +null_resource.simple: Creating... +null_resource.simple: Creating... +null_resource.simple: Creation complete after *s (ID: ******************) +null_resource.simple: Creation complete after *s (ID: ******************) null_resource.simple: Creation complete after *s (ID: ******************) -Apply complete! Resources: 1 added, 0 changed, 0 destroyed. +Apply complete! Resources: 3 added, 0 changed, 0 destroyed. Outputs: @@ -12,4 +18,5 @@ var = default workspace = default ``` +
diff --git a/server/testfixtures/test-repos/simple/exp-output-atlantis-plan-new-workspace.txt b/server/testfixtures/test-repos/simple/exp-output-atlantis-plan-new-workspace.txt index fe37e6a388..6392c9448d 100644 --- a/server/testfixtures/test-repos/simple/exp-output-atlantis-plan-new-workspace.txt +++ b/server/testfixtures/test-repos/simple/exp-output-atlantis-plan-new-workspace.txt @@ -3,12 +3,6 @@ Ran Plan in dir: `.` workspace: `new_workspace`
Show Output ```diff -Refreshing Terraform state in-memory prior to plan... -The refreshed state will be used to calculate this plan, but will not be -persisted to local or remote state storage. - - ------------------------------------------------------------------------- An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: @@ -18,7 +12,13 @@ Terraform will perform the following actions: + null_resource.simple id: -Plan: 1 to add, 0 to change, 0 to destroy. + ++ null_resource.simple2 + id: + ++ null_resource.simple3 + id: +Plan: 3 to add, 0 to change, 0 to destroy. ``` diff --git a/server/testfixtures/test-repos/simple/exp-output-atlantis-plan-var-overridden.txt b/server/testfixtures/test-repos/simple/exp-output-atlantis-plan-var-overridden.txt index 8832833756..f7be31abd6 100644 --- a/server/testfixtures/test-repos/simple/exp-output-atlantis-plan-var-overridden.txt +++ b/server/testfixtures/test-repos/simple/exp-output-atlantis-plan-var-overridden.txt @@ -3,12 +3,6 @@ Ran Plan in dir: `.` workspace: `default`
Show Output ```diff -Refreshing Terraform state in-memory prior to plan... -The refreshed state will be used to calculate this plan, but will not be -persisted to local or remote state storage. - - ------------------------------------------------------------------------- An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: @@ -18,7 +12,13 @@ Terraform will perform the following actions: + null_resource.simple id: -Plan: 1 to add, 0 to change, 0 to destroy. + ++ null_resource.simple2 + id: + ++ null_resource.simple3 + id: +Plan: 3 to add, 0 to change, 0 to destroy. ``` diff --git a/server/testfixtures/test-repos/simple/exp-output-atlantis-plan.txt b/server/testfixtures/test-repos/simple/exp-output-atlantis-plan.txt index 947b524ff5..b5f1d96d31 100644 --- a/server/testfixtures/test-repos/simple/exp-output-atlantis-plan.txt +++ b/server/testfixtures/test-repos/simple/exp-output-atlantis-plan.txt @@ -3,12 +3,6 @@ Ran Plan in dir: `.` workspace: `default`
Show Output ```diff -Refreshing Terraform state in-memory prior to plan... -The refreshed state will be used to calculate this plan, but will not be -persisted to local or remote state storage. - - ------------------------------------------------------------------------- An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: @@ -18,7 +12,13 @@ Terraform will perform the following actions: + null_resource.simple id: -Plan: 1 to add, 0 to change, 0 to destroy. + ++ null_resource.simple2 + id: + ++ null_resource.simple3 + id: +Plan: 3 to add, 0 to change, 0 to destroy. ``` diff --git a/server/testfixtures/test-repos/simple/exp-output-autoplan.txt b/server/testfixtures/test-repos/simple/exp-output-autoplan.txt index d770572485..ac179bd9ea 100644 --- a/server/testfixtures/test-repos/simple/exp-output-autoplan.txt +++ b/server/testfixtures/test-repos/simple/exp-output-autoplan.txt @@ -3,12 +3,6 @@ Ran Plan in dir: `.` workspace: `default`
Show Output ```diff -Refreshing Terraform state in-memory prior to plan... -The refreshed state will be used to calculate this plan, but will not be -persisted to local or remote state storage. - - ------------------------------------------------------------------------- An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: @@ -18,7 +12,13 @@ Terraform will perform the following actions: + null_resource.simple id: -Plan: 1 to add, 0 to change, 0 to destroy. + ++ null_resource.simple2 + id: + ++ null_resource.simple3 + id: +Plan: 3 to add, 0 to change, 0 to destroy. ``` diff --git a/server/testfixtures/test-repos/simple/main.tf b/server/testfixtures/test-repos/simple/main.tf index 588b3db4df..77056e2be5 100644 --- a/server/testfixtures/test-repos/simple/main.tf +++ b/server/testfixtures/test-repos/simple/main.tf @@ -2,6 +2,9 @@ resource "null_resource" "simple" { count = 1 } +resource "null_resource" "simple2" {} +resource "null_resource" "simple3" {} + variable "var" { default = "default" } @@ -12,4 +15,4 @@ output "var" { output "workspace" { value = "${terraform.workspace}" -} \ No newline at end of file +} diff --git a/server/testfixtures/test-repos/tfvars-yaml-no-autoplan/exp-output-plan-default.txt b/server/testfixtures/test-repos/tfvars-yaml-no-autoplan/exp-output-plan-default.txt index a84b94c2c0..42153cc17d 100644 --- a/server/testfixtures/test-repos/tfvars-yaml-no-autoplan/exp-output-plan-default.txt +++ b/server/testfixtures/test-repos/tfvars-yaml-no-autoplan/exp-output-plan-default.txt @@ -1,14 +1,6 @@ Ran Plan in dir: `.` workspace: `default` -
Show Output - ```diff -Refreshing Terraform state in-memory prior to plan... -The refreshed state will be used to calculate this plan, but will not be -persisted to local or remote state storage. - - ------------------------------------------------------------------------- An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: @@ -27,7 +19,6 @@ Plan: 1 to add, 0 to change, 0 to destroy. * :put_litter_in_its_place: To **delete** this plan click [here](lock-url) * :repeat: To **plan** this project again, comment: * `atlantis plan -p default` -
--- * :fast_forward: To **apply** all unapplied plans from this pull request, comment: diff --git a/server/testfixtures/test-repos/tfvars-yaml-no-autoplan/exp-output-plan-staging.txt b/server/testfixtures/test-repos/tfvars-yaml-no-autoplan/exp-output-plan-staging.txt index d1d191e9e2..7ec4dc94f5 100644 --- a/server/testfixtures/test-repos/tfvars-yaml-no-autoplan/exp-output-plan-staging.txt +++ b/server/testfixtures/test-repos/tfvars-yaml-no-autoplan/exp-output-plan-staging.txt @@ -1,14 +1,6 @@ Ran Plan in dir: `.` workspace: `default` -
Show Output - ```diff -Refreshing Terraform state in-memory prior to plan... -The refreshed state will be used to calculate this plan, but will not be -persisted to local or remote state storage. - - ------------------------------------------------------------------------- An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: @@ -27,7 +19,6 @@ Plan: 1 to add, 0 to change, 0 to destroy. * :put_litter_in_its_place: To **delete** this plan click [here](lock-url) * :repeat: To **plan** this project again, comment: * `atlantis plan -p staging` -
--- * :fast_forward: To **apply** all unapplied plans from this pull request, comment: diff --git a/server/testfixtures/test-repos/tfvars-yaml/exp-output-autoplan.txt b/server/testfixtures/test-repos/tfvars-yaml/exp-output-autoplan.txt index 00cc07c8e7..f8492d5ba4 100644 --- a/server/testfixtures/test-repos/tfvars-yaml/exp-output-autoplan.txt +++ b/server/testfixtures/test-repos/tfvars-yaml/exp-output-autoplan.txt @@ -3,15 +3,7 @@ Ran Plan for 2 projects: 1. workspace: `default` dir: `.` ### 1. workspace: `default` dir: `.` -
Show Output - ```diff -Refreshing Terraform state in-memory prior to plan... -The refreshed state will be used to calculate this plan, but will not be -persisted to local or remote state storage. - - ------------------------------------------------------------------------- An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: @@ -32,19 +24,10 @@ workspace=default * :put_litter_in_its_place: To **delete** this plan click [here](lock-url) * :repeat: To **plan** this project again, comment: * `atlantis plan -p default` -
--- ### 2. workspace: `default` dir: `.` -
Show Output - ```diff -Refreshing Terraform state in-memory prior to plan... -The refreshed state will be used to calculate this plan, but will not be -persisted to local or remote state storage. - - ------------------------------------------------------------------------- An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: @@ -63,7 +46,6 @@ Plan: 1 to add, 0 to change, 0 to destroy. * :put_litter_in_its_place: To **delete** this plan click [here](lock-url) * :repeat: To **plan** this project again, comment: * `atlantis plan -p staging` -
--- * :fast_forward: To **apply** all unapplied plans from this pull request, comment: