spaceforge 1.2.0__tar.gz → 1.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. {spaceforge-1.2.0 → spaceforge-1.3.0}/.github/workflows/ci.yml +1 -1
  2. {spaceforge-1.2.0/spaceforge.egg-info → spaceforge-1.3.0}/PKG-INFO +3 -4
  3. spaceforge-1.3.0/plugins/aws_sam/README.md +43 -0
  4. spaceforge-1.3.0/plugins/aws_sam/plugin.py +142 -0
  5. spaceforge-1.3.0/plugins/aws_sam/plugin.yaml +238 -0
  6. spaceforge-1.3.0/plugins/aws_sam/requirements.txt +1 -0
  7. {spaceforge-1.2.0 → spaceforge-1.3.0}/plugins/checkov/plugin.py +2 -1
  8. {spaceforge-1.2.0 → spaceforge-1.3.0}/plugins/checkov/plugin.yaml +4 -2
  9. {spaceforge-1.2.0 → spaceforge-1.3.0}/plugins/infracost/plugin.py +2 -1
  10. {spaceforge-1.2.0 → spaceforge-1.3.0}/plugins/infracost/plugin.yaml +4 -2
  11. {spaceforge-1.2.0 → spaceforge-1.3.0}/plugins/opentofu-tracing/plugin.py +4 -4
  12. {spaceforge-1.2.0 → spaceforge-1.3.0}/plugins/opentofu-tracing/plugin.yaml +8 -8
  13. {spaceforge-1.2.0 → spaceforge-1.3.0}/plugins/sops/plugin.py +46 -9
  14. {spaceforge-1.2.0 → spaceforge-1.3.0}/plugins/sops/plugin.yaml +67 -11
  15. spaceforge-1.3.0/plugins/ssm_parameter_store/README.md +271 -0
  16. spaceforge-1.3.0/plugins/ssm_parameter_store/plugin.py +273 -0
  17. spaceforge-1.3.0/plugins/ssm_parameter_store/plugin.yaml +504 -0
  18. spaceforge-1.3.0/plugins/ssm_parameter_store/requirements.txt +1 -0
  19. {spaceforge-1.2.0 → spaceforge-1.3.0}/plugins/terrascan/plugin.py +2 -1
  20. {spaceforge-1.2.0 → spaceforge-1.3.0}/plugins/terrascan/plugin.yaml +4 -2
  21. {spaceforge-1.2.0 → spaceforge-1.3.0}/plugins/trivy/plugin.py +2 -1
  22. {spaceforge-1.2.0 → spaceforge-1.3.0}/plugins/trivy/plugin.yaml +4 -2
  23. {spaceforge-1.2.0 → spaceforge-1.3.0}/plugins/wiz/plugin.py +4 -3
  24. {spaceforge-1.2.0 → spaceforge-1.3.0}/plugins/wiz/plugin.yaml +8 -6
  25. {spaceforge-1.2.0 → spaceforge-1.3.0}/pyproject.toml +9 -7
  26. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge/_version_scm.py +3 -3
  27. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge/cls.py +2 -0
  28. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge/schema.json +16 -0
  29. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge/test_generator.py +6 -12
  30. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge/test_generator_core.py +2 -4
  31. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge/test_runner.py +22 -44
  32. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge/test_runner_cli.py +2 -4
  33. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge/test_runner_core.py +2 -4
  34. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge/test_runner_execution.py +6 -12
  35. {spaceforge-1.2.0 → spaceforge-1.3.0/spaceforge.egg-info}/PKG-INFO +3 -4
  36. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge.egg-info/SOURCES.txt +8 -0
  37. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge.egg-info/requires.txt +1 -1
  38. {spaceforge-1.2.0 → spaceforge-1.3.0}/.github/workflows/release.yml +0 -0
  39. {spaceforge-1.2.0 → spaceforge-1.3.0}/.gitignore +0 -0
  40. {spaceforge-1.2.0 → spaceforge-1.3.0}/CONTRIBUTING.md +0 -0
  41. {spaceforge-1.2.0 → spaceforge-1.3.0}/LICENSE +0 -0
  42. {spaceforge-1.2.0 → spaceforge-1.3.0}/MANIFEST.in +0 -0
  43. {spaceforge-1.2.0 → spaceforge-1.3.0}/README.md +0 -0
  44. {spaceforge-1.2.0 → spaceforge-1.3.0}/go.mod +0 -0
  45. {spaceforge-1.2.0 → spaceforge-1.3.0}/linting/__init__.py +0 -0
  46. {spaceforge-1.2.0 → spaceforge-1.3.0}/linting/spaceforge_checker.py +0 -0
  47. {spaceforge-1.2.0 → spaceforge-1.3.0}/plugins/checkov/README.md +0 -0
  48. {spaceforge-1.2.0 → spaceforge-1.3.0}/plugins/checkov/requirements.txt +0 -0
  49. {spaceforge-1.2.0 → spaceforge-1.3.0}/plugins/enviroment_manager/plugin.py +0 -0
  50. {spaceforge-1.2.0 → spaceforge-1.3.0}/plugins/enviroment_manager/plugin.yaml +0 -0
  51. {spaceforge-1.2.0 → spaceforge-1.3.0}/plugins/enviroment_manager/requirements.txt +0 -0
  52. {spaceforge-1.2.0 → spaceforge-1.3.0}/plugins/envsubst/plugin.py +0 -0
  53. {spaceforge-1.2.0 → spaceforge-1.3.0}/plugins/envsubst/plugin.yaml +0 -0
  54. {spaceforge-1.2.0 → spaceforge-1.3.0}/plugins/sops/requirements.txt +0 -0
  55. {spaceforge-1.2.0 → spaceforge-1.3.0}/plugins/terrascan/README.md +0 -0
  56. {spaceforge-1.2.0 → spaceforge-1.3.0}/plugins/trivy/README.md +0 -0
  57. {spaceforge-1.2.0 → spaceforge-1.3.0}/plugins/trufflehog/README.md +0 -0
  58. {spaceforge-1.2.0 → spaceforge-1.3.0}/plugins/trufflehog/plugin.py +0 -0
  59. {spaceforge-1.2.0 → spaceforge-1.3.0}/plugins/trufflehog/plugin.yaml +0 -0
  60. {spaceforge-1.2.0 → spaceforge-1.3.0}/regenerate_plugins.sh +0 -0
  61. {spaceforge-1.2.0 → spaceforge-1.3.0}/setup.cfg +0 -0
  62. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge/README.md +0 -0
  63. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge/__init__.py +0 -0
  64. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge/__main__.py +0 -0
  65. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge/_version.py +0 -0
  66. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge/conftest.py +0 -0
  67. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge/generator.py +0 -0
  68. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge/plugin.py +0 -0
  69. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge/runner.py +0 -0
  70. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge/templates/binary_install.sh.j2 +0 -0
  71. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge/templates/ensure_spaceforge_and_run.sh.j2 +0 -0
  72. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge/test_cls.py +0 -0
  73. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge/test_generator_binaries.py +0 -0
  74. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge/test_generator_hooks.py +0 -0
  75. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge/test_generator_parameters.py +0 -0
  76. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge/test_plugin.py +0 -0
  77. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge/test_plugin_file_operations.py +0 -0
  78. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge/test_plugin_hooks.py +0 -0
  79. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge/test_plugin_inheritance.py +0 -0
  80. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge.egg-info/dependency_links.txt +0 -0
  81. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge.egg-info/entry_points.txt +0 -0
  82. {spaceforge-1.2.0 → spaceforge-1.3.0}/spaceforge.egg-info/top_level.txt +0 -0
  83. {spaceforge-1.2.0 → spaceforge-1.3.0}/templates.go +0 -0
  84. {spaceforge-1.2.0 → spaceforge-1.3.0}/test.sh +0 -0
  85. {spaceforge-1.2.0 → spaceforge-1.3.0}/validate_plugins.py +0 -0
