@firestartr/cli 0.1.0

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 (112) hide show
  1. package/README.md +44 -0
  2. package/build/_loadurl.js +50 -0
  3. package/build/bin/feature-downloader.d.ts +5 -0
  4. package/build/bin/render-feature.d.ts +2 -0
  5. package/build/bin/test-feature.d.ts +1 -0
  6. package/build/index.d.ts +9 -0
  7. package/build/index.js +267629 -0
  8. package/build/provisioner/cdktf.json +11 -0
  9. package/build/provisioner/dist-cdktf/client.d.ts +2 -0
  10. package/build/provisioner/dist-cdktf/client.js +39 -0
  11. package/build/provisioner/dist-cdktf/index.js +67192 -0
  12. package/build/provisioner/dist-cdktf/index.js.map +1 -0
  13. package/build/provisioner/dist-cdktf/sourcemap-register.js +1 -0
  14. package/build/provisioner/dist-cdktf/src/cdktf.d.ts +1 -0
  15. package/build/provisioner/dist-cdktf/src/cdktf.js +89 -0
  16. package/build/provisioner/dist-cdktf/src/config/config.d.ts +6 -0
  17. package/build/provisioner/dist-cdktf/src/config/config.js +47 -0
  18. package/build/provisioner/dist-cdktf/src/entities/base/Entity.d.ts +41 -0
  19. package/build/provisioner/dist-cdktf/src/entities/base/Entity.js +137 -0
  20. package/build/provisioner/dist-cdktf/src/entities/base/auxiliars/ConfigAux.d.ts +28 -0
  21. package/build/provisioner/dist-cdktf/src/entities/base/auxiliars/ConfigAux.js +56 -0
  22. package/build/provisioner/dist-cdktf/src/entities/feature/FirestartrGithubRepositoryFeature.d.ts +8 -0
  23. package/build/provisioner/dist-cdktf/src/entities/feature/FirestartrGithubRepositoryFeature.js +15 -0
  24. package/build/provisioner/dist-cdktf/src/entities/firestartrgithubgroup/FirestartrGithubGroup.d.ts +8 -0
  25. package/build/provisioner/dist-cdktf/src/entities/firestartrgithubgroup/FirestartrGithubGroup.js +17 -0
  26. package/build/provisioner/dist-cdktf/src/entities/firestartrgithubgroup/auxiliars/TeamConfigAux.d.ts +29 -0
  27. package/build/provisioner/dist-cdktf/src/entities/firestartrgithubgroup/auxiliars/TeamConfigAux.js +35 -0
  28. package/build/provisioner/dist-cdktf/src/entities/firestartrgithubgroup/helpers/TeamMembersHelper.d.ts +4 -0
  29. package/build/provisioner/dist-cdktf/src/entities/firestartrgithubgroup/helpers/TeamMembersHelper.js +28 -0
  30. package/build/provisioner/dist-cdktf/src/entities/firestartrgithubgroup/helpers/TeamsHelper.d.ts +4 -0
  31. package/build/provisioner/dist-cdktf/src/entities/firestartrgithubgroup/helpers/TeamsHelper.js +23 -0
  32. package/build/provisioner/dist-cdktf/src/entities/firestartrgithubmembership/FirestartrGithubMembership.d.ts +8 -0
  33. package/build/provisioner/dist-cdktf/src/entities/firestartrgithubmembership/FirestartrGithubMembership.js +15 -0
  34. package/build/provisioner/dist-cdktf/src/entities/firestartrgithubmembership/helpers/MembershipHelper.d.ts +4 -0
  35. package/build/provisioner/dist-cdktf/src/entities/firestartrgithubmembership/helpers/MembershipHelper.js +19 -0
  36. package/build/provisioner/dist-cdktf/src/entities/firestartrgithubrepository/FirestartrGithubRepository.d.ts +9 -0
  37. package/build/provisioner/dist-cdktf/src/entities/firestartrgithubrepository/FirestartrGithubRepository.js +30 -0
  38. package/build/provisioner/dist-cdktf/src/entities/firestartrgithubrepository/auxiliars/RepositoryConfigAux.d.ts +52 -0
  39. package/build/provisioner/dist-cdktf/src/entities/firestartrgithubrepository/auxiliars/RepositoryConfigAux.js +72 -0
  40. package/build/provisioner/dist-cdktf/src/entities/firestartrgithubrepository/helpers/ActionsHelper.d.ts +5 -0
  41. package/build/provisioner/dist-cdktf/src/entities/firestartrgithubrepository/helpers/ActionsHelper.js +19 -0
  42. package/build/provisioner/dist-cdktf/src/entities/firestartrgithubrepository/helpers/CodeownersHelper.d.ts +5 -0
  43. package/build/provisioner/dist-cdktf/src/entities/firestartrgithubrepository/helpers/CodeownersHelper.js +24 -0
  44. package/build/provisioner/dist-cdktf/src/entities/firestartrgithubrepository/helpers/DefaultBranchHelper.d.ts +5 -0
  45. package/build/provisioner/dist-cdktf/src/entities/firestartrgithubrepository/helpers/DefaultBranchHelper.js +17 -0
  46. package/build/provisioner/dist-cdktf/src/entities/firestartrgithubrepository/helpers/RepositoryHelper.d.ts +5 -0
  47. package/build/provisioner/dist-cdktf/src/entities/firestartrgithubrepository/helpers/RepositoryHelper.js +72 -0
  48. package/build/provisioner/dist-cdktf/src/entities/firestartrgithubrepository/helpers/RepositoryTeamsHelper.d.ts +4 -0
  49. package/build/provisioner/dist-cdktf/src/entities/firestartrgithubrepository/helpers/RepositoryTeamsHelper.js +49 -0
  50. package/build/provisioner/dist-cdktf/src/entities/firestartrterraformmodule/FirestartrTerraformModule.d.ts +10 -0
  51. package/build/provisioner/dist-cdktf/src/entities/firestartrterraformmodule/FirestartrTerraformModule.js +17 -0
  52. package/build/provisioner/dist-cdktf/src/entities/firestartrterraformmodule/auxiliars/terraformModuleHelper.d.ts +13 -0
  53. package/build/provisioner/dist-cdktf/src/entities/firestartrterraformmodule/auxiliars/terraformModuleHelper.js +36 -0
  54. package/build/provisioner/dist-cdktf/src/entities/index.d.ts +2 -0
  55. package/build/provisioner/dist-cdktf/src/entities/index.js +32 -0
  56. package/build/provisioner/dist-cdktf/src/entities/system/SystemEntity.d.ts +9 -0
  57. package/build/provisioner/dist-cdktf/src/entities/system/SystemEntity.js +18 -0
  58. package/build/provisioner/dist-cdktf/src/features/index.d.ts +4 -0
  59. package/build/provisioner/dist-cdktf/src/features/index.js +9 -0
  60. package/build/provisioner/dist-cdktf/src/features/installer.d.ts +1 -0
  61. package/build/provisioner/dist-cdktf/src/features/installer.js +101 -0
  62. package/build/provisioner/dist-cdktf/src/features/preparer.d.ts +1 -0
  63. package/build/provisioner/dist-cdktf/src/features/preparer.js +64 -0
  64. package/build/provisioner/dist-cdktf/src/features/provisioner.d.ts +3 -0
  65. package/build/provisioner/dist-cdktf/src/features/provisioner.js +74 -0
  66. package/build/provisioner/dist-cdktf/src/features/uninstaller.d.ts +1 -0
  67. package/build/provisioner/dist-cdktf/src/features/uninstaller.js +29 -0
  68. package/build/provisioner/dist-cdktf/src/handlers/index.d.ts +3 -0
  69. package/build/provisioner/dist-cdktf/src/handlers/index.js +56 -0
  70. package/build/provisioner/dist-cdktf/src/index.d.ts +11 -0
  71. package/build/provisioner/dist-cdktf/src/index.js +12 -0
  72. package/build/provisioner/dist-cdktf/src/loader.d.ts +2 -0
  73. package/build/provisioner/dist-cdktf/src/loader.js +15 -0
  74. package/build/provisioner/dist-cdktf/src/providers/backend.d.ts +6 -0
  75. package/build/provisioner/dist-cdktf/src/providers/backend.js +44 -0
  76. package/build/provisioner/dist-cdktf/src/providers/index.d.ts +12 -0
  77. package/build/provisioner/dist-cdktf/src/providers/index.js +19 -0
  78. package/build/provisioner/dist-cdktf/src/providers/provider.d.ts +4 -0
  79. package/build/provisioner/dist-cdktf/src/providers/provider.js +28 -0
  80. package/build/provisioner/dist-cdktf/src/resources/github_feature/index.d.ts +8 -0
  81. package/build/provisioner/dist-cdktf/src/resources/github_feature/index.js +61 -0
  82. package/build/provisioner/dist-cdktf/src/resources/github_feature/preprocessor.d.ts +2 -0
  83. package/build/provisioner/dist-cdktf/src/resources/github_feature/preprocessor.js +18 -0
  84. package/build/provisioner/dist-cdktf/src/resources/github_group/index.d.ts +5 -0
  85. package/build/provisioner/dist-cdktf/src/resources/github_group/index.js +36 -0
  86. package/build/provisioner/dist-cdktf/src/resources/github_membership/index.d.ts +5 -0
  87. package/build/provisioner/dist-cdktf/src/resources/github_membership/index.js +36 -0
  88. package/build/provisioner/dist-cdktf/src/resources/github_repository/index.d.ts +5 -0
  89. package/build/provisioner/dist-cdktf/src/resources/github_repository/index.js +36 -0
  90. package/build/provisioner/dist-cdktf/src/resources/index.d.ts +13 -0
  91. package/build/provisioner/dist-cdktf/src/resources/index.js +14 -0
  92. package/build/provisioner/dist-cdktf/src/resources/resource.d.ts +17 -0
  93. package/build/provisioner/dist-cdktf/src/resources/resource.js +69 -0
  94. package/build/provisioner/dist-cdktf/src/resources/terraform_module/index.d.ts +5 -0
  95. package/build/provisioner/dist-cdktf/src/resources/terraform_module/index.js +33 -0
  96. package/build/provisioner/dist-cdktf/src/stacks/GithubStack.d.ts +6 -0
  97. package/build/provisioner/dist-cdktf/src/stacks/GithubStack.js +41 -0
  98. package/build/provisioner/dist-cdktf/src/stacks/TerraformModuleStack.d.ts +7 -0
  99. package/build/provisioner/dist-cdktf/src/stacks/TerraformModuleStack.js +37 -0
  100. package/build/provisioner/dist-cdktf/src/stacks/base.d.ts +17 -0
  101. package/build/provisioner/dist-cdktf/src/stacks/base.js +70 -0
  102. package/build/provisioner/dist-cdktf/src/stacks/index.d.ts +6 -0
  103. package/build/provisioner/dist-cdktf/src/stacks/index.js +26 -0
  104. package/build/provisioner/dist-cdktf/src/terraform.d.ts +5 -0
  105. package/build/provisioner/dist-cdktf/src/terraform.js +132 -0
  106. package/build/provisioner/dist-cdktf/tsconfig.cdktf.tsbuildinfo +1 -0
  107. package/build/provisioner/dist-cdktf/zipSync.js +30 -0
  108. package/build/src/common.d.ts +3 -0
  109. package/build/src/render.d.ts +1 -0
  110. package/build/src/update_file.d.ts +1 -0
  111. package/build/src/validate.d.ts +1 -0
  112. package/package.json +32 -0
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SystemEntity = void 0;
7
+ const Entity_1 = require("../base/Entity");
8
+ const debug_1 = __importDefault(require("debug"));
9
+ const messageLog = (0, debug_1.default)('firestartr:provisioner:modules:artifacts:systemartifact');
10
+ class SystemEntity extends Entity_1.Entity {
11
+ constructor(entity) {
12
+ super(entity);
13
+ }
14
+ async loadResources(data) {
15
+ messageLog(`This is a system artifact, nothing to provision`);
16
+ }
17
+ }
18
+ exports.SystemEntity = SystemEntity;
@@ -0,0 +1,4 @@
1
+ import { installFeaturesForComponent } from "./installer";
2
+ import { prepareFeaturesForComponent } from "./preparer";
3
+ import { untrackManagedFiles } from "./uninstaller";
4
+ export { prepareFeaturesForComponent, installFeaturesForComponent, untrackManagedFiles, };
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.untrackManagedFiles = exports.installFeaturesForComponent = exports.prepareFeaturesForComponent = void 0;
4
+ const installer_1 = require("./installer");
5
+ Object.defineProperty(exports, "installFeaturesForComponent", { enumerable: true, get: function () { return installer_1.installFeaturesForComponent; } });
6
+ const preparer_1 = require("./preparer");
7
+ Object.defineProperty(exports, "prepareFeaturesForComponent", { enumerable: true, get: function () { return preparer_1.prepareFeaturesForComponent; } });
8
+ const uninstaller_1 = require("./uninstaller");
9
+ Object.defineProperty(exports, "untrackManagedFiles", { enumerable: true, get: function () { return uninstaller_1.untrackManagedFiles; } });
@@ -0,0 +1 @@
1
+ export declare function installFeaturesForComponent(component: any, store: any): Promise<any>;
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.installFeaturesForComponent = void 0;
30
+ const catalog_common_1 = __importDefault(require("catalog_common"));
31
+ const debug_1 = __importDefault(require("debug"));
32
+ const fs = __importStar(require("fs"));
33
+ const github_1 = __importDefault(require("github"));
34
+ const messageLog = (0, debug_1.default)('firestartr:provisioner:features:installer');
35
+ async function installFeaturesForComponent(component, store) {
36
+ const componentFeatures = component.spec?.provisioner?.features || '[]';
37
+ const componentFeaturesToInstall = componentFeatures.filter((feature) => {
38
+ return feature.status.value === catalog_common_1.default.types.FeatureStatuses.pendingInstallStatus;
39
+ });
40
+ if (componentFeaturesToInstall.length > 0) {
41
+ for (const feature of componentFeaturesToInstall) {
42
+ messageLog("Installing feature %s for component %s", feature.name, component.metadata.name);
43
+ // Get feature config
44
+ const featureConfig = catalog_common_1.default.features.features.getFeatureRenderedConfigForComponent(component, feature.name);
45
+ // prepare files
46
+ await prepareFilesForInstalling(feature.name, component, featureConfig.files);
47
+ // Apply patch
48
+ for (const patch of featureConfig.patches)
49
+ store.actions.components.patch(component, patch);
50
+ // Mark as installed
51
+ store.actions.components.featureInstalled(component, feature.name, feature.version);
52
+ }
53
+ }
54
+ else {
55
+ messageLog(`No features to install for component ${component.metadata.name}`);
56
+ }
57
+ return store;
58
+ }
59
+ exports.installFeaturesForComponent = installFeaturesForComponent;
60
+ async function prepareFilesForInstalling(featureName, component, featureConfigFiles) {
61
+ for (const file of featureConfigFiles) {
62
+ if (isFreshInstallation(featureName, component) && file.userManaged) {
63
+ await prepareUserManagedFileForInstalling(component, file);
64
+ }
65
+ }
66
+ }
67
+ async function prepareUserManagedFileForInstalling(component, file) {
68
+ // check if the file already exists
69
+ const fileContent = await getFileContentFromGithubIfExists(file.repoPath, component.metadata.name, component.spec.provisioner.org);
70
+ // if exists get the content
71
+ if (fileContent) {
72
+ // write down the content of the file such as it exists in the repo
73
+ updateFileContent(file.localPath, fileContent);
74
+ }
75
+ }
76
+ async function getFileContentFromGithubIfExists(path, repositoryName, owner) {
77
+ try {
78
+ const fileContent = await github_1.default.repo.getContent(path, repositoryName, owner);
79
+ return fileContent;
80
+ }
81
+ catch (e) {
82
+ if (e.status === 404) {
83
+ messageLog(`File ${path} not found in ${repositoryName}`);
84
+ return false;
85
+ }
86
+ throw e;
87
+ }
88
+ }
89
+ function updateFileContent(fileSrc, fileContent) {
90
+ fs.writeFileSync(fileSrc, fileContent);
91
+ }
92
+ function isFreshInstallation(featureName, component) {
93
+ if (component["metadata"]["annotations"]['fire-starter.dev/features-to-install']) {
94
+ const featuresToInstall = JSON.parse(component["metadata"]["annotations"]['fire-starter.dev/features-to-install']);
95
+ const featureToInstall = featuresToInstall.find((feature) => feature["name"] === featureName);
96
+ if (featureToInstall) {
97
+ return true;
98
+ }
99
+ }
100
+ return false;
101
+ }
@@ -0,0 +1 @@
1
+ export declare function prepareFeaturesForComponent(component: any, store: any): Promise<void>;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.prepareFeaturesForComponent = void 0;
30
+ const catalog_common_1 = __importDefault(require("catalog_common"));
31
+ const debug_1 = __importDefault(require("debug"));
32
+ const features_preparer_1 = __importDefault(require("features_preparer"));
33
+ const fs = __importStar(require("fs"));
34
+ const messageLog = (0, debug_1.default)('firestartr:provisioner:features:installer');
35
+ async function prepareFeaturesForComponent(component, store) {
36
+ // those are the features to maintain
37
+ let componentFeatures = component.spec?.provisioner?.features || [];
38
+ // let's include the features to uninstall
39
+ if (component.metadata.annotations["fire-starter.dev/features-to-uninstall"]) {
40
+ componentFeatures = componentFeatures.concat(JSON.parse(component.metadata.annotations["fire-starter.dev/features-to-uninstall"]));
41
+ }
42
+ // let's include the features to install
43
+ if (component.metadata.annotations["fire-starter.dev/features-to-install"]) {
44
+ componentFeatures = componentFeatures.concat(JSON.parse(component.metadata.annotations["fire-starter.dev/features-to-install"]));
45
+ }
46
+ if (componentFeatures.length > 0) {
47
+ const entityPath = dumpArtifactYaml(component);
48
+ for (const feature of componentFeatures) {
49
+ messageLog("Installing feature %s for component %s", feature.name, component.metadata.name);
50
+ await features_preparer_1.default.getFeatureConfig(feature.name, feature.version, entityPath);
51
+ // Get feature config
52
+ const featureConfig = catalog_common_1.default.features.features.getFeatureRenderedConfigForComponent(component, feature.name);
53
+ // Apply unpatch
54
+ for (const patch of featureConfig.patches)
55
+ store.actions.components.patch(component, patch);
56
+ }
57
+ }
58
+ }
59
+ exports.prepareFeaturesForComponent = prepareFeaturesForComponent;
60
+ function dumpArtifactYaml(component) {
61
+ fs.mkdirSync("/tmp/components", { recursive: true });
62
+ catalog_common_1.default.io.writeEntity(component, "/tmp");
63
+ return catalog_common_1.default.io.getEntityPath("components", component.metadata.name, "/tmp");
64
+ }
@@ -0,0 +1,3 @@
1
+ import { Construct } from 'constructs';
2
+ import { FirestartrGithubRepositoryFeature } from '../entities/feature/FirestartrGithubRepositoryFeature';
3
+ export declare function provisionFeatureFiles(scope: Construct, feature: FirestartrGithubRepositoryFeature): void;
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.provisionFeatureFiles = void 0;
30
+ const repository_file_1 = require("@cdktf/provider-github/lib/repository-file");
31
+ const debug_1 = __importDefault(require("debug"));
32
+ const cdktf_1 = require("cdktf");
33
+ const fs = __importStar(require("fs"));
34
+ const path = __importStar(require("path"));
35
+ const uuid_1 = require("uuid");
36
+ const messageLog = (0, debug_1.default)('firestartr:provisioner:features:provisioner');
37
+ function provisionFeatureFiles(scope, feature) {
38
+ messageLog(`Provisioning feature ${feature.spec.type} for ${feature.spec.repositoryTarget.name}`);
39
+ messageLog('Feature output json: %O', feature);
40
+ const tmpDir = '/tmp/features_files_provisioning';
41
+ /**
42
+ * Clean up the features files directory
43
+ */
44
+ fs.existsSync(tmpDir) &&
45
+ fs.rmdirSync(tmpDir, { recursive: true });
46
+ /**
47
+ * Create the features files directory
48
+ */
49
+ fs.mkdirSync(tmpDir, { recursive: true });
50
+ const writeFeatureFileToDiskFn = (tmpDir, fileName, content) => {
51
+ const filePath = path.join(tmpDir, fileName);
52
+ messageLog('Writing file %s to %s', fileName, filePath);
53
+ fs.writeFileSync(filePath, Buffer.from(content, 'base64').toString('utf8'), { encoding: 'utf-8' });
54
+ return filePath;
55
+ };
56
+ if (feature.spec.files) {
57
+ for (const file of feature.spec.files) {
58
+ messageLog('Provisioning file %O', file);
59
+ const tmpPathFile = writeFeatureFileToDiskFn(tmpDir, (0, uuid_1.v4)(), file.content);
60
+ const lifecycleArg = file.userManaged ? { ignoreChanges: ['content'] } : {};
61
+ const repoConfig = {
62
+ branch: feature.spec.repositoryTarget.branch,
63
+ commitMessage: `feat: ${feature.spec.type} ${feature.spec.version}`,
64
+ content: cdktf_1.Fn.file(tmpPathFile),
65
+ file: file.path,
66
+ repository: feature.resolveRef(feature.spec.repositoryTarget.ref),
67
+ overwriteOnCreate: true,
68
+ lifecycle: lifecycleArg
69
+ };
70
+ new repository_file_1.RepositoryFile(scope, `${feature.spec.type}-${file.path}`, repoConfig);
71
+ }
72
+ }
73
+ }
74
+ exports.provisionFeatureFiles = provisionFeatureFiles;
@@ -0,0 +1 @@
1
+ export declare function untrackManagedFiles(feature: any, deps: any): Promise<void>;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.untrackManagedFiles = void 0;
7
+ const debug_1 = __importDefault(require("debug"));
8
+ const cdktf_1 = require("../cdktf");
9
+ const terraform_1 = require("../terraform");
10
+ const messageLog = (0, debug_1.default)('firestartr:provisioner:features:uninstaller');
11
+ async function untrackManagedFiles(feature, deps) {
12
+ if (!feature.spec.files || feature.spec.files.length < 1)
13
+ return;
14
+ messageLog(`Removing managed files from the Terraform State`);
15
+ messageLog(`Synthing the project...`);
16
+ await (0, cdktf_1.runCDKTF)(feature, "synth", deps);
17
+ await (0, terraform_1.runTerraform)(feature, ['init']);
18
+ for (const file of feature.spec.files.filter((file) => file.userManaged === true)) {
19
+ messageLog(`Removing from the state file ${file.path}`);
20
+ // Terraform replaces / with -- and . with - in the state file names, so we do the same to get the state file name
21
+ let stateFileName = `${feature.spec.type}-${file.path}`.replace(/\//g, '--').replace(/\./g, '');
22
+ await (0, terraform_1.runTerraform)(feature, ['state', 'rm', `github_repository_file.${stateFileName}`]);
23
+ }
24
+ // messageLog(`Removing the files from the state`)
25
+ // let workDir = __dirname.split(path.sep).includes('packages') ? path.join(__dirname, '..', '..') : path.join(__dirname, 'provisioner');
26
+ // workDir = path.join(workDir, 'cdktf.out')
27
+ // fs.rmSync(workDir, {recursive: true})
28
+ }
29
+ exports.untrackManagedFiles = untrackManagedFiles;
@@ -0,0 +1,3 @@
1
+ export declare function prepareFeatures(components: any, storeRef: any): Promise<void>;
2
+ export declare function getActionByStatus(status: any): "destroy" | import("catalog_common/dist/src/types/catalog").ArtifactStatuses.unknownStatus | "deploy";
3
+ export declare function getNextStatus(status: any): import("catalog_common/dist/src/types/catalog").ArtifactStatuses.deletedStatus | import("catalog_common/dist/src/types/catalog").ArtifactStatuses.errorStatus | import("catalog_common/dist/src/types/catalog").ArtifactStatuses.creatingStatus | import("catalog_common/dist/src/types/catalog").ArtifactStatuses.renamingStatus | import("catalog_common/dist/src/types/catalog").ArtifactStatuses.provisionedStatus | import("catalog_common/dist/src/types/catalog").ArtifactStatuses.provisioningStatus | import("catalog_common/dist/src/types/catalog").ArtifactStatuses.unknownStatus;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getNextStatus = exports.getActionByStatus = exports.prepareFeatures = void 0;
7
+ const features_1 = require("../features/");
8
+ const catalog_common_1 = __importDefault(require("catalog_common"));
9
+ async function prepareFeatures(components, storeRef) {
10
+ // we prepare ALL the features
11
+ for (const component of components) {
12
+ await (0, features_1.prepareFeaturesForComponent)(component, storeRef);
13
+ await (0, features_1.installFeaturesForComponent)(component, storeRef);
14
+ }
15
+ }
16
+ exports.prepareFeatures = prepareFeatures;
17
+ function getActionByStatus(status) {
18
+ switch (status) {
19
+ case catalog_common_1.default.types.ArtifactStatuses.provisioningStatus:
20
+ case catalog_common_1.default.types.ArtifactStatuses.provisionedStatus:
21
+ case catalog_common_1.default.types.ArtifactStatuses.pendingCreationStatus:
22
+ case catalog_common_1.default.types.ArtifactStatuses.pendingProvisioningStatus:
23
+ case catalog_common_1.default.types.ArtifactStatuses.pendingRenameStatus:
24
+ case catalog_common_1.default.types.ArtifactStatuses.creatingStatus:
25
+ return "deploy";
26
+ case catalog_common_1.default.types.ArtifactStatuses.pendingDeleteStatus:
27
+ case catalog_common_1.default.types.ArtifactStatuses.deletingStatus:
28
+ return "destroy";
29
+ default:
30
+ return catalog_common_1.default.types.ArtifactStatuses.unknownStatus;
31
+ }
32
+ }
33
+ exports.getActionByStatus = getActionByStatus;
34
+ function getNextStatus(status) {
35
+ switch (status) {
36
+ case catalog_common_1.default.types.ArtifactStatuses.provisioningStatus:
37
+ case catalog_common_1.default.types.ArtifactStatuses.creatingStatus:
38
+ case catalog_common_1.default.types.ArtifactStatuses.renamingStatus:
39
+ return catalog_common_1.default.types.ArtifactStatuses.provisionedStatus;
40
+ case catalog_common_1.default.types.ArtifactStatuses.pendingDeleteStatus:
41
+ return catalog_common_1.default.types.ArtifactStatuses.deletedStatus;
42
+ case catalog_common_1.default.types.ArtifactStatuses.pendingCreationStatus:
43
+ return catalog_common_1.default.types.ArtifactStatuses.creatingStatus;
44
+ case catalog_common_1.default.types.ArtifactStatuses.pendingProvisioningStatus:
45
+ return catalog_common_1.default.types.ArtifactStatuses.provisioningStatus;
46
+ case catalog_common_1.default.types.ArtifactStatuses.deletingStatus:
47
+ return catalog_common_1.default.types.ArtifactStatuses.deletedStatus;
48
+ case catalog_common_1.default.types.ArtifactStatuses.pendingRenameStatus:
49
+ return catalog_common_1.default.types.ArtifactStatuses.renamingStatus;
50
+ case catalog_common_1.default.types.ArtifactStatuses.errorStatus:
51
+ return catalog_common_1.default.types.ArtifactStatuses.errorStatus;
52
+ default:
53
+ return catalog_common_1.default.types.ArtifactStatuses.unknownStatus;
54
+ }
55
+ }
56
+ exports.getNextStatus = getNextStatus;
@@ -0,0 +1,11 @@
1
+ import { getActionByStatus } from "./handlers";
2
+ import { runCDKTF } from "./cdktf";
3
+ import { runTerraform } from "./terraform";
4
+ import { untrackManagedFiles } from "./features";
5
+ declare const _default: {
6
+ runCDKTF: typeof runCDKTF;
7
+ getActionByStatus: typeof getActionByStatus;
8
+ runTerraform: typeof runTerraform;
9
+ untrackManagedFiles: typeof untrackManagedFiles;
10
+ };
11
+ export default _default;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const handlers_1 = require("./handlers");
4
+ const cdktf_1 = require("./cdktf");
5
+ const terraform_1 = require("./terraform");
6
+ const features_1 = require("./features");
7
+ exports.default = {
8
+ runCDKTF: cdktf_1.runCDKTF,
9
+ getActionByStatus: handlers_1.getActionByStatus,
10
+ runTerraform: terraform_1.runTerraform,
11
+ untrackManagedFiles: features_1.untrackManagedFiles
12
+ };
@@ -0,0 +1,2 @@
1
+ import { App } from 'cdktf';
2
+ export declare function loadEntity(isImport: boolean, entity: any, deps: any, app: App, orgConfig: any): Promise<import("./stacks/base").BaseStack>;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadEntity = void 0;
4
+ const stacks_1 = require("./stacks");
5
+ async function loadEntity(isImport, entity, deps, app, orgConfig) {
6
+ const tfStatePath = __calculateTFStatePath(entity);
7
+ const stackClass = (0, stacks_1.getStackByEntity)(entity);
8
+ const stack = new stackClass(app, tfStatePath);
9
+ await stack.provisionEntity(isImport, entity, deps, tfStatePath, orgConfig);
10
+ return stack;
11
+ }
12
+ exports.loadEntity = loadEntity;
13
+ function __calculateTFStatePath(entity) {
14
+ return `${entity.kind.toLowerCase()}/${entity.spec.firestartr.tfStateKey}`;
15
+ }
@@ -0,0 +1,6 @@
1
+ import { FirestartrTerraformBackendProvider } from ".";
2
+ export declare class BackendError extends Error {
3
+ backend: FirestartrTerraformBackendProvider;
4
+ constructor(backend: FirestartrTerraformBackendProvider);
5
+ }
6
+ export declare function createBackend(scope: any, provider: FirestartrTerraformBackendProvider, tfStateKey: string, config: any): void;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createBackend = exports.BackendError = void 0;
7
+ const cdktf_1 = require("cdktf");
8
+ const _1 = require(".");
9
+ const catalog_common_1 = __importDefault(require("catalog_common"));
10
+ class BackendError extends Error {
11
+ backend;
12
+ constructor(backend) {
13
+ super(`Backend ${backend} not supported`);
14
+ this.backend = backend;
15
+ }
16
+ }
17
+ exports.BackendError = BackendError;
18
+ function createBackend(scope, provider, tfStateKey, config) {
19
+ const updatedConfig = catalog_common_1.default.generic.transformKeysToCamelCase(config);
20
+ switch (provider) {
21
+ case _1.FirestartrTerraformBackendProvider.AWS:
22
+ new cdktf_1.S3Backend(scope, {
23
+ ...updatedConfig,
24
+ key: tfStateKey
25
+ });
26
+ break;
27
+ case _1.FirestartrTerraformBackendProvider.AZURERM:
28
+ new cdktf_1.AzurermBackend(scope, {
29
+ ...updatedConfig,
30
+ key: tfStateKey
31
+ });
32
+ break;
33
+ case _1.FirestartrTerraformBackendProvider.KUBERNETES:
34
+ scope.addOverride("terraform.backend.kubernetes", {
35
+ // In this case we do not need to replace the config keys case
36
+ ...config,
37
+ });
38
+ scope.addOverride("terraform.backend.local", null);
39
+ break;
40
+ default:
41
+ throw new BackendError(provider);
42
+ }
43
+ }
44
+ exports.createBackend = createBackend;
@@ -0,0 +1,12 @@
1
+ export declare enum FirestartrTerraformBackendProvider {
2
+ AWS = "aws",
3
+ AZURERM = "azurerm",
4
+ KUBERNETES = "kubernetes"
5
+ }
6
+ export declare enum FirestartrTerraformProvider {
7
+ AWS = "aws",
8
+ AZURERM = "azurerm",
9
+ GITHUB = "github"
10
+ }
11
+ export { createBackend } from './backend';
12
+ export { createProvider } from './provider';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createProvider = exports.createBackend = exports.FirestartrTerraformProvider = exports.FirestartrTerraformBackendProvider = void 0;
4
+ var FirestartrTerraformBackendProvider;
5
+ (function (FirestartrTerraformBackendProvider) {
6
+ FirestartrTerraformBackendProvider["AWS"] = "aws";
7
+ FirestartrTerraformBackendProvider["AZURERM"] = "azurerm";
8
+ FirestartrTerraformBackendProvider["KUBERNETES"] = "kubernetes";
9
+ })(FirestartrTerraformBackendProvider = exports.FirestartrTerraformBackendProvider || (exports.FirestartrTerraformBackendProvider = {}));
10
+ var FirestartrTerraformProvider;
11
+ (function (FirestartrTerraformProvider) {
12
+ FirestartrTerraformProvider["AWS"] = "aws";
13
+ FirestartrTerraformProvider["AZURERM"] = "azurerm";
14
+ FirestartrTerraformProvider["GITHUB"] = "github";
15
+ })(FirestartrTerraformProvider = exports.FirestartrTerraformProvider || (exports.FirestartrTerraformProvider = {}));
16
+ var backend_1 = require("./backend");
17
+ Object.defineProperty(exports, "createBackend", { enumerable: true, get: function () { return backend_1.createBackend; } });
18
+ var provider_1 = require("./provider");
19
+ Object.defineProperty(exports, "createProvider", { enumerable: true, get: function () { return provider_1.createProvider; } });
@@ -0,0 +1,4 @@
1
+ import { Construct } from "constructs";
2
+ import { TerraformProvider } from "cdktf";
3
+ import { FirestartrTerraformProvider } from ".";
4
+ export declare function createProvider(scope: Construct, provider: FirestartrTerraformProvider, id: string, config: any): TerraformProvider;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createProvider = void 0;
7
+ const provider_1 = require("@cdktf/provider-github/lib/provider");
8
+ const provider_2 = require("@cdktf/provider-aws/lib/provider");
9
+ const provider_3 = require("@cdktf/provider-azurerm/lib/provider");
10
+ const _1 = require(".");
11
+ const catalog_common_1 = __importDefault(require("catalog_common"));
12
+ function createProvider(scope, provider, id, config) {
13
+ const updatedConfig = catalog_common_1.default.generic.transformKeysToCamelCase(config);
14
+ switch (provider) {
15
+ case _1.FirestartrTerraformProvider.AWS:
16
+ return new provider_2.AwsProvider(scope, id, updatedConfig);
17
+ case _1.FirestartrTerraformProvider.AZURERM:
18
+ return new provider_3.AzurermProvider(scope, id, {
19
+ ...updatedConfig,
20
+ features: {}
21
+ });
22
+ case _1.FirestartrTerraformProvider.GITHUB:
23
+ return new provider_1.GithubProvider(scope, id, updatedConfig);
24
+ default:
25
+ throw new Error(`Provider ${provider} not supported`);
26
+ }
27
+ }
28
+ exports.createProvider = createProvider;
@@ -0,0 +1,8 @@
1
+ import { Resource } from "../resource";
2
+ export declare class FirestartrGithubRepositoryFeature extends Resource {
3
+ static kind(): string;
4
+ preprocess(): Promise<void>;
5
+ _updateManagedFiles(): Promise<void>;
6
+ getRepoExternalName(ref: any): any;
7
+ __getFileContentFromProvider(org: string, url: string): Promise<any>;
8
+ }
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FirestartrGithubRepositoryFeature = void 0;
7
+ const features_1 = require("../../features");
8
+ const resource_1 = require("../resource");
9
+ const github_1 = __importDefault(require("github"));
10
+ const debug_1 = __importDefault(require("debug"));
11
+ const catalog_common_1 = __importDefault(require("catalog_common"));
12
+ const log = (0, debug_1.default)('firestartr:provisioner:github_repository_feature');
13
+ class FirestartrGithubRepositoryFeature extends resource_1.Resource {
14
+ static kind() {
15
+ return 'FirestartrGithubRepositoryFeature';
16
+ }
17
+ async preprocess() {
18
+ switch (this.get('operation')) {
19
+ case "CREATE":
20
+ log("CREATED");
21
+ await this._updateManagedFiles();
22
+ break;
23
+ case "UPDATE":
24
+ log("UPDATED");
25
+ break;
26
+ case "DELETE":
27
+ log("DELETE");
28
+ await (0, features_1.untrackManagedFiles)(this.get('main_artifact'), this.get('deps'));
29
+ break;
30
+ default:
31
+ log(`UNKNOWN: ${this.get('operation')}`);
32
+ }
33
+ }
34
+ async _updateManagedFiles() {
35
+ const main = this.get("main_artifact");
36
+ const repoInfo = main.spec.repositoryTarget;
37
+ for (const file of main.spec.files) {
38
+ if (file.userManaged) {
39
+ try {
40
+ const content = await this.__getFileContentFromProvider(main.spec.org, `/${main.spec.org}/${this.getRepoExternalName(repoInfo.ref)}/${repoInfo.branch}/${file.path}`);
41
+ const newContent = Buffer.from(content, "binary").toString("base64");
42
+ file.content = newContent;
43
+ }
44
+ catch (e) {
45
+ log(`File ${file.path} not found in repo ${repoInfo.ref.name} on branch ${repoInfo.branch}. File content not updated`);
46
+ }
47
+ }
48
+ }
49
+ }
50
+ getRepoExternalName(ref) {
51
+ const deps = this.get('deps');
52
+ const cr = deps[`${ref.kind}-${ref.name}`].cr;
53
+ return cr.metadata.annotations[catalog_common_1.default.generic.getFirestartrAnnotation('external-name')];
54
+ }
55
+ async __getFileContentFromProvider(org, url) {
56
+ const octokit = await github_1.default.getOctokitForOrg(org);
57
+ const response = await octokit.request(`GET ${url}`, { baseUrl: "https://raw.githubusercontent.com" });
58
+ return response.data;
59
+ }
60
+ }
61
+ exports.FirestartrGithubRepositoryFeature = FirestartrGithubRepositoryFeature;
@@ -0,0 +1,2 @@
1
+ import { FirestartrGithubRepositoryFeature } from "./index";
2
+ export declare function create(resource: FirestartrGithubRepositoryFeature): Promise<void>;