@backstage-community/plugin-scaffolder-backend-module-blackduck 0.0.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/CHANGELOG.md ADDED
@@ -0,0 +1,10 @@
1
+ # @backstage-community/plugin-scaffolder-backend-module-blackduck
2
+
3
+ ## 0.0.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 638b35b: Implemented blackduck scaffolder - project creation action.
8
+ - Updated dependencies [638b35b]
9
+ - @backstage-community/plugin-blackduck-common@0.2.1
10
+ - @backstage-community/plugin-blackduck-node@0.0.1
package/README.md ADDED
@@ -0,0 +1,70 @@
1
+ # @backstage-community/plugin-scaffolder-backend-module-blackduck
2
+
3
+ Welcome to the Blackduck scaffolder module.
4
+
5
+ Available actions:
6
+
7
+ 1. `blackduck:create:project` to create Blackduck project along with version.
8
+
9
+ ## Getting Started
10
+
11
+ Before you start make sure your existing backstage instance is already setup with [BlackDuck backend plugin](https://github.com/backstage/community-plugins/tree/main/workspaces/blackduck/plugins/blackduck-backend)
12
+
13
+ ### Installation
14
+
15
+ This module needs to be added to an existing backstage instance.
16
+
17
+ ```bash
18
+ # From your Backstage root directory
19
+ yarn --cwd packages/backend add @backstage-community/plugin-scaffolder-backend-module-blackduck
20
+ ```
21
+
22
+ ### Configuration(New Backend System)
23
+
24
+ This backend plugin has support for the [new backend system](https://backstage.io/docs/backend-system/), here's how you can set that up:
25
+
26
+ In your `packages/backend/src/index.ts` make the following changes:
27
+
28
+ ```diff
29
+ import { createBackend } from '@backstage/backend-defaults';
30
+
31
+ const backend = createBackend();
32
+
33
+ // ... other feature additions
34
+
35
+ + backend.add(import('@backstage-community/plugin-scaffolder-backend-module-blackduck'));
36
+
37
+ // ...
38
+
39
+ backend.start();
40
+ ```
41
+
42
+ ### Example template
43
+
44
+ ```yaml
45
+ apiVersion: scaffolder.backstage.io/v1beta3
46
+ kind: Template
47
+ metadata:
48
+ name: blackduck-create-project
49
+ title: Blackduck Template to Create Project
50
+ description: Template to create projects in BlackDuck instance
51
+ spec:
52
+ owner: guests
53
+ type: service
54
+
55
+ parameters:
56
+ - title: Provide informance to create project
57
+ required:
58
+ - projectName
59
+ properties:
60
+ projectName:
61
+ title: Name
62
+ type: string
63
+ description: Unique name of the project
64
+ steps:
65
+ - id: blackduck-create-project
66
+ name: Blackduck Create Project
67
+ action: blackduck:create:project
68
+ input:
69
+ projectName: ${{parameters.projectName}}
70
+ ```
@@ -0,0 +1,92 @@
1
+ 'use strict';
2
+
3
+ var pluginScaffolderNode = require('@backstage/plugin-scaffolder-node');
4
+ var pluginBlackduckNode = require('@backstage-community/plugin-blackduck-node');
5
+
6
+ function createBlackduckProjectAction(blackDuckConfig, logger) {
7
+ return pluginScaffolderNode.createTemplateAction({
8
+ id: "blackduck:create:project",
9
+ description: "Create a Blackduck project",
10
+ schema: {
11
+ input: {
12
+ type: "object",
13
+ required: ["projectName"],
14
+ properties: {
15
+ projectName: {
16
+ title: "Project Name",
17
+ description: "Name of the project to be created",
18
+ type: "string"
19
+ },
20
+ projectVersion: {
21
+ title: "Project Version",
22
+ description: "Version of the project to be created",
23
+ type: "string"
24
+ },
25
+ versionPhase: {
26
+ title: "Version Phase",
27
+ description: "Phase Dev / QA / Prod",
28
+ type: "string"
29
+ },
30
+ versionDistribution: {
31
+ title: "Version Distribution",
32
+ description: "Distribution Internal / External",
33
+ type: "string"
34
+ },
35
+ instanceName: {
36
+ title: "Instance",
37
+ description: "Name of the Instance",
38
+ type: "string"
39
+ }
40
+ }
41
+ }
42
+ },
43
+ async handler(ctx) {
44
+ const {
45
+ projectName,
46
+ projectVersion,
47
+ versionPhase = "DEVELOPMENT",
48
+ versionDistribution = "INTERNAL",
49
+ instanceName = "default"
50
+ } = ctx.input;
51
+ ctx.logger.info(
52
+ `Creating BlackDuck project: ${projectName} with
53
+ version: ${projectVersion}
54
+ & phase: ${versionPhase}, distribution: ${versionDistribution} on Instance: ${instanceName}`
55
+ );
56
+ let blackduckApiUrl;
57
+ let blackduckApiToken;
58
+ try {
59
+ const hostConfig = blackDuckConfig.getHostConfigByName(instanceName);
60
+ blackduckApiUrl = hostConfig.host;
61
+ blackduckApiToken = hostConfig.token;
62
+ } catch (error) {
63
+ throw new Error("BlackDuck Config is not valid.");
64
+ }
65
+ if (!blackduckApiUrl || !blackduckApiToken) {
66
+ throw new Error("Blackduck API URL or Token not configured!");
67
+ }
68
+ const blackDuckApi = new pluginBlackduckNode.BlackDuckRestApi(
69
+ logger,
70
+ blackduckApiUrl,
71
+ blackduckApiToken
72
+ );
73
+ await blackDuckApi.auth();
74
+ const res = await blackDuckApi.createProject(
75
+ projectName,
76
+ projectVersion,
77
+ versionPhase,
78
+ versionDistribution
79
+ );
80
+ ctx.output("projectName", projectName);
81
+ ctx.output("projectVersion", projectVersion);
82
+ ctx.output("versionPhase", versionPhase);
83
+ ctx.output("versionDistribution", versionDistribution);
84
+ ctx.output("instanceName", instanceName);
85
+ ctx.output("status", `${res.status}`);
86
+ ctx.output("location", `${res.location}`);
87
+ }
88
+ });
89
+ }
90
+
91
+ exports.createBlackduckProjectAction = createBlackduckProjectAction;
92
+ //# sourceMappingURL=create-project.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-project.cjs.js","sources":["../../src/actions/create-project.ts"],"sourcesContent":["/*\n * Copyright 2024 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 */\nimport { createTemplateAction } from '@backstage/plugin-scaffolder-node';\nimport { LoggerService } from '@backstage/backend-plugin-api';\nimport {\n BlackDuckRestApi,\n BlackDuckConfig,\n} from '@backstage-community/plugin-blackduck-node';\nimport { BD_CREATE_PROJECT_API_RESPONSE } from '@backstage-community/plugin-blackduck-node';\n\n/**\n * @public\n */\nexport function createBlackduckProjectAction(\n blackDuckConfig: BlackDuckConfig,\n logger: LoggerService,\n) {\n // For more information on how to define custom actions, see\n // https://backstage.io/docs/features/software-templates/writing-custom-actions\n return createTemplateAction<{\n projectName: string;\n projectVersion?: string;\n versionPhase?: string;\n versionDistribution?: string;\n instanceName?: string;\n }>({\n id: 'blackduck:create:project',\n description: 'Create a Blackduck project',\n schema: {\n input: {\n type: 'object',\n required: ['projectName'],\n properties: {\n projectName: {\n title: 'Project Name',\n description: 'Name of the project to be created',\n type: 'string',\n },\n projectVersion: {\n title: 'Project Version',\n description: 'Version of the project to be created',\n type: 'string',\n },\n versionPhase: {\n title: 'Version Phase',\n description: 'Phase Dev / QA / Prod',\n type: 'string',\n },\n versionDistribution: {\n title: 'Version Distribution',\n description: 'Distribution Internal / External',\n type: 'string',\n },\n instanceName: {\n title: 'Instance',\n description: 'Name of the Instance',\n type: 'string',\n },\n },\n },\n },\n async handler(ctx) {\n const {\n projectName,\n projectVersion,\n versionPhase = 'DEVELOPMENT',\n versionDistribution = 'INTERNAL',\n instanceName = 'default',\n } = ctx.input;\n\n ctx.logger.info(\n `Creating BlackDuck project: ${projectName} with \n version: ${projectVersion} \n & phase: ${versionPhase}, distribution: ${versionDistribution} on Instance: ${instanceName}`,\n );\n\n let blackduckApiUrl: string;\n let blackduckApiToken: string;\n\n try {\n const hostConfig = blackDuckConfig.getHostConfigByName(instanceName);\n blackduckApiUrl = hostConfig.host;\n blackduckApiToken = hostConfig.token;\n } catch (error) {\n throw new Error('BlackDuck Config is not valid.');\n }\n\n if (!blackduckApiUrl || !blackduckApiToken) {\n throw new Error('Blackduck API URL or Token not configured!');\n }\n\n const blackDuckApi = new BlackDuckRestApi(\n logger,\n blackduckApiUrl,\n blackduckApiToken,\n );\n\n await blackDuckApi.auth();\n\n const res: BD_CREATE_PROJECT_API_RESPONSE =\n await blackDuckApi.createProject(\n projectName,\n projectVersion,\n versionPhase,\n versionDistribution,\n );\n\n ctx.output('projectName', projectName);\n ctx.output('projectVersion', projectVersion);\n ctx.output('versionPhase', versionPhase);\n ctx.output('versionDistribution', versionDistribution);\n ctx.output('instanceName', instanceName);\n ctx.output('status', `${res.status}`);\n ctx.output('location', `${res.location}`);\n },\n });\n}\n"],"names":["createTemplateAction","BlackDuckRestApi"],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var createProject = require('./actions/create-project.cjs.js');
6
+ var module$1 = require('./module.cjs.js');
7
+
8
+
9
+
10
+ exports.createBlackduckProjectAction = createProject.createBlackduckProjectAction;
11
+ exports.default = module$1.scaffolderModuleBlackduckModule;
12
+ //# sourceMappingURL=index.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
@@ -0,0 +1,23 @@
1
+ import * as _backstage_plugin_scaffolder_node from '@backstage/plugin-scaffolder-node';
2
+ import * as _backstage_types_index from '@backstage/types/index';
3
+ import * as _backstage_backend_plugin_api from '@backstage/backend-plugin-api';
4
+ import { LoggerService } from '@backstage/backend-plugin-api';
5
+ import { BlackDuckConfig } from '@backstage-community/plugin-blackduck-node';
6
+
7
+ /**
8
+ * @public
9
+ */
10
+ declare function createBlackduckProjectAction(blackDuckConfig: BlackDuckConfig, logger: LoggerService): _backstage_plugin_scaffolder_node.TemplateAction<{
11
+ projectName: string;
12
+ projectVersion?: string | undefined;
13
+ versionPhase?: string | undefined;
14
+ versionDistribution?: string | undefined;
15
+ instanceName?: string | undefined;
16
+ }, _backstage_types_index.JsonObject>;
17
+
18
+ /**
19
+ * @public
20
+ */
21
+ declare const scaffolderModuleBlackduckModule: _backstage_backend_plugin_api.BackendFeature;
22
+
23
+ export { createBlackduckProjectAction, scaffolderModuleBlackduckModule as default };
@@ -0,0 +1,29 @@
1
+ 'use strict';
2
+
3
+ var backendPluginApi = require('@backstage/backend-plugin-api');
4
+ var alpha = require('@backstage/plugin-scaffolder-node/alpha');
5
+ var createProject = require('./actions/create-project.cjs.js');
6
+ var pluginBlackduckNode = require('@backstage-community/plugin-blackduck-node');
7
+
8
+ const scaffolderModuleBlackduckModule = backendPluginApi.createBackendModule({
9
+ moduleId: "scaffolder:backend:module:blackduck",
10
+ pluginId: "scaffolder",
11
+ register({ registerInit }) {
12
+ registerInit({
13
+ deps: {
14
+ scaffolderActions: alpha.scaffolderActionsExtensionPoint,
15
+ config: backendPluginApi.coreServices.rootConfig,
16
+ logger: backendPluginApi.coreServices.logger
17
+ },
18
+ async init({ scaffolderActions, config, logger }) {
19
+ const blackDuckConfig = pluginBlackduckNode.BlackDuckConfig.fromConfig(config);
20
+ scaffolderActions.addActions(
21
+ createProject.createBlackduckProjectAction(blackDuckConfig, logger)
22
+ );
23
+ }
24
+ });
25
+ }
26
+ });
27
+
28
+ exports.scaffolderModuleBlackduckModule = scaffolderModuleBlackduckModule;
29
+ //# sourceMappingURL=module.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.cjs.js","sources":["../src/module.ts"],"sourcesContent":["/*\n * Copyright 2024 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 */\nimport {\n createBackendModule,\n coreServices,\n} from '@backstage/backend-plugin-api';\nimport { scaffolderActionsExtensionPoint } from '@backstage/plugin-scaffolder-node/alpha';\nimport { createBlackduckProjectAction } from './actions';\nimport { BlackDuckConfig } from '@backstage-community/plugin-blackduck-node';\n\n/**\n * @public\n */\nexport const scaffolderModuleBlackduckModule = createBackendModule({\n moduleId: 'scaffolder:backend:module:blackduck',\n pluginId: 'scaffolder',\n register({ registerInit }) {\n registerInit({\n deps: {\n scaffolderActions: scaffolderActionsExtensionPoint,\n config: coreServices.rootConfig,\n logger: coreServices.logger,\n },\n async init({ scaffolderActions, config, logger }) {\n const blackDuckConfig = BlackDuckConfig.fromConfig(config);\n scaffolderActions.addActions(\n createBlackduckProjectAction(blackDuckConfig, logger),\n );\n },\n });\n },\n});\n"],"names":["createBackendModule","scaffolderActionsExtensionPoint","coreServices","BlackDuckConfig","createBlackduckProjectAction"],"mappings":";;;;;;;AA0BO,MAAM,kCAAkCA,oCAAoB,CAAA;AAAA,EACjE,QAAU,EAAA,qCAAA;AAAA,EACV,QAAU,EAAA,YAAA;AAAA,EACV,QAAA,CAAS,EAAE,YAAA,EAAgB,EAAA;AACzB,IAAa,YAAA,CAAA;AAAA,MACX,IAAM,EAAA;AAAA,QACJ,iBAAmB,EAAAC,qCAAA;AAAA,QACnB,QAAQC,6BAAa,CAAA,UAAA;AAAA,QACrB,QAAQA,6BAAa,CAAA;AAAA,OACvB;AAAA,MACA,MAAM,IAAK,CAAA,EAAE,iBAAmB,EAAA,MAAA,EAAQ,QAAU,EAAA;AAChD,QAAM,MAAA,eAAA,GAAkBC,mCAAgB,CAAA,UAAA,CAAW,MAAM,CAAA;AACzD,QAAkB,iBAAA,CAAA,UAAA;AAAA,UAChBC,0CAAA,CAA6B,iBAAiB,MAAM;AAAA,SACtD;AAAA;AACF,KACD,CAAA;AAAA;AAEL,CAAC;;;;"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@backstage-community/plugin-scaffolder-backend-module-blackduck",
3
+ "description": "The blackduck module for @backstage/plugin-scaffolder-backend",
4
+ "version": "0.0.1",
5
+ "main": "dist/index.cjs.js",
6
+ "types": "dist/index.d.ts",
7
+ "license": "Apache-2.0",
8
+ "publishConfig": {
9
+ "access": "public",
10
+ "main": "dist/index.cjs.js",
11
+ "types": "dist/index.d.ts"
12
+ },
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "https://github.com/backstage/community-plugins",
16
+ "directory": "workspaces/blackduck/plugins/scaffolder-backend-module-blackduck"
17
+ },
18
+ "backstage": {
19
+ "role": "backend-plugin-module",
20
+ "pluginId": "scaffolder",
21
+ "pluginPackage": "@backstage/plugin-scaffolder-backend"
22
+ },
23
+ "scripts": {
24
+ "start": "backstage-cli package start",
25
+ "build": "backstage-cli package build",
26
+ "lint": "backstage-cli package lint",
27
+ "test": "backstage-cli package test",
28
+ "clean": "backstage-cli package clean",
29
+ "prepack": "backstage-cli package prepack",
30
+ "postpack": "backstage-cli package postpack"
31
+ },
32
+ "dependencies": {
33
+ "@backstage-community/plugin-blackduck-common": "^0.2.1",
34
+ "@backstage-community/plugin-blackduck-node": "^0.0.1",
35
+ "@backstage/backend-plugin-api": "^1.1.1",
36
+ "@backstage/plugin-scaffolder-node": "^0.6.3"
37
+ },
38
+ "devDependencies": {
39
+ "@backstage/cli": "^0.29.6",
40
+ "@backstage/plugin-scaffolder-node-test-utils": "^0.1.18"
41
+ },
42
+ "files": [
43
+ "dist"
44
+ ],
45
+ "typesVersions": {
46
+ "*": {
47
+ "index": [
48
+ "dist/index.d.ts"
49
+ ]
50
+ }
51
+ }
52
+ }