@@ -18,7 +18,7 @@ jobs:
18
18
  runs-on: ubuntu-latest
19
19
  strategy:
20
20
  matrix:
21
- python-version: ['3.10', '3.11']
21
+ python-version: ['3.10', '3.11', '3.12']
22
22
 
23
23
  steps:
24
24
  - uses: actions/checkout@v4
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: spaceforge
3
- Version: 1.2.0
3
+ Version: 1.3.0
4
4
  Summary: A Python framework for building Spacelift plugins
5
5
  Author-email: Spacelift <support@spacelift.io>
6
6
  Maintainer-email: Spacelift <support@spacelift.io>
@@ -14,13 +14,12 @@ Classifier: Development Status :: 3 - Alpha
14
14
  Classifier: Intended Audience :: Developers
15
15
  Classifier: Operating System :: OS Independent
16
16
  Classifier: Programming Language :: Python :: 3
17
- Classifier: Programming Language :: Python :: 3.9
18
17
  Classifier: Programming Language :: Python :: 3.10
19
18
  Classifier: Programming Language :: Python :: 3.11
20
19
  Classifier: Programming Language :: Python :: 3.12
21
20
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
22
21
  Classifier: Topic :: System :: Systems Administration
23
- Requires-Python: >=3.9
22
+ Requires-Python: >=3.10
24
23
  Description-Content-Type: text/markdown
