From 4f1972e4b55e66025beae0a60809564783fded1e Mon Sep 17 00:00:00 2001
From: Alex Maras <dev@alexmaras.com>
Date: Wed, 26 Mar 2025 09:21:01 +0800
Subject: [PATCH] feat: add plan artifacts input

---
 templates/full-pipeline.yml         | 6 ++++++
 templates/plan.yml                  | 5 +++++
 templates/validate-plan-apply.yml   | 6 ++++++
 templates/validate-plan-destroy.yml | 6 ++++++
 templates/validate-plan.yml         | 6 ++++++
 5 files changed, 29 insertions(+)

diff --git a/templates/full-pipeline.yml b/templates/full-pipeline.yml
index c618197..c536e99 100644
--- a/templates/full-pipeline.yml
+++ b/templates/full-pipeline.yml
@@ -96,6 +96,10 @@ spec:
     plan_artifacts_access:
       default: 'none'
       description: 'Access level for the plan artifact. See https://docs.gitlab.com/ee/ci/yaml/#artifactsaccess for possible values.'
+    plan_artifacts:
+      default: []
+      type: array
+      description: 'Extra artifacts to upload from the plan'
     var_file:
       default: ''
       type: string
@@ -310,6 +314,7 @@ include:
       state_name: $[[ inputs.state_name ]]
       plan_name: $[[ inputs.plan_name ]]
       artifacts_access: $[[ inputs.plan_artifacts_access ]]
+      artifacts: $[[ inputs.plan_artifacts ]]
       var_file: $[[ inputs.var_file ]]
       rules: $[[ inputs.plan_rules ]]
       warning_on_non_empty_plan: $[[ inputs.warning_on_non_empty_plan ]]
@@ -443,6 +448,7 @@ stages:
           state_name: $[[ inputs.state_name]]
           plan_name: $[[ inputs.plan_name ]]
           plan_artifacts_access: $[[ inputs.plan_artifacts_access ]]
+          plan_artifacts: $[[ inputs.plan_artifacts ]]
           var_file: $[[ inputs.var_file ]]
           fmt_allow_failure: $[[ inputs.fmt_allow_failure ]]
           fmt_rules: $[[ inputs.fmt_rules ]]
diff --git a/templates/plan.yml b/templates/plan.yml
index 096db74..60c7127 100644
--- a/templates/plan.yml
+++ b/templates/plan.yml
@@ -74,6 +74,10 @@ spec:
     artifacts_access:
       default: 'none'
       description: 'Access level for the plan artifact. See https://docs.gitlab.com/ee/ci/yaml/#artifactsaccess for possible values.'
+    artifacts:
+      default: []
+      type: array
+      description: 'Extra artifacts to upload from the plan'
     var_file:
       default: ''
       type: string
@@ -197,6 +201,7 @@ include:
     access: '$[[ inputs.artifacts_access ]]'
     paths:
       - $GITLAB_TOFU_ROOT_DIR/$[[ inputs.plan_name ]].cache
+      - '$[[ inputs.artifacts ]]'
     reports:
       terraform: $GITLAB_TOFU_ROOT_DIR/$[[ inputs.plan_name]].json
   rules: $[[ inputs.rules ]]
diff --git a/templates/validate-plan-apply.yml b/templates/validate-plan-apply.yml
index 2a358dc..891b199 100644
--- a/templates/validate-plan-apply.yml
+++ b/templates/validate-plan-apply.yml
@@ -83,6 +83,10 @@ spec:
     plan_artifacts_access:
       default: 'none'
       description: 'Access level for the plan artifact. See https://docs.gitlab.com/ee/ci/yaml/#artifactsaccess for possible values.'
+    plan_artifacts:
+      default: []
+      type: array
+      description: 'Extra artifacts to upload from the plan'
     var_file:
       default: ''
       type: string
@@ -248,6 +252,7 @@ include:
       state_name: $[[ inputs.state_name ]]
       plan_name: $[[ inputs.plan_name ]]
       artifacts_access: $[[ inputs.plan_artifacts_access ]]
