@backstage/plugin-scaffolder-backend 1.23.1-next.2 → 1.24.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.
- package/CHANGELOG.md +71 -0
- package/alpha/package.json +1 -1
- package/dist/alpha.cjs.js +2 -1
- package/dist/alpha.cjs.js.map +1 -1
- package/dist/cjs/{router-aU_OCgqT.cjs.js → router-DlESPVAB.cjs.js} +67 -13
- package/dist/cjs/router-DlESPVAB.cjs.js.map +1 -0
- package/dist/index.cjs.js +2 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +9 -10
- package/package.json +29 -27
- package/dist/cjs/router-aU_OCgqT.cjs.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,76 @@
|
|
|
1
1
|
# @backstage/plugin-scaffolder-backend
|
|
2
2
|
|
|
3
|
+
## 1.24.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- fc24d9e: Stop using `@backstage/backend-tasks` as it will be deleted in near future.
|
|
8
|
+
- dcd6a79: Added OpenTelemetry support to Scaffolder metrics
|
|
9
|
+
|
|
10
|
+
### Patch Changes
|
|
11
|
+
|
|
12
|
+
- 389f5a4: Update deprecated url-reader-related imports.
|
|
13
|
+
- c544f81: Add support for status filtering in scaffolder tasks endpoint
|
|
14
|
+
- b63d378: Update internal imports
|
|
15
|
+
- ef87e06: Fix scaffolder action `catalog:write` to write to directories that don't already exist
|
|
16
|
+
- Updated dependencies
|
|
17
|
+
- @backstage/backend-defaults@0.4.2
|
|
18
|
+
- @backstage/plugin-scaffolder-backend-module-github@0.4.1
|
|
19
|
+
- @backstage/backend-plugin-api@0.8.0
|
|
20
|
+
- @backstage/backend-common@0.24.0
|
|
21
|
+
- @backstage/plugin-scaffolder-node@0.4.9
|
|
22
|
+
- @backstage/plugin-permission-common@0.8.1
|
|
23
|
+
- @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.13
|
|
24
|
+
- @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.13
|
|
25
|
+
- @backstage/plugin-scaffolder-backend-module-bitbucket@0.2.13
|
|
26
|
+
- @backstage/plugin-scaffolder-backend-module-gerrit@0.1.15
|
|
27
|
+
- @backstage/plugin-scaffolder-backend-module-gitea@0.1.13
|
|
28
|
+
- @backstage/plugin-auth-node@0.5.0
|
|
29
|
+
- @backstage/plugin-scaffolder-backend-module-azure@0.1.15
|
|
30
|
+
- @backstage/plugin-permission-node@0.8.1
|
|
31
|
+
- @backstage/plugin-scaffolder-backend-module-gitlab@0.4.5
|
|
32
|
+
- @backstage/plugin-catalog-node@1.12.5
|
|
33
|
+
- @backstage/integration@1.14.0
|
|
34
|
+
- @backstage/plugin-bitbucket-cloud-common@0.2.22
|
|
35
|
+
- @backstage/catalog-model@1.6.0
|
|
36
|
+
- @backstage/catalog-client@1.6.6
|
|
37
|
+
- @backstage/config@1.2.0
|
|
38
|
+
- @backstage/errors@1.2.4
|
|
39
|
+
- @backstage/types@1.1.1
|
|
40
|
+
- @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21
|
|
41
|
+
- @backstage/plugin-scaffolder-common@1.5.5
|
|
42
|
+
|
|
43
|
+
## 1.23.1-next.3
|
|
44
|
+
|
|
45
|
+
### Patch Changes
|
|
46
|
+
|
|
47
|
+
- Updated dependencies
|
|
48
|
+
- @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.13-next.3
|
|
49
|
+
- @backstage/plugin-scaffolder-backend-module-azure@0.1.15-next.3
|
|
50
|
+
- @backstage/plugin-scaffolder-backend-module-gitlab@0.4.5-next.3
|
|
51
|
+
- @backstage/plugin-scaffolder-backend-module-github@0.4.1-next.3
|
|
52
|
+
- @backstage/backend-plugin-api@0.8.0-next.3
|
|
53
|
+
- @backstage/backend-common@0.23.4-next.3
|
|
54
|
+
- @backstage/catalog-model@1.6.0-next.0
|
|
55
|
+
- @backstage/plugin-scaffolder-backend-module-bitbucket@0.2.13-next.3
|
|
56
|
+
- @backstage/backend-tasks@0.5.28-next.3
|
|
57
|
+
- @backstage/catalog-client@1.6.6-next.0
|
|
58
|
+
- @backstage/config@1.2.0
|
|
59
|
+
- @backstage/errors@1.2.4
|
|
60
|
+
- @backstage/integration@1.14.0-next.0
|
|
61
|
+
- @backstage/types@1.1.1
|
|
62
|
+
- @backstage/plugin-auth-node@0.5.0-next.3
|
|
63
|
+
- @backstage/plugin-bitbucket-cloud-common@0.2.22-next.1
|
|
64
|
+
- @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21-next.3
|
|
65
|
+
- @backstage/plugin-catalog-node@1.12.5-next.3
|
|
66
|
+
- @backstage/plugin-permission-common@0.8.1-next.1
|
|
67
|
+
- @backstage/plugin-permission-node@0.8.1-next.3
|
|
68
|
+
- @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.13-next.3
|
|
69
|
+
- @backstage/plugin-scaffolder-backend-module-gerrit@0.1.15-next.3
|
|
70
|
+
- @backstage/plugin-scaffolder-backend-module-gitea@0.1.13-next.3
|
|
71
|
+
- @backstage/plugin-scaffolder-common@1.5.5-next.2
|
|
72
|
+
- @backstage/plugin-scaffolder-node@0.4.9-next.3
|
|
73
|
+
|
|
3
74
|
## 1.23.1-next.2
|
|
4
75
|
|
|
5
76
|
### Patch Changes
|
package/alpha/package.json
CHANGED
package/dist/alpha.cjs.js
CHANGED
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var alpha = require('@backstage/plugin-scaffolder-common/alpha');
|
|
6
6
|
var pluginPermissionNode = require('@backstage/plugin-permission-node');
|
|
7
|
-
var router = require('./cjs/router-
|
|
7
|
+
var router = require('./cjs/router-DlESPVAB.cjs.js');
|
|
8
8
|
var backendPluginApi = require('@backstage/backend-plugin-api');
|
|
9
9
|
var backendCommon = require('@backstage/backend-common');
|
|
10
10
|
var integration = require('@backstage/integration');
|
|
@@ -42,6 +42,7 @@ require('uuid');
|
|
|
42
42
|
require('winston');
|
|
43
43
|
require('nunjucks');
|
|
44
44
|
require('stream');
|
|
45
|
+
require('@opentelemetry/api');
|
|
45
46
|
require('prom-client');
|
|
46
47
|
require('@backstage/plugin-permission-common');
|
|
47
48
|
require('winston-transport');
|
package/dist/alpha.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alpha.cjs.js","sources":["../src/service/conditionExports.ts","../src/ScaffolderPlugin.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n RESOURCE_TYPE_SCAFFOLDER_TEMPLATE,\n RESOURCE_TYPE_SCAFFOLDER_ACTION,\n} from '@backstage/plugin-scaffolder-common/alpha';\nimport { createConditionExports } from '@backstage/plugin-permission-node';\nimport { scaffolderTemplateRules, scaffolderActionRules } from './rules';\n\nconst templateConditionExports = createConditionExports({\n pluginId: 'scaffolder',\n resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE,\n rules: scaffolderTemplateRules,\n});\n\nconst actionsConditionExports = createConditionExports({\n pluginId: 'scaffolder',\n resourceType: RESOURCE_TYPE_SCAFFOLDER_ACTION,\n rules: scaffolderActionRules,\n});\n\n/**\n * `createScaffolderTemplateConditionalDecision` can be used when authoring policies to\n * create conditional decisions. It requires a permission of type\n * `ResourcePermission<'scaffolder-template'>` to be passed as the first parameter.\n * It's recommended that you use the provided `isResourcePermission` and\n * `isPermission` helper methods to narrow the type of the permission passed to\n * the handle method as shown below.\n *\n * ```\n * // MyAuthorizationPolicy.ts\n * ...\n * import { createScaffolderPolicyDecision } from '@backstage/plugin-scaffolder-backend';\n * import { RESOURCE_TYPE_SCAFFOLDER_TEMPLATE } from '@backstage/plugin-scaffolder-common';\n *\n * class MyAuthorizationPolicy implements PermissionPolicy {\n * async handle(request, user) {\n * ...\n *\n * if (isResourcePermission(request.permission, RESOURCE_TYPE_SCAFFOLDER_TEMPLATE)) {\n * return createScaffolderConditionalDecision(\n * request.permission,\n * { anyOf: [...insert conditions here...] }\n * );\n * }\n *\n * ...\n * }\n *\n * ```\n *\n * @alpha\n */\nexport const createScaffolderTemplateConditionalDecision =\n templateConditionExports.createConditionalDecision;\n\n/**\n * These conditions are used when creating conditional decisions for scaffolder\n * templates that are returned by authorization policies.\n *\n * @alpha\n */\nexport const scaffolderTemplateConditions = templateConditionExports.conditions;\n\n/**\n * @alpha\n */\nexport const createScaffolderActionConditionalDecision =\n actionsConditionExports.createConditionalDecision;\n\n/**\n *\n * These conditions are used when creating conditional decisions for scaffolder\n * actions that are returned by authorization policies.\n *\n * @alpha\n */\nexport const scaffolderActionConditions = actionsConditionExports.conditions;\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n createBackendPlugin,\n coreServices,\n} from '@backstage/backend-plugin-api';\nimport { loggerToWinstonLogger } from '@backstage/backend-common';\nimport { ScmIntegrations } from '@backstage/integration';\nimport { catalogServiceRef } from '@backstage/plugin-catalog-node/alpha';\nimport {\n TaskBroker,\n TemplateAction,\n TemplateFilter,\n TemplateGlobal,\n} from '@backstage/plugin-scaffolder-node';\nimport {\n AutocompleteHandler,\n scaffolderActionsExtensionPoint,\n scaffolderAutocompleteExtensionPoint,\n scaffolderTaskBrokerExtensionPoint,\n scaffolderTemplatingExtensionPoint,\n scaffolderWorkspaceProviderExtensionPoint,\n WorkspaceProvider,\n} from '@backstage/plugin-scaffolder-node/alpha';\nimport {\n createCatalogRegisterAction,\n createCatalogWriteAction,\n createDebugLogAction,\n createFetchCatalogEntityAction,\n createFetchPlainAction,\n createFetchPlainFileAction,\n createFetchTemplateAction,\n createFilesystemDeleteAction,\n createFilesystemRenameAction,\n createWaitAction,\n} from './scaffolder';\nimport { createRouter } from './service/router';\n\n/**\n * Scaffolder plugin\n *\n * @alpha\n */\nexport const scaffolderPlugin = createBackendPlugin({\n pluginId: 'scaffolder',\n register(env) {\n const addedActions = new Array<TemplateAction<any, any>>();\n env.registerExtensionPoint(scaffolderActionsExtensionPoint, {\n addActions(...newActions: TemplateAction<any>[]) {\n addedActions.push(...newActions);\n },\n });\n\n let taskBroker: TaskBroker | undefined;\n env.registerExtensionPoint(scaffolderTaskBrokerExtensionPoint, {\n setTaskBroker(newTaskBroker) {\n if (taskBroker) {\n throw new Error('Task broker may only be set once');\n }\n taskBroker = newTaskBroker;\n },\n });\n\n const additionalTemplateFilters: Record<string, TemplateFilter> = {};\n const additionalTemplateGlobals: Record<string, TemplateGlobal> = {};\n env.registerExtensionPoint(scaffolderTemplatingExtensionPoint, {\n addTemplateFilters(newFilters) {\n Object.assign(additionalTemplateFilters, newFilters);\n },\n addTemplateGlobals(newGlobals) {\n Object.assign(additionalTemplateGlobals, newGlobals);\n },\n });\n\n const autocompleteHandlers: Record<string, AutocompleteHandler> = {};\n env.registerExtensionPoint(scaffolderAutocompleteExtensionPoint, {\n addAutocompleteProvider(provider) {\n autocompleteHandlers[provider.id] = provider.handler;\n },\n });\n\n const additionalWorkspaceProviders: Record<string, WorkspaceProvider> = {};\n env.registerExtensionPoint(scaffolderWorkspaceProviderExtensionPoint, {\n addProviders(provider) {\n Object.assign(additionalWorkspaceProviders, provider);\n },\n });\n\n env.registerInit({\n deps: {\n logger: coreServices.logger,\n config: coreServices.rootConfig,\n lifecycle: coreServices.rootLifecycle,\n reader: coreServices.urlReader,\n permissions: coreServices.permissions,\n database: coreServices.database,\n auth: coreServices.auth,\n discovery: coreServices.discovery,\n httpRouter: coreServices.httpRouter,\n httpAuth: coreServices.httpAuth,\n catalogClient: catalogServiceRef,\n },\n async init({\n logger,\n config,\n lifecycle,\n reader,\n database,\n auth,\n discovery,\n httpRouter,\n httpAuth,\n catalogClient,\n permissions,\n }) {\n const log = loggerToWinstonLogger(logger);\n const integrations = ScmIntegrations.fromConfig(config);\n\n const actions = [\n // actions provided from other modules\n ...addedActions,\n\n // built-in actions for the scaffolder\n createFetchPlainAction({\n reader,\n integrations,\n }),\n createFetchPlainFileAction({\n reader,\n integrations,\n }),\n createFetchTemplateAction({\n integrations,\n reader,\n additionalTemplateFilters,\n additionalTemplateGlobals,\n }),\n createDebugLogAction(),\n createWaitAction(),\n // todo(blam): maybe these should be a -catalog module?\n createCatalogRegisterAction({ catalogClient, integrations, auth }),\n createFetchCatalogEntityAction({ catalogClient, auth }),\n createCatalogWriteAction(),\n createFilesystemDeleteAction(),\n createFilesystemRenameAction(),\n ];\n\n const actionIds = actions.map(action => action.id).join(', ');\n\n log.info(\n `Starting scaffolder with the following actions enabled ${actionIds}`,\n );\n\n const router = await createRouter({\n logger: log,\n config,\n database,\n catalogClient,\n reader,\n lifecycle,\n actions,\n taskBroker,\n additionalTemplateFilters,\n additionalTemplateGlobals,\n auth,\n httpAuth,\n discovery,\n permissions,\n autocompleteHandlers,\n additionalWorkspaceProviders,\n });\n httpRouter.use(router);\n },\n });\n },\n});\n"],"names":["createConditionExports","RESOURCE_TYPE_SCAFFOLDER_TEMPLATE","scaffolderTemplateRules","RESOURCE_TYPE_SCAFFOLDER_ACTION","scaffolderActionRules","createBackendPlugin","scaffolderActionsExtensionPoint","scaffolderTaskBrokerExtensionPoint","scaffolderTemplatingExtensionPoint","scaffolderAutocompleteExtensionPoint","scaffolderWorkspaceProviderExtensionPoint","coreServices","catalogServiceRef","loggerToWinstonLogger","ScmIntegrations","createFetchPlainAction","createFetchPlainFileAction","createFetchTemplateAction","createDebugLogAction","createWaitAction","createCatalogRegisterAction","createFetchCatalogEntityAction","createCatalogWriteAction","createFilesystemDeleteAction","createFilesystemRenameAction","router","createRouter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"alpha.cjs.js","sources":["../src/service/conditionExports.ts","../src/ScaffolderPlugin.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n RESOURCE_TYPE_SCAFFOLDER_TEMPLATE,\n RESOURCE_TYPE_SCAFFOLDER_ACTION,\n} from '@backstage/plugin-scaffolder-common/alpha';\nimport { createConditionExports } from '@backstage/plugin-permission-node';\nimport { scaffolderTemplateRules, scaffolderActionRules } from './rules';\n\nconst templateConditionExports = createConditionExports({\n pluginId: 'scaffolder',\n resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE,\n rules: scaffolderTemplateRules,\n});\n\nconst actionsConditionExports = createConditionExports({\n pluginId: 'scaffolder',\n resourceType: RESOURCE_TYPE_SCAFFOLDER_ACTION,\n rules: scaffolderActionRules,\n});\n\n/**\n * `createScaffolderTemplateConditionalDecision` can be used when authoring policies to\n * create conditional decisions. It requires a permission of type\n * `ResourcePermission<'scaffolder-template'>` to be passed as the first parameter.\n * It's recommended that you use the provided `isResourcePermission` and\n * `isPermission` helper methods to narrow the type of the permission passed to\n * the handle method as shown below.\n *\n * ```\n * // MyAuthorizationPolicy.ts\n * ...\n * import { createScaffolderPolicyDecision } from '@backstage/plugin-scaffolder-backend';\n * import { RESOURCE_TYPE_SCAFFOLDER_TEMPLATE } from '@backstage/plugin-scaffolder-common';\n *\n * class MyAuthorizationPolicy implements PermissionPolicy {\n * async handle(request, user) {\n * ...\n *\n * if (isResourcePermission(request.permission, RESOURCE_TYPE_SCAFFOLDER_TEMPLATE)) {\n * return createScaffolderConditionalDecision(\n * request.permission,\n * { anyOf: [...insert conditions here...] }\n * );\n * }\n *\n * ...\n * }\n *\n * ```\n *\n * @alpha\n */\nexport const createScaffolderTemplateConditionalDecision =\n templateConditionExports.createConditionalDecision;\n\n/**\n * These conditions are used when creating conditional decisions for scaffolder\n * templates that are returned by authorization policies.\n *\n * @alpha\n */\nexport const scaffolderTemplateConditions = templateConditionExports.conditions;\n\n/**\n * @alpha\n */\nexport const createScaffolderActionConditionalDecision =\n actionsConditionExports.createConditionalDecision;\n\n/**\n *\n * These conditions are used when creating conditional decisions for scaffolder\n * actions that are returned by authorization policies.\n *\n * @alpha\n */\nexport const scaffolderActionConditions = actionsConditionExports.conditions;\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n createBackendPlugin,\n coreServices,\n} from '@backstage/backend-plugin-api';\nimport { loggerToWinstonLogger } from '@backstage/backend-common';\nimport { ScmIntegrations } from '@backstage/integration';\nimport { catalogServiceRef } from '@backstage/plugin-catalog-node/alpha';\nimport {\n TaskBroker,\n TemplateAction,\n TemplateFilter,\n TemplateGlobal,\n} from '@backstage/plugin-scaffolder-node';\nimport {\n AutocompleteHandler,\n scaffolderActionsExtensionPoint,\n scaffolderAutocompleteExtensionPoint,\n scaffolderTaskBrokerExtensionPoint,\n scaffolderTemplatingExtensionPoint,\n scaffolderWorkspaceProviderExtensionPoint,\n WorkspaceProvider,\n} from '@backstage/plugin-scaffolder-node/alpha';\nimport {\n createCatalogRegisterAction,\n createCatalogWriteAction,\n createDebugLogAction,\n createFetchCatalogEntityAction,\n createFetchPlainAction,\n createFetchPlainFileAction,\n createFetchTemplateAction,\n createFilesystemDeleteAction,\n createFilesystemRenameAction,\n createWaitAction,\n} from './scaffolder';\nimport { createRouter } from './service/router';\n\n/**\n * Scaffolder plugin\n *\n * @alpha\n */\nexport const scaffolderPlugin = createBackendPlugin({\n pluginId: 'scaffolder',\n register(env) {\n const addedActions = new Array<TemplateAction<any, any>>();\n env.registerExtensionPoint(scaffolderActionsExtensionPoint, {\n addActions(...newActions: TemplateAction<any>[]) {\n addedActions.push(...newActions);\n },\n });\n\n let taskBroker: TaskBroker | undefined;\n env.registerExtensionPoint(scaffolderTaskBrokerExtensionPoint, {\n setTaskBroker(newTaskBroker) {\n if (taskBroker) {\n throw new Error('Task broker may only be set once');\n }\n taskBroker = newTaskBroker;\n },\n });\n\n const additionalTemplateFilters: Record<string, TemplateFilter> = {};\n const additionalTemplateGlobals: Record<string, TemplateGlobal> = {};\n env.registerExtensionPoint(scaffolderTemplatingExtensionPoint, {\n addTemplateFilters(newFilters) {\n Object.assign(additionalTemplateFilters, newFilters);\n },\n addTemplateGlobals(newGlobals) {\n Object.assign(additionalTemplateGlobals, newGlobals);\n },\n });\n\n const autocompleteHandlers: Record<string, AutocompleteHandler> = {};\n env.registerExtensionPoint(scaffolderAutocompleteExtensionPoint, {\n addAutocompleteProvider(provider) {\n autocompleteHandlers[provider.id] = provider.handler;\n },\n });\n\n const additionalWorkspaceProviders: Record<string, WorkspaceProvider> = {};\n env.registerExtensionPoint(scaffolderWorkspaceProviderExtensionPoint, {\n addProviders(provider) {\n Object.assign(additionalWorkspaceProviders, provider);\n },\n });\n\n env.registerInit({\n deps: {\n logger: coreServices.logger,\n config: coreServices.rootConfig,\n lifecycle: coreServices.rootLifecycle,\n reader: coreServices.urlReader,\n permissions: coreServices.permissions,\n database: coreServices.database,\n auth: coreServices.auth,\n discovery: coreServices.discovery,\n httpRouter: coreServices.httpRouter,\n httpAuth: coreServices.httpAuth,\n catalogClient: catalogServiceRef,\n },\n async init({\n logger,\n config,\n lifecycle,\n reader,\n database,\n auth,\n discovery,\n httpRouter,\n httpAuth,\n catalogClient,\n permissions,\n }) {\n const log = loggerToWinstonLogger(logger);\n const integrations = ScmIntegrations.fromConfig(config);\n\n const actions = [\n // actions provided from other modules\n ...addedActions,\n\n // built-in actions for the scaffolder\n createFetchPlainAction({\n reader,\n integrations,\n }),\n createFetchPlainFileAction({\n reader,\n integrations,\n }),\n createFetchTemplateAction({\n integrations,\n reader,\n additionalTemplateFilters,\n additionalTemplateGlobals,\n }),\n createDebugLogAction(),\n createWaitAction(),\n // todo(blam): maybe these should be a -catalog module?\n createCatalogRegisterAction({ catalogClient, integrations, auth }),\n createFetchCatalogEntityAction({ catalogClient, auth }),\n createCatalogWriteAction(),\n createFilesystemDeleteAction(),\n createFilesystemRenameAction(),\n ];\n\n const actionIds = actions.map(action => action.id).join(', ');\n\n log.info(\n `Starting scaffolder with the following actions enabled ${actionIds}`,\n );\n\n const router = await createRouter({\n logger: log,\n config,\n database,\n catalogClient,\n reader,\n lifecycle,\n actions,\n taskBroker,\n additionalTemplateFilters,\n additionalTemplateGlobals,\n auth,\n httpAuth,\n discovery,\n permissions,\n autocompleteHandlers,\n additionalWorkspaceProviders,\n });\n httpRouter.use(router);\n },\n });\n },\n});\n"],"names":["createConditionExports","RESOURCE_TYPE_SCAFFOLDER_TEMPLATE","scaffolderTemplateRules","RESOURCE_TYPE_SCAFFOLDER_ACTION","scaffolderActionRules","createBackendPlugin","scaffolderActionsExtensionPoint","scaffolderTaskBrokerExtensionPoint","scaffolderTemplatingExtensionPoint","scaffolderAutocompleteExtensionPoint","scaffolderWorkspaceProviderExtensionPoint","coreServices","catalogServiceRef","loggerToWinstonLogger","ScmIntegrations","createFetchPlainAction","createFetchPlainFileAction","createFetchTemplateAction","createDebugLogAction","createWaitAction","createCatalogRegisterAction","createFetchCatalogEntityAction","createCatalogWriteAction","createFilesystemDeleteAction","createFilesystemRenameAction","router","createRouter"],"mappings":"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"}
|
|
@@ -37,6 +37,7 @@ var PQueue = require('p-queue');
|
|
|
37
37
|
var winston = require('winston');
|
|
38
38
|
var nunjucks = require('nunjucks');
|
|
39
39
|
var stream = require('stream');
|
|
40
|
+
var api = require('@opentelemetry/api');
|
|
40
41
|
var pluginPermissionNode = require('@backstage/plugin-permission-node');
|
|
41
42
|
var promClient = require('prom-client');
|
|
42
43
|
var pluginPermissionCommon = require('@backstage/plugin-permission-common');
|
|
@@ -2821,33 +2822,53 @@ class NunjucksWorkflowRunner {
|
|
|
2821
2822
|
}
|
|
2822
2823
|
}
|
|
2823
2824
|
function scaffoldingTracker() {
|
|
2824
|
-
const
|
|
2825
|
+
const promTaskCount = createCounterMetric({
|
|
2825
2826
|
name: "scaffolder_task_count",
|
|
2826
2827
|
help: "Count of task runs",
|
|
2827
2828
|
labelNames: ["template", "user", "result"]
|
|
2828
2829
|
});
|
|
2829
|
-
const
|
|
2830
|
+
const promTaskDuration = createHistogramMetric({
|
|
2830
2831
|
name: "scaffolder_task_duration",
|
|
2831
2832
|
help: "Duration of a task run",
|
|
2832
2833
|
labelNames: ["template", "result"]
|
|
2833
2834
|
});
|
|
2834
|
-
const
|
|
2835
|
+
const promtStepCount = createCounterMetric({
|
|
2835
2836
|
name: "scaffolder_step_count",
|
|
2836
2837
|
help: "Count of step runs",
|
|
2837
2838
|
labelNames: ["template", "step", "result"]
|
|
2838
2839
|
});
|
|
2839
|
-
const
|
|
2840
|
+
const promStepDuration = createHistogramMetric({
|
|
2840
2841
|
name: "scaffolder_step_duration",
|
|
2841
2842
|
help: "Duration of a step runs",
|
|
2842
2843
|
labelNames: ["template", "step", "result"]
|
|
2843
2844
|
});
|
|
2845
|
+
const meter = api.metrics.getMeter("default");
|
|
2846
|
+
const taskCount = meter.createCounter("scaffolder.task.count", {
|
|
2847
|
+
description: "Count of task runs"
|
|
2848
|
+
});
|
|
2849
|
+
const taskDuration = meter.createHistogram("scaffolder.task.duration", {
|
|
2850
|
+
description: "Duration of a task run",
|
|
2851
|
+
unit: "seconds"
|
|
2852
|
+
});
|
|
2853
|
+
const stepCount = meter.createCounter("scaffolder.step.count", {
|
|
2854
|
+
description: "Count of step runs"
|
|
2855
|
+
});
|
|
2856
|
+
const stepDuration = meter.createHistogram("scaffolder.step.duration", {
|
|
2857
|
+
description: "Duration of a step runs",
|
|
2858
|
+
unit: "seconds"
|
|
2859
|
+
});
|
|
2844
2860
|
async function taskStart(task) {
|
|
2845
2861
|
await task.emitLog(`Starting up task with ${task.spec.steps.length} steps`);
|
|
2846
2862
|
const template = task.spec.templateInfo?.entityRef || "";
|
|
2847
2863
|
const user = task.spec.user?.ref || "";
|
|
2848
|
-
const
|
|
2864
|
+
const startTime = process.hrtime();
|
|
2865
|
+
const taskTimer = promTaskDuration.startTimer({
|
|
2849
2866
|
template
|
|
2850
2867
|
});
|
|
2868
|
+
function endTime() {
|
|
2869
|
+
const delta = process.hrtime(startTime);
|
|
2870
|
+
return delta[0] + delta[1] / 1e9;
|
|
2871
|
+
}
|
|
2851
2872
|
async function skipDryRun(step, action) {
|
|
2852
2873
|
task.emitLog(`Skipping because ${action.id} does not support dry-run`, {
|
|
2853
2874
|
stepId: step.id,
|
|
@@ -2855,36 +2876,48 @@ function scaffoldingTracker() {
|
|
|
2855
2876
|
});
|
|
2856
2877
|
}
|
|
2857
2878
|
async function markSuccessful() {
|
|
2858
|
-
|
|
2879
|
+
promTaskCount.inc({
|
|
2859
2880
|
template,
|
|
2860
2881
|
user,
|
|
2861
2882
|
result: "ok"
|
|
2862
2883
|
});
|
|
2863
2884
|
taskTimer({ result: "ok" });
|
|
2885
|
+
taskCount.add(1, { template, user, result: "ok" });
|
|
2886
|
+
taskDuration.record(endTime(), {
|
|
2887
|
+
result: "ok"
|
|
2888
|
+
});
|
|
2864
2889
|
}
|
|
2865
2890
|
async function markFailed(step, err) {
|
|
2866
2891
|
await task.emitLog(String(err.stack), {
|
|
2867
2892
|
stepId: step.id,
|
|
2868
2893
|
status: "failed"
|
|
2869
2894
|
});
|
|
2870
|
-
|
|
2895
|
+
promTaskCount.inc({
|
|
2871
2896
|
template,
|
|
2872
2897
|
user,
|
|
2873
2898
|
result: "failed"
|
|
2874
2899
|
});
|
|
2875
2900
|
taskTimer({ result: "failed" });
|
|
2901
|
+
taskCount.add(1, { template, user, result: "failed" });
|
|
2902
|
+
taskDuration.record(endTime(), {
|
|
2903
|
+
result: "failed"
|
|
2904
|
+
});
|
|
2876
2905
|
}
|
|
2877
2906
|
async function markCancelled(step) {
|
|
2878
2907
|
await task.emitLog(`Step ${step.id} has been cancelled.`, {
|
|
2879
2908
|
stepId: step.id,
|
|
2880
2909
|
status: "cancelled"
|
|
2881
2910
|
});
|
|
2882
|
-
|
|
2911
|
+
promTaskCount.inc({
|
|
2883
2912
|
template,
|
|
2884
2913
|
user,
|
|
2885
2914
|
result: "cancelled"
|
|
2886
2915
|
});
|
|
2887
2916
|
taskTimer({ result: "cancelled" });
|
|
2917
|
+
taskCount.add(1, { template, user, result: "cancelled" });
|
|
2918
|
+
taskDuration.record(endTime(), {
|
|
2919
|
+
result: "cancelled"
|
|
2920
|
+
});
|
|
2888
2921
|
}
|
|
2889
2922
|
return {
|
|
2890
2923
|
skipDryRun,
|
|
@@ -2899,37 +2932,54 @@ function scaffoldingTracker() {
|
|
|
2899
2932
|
status: "processing"
|
|
2900
2933
|
});
|
|
2901
2934
|
const template = task.spec.templateInfo?.entityRef || "";
|
|
2902
|
-
const
|
|
2935
|
+
const startTime = process.hrtime();
|
|
2936
|
+
const stepTimer = promStepDuration.startTimer({
|
|
2903
2937
|
template,
|
|
2904
2938
|
step: step.name
|
|
2905
2939
|
});
|
|
2940
|
+
function endTime() {
|
|
2941
|
+
const delta = process.hrtime(startTime);
|
|
2942
|
+
return delta[0] + delta[1] / 1e9;
|
|
2943
|
+
}
|
|
2906
2944
|
async function markSuccessful() {
|
|
2907
2945
|
await task.emitLog(`Finished step ${step.name}`, {
|
|
2908
2946
|
stepId: step.id,
|
|
2909
2947
|
status: "completed"
|
|
2910
2948
|
});
|
|
2911
|
-
|
|
2949
|
+
promtStepCount.inc({
|
|
2912
2950
|
template,
|
|
2913
2951
|
step: step.name,
|
|
2914
2952
|
result: "ok"
|
|
2915
2953
|
});
|
|
2916
2954
|
stepTimer({ result: "ok" });
|
|
2955
|
+
stepCount.add(1, { template, step: step.name, result: "ok" });
|
|
2956
|
+
stepDuration.record(endTime(), {
|
|
2957
|
+
result: "ok"
|
|
2958
|
+
});
|
|
2917
2959
|
}
|
|
2918
2960
|
async function markCancelled() {
|
|
2919
|
-
|
|
2961
|
+
promtStepCount.inc({
|
|
2920
2962
|
template,
|
|
2921
2963
|
step: step.name,
|
|
2922
2964
|
result: "cancelled"
|
|
2923
2965
|
});
|
|
2924
2966
|
stepTimer({ result: "cancelled" });
|
|
2967
|
+
stepCount.add(1, { template, step: step.name, result: "cancelled" });
|
|
2968
|
+
stepDuration.record(endTime(), {
|
|
2969
|
+
result: "cancelled"
|
|
2970
|
+
});
|
|
2925
2971
|
}
|
|
2926
2972
|
async function markFailed() {
|
|
2927
|
-
|
|
2973
|
+
promtStepCount.inc({
|
|
2928
2974
|
template,
|
|
2929
2975
|
step: step.name,
|
|
2930
2976
|
result: "failed"
|
|
2931
2977
|
});
|
|
2932
2978
|
stepTimer({ result: "failed" });
|
|
2979
|
+
stepCount.add(1, { template, step: step.name, result: "failed" });
|
|
2980
|
+
stepDuration.record(endTime(), {
|
|
2981
|
+
result: "failed"
|
|
2982
|
+
});
|
|
2933
2983
|
}
|
|
2934
2984
|
async function skipFalsy() {
|
|
2935
2985
|
await task.emitLog(
|
|
@@ -2937,6 +2987,10 @@ function scaffoldingTracker() {
|
|
|
2937
2987
|
{ stepId: step.id, status: "skipped" }
|
|
2938
2988
|
);
|
|
2939
2989
|
stepTimer({ result: "skipped" });
|
|
2990
|
+
stepCount.add(1, { template, step: step.name, result: "skipped" });
|
|
2991
|
+
stepDuration.record(endTime(), {
|
|
2992
|
+
result: "skipped"
|
|
2993
|
+
});
|
|
2940
2994
|
}
|
|
2941
2995
|
return {
|
|
2942
2996
|
markCancelled,
|
|
@@ -3785,4 +3839,4 @@ exports.createRouter = createRouter;
|
|
|
3785
3839
|
exports.createWaitAction = createWaitAction;
|
|
3786
3840
|
exports.scaffolderActionRules = scaffolderActionRules;
|
|
3787
3841
|
exports.scaffolderTemplateRules = scaffolderTemplateRules;
|
|
3788
|
-
//# sourceMappingURL=router-
|
|
3842
|
+
//# sourceMappingURL=router-DlESPVAB.cjs.js.map
|