25
24
  License-File: LICENSE
26
25
  Requires-Dist: PyYAML>=6.0
@@ -31,7 +30,7 @@ Requires-Dist: mergedeep>=1.3.4
31
30
  Provides-Extra: dev
32
31
  Requires-Dist: pytest>=6.0; extra == "dev"
33
32
  Requires-Dist: pytest-cov; extra == "dev"
34
- Requires-Dist: black; extra == "dev"
33
+ Requires-Dist: black>=26.1.0; extra == "dev"
35
34
  Requires-Dist: isort; extra == "dev"
36
35
  Requires-Dist: mypy; extra == "dev"
37
36
  Requires-Dist: pylint; extra == "dev"
@@ -0,0 +1,43 @@
1
+ # AWS SAM Plugin
2
+
3
+ Packages AWS SAM templates into CloudFormation templates for Spacelift's CloudFormation integration.
4
+
5
+ ## Overview
6
+
7
+ This plugin runs `sam package` before initialization to convert SAM templates to CloudFormation,
8
+ enabling you to deploy serverless applications through Spacelift's CloudFormation workflow.
9
+
10
+ ## Prerequisites
11
+
12
+ - A CloudFormation stack configured in Spacelift
13
+ - SAM template in your repository
14
+ - S3 bucket for template storage (configured via Spacelift CloudFormation settings)
15
+
16
+ ## Configuration
17
+
18
+ ### Parameters
19
+
20
+ | Parameter | Description | Default |
21
+ |-----------|-------------|---------|
22
+ | S3 Prefix | S3 prefix for SAM artifacts | `sam-artifacts` |
23
+ | Additional Arguments | Extra arguments for `sam package` | (empty) |
24
+
25
+ ### Required Environment Variables
26
+
27
+ These are automatically set by Spacelift's CloudFormation integration:
28
+
29
+ - `CF_METADATA_REGION`: AWS region
30
+ - `CF_METADATA_TEMPLATE_BUCKET`: S3 bucket for templates
31
+ - `CF_METADATA_ENTRY_TEMPLATE_FILE`: Output template path
32
+
33
+ ## Usage
34
+
35
+ 1. Create a CloudFormation stack in Spacelift pointing to your SAM template
36
+ 2. Install and attach this plugin to the stack
37
+ 3. The plugin automatically packages your SAM template before each run
38
+
39
+ ## References
40
+
41
+ - [Spacelift CloudFormation Getting Started](https://docs.spacelift.io/vendors/cloudformation/getting-started)
42
+ - [Spacelift CloudFormation Reference](https://docs.spacelift.io/vendors/cloudformation/reference)
43
+ - [AWS SAM CLI Documentation](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-package.html)
@@ -0,0 +1,142 @@
1
+ import os
2
+
3
+ from spaceforge import Context, Parameter, SpaceforgePlugin, Variable
4
+
5
+
6
+ class AwsSamPlugin(SpaceforgePlugin):
7
+ """
8
+ The AWS SAM plugin packages SAM templates into CloudFormation templates
9
+ for use with Spacelift's CloudFormation integration.
10
+
11
+ This plugin runs `sam package` before initialization to:
12
+ - Package the SAM application
13
+ - Upload artifacts to S3
14
+ - Generate a CloudFormation template for Spacelift to process
15
+
16
+ ## Usage
17
+
18
+ 1. Install the plugin in your Spacelift account
19
+ 2. Attach it to CloudFormation stacks using SAM templates
20
+ 3. Configure the required environment variables via Spacelift contexts
21
+ 4. The plugin runs automatically before init, generating the CF template
22
+
23
+ ## Required Environment Variables
24
+
25
+ These are typically set by Spacelift's CloudFormation integration:
26
+ - `CF_METADATA_REGION`: AWS region for packaging
27
+ - `CF_METADATA_TEMPLATE_BUCKET`: S3 bucket for template storage
28
+ - `CF_METADATA_ENTRY_TEMPLATE_FILE`: Output template file path
29
+
30
+ ## Configuration
31
+
32
+ - **S3 Prefix**: Prefix for SAM artifacts in S3 (default: `sam-artifacts`)
33
+ - **Additional Arguments**: Extra arguments to pass to `sam package`
34
+ """
35
+
36
+ __plugin_name__ = "AWS SAM"
37
+ __author__ = "tetienne"
38
+ __version__ = "1.0.0"
39
+ __labels__ = ["cloudformation", "sam", "serverless"]
40
+
41
+ __parameters__ = [
42
+ Parameter(
43
+ name="S3 Prefix",
44
+ id="sam_s3_prefix",
45
+ description="S3 prefix for SAM artifacts",
46
+ default="sam-artifacts",
47
+ type="string",
48
+ required=False,
49
+ ),
50
+ Parameter(
51
+ name="Additional Arguments",
52
+ id="sam_additional_args",
53
+ description="Additional command-line arguments to pass to sam package",
54
+ default="",
55
+ type="string",
56
+ required=False,
57
+ ),
58
+ ]
59
+
60
+ __contexts__ = [
61
+ Context(
62
+ name_prefix="aws_sam",
63
+ description="AWS SAM Plugin",
64
+ env=[
65
+ Variable(
66
+ key="SAM_S3_PREFIX",
67
+ value_from_parameter="sam_s3_prefix",
68
+ ),
69
+ Variable(
70
+ key="SAM_ADDITIONAL_ARGS",
71
+ value_from_parameter="sam_additional_args",
72
+ ),
73
+ ],
74
+ )
75
+ ]
76
+
77
+ def before_init(self):
78
+ """
79
+ Execute sam package before Spacelift initialization.
80
+
81
+ This generates the CloudFormation template from the SAM template,
82
+ uploading artifacts to S3 and outputting the packaged template
83
+ for Spacelift's CloudFormation flow.
84
+ """
85
+ try:
86
+ # Get required environment variables
87
+ region = os.environ.get("CF_METADATA_REGION")
88
+ template_bucket = os.environ.get("CF_METADATA_TEMPLATE_BUCKET")
89
+ output_template = os.environ.get("CF_METADATA_ENTRY_TEMPLATE_FILE")
90
+
91
+ if not region:
92
+ self.logger.error("CF_METADATA_REGION environment variable is required")
93
+ exit(1)
94
+ if not template_bucket:
95
+ self.logger.error(
96
+ "CF_METADATA_TEMPLATE_BUCKET environment variable is required"
97
+ )
98
+ exit(1)
99
+ if not output_template:
100
+ self.logger.error(
101
+ "CF_METADATA_ENTRY_TEMPLATE_FILE environment variable is required"
102
+ )
103
+ exit(1)
104
+
105
+ # Get optional configuration
106
+ s3_prefix = os.environ.get("SAM_S3_PREFIX", "sam-artifacts")
107
+ additional_args = os.environ.get("SAM_ADDITIONAL_ARGS", "").strip()
108
+
109
+ # Build sam package command
110
+ args = [
111
+ "package",
112
+ "--region",
113
+ region,
114
+ "--s3-bucket",
115
+ template_bucket,
116
+ "--s3-prefix",
117
+ s3_prefix,
118
+ "--output-template-file",
119
+ output_template,
120
+ ]
121
+
122
+ # Add additional arguments if provided
123
+ if additional_args:
124
+ args.extend(additional_args.split())
125
+
126
+ # Execute sam package
127
+ self.logger.info(f"Running: sam {' '.join(args)}")
128
+ return_code, stdout, stderr = self.run_cli("sam", *args)
129
+
130
+ if return_code != 0:
131
+ self.logger.error(f"sam package failed with exit code {return_code}")
132
+ if stderr:
133
+ self.logger.error("Error output: " + "\n".join(stderr))
134
+ exit(1)
135
+
136
+ self.logger.info(
137
+ f"Successfully generated CloudFormation template: {output_template}"
138
+ )
139
+
140
+ except Exception as e:
141
+ self.logger.error(f"Plugin failed: {e}")
142
+ exit(1)
@@ -0,0 +1,238 @@
1
+ name: AWS SAM
2
+ version: 1.0.0
3
+ description: |-
4
+ The AWS SAM plugin packages SAM templates into CloudFormation templates
5
+ for use with Spacelift's CloudFormation integration.
6
+
7
+ This plugin runs `sam package` before initialization to:
8
+ - Package the SAM application
9
+ - Upload artifacts to S3
10
+ - Generate a CloudFormation template for Spacelift to process
11
+
12
+ ## Usage
13
+
14
+ 1. Install the plugin in your Spacelift account
15
+ 2. Attach it to CloudFormation stacks using SAM templates
16
+ 3. Configure the required environment variables via Spacelift contexts
17
+ 4. The plugin runs automatically before init, generating the CF template
18
+
19
+ ## Required Environment Variables
20
+
21
+ These are typically set by Spacelift's CloudFormation integration:
22
+ - `CF_METADATA_REGION`: AWS region for packaging
23
+ - `CF_METADATA_TEMPLATE_BUCKET`: S3 bucket for template storage
24
+ - `CF_METADATA_ENTRY_TEMPLATE_FILE`: Output template file path
25
+
26
+ ## Configuration
27
+
28
+ - **S3 Prefix**: Prefix for SAM artifacts in S3 (default: `sam-artifacts`)
29
+ - **Additional Arguments**: Extra arguments to pass to `sam package`
30
+ author: tetienne
31
+ labels:
32
+ - cloudformation
33
+ - sam
34
+ - serverless
35
+ parameters:
36
+ - name: S3 Prefix
37
+ description: S3 prefix for SAM artifacts
38
+ type: string
39
+ sensitive: false
40
+ required: false
41
+ default: sam-artifacts
42
+ id: sam_s3_prefix
43
+ - name: Additional Arguments
44
+ description: Additional command-line arguments to pass to sam package
45
+ type: string
46
+ sensitive: false
47
+ required: false
48
+ default: ''
49
+ id: sam_additional_args
50
+ contexts:
51
+ - name_prefix: aws_sam
52
+ description: AWS SAM Plugin
53
+ env:
54
+ - key: SAM_S3_PREFIX
55
+ value_from_parameter: sam_s3_prefix
56
+ sensitive: false
57
+ - key: SAM_ADDITIONAL_ARGS
58
+ value_from_parameter: sam_additional_args
59
+ sensitive: false
60
+ mounted_files:
61
+ - path: /mnt/workspace/plugins/aws_sam/requirements.txt
62
+ content: |-
63
+ aws-sam-cli==1.148.0
64
+ sensitive: false
65
+ - path: /mnt/workspace/plugins/aws_sam/plugin.py
66
+ content: |-
67
+ import os
68
+
69
+ from spaceforge import Context, Parameter, SpaceforgePlugin, Variable
70
+
71
+
72
+ class AwsSamPlugin(SpaceforgePlugin):
73
+ """
74
+ The AWS SAM plugin packages SAM templates into CloudFormation templates
75
+ for use with Spacelift's CloudFormation integration.
76
+
77
+ This plugin runs `sam package` before initialization to:
78
+ - Package the SAM application
79
+ - Upload artifacts to S3
80
+ - Generate a CloudFormation template for Spacelift to process
81
+
82
+ ## Usage
83
+
84
+ 1. Install the plugin in your Spacelift account
85
+ 2. Attach it to CloudFormation stacks using SAM templates
86
+ 3. Configure the required environment variables via Spacelift contexts
87
+ 4. The plugin runs automatically before init, generating the CF template
88
+
89
+ ## Required Environment Variables
90
+
91
+ These are typically set by Spacelift's CloudFormation integration:
92
+ - `CF_METADATA_REGION`: AWS region for packaging
93
+ - `CF_METADATA_TEMPLATE_BUCKET`: S3 bucket for template storage
94
+ - `CF_METADATA_ENTRY_TEMPLATE_FILE`: Output template file path
95
+
96
+ ## Configuration
97
+
98
+ - **S3 Prefix**: Prefix for SAM artifacts in S3 (default: `sam-artifacts`)
99
+ - **Additional Arguments**: Extra arguments to pass to `sam package`
100
+ """
101
+
102
+ __plugin_name__ = "AWS SAM"
103
+ __author__ = "tetienne"
104
+ __version__ = "1.0.0"
105
+ __labels__ = ["cloudformation", "sam", "serverless"]
106
+
107
+ __parameters__ = [
108
+ Parameter(
109
+ name="S3 Prefix",
110
+ id="sam_s3_prefix",
111
+ description="S3 prefix for SAM artifacts",
112
+ default="sam-artifacts",
113
+ type="string",
114
+ required=False,
115
+ ),
116
+ Parameter(
117
+ name="Additional Arguments",
118
+ id="sam_additional_args",
119
+ description="Additional command-line arguments to pass to sam package",
120
+ default="",
121
+ type="string",
122
+ required=False,
123
+ ),
124
+ ]
125
+
126
+ __contexts__ = [
127
+ Context(
128
+ name_prefix="aws_sam",
129
+ description="AWS SAM Plugin",
130
+ env=[
131
+ Variable(
132
+ key="SAM_S3_PREFIX",
133
+ value_from_parameter="sam_s3_prefix",
134
+ ),
135
+ Variable(
136
+ key="SAM_ADDITIONAL_ARGS",
137
+ value_from_parameter="sam_additional_args",
138
+ ),
139
+ ],
140
+ )
141
+ ]
142
+
143
+ def before_init(self):
144
+ """
145
+ Execute sam package before Spacelift initialization.
146
+
147
+ This generates the CloudFormation template from the SAM template,
148
+ uploading artifacts to S3 and outputting the packaged template
149
+ for Spacelift's CloudFormation flow.
150
+ """
151
+ try:
152
+ # Get required environment variables
153
+ region = os.environ.get("CF_METADATA_REGION")
154
+ template_bucket = os.environ.get("CF_METADATA_TEMPLATE_BUCKET")
155
+ output_template = os.environ.get("CF_METADATA_ENTRY_TEMPLATE_FILE")
156
+
157
+ if not region:
158
+ self.logger.error("CF_METADATA_REGION environment variable is required")
159
+ exit(1)
160
+ if not template_bucket:
161
+ self.logger.error(
162
+ "CF_METADATA_TEMPLATE_BUCKET environment variable is required"
163
+ )
164
+ exit(1)
165
+ if not output_template:
166
+ self.logger.error(
167
+ "CF_METADATA_ENTRY_TEMPLATE_FILE environment variable is required"
168
+ )
169
+ exit(1)
170
+
171
+ # Get optional configuration
172
+ s3_prefix = os.environ.get("SAM_S3_PREFIX", "sam-artifacts")
173
+ additional_args = os.environ.get("SAM_ADDITIONAL_ARGS", "").strip()
174
+
175
+ # Build sam package command
176
+ args = [
177
+ "package",
178
+ "--region",
179
+ region,
180
+ "--s3-bucket",
181
+ template_bucket,
182
+ "--s3-prefix",
183
+ s3_prefix,
184
+ "--output-template-file",
185
+ output_template,
186
+ ]
187
+
188
+ # Add additional arguments if provided
189
+ if additional_args:
190
+ args.extend(additional_args.split())
191
+
192
+ # Execute sam package
193
+ self.logger.info(f"Running: sam {' '.join(args)}")
194
+ return_code, stdout, stderr = self.run_cli("sam", *args)
195
+
196
+ if return_code != 0:
197
+ self.logger.error(f"sam package failed with exit code {return_code}")
198
+ if stderr:
199
+ self.logger.error("Error output: " + "\n".join(stderr))
200
+ exit(1)
201
+
202
+ self.logger.info(
203
+ f"Successfully generated CloudFormation template: {output_template}"
204
+ )
205
+
206
+ except Exception as e:
207
+ self.logger.error(f"Plugin failed: {e}")
208
+ exit(1)
209
+ sensitive: false
210
+ - path: /mnt/workspace/plugins/aws_sam/before_init.sh
211
+ content: |-
212
+ #!/bin/sh
213
+
214
+ set -e
215
+
216
+ cd /mnt/workspace/plugins/aws_sam
217
+
218
+ if [ ! -d "./venv" ]; then
219
+ python -m venv --system-site-packages ./venv
220
+ fi
221
+ . venv/bin/activate
222
+
223
+ if ! command -v spaceforge; then
224
+ pip install spaceforge
225
+ fi
226
+
227
+ if [ -f requirements.txt ] && [ ! -f .spaceforge_installed_requirements ]; then
228
+ pip install -r requirements.txt
229
+ touch .spaceforge_installed_requirements
230
+ fi
231
+
232
+ cd /mnt/workspace/source/$TF_VAR_spacelift_project_root
233
+ python -m spaceforge run --plugin-file /mnt/workspace/plugins/aws_sam/plugin.py before_init
234
+ sensitive: false
235
+ hooks:
236
+ before_init:
237
+ - mkdir -p /mnt/workspace/plugins/aws_sam
238
+ - chmod +x /mnt/workspace/plugins/aws_sam/before_init.sh && /mnt/workspace/plugins/aws_sam/before_init.sh
@@ -0,0 +1 @@
1
+ aws-sam-cli==1.148.0
@@ -77,7 +77,7 @@ class CheckovPlugin(SpaceforgePlugin):
77
77
 
78
78
  __plugin_name__ = "Checkov"
79
79
  __author__ = "Spacelift"
80
- __version__ = "1.0.3"
80
+ __version__ = "1.0.4"
81
81
  __labels__ = ["security", "terraform"]
82
82
 
83
83
  __parameters__ = [
@@ -109,6 +109,7 @@ class CheckovPlugin(SpaceforgePlugin):
109
109
  name_prefix="checkov",
110
110
  type="PLAN",
111
111
  labels=["checkov"],
112
+ engine_type="REGO_V0",
112
113
  body="""package spacelift
113
114
 
114
115
  import rego.v1
@@ -1,5 +1,5 @@
1
1
  name: Checkov
2
- version: 1.0.3
2
+ version: 1.0.4
3
3
  description: |-
4
4
  This plugin runs Checkov security scanning on Terraform/OpenTofu configurations
5
5
  during the after_plan hook and reports findings with detailed resource-level
@@ -173,7 +173,7 @@ contexts:
173
173
 
174
174
  __plugin_name__ = "Checkov"
175
175
  __author__ = "Spacelift"
176
- __version__ = "1.0.3"
176
+ __version__ = "1.0.4"
177
177
  __labels__ = ["security", "terraform"]
178
178
 
179
179
  __parameters__ = [
@@ -205,6 +205,7 @@ contexts:
205
205
  name_prefix="checkov",
206
206
  type="PLAN",
207
207
  labels=["checkov"],
208
+ engine_type="REGO_V0",
208
209
  body="""package spacelift
209
210
 
210
211
  import rego.v1
@@ -508,5 +509,6 @@ policies:
508
509
  checkov_data.summary.low == 0
509
510
  checkov_data.summary.total_failed > max_critical
510
511
  }
512
+ engine_type: REGO_V0
511
513
  labels:
512
514
  - checkov
@@ -9,7 +9,7 @@ class InfracostPlugin(SpaceforgePlugin):
9
9
  # Plugin metadata
10
10
  __plugin_name__ = "Infracost"
11
11
  __labels__ = ["cost estimation", "infrastructure"]
12
- __version__ = "1.0.2"
12
+ __version__ = "1.0.3"
13
13
  __author__ = "Spacelift Team"
14
14
 
15
15
  __parameters__ = [
@@ -46,6 +46,7 @@ class InfracostPlugin(SpaceforgePlugin):
46
46
  Policy(
47
47
  name_prefix="INFRACOST",
48
48
  type="PLAN",
49
+ engine_type="REGO_V0",
49
50
  body="""
50
51
  package spacelift
51
52
 
@@ -1,5 +1,5 @@
1
1
  name: Infracost
2
- version: 1.0.2
2
+ version: 1.0.3
3
3
  description: A plugin for integrating with Infracost to estimate costs of infrastructure changes.
4
4
  author: Spacelift Team
5
5
  labels:
@@ -33,7 +33,7 @@ contexts:
33
33
  # Plugin metadata
34
34
  __plugin_name__ = "Infracost"
35
35
  __labels__ = ["cost estimation", "infrastructure"]
36
- __version__ = "1.0.2"
36
+ __version__ = "1.0.3"
37
37
  __author__ = "Spacelift Team"
38
38
 
39
39
  __parameters__ = [
@@ -70,6 +70,7 @@ contexts:
70
70
  Policy(
71
71
  name_prefix="INFRACOST",
72
72
  type="PLAN",
73
+ engine_type="REGO_V0",
73
74
  body="""
74
75
  package spacelift
75
76
 
@@ -148,3 +149,4 @@ policies:
148
149
  # Learn more about sampling policy evaluations here:
149
150
  # https://docs.spacelift.io/concepts/policy#sampling-policy-inputs
150
151
  sample := true
152
+ engine_type: REGO_V0
@@ -67,7 +67,7 @@ class OpenTofuTracingPlugin(SpaceforgePlugin):
67
67
  description="Path where the markdown report will be generated",
68
68
  default="traces.md",
69
69
  type="string",
70
- required=True,
70
+ required=False,
71
71
  sensitive=False,
72
72
  ),
73
73
  Parameter(
@@ -76,7 +76,7 @@ class OpenTofuTracingPlugin(SpaceforgePlugin):
76
76
  description="Maximum number of trace batches to store",
77
77
  default=10000,
78
78
  type="number",
79
- required=True,
79
+ required=False,
80
80
  sensitive=False,
81
81
  ),
82
82
  Parameter(
@@ -85,7 +85,7 @@ class OpenTofuTracingPlugin(SpaceforgePlugin):
85
85
  description="Memory limit in MB",
86
86
  default=500,
87
87
  type="number",
88
- required=True,
88
+ required=False,
89
89
  sensitive=False,
90
90
  ),
91
91
  Parameter(
@@ -94,7 +94,7 @@ class OpenTofuTracingPlugin(SpaceforgePlugin):
94
94
  description="Enable summary mode for large traces (set to 'true' to enable)",
95
95
  default=False,
96
96
  type="boolean",
97
- required=True,
97
+ required=False,
98
98
  sensitive=False,
99
99
  ),
100
100
  ]
@@ -44,28 +44,28 @@ parameters:
44
44
  description: Path where the markdown report will be generated
45
45
  type: string
46
46
  sensitive: false
47
- required: true
47
+ required: false
48
48
  default: traces.md
49
49
  id: output_file
50
50
  - name: Max Traces
51
51
  description: Maximum number of trace batches to store
52
52
  type: number
53
53
  sensitive: false
54
- required: true
54
+ required: false
55
55
  default: 10000
56
56
  id: max_traces
57
57
  - name: Max Memory MB
58
58
  description: Memory limit in MB
59
59
  type: number
60
60
  sensitive: false
61
- required: true
61
+ required: false
62
62
  default: 500
63
63
  id: max_memory_mb
64
64
  - name: Summary Mode
65
65
  description: Enable summary mode for large traces (set to 'true' to enable)
66
66
  type: boolean
67
67
  sensitive: false
68
- required: true
68
+ required: false
69
69
  default: false
70
70
  id: summary_mode
71
71
  contexts:
@@ -165,7 +165,7 @@ contexts:
165
165
  description="Path where the markdown report will be generated",
166
166
  default="traces.md",
167
167
  type="string",
168
- required=True,
168
+ required=False,
169
169
  sensitive=False,
170
170
  ),
171
171
  Parameter(
@@ -174,7 +174,7 @@ contexts:
174
174
  description="Maximum number of trace batches to store",
175
175
  default=10000,
176
176
  type="number",
177
- required=True,
177
+ required=False,
178
178
  sensitive=False,
179
179
  ),
180
180
  Parameter(
@@ -183,7 +183,7 @@ contexts:
183
183
  description="Memory limit in MB",
184
184
  default=500,
185
185
  type="number",
186
- required=True,
186
+ required=False,
187
187
  sensitive=False,
188
188
  ),
189
189
  Parameter(
@@ -192,7 +192,7 @@ contexts:
192
192
  description="Enable summary mode for large traces (set to 'true' to enable)",
193
193
  default=False,
194
194
  type="boolean",
195
- required=True,
195
+ required=False,
196
196
  sensitive=False,
197
197
  ),
198
198
  ]