@payfit/iac 1.1.6-ephemeral-release-rerun.4 → 1.1.6

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.
package/README.md CHANGED
@@ -8,6 +8,44 @@ Nx plugin for infrastructure as code operations.
8
8
  npx nx add @payfit/iac
9
9
  ```
10
10
 
11
+ ## Features
12
+
13
+ ### OpenTofu/Terraform Module Management
14
+
15
+ The plugin provides automatic formatting and linting for OpenTofu/Terraform modules:
16
+
17
+ - Running `tofu fmt` to format code
18
+ - Running `tflint` for linting
19
+ - Running `tofu validate` for validation
20
+ - Automatic version management for modules
21
+
22
+ #### OpenTofu/Terraform Detection
23
+
24
+ The plugin automatically detects OpenTofu/Terraform modules by looking for both:
25
+
26
+ - A `.spacelift/config.yml` file
27
+ - A `main.tf` file in your project root
28
+
29
+ When these files are present, the plugin will automatically configure the following targets:
30
+
31
+ - `tofu-format`: Format OpenTofu code (with `check` and `write` configurations)
32
+ - `lint`: Lint and validate OpenTofu code using tflint and tofu validate
33
+ - `nx-release-publish`: Configured as noop (Spacelift handles deployment from Git tags)
34
+ - `build`: Configured as noop (Spacelift handles building artifacts)
35
+
36
+ #### Usage
37
+
38
+ ```bash
39
+ # Format terraform code (check mode)
40
+ nx run <terraform-project>:tofu-format
41
+
42
+ # Format terraform code (write mode)
43
+ nx run <terraform-project>:tofu-format:write
44
+
45
+ # Lint terraform code
46
+ nx run <terraform-project>:lint
47
+ ```
48
+
11
49
  ## Executors
12
50
 
13
51
  ### Stack Migration
package/dist/index.d.ts CHANGED
@@ -4,6 +4,7 @@ export declare function createNodesInternal(configFilePath: string, _options: un
4
4
  projects: {
5
5
  [x: string]: {
6
6
  targets: {};
7
+ release: any;
7
8
  };
8
9
  };
9
10
  }>;
package/dist/index.js CHANGED
@@ -4,6 +4,7 @@ exports.createNodesV2 = void 0;
4
4
  exports.createNodesInternal = createNodesInternal;
5
5
  const path_1 = require("path");
6
6
  const devkit_1 = require("@nx/devkit");
7
+ const terraform_detection_1 = require("./utils/terraform-detection");
7
8
  exports.createNodesV2 = [
8
9
  '**/project.json',
9
10
  async (configFiles, options, context) => {
@@ -14,7 +15,83 @@ async function createNodesInternal(configFilePath, _options, _context) {
14
15
  const projectConfiguration = (0, devkit_1.readJsonFile)(configFilePath);
15
16
  const projectRoot = (0, path_1.dirname)(configFilePath);
16
17
  const targets = {};
18
+ let release = null;
17
19
  const isRootProject = projectRoot === '.';
20
+ const isTfModule = (0, terraform_detection_1.isTerraformModule)(projectRoot, projectConfiguration);
21
+ // Get tflintConfigFile from metadata or use default
22
+ const tflintConfigFile = (0, path_1.join)((0, devkit_1.offsetFromRoot)(projectRoot), '.tflint.hcl');
23
+ // Infer terraform module tasks
24
+ if (isTfModule) {
25
+ targets['build'] = {
26
+ executor: 'nx:run-commands',
27
+ outputs: ['{workspaceRoot}/dist/{projectRoot}'],
28
+ options: {
29
+ command: "mkdir -p dist/{projectRoot} && cp -r {projectRoot}/* dist/{projectRoot} && echo 'Build completed for {projectRoot}'",
30
+ },
31
+ };
32
+ targets['tofu-format'] = {
33
+ executor: 'nx:run-commands',
34
+ cache: false,
35
+ inputs: ['production', '^production'],
36
+ outputs: [],
37
+ options: {
38
+ cwd: '{projectRoot}',
39
+ command: 'tofu fmt -recursive',
40
+ },
41
+ configurations: {
42
+ check: {
43
+ args: '-check',
44
+ },
45
+ write: {
46
+ args: '-write',
47
+ },
48
+ },
49
+ defaultConfiguration: 'check',
50
+ metadata: {
51
+ technologies: ['tofu'],
52
+ description: 'Format OpenTofu code',
53
+ },
54
+ };
55
+ targets['lint'] = {
56
+ executor: 'nx:run-commands',
57
+ cache: false,
58
+ inputs: ['production', '^production'],
59
+ outputs: [],
60
+ options: {
61
+ cwd: '{projectRoot}',
62
+ commands: [
63
+ 'tofu init -backend=false',
64
+ 'tflint --init',
65
+ 'tflint',
66
+ 'tofu validate',
67
+ ],
68
+ parallel: false,
69
+ },
70
+ env: {
71
+ TFLINT_CONFIG_FILE: tflintConfigFile,
72
+ },
73
+ metadata: {
74
+ technologies: ['tofu'],
75
+ description: 'Lint OpenTofu code',
76
+ },
77
+ };
78
+ targets['nx-release-publish'] = {
79
+ executor: 'nx:noop',
80
+ cache: false,
81
+ metadata: {
82
+ technologies: ['tofu'],
83
+ description: 'No release publish, Spacelift handles it from the Git tag',
84
+ },
85
+ };
86
+ if (!projectConfiguration?.release?.version
87
+ ?.versionActions) {
88
+ release = {
89
+ version: {
90
+ versionActions: '@nx/js/src/release/version-actions',
91
+ },
92
+ };
93
+ }
94
+ }
18
95
  // Only infer stack-migration target for root project
19
96
  if (isRootProject) {
20
97
  const stackMigrationConfig = (0, devkit_1.readJsonFile)((0, path_1.join)(__dirname, '/executors/stack-migration/schema.json'));
@@ -57,6 +134,7 @@ async function createNodesInternal(configFilePath, _options, _context) {
57
134
  projects: {
58
135
  [projectRoot]: {
59
136
  targets,
137
+ release,
60
138
  },
61
139
  },
62
140
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAuBA,kDA+DC;AAtFD,+BAAoC;AAEpC,uCAMmB;AAEN,QAAA,aAAa,GAAkB;IAC1C,iBAAiB;IACjB,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QACtC,OAAO,MAAM,IAAA,6BAAoB,EAC/B,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAC/B,mBAAmB,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,EACnD,WAAW,EACX,OAAO,EACP,OAAO,CACR,CAAA;IACH,CAAC;CACF,CAAA;AAEM,KAAK,UAAU,mBAAmB,CACvC,cAAsB,EACtB,QAAiB,EACjB,QAA8B;IAE9B,MAAM,oBAAoB,GACxB,IAAA,qBAAY,EAAC,cAAc,CAAC,CAAA;IAC9B,MAAM,WAAW,GAAG,IAAA,cAAO,EAAC,cAAc,CAAC,CAAA;IAE3C,MAAM,OAAO,GAAG,EAAE,CAAA;IAElB,MAAM,aAAa,GAAG,WAAW,KAAK,GAAG,CAAA;IAEzC,qDAAqD;IACrD,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,oBAAoB,GAAG,IAAA,qBAAY,EACvC,IAAA,WAAI,EAAC,SAAS,EAAE,wCAAwC,CAAC,CAC1D,CAAA;QAED,OAAO,CAAC,iBAAiB,CAAC,GAAG;YAC3B,QAAQ,EAAE,6BAA6B;YACvC,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE;gBACP,OAAO,EAAE,KAAK;aACf;YACD,cAAc,EAAE;gBACd,IAAI,EAAE;oBACJ,OAAO,EAAE,MAAM;iBAChB;gBACD,KAAK,EAAE;oBACL,OAAO,EAAE,OAAO;iBACjB;gBACD,MAAM,EAAE;oBACN,OAAO,EAAE,QAAQ;iBAClB;gBACD,uBAAuB,EAAE;oBACvB,OAAO,EAAE,uBAAuB;iBACjC;gBACD,oBAAoB,EAAE;oBACpB,OAAO,EAAE,oBAAoB;iBAC9B;gBACD,oBAAoB,EAAE;oBACpB,OAAO,EAAE,oBAAoB;iBAC9B;gBACD,OAAO,EAAE;oBACP,OAAO,EAAE,SAAS;iBACnB;aACF;YACD,QAAQ,EAAE;gBACR,YAAY,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC;gBACxC,WAAW,EACT,oBAAoB,EAAE,WAAW,IAAI,6BAA6B;aACrE;SACF,CAAA;IACH,CAAC;IAED,OAAO;QACL,QAAQ,EAAE;YACR,CAAC,WAAW,CAAC,EAAE;gBACb,OAAO;aACR;SACF;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AA2BA,kDAqJC;AAhLD,+BAAoC;AAEpC,uCAOmB;AAGnB,qEAA+D;AAElD,QAAA,aAAa,GAAkB;IAC1C,iBAAiB;IACjB,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QACtC,OAAO,MAAM,IAAA,6BAAoB,EAC/B,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAC/B,mBAAmB,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,EACnD,WAAW,EACX,OAAO,EACP,OAAO,CACR,CAAA;IACH,CAAC;CACF,CAAA;AAEM,KAAK,UAAU,mBAAmB,CACvC,cAAsB,EACtB,QAAiB,EACjB,QAA8B;IAE9B,MAAM,oBAAoB,GACxB,IAAA,qBAAY,EAAC,cAAc,CAAC,CAAA;IAC9B,MAAM,WAAW,GAAG,IAAA,cAAO,EAAC,cAAc,CAAC,CAAA;IAE3C,MAAM,OAAO,GAAG,EAAE,CAAA;IAClB,IAAI,OAAO,GAAG,IAAI,CAAA;IAElB,MAAM,aAAa,GAAG,WAAW,KAAK,GAAG,CAAA;IACzC,MAAM,UAAU,GAAG,IAAA,uCAAiB,EAAC,WAAW,EAAE,oBAAoB,CAAC,CAAA;IAEvE,oDAAoD;IACpD,MAAM,gBAAgB,GAAG,IAAA,WAAI,EAAC,IAAA,uBAAc,EAAC,WAAW,CAAC,EAAE,aAAa,CAAC,CAAA;IAEzE,+BAA+B;IAC/B,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,OAAO,CAAC,GAAG;YACjB,QAAQ,EAAE,iBAAiB;YAC3B,OAAO,EAAE,CAAC,oCAAoC,CAAC;YAC/C,OAAO,EAAE;gBACP,OAAO,EACL,qHAAqH;aACxH;SACF,CAAA;QACD,OAAO,CAAC,aAAa,CAAC,GAAG;YACvB,QAAQ,EAAE,iBAAiB;YAC3B,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC;YACrC,OAAO,EAAE,EAAE;YACX,OAAO,EAAE;gBACP,GAAG,EAAE,eAAe;gBACpB,OAAO,EAAE,qBAAqB;aAC/B;YACD,cAAc,EAAE;gBACd,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;iBACf;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;iBACf;aACF;YACD,oBAAoB,EAAE,OAAO;YAC7B,QAAQ,EAAE;gBACR,YAAY,EAAE,CAAC,MAAM,CAAC;gBACtB,WAAW,EAAE,sBAAsB;aACpC;SACF,CAAA;QAED,OAAO,CAAC,MAAM,CAAC,GAAG;YAChB,QAAQ,EAAE,iBAAiB;YAC3B,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC;YACrC,OAAO,EAAE,EAAE;YACX,OAAO,EAAE;gBACP,GAAG,EAAE,eAAe;gBACpB,QAAQ,EAAE;oBACR,0BAA0B;oBAC1B,eAAe;oBACf,QAAQ;oBACR,eAAe;iBAChB;gBACD,QAAQ,EAAE,KAAK;aAChB;YACD,GAAG,EAAE;gBACH,kBAAkB,EAAE,gBAAgB;aACrC;YACD,QAAQ,EAAE;gBACR,YAAY,EAAE,CAAC,MAAM,CAAC;gBACtB,WAAW,EAAE,oBAAoB;aAClC;SACF,CAAA;QAED,OAAO,CAAC,oBAAoB,CAAC,GAAG;YAC9B,QAAQ,EAAE,SAAS;YACnB,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE;gBACR,YAAY,EAAE,CAAC,MAAM,CAAC;gBACtB,WAAW,EACT,2DAA2D;aAC9D;SACF,CAAA;QAED,IACE,CAAE,oBAAoB,EAAE,OAAO,EAAE,OAAyC;YACxE,EAAE,cAAc,EAClB,CAAC;YACD,OAAO,GAAG;gBACR,OAAO,EAAE;oBACP,cAAc,EAAE,oCAAoC;iBACrD;aACF,CAAA;QACH,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,oBAAoB,GAAG,IAAA,qBAAY,EACvC,IAAA,WAAI,EAAC,SAAS,EAAE,wCAAwC,CAAC,CAC1D,CAAA;QAED,OAAO,CAAC,iBAAiB,CAAC,GAAG;YAC3B,QAAQ,EAAE,6BAA6B;YACvC,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE;gBACP,OAAO,EAAE,KAAK;aACf;YACD,cAAc,EAAE;gBACd,IAAI,EAAE;oBACJ,OAAO,EAAE,MAAM;iBAChB;gBACD,KAAK,EAAE;oBACL,OAAO,EAAE,OAAO;iBACjB;gBACD,MAAM,EAAE;oBACN,OAAO,EAAE,QAAQ;iBAClB;gBACD,uBAAuB,EAAE;oBACvB,OAAO,EAAE,uBAAuB;iBACjC;gBACD,oBAAoB,EAAE;oBACpB,OAAO,EAAE,oBAAoB;iBAC9B;gBACD,oBAAoB,EAAE;oBACpB,OAAO,EAAE,oBAAoB;iBAC9B;gBACD,OAAO,EAAE;oBACP,OAAO,EAAE,SAAS;iBACnB;aACF;YACD,QAAQ,EAAE;gBACR,YAAY,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC;gBACxC,WAAW,EACT,oBAAoB,EAAE,WAAW,IAAI,6BAA6B;aACrE;SACF,CAAA;IACH,CAAC;IAED,OAAO;QACL,QAAQ,EAAE;YACR,CAAC,WAAW,CAAC,EAAE;gBACb,OAAO;gBACP,OAAO;aACR;SACF;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { ProjectConfiguration } from '@nx/devkit';
2
+ export declare function isTerraformModule(projectRoot: string, _projectConfiguration: ProjectConfiguration): boolean;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isTerraformModule = isTerraformModule;
4
+ const node_fs_1 = require("node:fs");
5
+ const path_1 = require("path");
6
+ function isTerraformModule(projectRoot, _projectConfiguration) {
7
+ return ((0, node_fs_1.existsSync)((0, path_1.join)(projectRoot, '.spacelift', 'config.yml')) &&
8
+ (0, node_fs_1.existsSync)((0, path_1.join)(projectRoot, 'main.tf')));
9
+ }
10
+ //# sourceMappingURL=terraform-detection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terraform-detection.js","sourceRoot":"","sources":["../../src/utils/terraform-detection.ts"],"names":[],"mappings":";;AAKA,8CAQC;AAbD,qCAAoC;AACpC,+BAA2B;AAI3B,SAAgB,iBAAiB,CAC/B,WAAmB,EACnB,qBAA2C;IAE3C,OAAO,CACL,IAAA,oBAAU,EAAC,IAAA,WAAI,EAAC,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;QACzD,IAAA,oBAAU,EAAC,IAAA,WAAI,EAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CACzC,CAAA;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payfit/iac",
3
- "version": "1.1.6-ephemeral-release-rerun.4",
3
+ "version": "1.1.6",
4
4
  "publishConfig": {
5
5
  "access": "restricted"
6
6
  },
@@ -18,6 +18,8 @@
18
18
  "dependencies": {
19
19
  "consola": "^3.4.2",
20
20
  "js-yaml": "^4.1.0",
21
+ "memfs": "4.52.0",
22
+ "nx": "22.3.3",
21
23
  "tslib": "^2.3.0",
22
24
  "vitest": "4.0.17"
23
25
  },