@stackgenhq/backstage-plugin-stackgen-backend 0.3.6-beta.1
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 +485 -0
- package/config.d.ts +39 -0
- package/dist/actions/core/assign_project_members_action.cjs.js +227 -0
- package/dist/actions/core/assign_project_members_action.cjs.js.map +1 -0
- package/dist/actions/core/create_appstack_action.cjs.js +953 -0
- package/dist/actions/core/create_appstack_action.cjs.js.map +1 -0
- package/dist/actions/core/create_project_action.cjs.js +243 -0
- package/dist/actions/core/create_project_action.cjs.js.map +1 -0
- package/dist/actions/core/download_iac_action.cjs.js +133 -0
- package/dist/actions/core/download_iac_action.cjs.js.map +1 -0
- package/dist/actions/core/set_environment_variable_values_action.cjs.js +121 -0
- package/dist/actions/core/set_environment_variable_values_action.cjs.js.map +1 -0
- package/dist/actions/core/set_state_backend_action.cjs.js +174 -0
- package/dist/actions/core/set_state_backend_action.cjs.js.map +1 -0
- package/dist/actions/exporter/export_iac_to_git_action.cjs.js +290 -0
- package/dist/actions/exporter/export_iac_to_git_action.cjs.js.map +1 -0
- package/dist/actions/exporter/list_vault_secrets_action.cjs.js +39 -0
- package/dist/actions/exporter/list_vault_secrets_action.cjs.js.map +1 -0
- package/dist/config/constants.cjs.js +23 -0
- package/dist/config/constants.cjs.js.map +1 -0
- package/dist/exporter/exportOverrides.cjs.js +27 -0
- package/dist/exporter/exportOverrides.cjs.js.map +1 -0
- package/dist/exporter/gitExporterConfigHttp.cjs.js +105 -0
- package/dist/exporter/gitExporterConfigHttp.cjs.js.map +1 -0
- package/dist/exporter/http.cjs.js +14 -0
- package/dist/exporter/http.cjs.js.map +1 -0
- package/dist/exporter/paths.cjs.js +25 -0
- package/dist/exporter/paths.cjs.js.map +1 -0
- package/dist/exporter/projectGitExporterTemplate.cjs.js +62 -0
- package/dist/exporter/projectGitExporterTemplate.cjs.js.map +1 -0
- package/dist/exporter/topologyResolve.cjs.js +71 -0
- package/dist/exporter/topologyResolve.cjs.js.map +1 -0
- package/dist/index.cjs.js +31 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +224 -0
- package/dist/lib/extractArchive.cjs.js +62 -0
- package/dist/lib/extractArchive.cjs.js.map +1 -0
- package/dist/modules/stackgenExporterScaffolderModule.cjs.js +29 -0
- package/dist/modules/stackgenExporterScaffolderModule.cjs.js.map +1 -0
- package/dist/modules/stackgenUiProxiesModule.cjs.js +366 -0
- package/dist/modules/stackgenUiProxiesModule.cjs.js.map +1 -0
- package/dist/plugin/plugin.cjs.js +136 -0
- package/dist/plugin/plugin.cjs.js.map +1 -0
- package/dist/plugin/router.cjs.js +341 -0
- package/dist/plugin/router.cjs.js.map +1 -0
- package/dist/services/MappingsService/mappingsService.cjs.js +149 -0
- package/dist/services/MappingsService/mappingsService.cjs.js.map +1 -0
- package/dist/services/StackgenService/stackgenService.cjs.js +267 -0
- package/dist/services/StackgenService/stackgenService.cjs.js.map +1 -0
- package/dist/utils/api-objects.cjs.js +205 -0
- package/dist/utils/api-objects.cjs.js.map +1 -0
- package/dist/vendor/stackgen-api-client/index.cjs.js +47681 -0
- package/dist/vendor/stackgen-api-client/index.cjs.js.map +1 -0
- package/migrations/20250131055302_init.js +24 -0
- package/migrations/20250305123456_alter_type_associations.js +23 -0
- package/package.json +86 -0
- package/templates/appstack-configure-environment.yaml +81 -0
- package/templates/appstack-from-template.yaml +76 -0
- package/templates/appstack-with-modules.yaml +69 -0
- package/templates/appstack-with-resources.yaml +81 -0
- package/templates/export-iac.yaml +97 -0
- package/templates/full-infra-setup.yaml +156 -0
- package/templates/git_export_exporter_multi_scm.yaml +123 -0
- package/templates/project-advanced.yaml +77 -0
- package/templates/project-basic.yaml +39 -0
- package/templates/project-with-members.yaml +86 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import * as _backstage_backend_plugin_api from '@backstage/backend-plugin-api';
|
|
2
|
+
import { LoggerService } from '@backstage/backend-plugin-api';
|
|
3
|
+
import * as _backstage_plugin_scaffolder_node from '@backstage/plugin-scaffolder-node';
|
|
4
|
+
import { Config } from '@backstage/config';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* stackgenPlugin backend plugin
|
|
8
|
+
*
|
|
9
|
+
* @public
|
|
10
|
+
*/
|
|
11
|
+
declare const stackGenPlugin: _backstage_backend_plugin_api.BackendFeature;
|
|
12
|
+
|
|
13
|
+
declare const createAppStackAction: (config: Config, logger: LoggerService) => _backstage_plugin_scaffolder_node.TemplateAction<{
|
|
14
|
+
appstack: {
|
|
15
|
+
resources: {
|
|
16
|
+
name?: string | undefined;
|
|
17
|
+
id?: string | undefined;
|
|
18
|
+
resourceType?: string | undefined;
|
|
19
|
+
iacType?: "Helm" | "Terraform" | undefined;
|
|
20
|
+
configuration?: Record<string, any> | undefined;
|
|
21
|
+
tfVars?: Record<string, string> | undefined;
|
|
22
|
+
resourceTemplateVersionName?: string | undefined;
|
|
23
|
+
resourcePackId?: string | undefined;
|
|
24
|
+
templateId?: string | undefined;
|
|
25
|
+
children?: any[] | undefined;
|
|
26
|
+
baseId?: string | undefined;
|
|
27
|
+
label?: string | undefined;
|
|
28
|
+
versionName?: string | undefined;
|
|
29
|
+
moduleName?: string | undefined;
|
|
30
|
+
}[];
|
|
31
|
+
teamId: string;
|
|
32
|
+
name?: string | undefined;
|
|
33
|
+
cloudProvider?: string | undefined;
|
|
34
|
+
appstackName?: string | undefined;
|
|
35
|
+
templateAppstackId?: string | undefined;
|
|
36
|
+
};
|
|
37
|
+
}, {
|
|
38
|
+
appstackName: string;
|
|
39
|
+
appstackId: string;
|
|
40
|
+
appStackURL: string;
|
|
41
|
+
topologyId?: string | undefined;
|
|
42
|
+
}, "v2">;
|
|
43
|
+
|
|
44
|
+
declare const createProjectAction: (config: Config, logger: LoggerService) => _backstage_plugin_scaffolder_node.TemplateAction<{
|
|
45
|
+
project: {
|
|
46
|
+
name: string;
|
|
47
|
+
description: string;
|
|
48
|
+
gitConfig?: {
|
|
49
|
+
default?: boolean | undefined;
|
|
50
|
+
type?: string | undefined;
|
|
51
|
+
name?: string | undefined;
|
|
52
|
+
parameters?: {
|
|
53
|
+
path?: string | undefined;
|
|
54
|
+
scmType?: "GITHUB" | "GITLAB" | "BITBUCKET" | "AZUREDEV" | undefined;
|
|
55
|
+
repoUrl?: string | undefined;
|
|
56
|
+
targetBranch?: string | undefined;
|
|
57
|
+
} | undefined;
|
|
58
|
+
vaultReference?: string | undefined;
|
|
59
|
+
} | undefined;
|
|
60
|
+
environmentConfig?: {
|
|
61
|
+
name?: string | undefined;
|
|
62
|
+
environmentTemplates?: {
|
|
63
|
+
name?: string | undefined;
|
|
64
|
+
color?: string | undefined;
|
|
65
|
+
stateBackendTemplate?: {
|
|
66
|
+
type?: "S3" | "GCS" | "AZURERM" | "LOCAL" | "POSTGRES" | "REMOTE" | "CLOUD" | undefined;
|
|
67
|
+
configJson?: string | undefined;
|
|
68
|
+
hcl?: string | undefined;
|
|
69
|
+
editorMode?: boolean | undefined;
|
|
70
|
+
} | undefined;
|
|
71
|
+
}[] | undefined;
|
|
72
|
+
variables?: {
|
|
73
|
+
type?: string | undefined;
|
|
74
|
+
name?: string | undefined;
|
|
75
|
+
defaultValueJson?: string | undefined;
|
|
76
|
+
description?: string | undefined;
|
|
77
|
+
}[] | undefined;
|
|
78
|
+
variableOverrides?: {
|
|
79
|
+
variableName?: string | undefined;
|
|
80
|
+
environmentTemplateName?: string | undefined;
|
|
81
|
+
valueJson?: string | undefined;
|
|
82
|
+
}[] | undefined;
|
|
83
|
+
} | undefined;
|
|
84
|
+
};
|
|
85
|
+
}, {
|
|
86
|
+
teamId: string;
|
|
87
|
+
projectId: string;
|
|
88
|
+
projectName: string;
|
|
89
|
+
alreadyExisted: boolean;
|
|
90
|
+
projectURL: string;
|
|
91
|
+
}, "v2">;
|
|
92
|
+
|
|
93
|
+
declare const downloadIaCAction: (config: Config, logger: LoggerService) => _backstage_plugin_scaffolder_node.TemplateAction<{
|
|
94
|
+
teamId: string;
|
|
95
|
+
extractedIaCPath: string;
|
|
96
|
+
appstackName?: string | undefined;
|
|
97
|
+
appstackId?: string | undefined;
|
|
98
|
+
topologyId?: string | undefined;
|
|
99
|
+
}, {
|
|
100
|
+
extractedIacPath: string;
|
|
101
|
+
}, "v2">;
|
|
102
|
+
|
|
103
|
+
declare const setStateBackendAction: (config: Config, logger: LoggerService) => _backstage_plugin_scaffolder_node.TemplateAction<{
|
|
104
|
+
color: string;
|
|
105
|
+
variables: {
|
|
106
|
+
type: string;
|
|
107
|
+
name: string;
|
|
108
|
+
defaultValueJson?: string | undefined;
|
|
109
|
+
description?: string | undefined;
|
|
110
|
+
}[];
|
|
111
|
+
teamId: string;
|
|
112
|
+
environmentName: string;
|
|
113
|
+
variableValues: {
|
|
114
|
+
value: string;
|
|
115
|
+
name: string;
|
|
116
|
+
}[];
|
|
117
|
+
stateBackend: {
|
|
118
|
+
type: "S3" | "GCS" | "AZURERM" | "LOCAL" | "POSTGRES" | "REMOTE" | "CLOUD";
|
|
119
|
+
config: Record<string, string>;
|
|
120
|
+
};
|
|
121
|
+
appstackName?: string | undefined;
|
|
122
|
+
topologyId?: string | undefined;
|
|
123
|
+
}, {
|
|
124
|
+
success: boolean;
|
|
125
|
+
environmentId?: string | undefined;
|
|
126
|
+
}, "v2">;
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Assigns users and/or groups from UserGroupSelect to a StackGen project.
|
|
130
|
+
* Uses the same OrgManagement APIs as appcd-ui project membership.
|
|
131
|
+
*/
|
|
132
|
+
declare const assignProjectMembersAction: (config: Config, logger: LoggerService) => _backstage_plugin_scaffolder_node.TemplateAction<{
|
|
133
|
+
projectId: string;
|
|
134
|
+
members: {
|
|
135
|
+
type: "user" | "group";
|
|
136
|
+
id: string;
|
|
137
|
+
label?: string | undefined;
|
|
138
|
+
}[];
|
|
139
|
+
roleId?: string | undefined;
|
|
140
|
+
}, {
|
|
141
|
+
assignedUsers: number;
|
|
142
|
+
assignedGroups: number;
|
|
143
|
+
assignedUsersText: string;
|
|
144
|
+
assignedGroupsText: string;
|
|
145
|
+
roleId?: string | undefined;
|
|
146
|
+
}, "v2">;
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Applies VariableSelect values onto an existing environment profile
|
|
150
|
+
* (consumption / override), matching appcd-ui TF env value updates.
|
|
151
|
+
*/
|
|
152
|
+
declare const setEnvironmentVariableValuesAction: (config: Config, logger: LoggerService) => _backstage_plugin_scaffolder_node.TemplateAction<{
|
|
153
|
+
teamId: string;
|
|
154
|
+
variableValues: {
|
|
155
|
+
value: string;
|
|
156
|
+
name: string;
|
|
157
|
+
}[];
|
|
158
|
+
environmentId: string;
|
|
159
|
+
appstackName?: string | undefined;
|
|
160
|
+
topologyId?: string | undefined;
|
|
161
|
+
}, {
|
|
162
|
+
topologyId: string;
|
|
163
|
+
environmentId: string;
|
|
164
|
+
updatedCount: number;
|
|
165
|
+
updatedVariablesText: string;
|
|
166
|
+
}, "v2">;
|
|
167
|
+
|
|
168
|
+
declare const exportAppStackToGitAction: (config: Config, _logger: LoggerService) => _backstage_plugin_scaffolder_node.TemplateAction<{
|
|
169
|
+
appstackName: string;
|
|
170
|
+
teamId: string;
|
|
171
|
+
appstackId?: string | undefined;
|
|
172
|
+
gitConfig?: {
|
|
173
|
+
parameters: {
|
|
174
|
+
scmType: string;
|
|
175
|
+
repoUrl: string;
|
|
176
|
+
path?: string | undefined;
|
|
177
|
+
targetBranch?: string | undefined;
|
|
178
|
+
};
|
|
179
|
+
vaultReference: string;
|
|
180
|
+
default?: boolean | undefined;
|
|
181
|
+
type?: string | undefined;
|
|
182
|
+
name?: string | undefined;
|
|
183
|
+
} | undefined;
|
|
184
|
+
topologyId?: string | undefined;
|
|
185
|
+
configId?: string | undefined;
|
|
186
|
+
baseBranch?: string | undefined;
|
|
187
|
+
pushBranch?: string | undefined;
|
|
188
|
+
useSameBranch?: boolean | undefined;
|
|
189
|
+
createPr?: boolean | undefined;
|
|
190
|
+
overrides?: {
|
|
191
|
+
value: string;
|
|
192
|
+
key: string;
|
|
193
|
+
}[] | undefined;
|
|
194
|
+
}, {
|
|
195
|
+
pullRequestUrl?: string | undefined;
|
|
196
|
+
externalLink?: string | undefined;
|
|
197
|
+
committedBranch?: string | undefined;
|
|
198
|
+
notes?: string | undefined;
|
|
199
|
+
}, "v2">;
|
|
200
|
+
|
|
201
|
+
declare function listVaultSecretsAction(config: Config, _logger: LoggerService): _backstage_plugin_scaffolder_node.TemplateAction<{
|
|
202
|
+
name?: string | undefined;
|
|
203
|
+
orgId?: string | undefined;
|
|
204
|
+
category?: string | undefined;
|
|
205
|
+
subcategory?: string | undefined;
|
|
206
|
+
}, {
|
|
207
|
+
secretsJson: string;
|
|
208
|
+
}, "v2">;
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Proxies StackGen HTTP APIs used by scaffolder custom fields
|
|
212
|
+
* (`/vault-secrets`, `/environment-profiles`, `/users`, `/user-groups`,
|
|
213
|
+
* `/modules`, `/variables`, `/exporter-git-configs`, `/export-history`).
|
|
214
|
+
* Mounted on the stackgen backend plugin HTTP router.
|
|
215
|
+
*/
|
|
216
|
+
declare const stackgenUiProxiesModule: _backstage_backend_plugin_api.BackendFeature;
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Registers stack-exporter git export (`stackGen:exportToGit`) and vault listing (`stackGen:listVaultSecrets`).
|
|
220
|
+
* Add with `backend.add(stackgenExporterScaffolderModule)` alongside the main stackgen plugin.
|
|
221
|
+
*/
|
|
222
|
+
declare const stackgenExporterScaffolderModule: _backstage_backend_plugin_api.BackendFeature;
|
|
223
|
+
|
|
224
|
+
export { assignProjectMembersAction, createAppStackAction, createProjectAction, stackGenPlugin as default, downloadIaCAction, exportAppStackToGitAction, listVaultSecretsAction, setEnvironmentVariableValuesAction, setStateBackendAction, stackgenExporterScaffolderModule, stackgenUiProxiesModule, stackgenUiProxiesModule as stackgenVaultSecretsModule };
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var path = require('path');
|
|
4
|
+
var fs = require('fs/promises');
|
|
5
|
+
|
|
6
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
7
|
+
|
|
8
|
+
var path__default = /*#__PURE__*/_interopDefaultCompat(path);
|
|
9
|
+
var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
|
|
10
|
+
|
|
11
|
+
function isPathInsideRoot(root, candidate) {
|
|
12
|
+
const resolvedRoot = path__default.default.resolve(root);
|
|
13
|
+
const resolvedCandidate = path__default.default.resolve(candidate);
|
|
14
|
+
const relative = path__default.default.relative(resolvedRoot, resolvedCandidate);
|
|
15
|
+
return relative === "" || relative !== ".." && !relative.startsWith(`..${path__default.default.sep}`) && !path__default.default.isAbsolute(relative);
|
|
16
|
+
}
|
|
17
|
+
async function assertExtractedTreeStaysInside(destination) {
|
|
18
|
+
const root = path__default.default.resolve(destination);
|
|
19
|
+
const stack = [root];
|
|
20
|
+
while (stack.length > 0) {
|
|
21
|
+
const current = stack.pop();
|
|
22
|
+
const entries = await fs__default.default.readdir(current, { withFileTypes: true });
|
|
23
|
+
for (const entry of entries) {
|
|
24
|
+
const entryPath = path__default.default.join(current, entry.name);
|
|
25
|
+
if (!isPathInsideRoot(root, entryPath)) {
|
|
26
|
+
throw new Error(
|
|
27
|
+
`Refusing extracted path outside destination: ${entryPath}`
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
if (entry.isSymbolicLink()) {
|
|
31
|
+
const linkTarget = await fs__default.default.readlink(entryPath);
|
|
32
|
+
const resolvedTarget = path__default.default.resolve(
|
|
33
|
+
path__default.default.dirname(entryPath),
|
|
34
|
+
linkTarget
|
|
35
|
+
);
|
|
36
|
+
if (!isPathInsideRoot(root, resolvedTarget)) {
|
|
37
|
+
throw new Error(
|
|
38
|
+
`Refusing extracted symlink escaping destination: ${entryPath} -> ${linkTarget}`
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
if (entry.isDirectory()) {
|
|
44
|
+
stack.push(entryPath);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async function extractArchiveToDir(archivePath, destination) {
|
|
50
|
+
const { default: decompress } = await import('@xhmikosr/decompress');
|
|
51
|
+
await decompress(archivePath, destination);
|
|
52
|
+
await assertExtractedTreeStaysInside(destination);
|
|
53
|
+
const files = await fs__default.default.readdir(destination);
|
|
54
|
+
if (files.length === 0) {
|
|
55
|
+
throw new Error(`No files found in ${destination} after decompression`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
exports.assertExtractedTreeStaysInside = assertExtractedTreeStaysInside;
|
|
60
|
+
exports.extractArchiveToDir = extractArchiveToDir;
|
|
61
|
+
exports.isPathInsideRoot = isPathInsideRoot;
|
|
62
|
+
//# sourceMappingURL=extractArchive.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractArchive.cjs.js","sources":["../../src/lib/extractArchive.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs/promises';\n\n/**\n * Returns true when `candidate` resolves inside `root` (inclusive).\n * Used as defense-in-depth after archive extraction so Zip Slip escapes\n * cannot land outside the scaffolder workspace destination.\n */\nexport function isPathInsideRoot(root: string, candidate: string): boolean {\n const resolvedRoot = path.resolve(root);\n const resolvedCandidate = path.resolve(candidate);\n const relative = path.relative(resolvedRoot, resolvedCandidate);\n return (\n relative === '' ||\n (relative !== '..' &&\n !relative.startsWith(`..${path.sep}`) &&\n !path.isAbsolute(relative))\n );\n}\n\n/**\n * Walks `destination` and rejects entries whose real path escapes the root,\n * or whose symlink target resolves outside the root.\n * Without this check, a compromised archive library (or a future regression)\n * could write outside the intended extract directory during downloadIaC.\n */\nexport async function assertExtractedTreeStaysInside(\n destination: string,\n): Promise<void> {\n const root = path.resolve(destination);\n const stack = [root];\n\n while (stack.length > 0) {\n const current = stack.pop() as string;\n const entries = await fs.readdir(current, { withFileTypes: true });\n\n for (const entry of entries) {\n const entryPath = path.join(current, entry.name);\n if (!isPathInsideRoot(root, entryPath)) {\n throw new Error(\n `Refusing extracted path outside destination: ${entryPath}`,\n );\n }\n\n if (entry.isSymbolicLink()) {\n const linkTarget = await fs.readlink(entryPath);\n const resolvedTarget = path.resolve(\n path.dirname(entryPath),\n linkTarget,\n );\n if (!isPathInsideRoot(root, resolvedTarget)) {\n throw new Error(\n `Refusing extracted symlink escaping destination: ${entryPath} -> ${linkTarget}`,\n );\n }\n continue;\n }\n\n if (entry.isDirectory()) {\n stack.push(entryPath);\n }\n }\n }\n}\n\n/**\n * Extracts an archive into `destination` using the maintained\n * `@xhmikosr/decompress` fork (fixes CVE-2026-53486 / CVE-2026-10732).\n * Dynamic import is required because the fork is ESM-only while this\n * Backstage package publishes CommonJS.\n */\nexport async function extractArchiveToDir(\n archivePath: string,\n destination: string,\n): Promise<void> {\n const { default: decompress } = await import('@xhmikosr/decompress');\n await decompress(archivePath, destination);\n await assertExtractedTreeStaysInside(destination);\n\n const files = await fs.readdir(destination);\n if (files.length === 0) {\n throw new Error(`No files found in ${destination} after decompression`);\n }\n}\n"],"names":["path","fs"],"mappings":";;;;;;;;;;AAQO,SAAS,gBAAA,CAAiB,MAAc,SAAA,EAA4B;AACzE,EAAA,MAAM,YAAA,GAAeA,qBAAA,CAAK,OAAA,CAAQ,IAAI,CAAA;AACtC,EAAA,MAAM,iBAAA,GAAoBA,qBAAA,CAAK,OAAA,CAAQ,SAAS,CAAA;AAChD,EAAA,MAAM,QAAA,GAAWA,qBAAA,CAAK,QAAA,CAAS,YAAA,EAAc,iBAAiB,CAAA;AAC9D,EAAA,OACE,QAAA,KAAa,EAAA,IACZ,QAAA,KAAa,IAAA,IACZ,CAAC,QAAA,CAAS,UAAA,CAAW,CAAA,EAAA,EAAKA,qBAAA,CAAK,GAAG,CAAA,CAAE,CAAA,IACpC,CAACA,qBAAA,CAAK,WAAW,QAAQ,CAAA;AAE/B;AAQA,eAAsB,+BACpB,WAAA,EACe;AACf,EAAA,MAAM,IAAA,GAAOA,qBAAA,CAAK,OAAA,CAAQ,WAAW,CAAA;AACrC,EAAA,MAAM,KAAA,GAAQ,CAAC,IAAI,CAAA;AAEnB,EAAA,OAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AACvB,IAAA,MAAM,OAAA,GAAU,MAAM,GAAA,EAAI;AAC1B,IAAA,MAAM,OAAA,GAAU,MAAMC,mBAAA,CAAG,OAAA,CAAQ,SAAS,EAAE,aAAA,EAAe,MAAM,CAAA;AAEjE,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,MAAM,SAAA,GAAYD,qBAAA,CAAK,IAAA,CAAK,OAAA,EAAS,MAAM,IAAI,CAAA;AAC/C,MAAA,IAAI,CAAC,gBAAA,CAAiB,IAAA,EAAM,SAAS,CAAA,EAAG;AACtC,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,gDAAgD,SAAS,CAAA;AAAA,SAC3D;AAAA,MACF;AAEA,MAAA,IAAI,KAAA,CAAM,gBAAe,EAAG;AAC1B,QAAA,MAAM,UAAA,GAAa,MAAMC,mBAAA,CAAG,QAAA,CAAS,SAAS,CAAA;AAC9C,QAAA,MAAM,iBAAiBD,qBAAA,CAAK,OAAA;AAAA,UAC1BA,qBAAA,CAAK,QAAQ,SAAS,CAAA;AAAA,UACtB;AAAA,SACF;AACA,QAAA,IAAI,CAAC,gBAAA,CAAiB,IAAA,EAAM,cAAc,CAAA,EAAG;AAC3C,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,CAAA,iDAAA,EAAoD,SAAS,CAAA,IAAA,EAAO,UAAU,CAAA;AAAA,WAChF;AAAA,QACF;AACA,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,KAAA,CAAM,aAAY,EAAG;AACvB,QAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AACF;AAQA,eAAsB,mBAAA,CACpB,aACA,WAAA,EACe;AACf,EAAA,MAAM,EAAE,OAAA,EAAS,UAAA,EAAW,GAAI,MAAM,OAAO,sBAAsB,CAAA;AACnE,EAAA,MAAM,UAAA,CAAW,aAAa,WAAW,CAAA;AACzC,EAAA,MAAM,+BAA+B,WAAW,CAAA;AAEhD,EAAA,MAAM,KAAA,GAAQ,MAAMC,mBAAA,CAAG,OAAA,CAAQ,WAAW,CAAA;AAC1C,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,WAAW,CAAA,oBAAA,CAAsB,CAAA;AAAA,EACxE;AACF;;;;;;"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var backendPluginApi = require('@backstage/backend-plugin-api');
|
|
4
|
+
var pluginScaffolderNode = require('@backstage/plugin-scaffolder-node');
|
|
5
|
+
var export_iac_to_git_action = require('../actions/exporter/export_iac_to_git_action.cjs.js');
|
|
6
|
+
var list_vault_secrets_action = require('../actions/exporter/list_vault_secrets_action.cjs.js');
|
|
7
|
+
|
|
8
|
+
const stackgenExporterScaffolderModule = backendPluginApi.createBackendModule({
|
|
9
|
+
pluginId: "scaffolder",
|
|
10
|
+
moduleId: "stackgen-exporter-actions",
|
|
11
|
+
register(env) {
|
|
12
|
+
env.registerInit({
|
|
13
|
+
deps: {
|
|
14
|
+
scaffolder: pluginScaffolderNode.scaffolderActionsExtensionPoint,
|
|
15
|
+
config: backendPluginApi.coreServices.rootConfig,
|
|
16
|
+
logger: backendPluginApi.coreServices.logger
|
|
17
|
+
},
|
|
18
|
+
async init({ scaffolder, config, logger }) {
|
|
19
|
+
scaffolder.addActions(
|
|
20
|
+
export_iac_to_git_action.exportAppStackToGitAction(config),
|
|
21
|
+
list_vault_secrets_action.listVaultSecretsAction(config)
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
exports.stackgenExporterScaffolderModule = stackgenExporterScaffolderModule;
|
|
29
|
+
//# sourceMappingURL=stackgenExporterScaffolderModule.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stackgenExporterScaffolderModule.cjs.js","sources":["../../src/modules/stackgenExporterScaffolderModule.ts"],"sourcesContent":["import {\n coreServices,\n createBackendModule,\n} from '@backstage/backend-plugin-api';\nimport { scaffolderActionsExtensionPoint } from '@backstage/plugin-scaffolder-node';\nimport {\n exportAppStackToGitAction,\n listVaultSecretsAction,\n} from '../actions/exporter';\n\n/**\n * Registers stack-exporter git export (`stackGen:exportToGit`) and vault listing (`stackGen:listVaultSecrets`).\n * Add with `backend.add(stackgenExporterScaffolderModule)` alongside the main stackgen plugin.\n */\nexport const stackgenExporterScaffolderModule = createBackendModule({\n pluginId: 'scaffolder',\n moduleId: 'stackgen-exporter-actions',\n register(env) {\n env.registerInit({\n deps: {\n scaffolder: scaffolderActionsExtensionPoint,\n config: coreServices.rootConfig,\n logger: coreServices.logger,\n },\n async init({ scaffolder, config, logger }) {\n scaffolder.addActions(\n exportAppStackToGitAction(config, logger),\n listVaultSecretsAction(config, logger),\n );\n },\n });\n },\n});\n"],"names":["createBackendModule","scaffolderActionsExtensionPoint","coreServices","exportAppStackToGitAction","listVaultSecretsAction"],"mappings":";;;;;;;AAcO,MAAM,mCAAmCA,oCAAA,CAAoB;AAAA,EAClE,QAAA,EAAU,YAAA;AAAA,EACV,QAAA,EAAU,2BAAA;AAAA,EACV,SAAS,GAAA,EAAK;AACZ,IAAA,GAAA,CAAI,YAAA,CAAa;AAAA,MACf,IAAA,EAAM;AAAA,QACJ,UAAA,EAAYC,oDAAA;AAAA,QACZ,QAAQC,6BAAA,CAAa,UAAA;AAAA,QACrB,QAAQA,6BAAA,CAAa;AAAA,OACvB;AAAA,MACA,MAAM,IAAA,CAAK,EAAE,UAAA,EAAY,MAAA,EAAQ,QAAO,EAAG;AACzC,QAAA,UAAA,CAAW,UAAA;AAAA,UACTC,kDAAA,CAA0B,MAAc,CAAA;AAAA,UACxCC,gDAAA,CAAuB,MAAc;AAAA,SACvC;AAAA,MACF;AAAA,KACD,CAAA;AAAA,EACH;AACF,CAAC;;;;"}
|