+      artifacts: $[[ inputs.plan_artifacts ]]
       var_file: $[[ inputs.var_file ]]
       rules: $[[ inputs.plan_rules ]]
       cache_policy: pull
@@ -332,6 +337,7 @@ stages:
           state_name: $[[ inputs.state_name]]
           plan_name: $[[ inputs.plan_name ]]
           plan_artifacts_access: $[[ inputs.plan_artifacts_access ]]
+          plan_artifacts: $[[ inputs.plan_artifacts ]]
           var_file: $[[ inputs.var_file ]]
           fmt_rules: $[[ inputs.fmt_rules ]]
           fmt_allow_failure: $[[ inputs.fmt_allow_failure ]]
diff --git a/templates/validate-plan-destroy.yml b/templates/validate-plan-destroy.yml
index 78cd203..c8f6d57 100644
--- a/templates/validate-plan-destroy.yml
+++ b/templates/validate-plan-destroy.yml
@@ -76,6 +76,10 @@ spec:
     plan_artifacts_access:
       default: 'none'
       description: 'Access level for the plan artifact. See https://docs.gitlab.com/ee/ci/yaml/#artifactsaccess for possible values.'
+    plan_artifacts:
+      default: []
+      type: array
+      description: 'Extra artifacts to upload from the plan'
     # FIXME: at the moment we cannot support this input
     # because we cannot nest inputs: https://gitlab.com/gitlab-org/gitlab/-/issues/438722
     # If you want to auto destroy, please refer to the `rules` input.
@@ -254,6 +258,7 @@ include:
       state_name: $[[ inputs.state_name ]]
       plan_name: $[[ inputs.plan_name ]]
       artifacts_access: $[[ inputs.plan_artifacts_access ]]
+      artifacts: $[[ inputs.plan_artifacts ]]
       destroy: true
       var_file: $[[ inputs.var_file ]]
       rules: $[[ inputs.plan_rules ]]
@@ -364,6 +369,7 @@ stages:
           state_name: $[[ inputs.state_name]]
           plan_name: $[[ inputs.plan_name ]]
           plan_artifacts_access: $[[ inputs.plan_artifacts_access ]]
+          plan_artifacts: $[[ inputs.plan_artifacts ]]
           var_file: $[[ inputs.var_file ]]
           fmt_allow_failure: $[[ inputs.fmt_allow_failure ]]
           fmt_rules: $[[ inputs.fmt_rules ]]
diff --git a/templates/validate-plan.yml b/templates/validate-plan.yml
index 9f7061d..605f095 100644
--- a/templates/validate-plan.yml
+++ b/templates/validate-plan.yml
@@ -73,6 +73,10 @@ spec:
     artifacts_access:
       default: 'none'
       description: 'Access level for the plan artifact. See https://docs.gitlab.com/ee/ci/yaml/#artifactsaccess for possible values.'
+    plan_artifacts:
+      default: []
+      type: array
+      description: 'Extra artifacts to upload from the plan'
     var_file:
       default: ''
       type: string
@@ -232,6 +236,7 @@ include:
       state_name: $[[ inputs.state_name ]]
       plan_name: $[[ inputs.plan_name ]]
       artifacts_access: $[[ inputs.artifacts_access ]]
+      artifacts: $[[ inputs.plan_artifacts ]]
       var_file: $[[ inputs.var_file ]]
       rules: $[[ inputs.plan_rules ]]
       cache_policy: pull
@@ -289,6 +294,7 @@ stages:
           state_name: $[[ inputs.state_name]]
           plan_name: $[[ inputs.plan_name ]]
           artifacts_access: $[[ inputs.artifacts_access ]]
+          artifacts: $[[ inputs.plan_artifacts ]]
           var_file: $[[ inputs.var_file ]]
           fmt_allow_failure: $[[ inputs.fmt_allow_failure ]]
           fmt_rules: $[[ inputs.fmt_rules ]]
-- 
GitLab