From e1d0d3d97442910ca7caa7734907fdc3f230e244 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 24 Mar 2024 08:00:45 +0000 Subject: [PATCH 1/3] build(deps-dev): bump commander from 6.2.1 to 12.0.0 Bumps [commander](https://github.com/tj/commander.js) from 6.2.1 to 12.0.0. - [Release notes](https://github.com/tj/commander.js/releases) - [Changelog](https://github.com/tj/commander.js/blob/master/CHANGELOG.md) - [Commits](https://github.com/tj/commander.js/compare/v6.2.1...v12.0.0) --- updated-dependencies: - dependency-name: commander dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- package-lock.json | 18 ++++++++++++++---- package.json | 2 +- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 19a75918425..18d68fc5184 100644 --- a/package-lock.json +++ b/package-lock.json @@ -90,7 +90,7 @@ "@typescript-eslint/parser": "5.62.0", "@typescript-eslint/typescript-estree": "7.1.1", "ajv": "^8.12.0", - "commander": "6.2.1", + "commander": "12.0.0", "css-loader": "^6.10.0", "dotenv": "16.1.3", "editorjs-html": "3.4.3", @@ -19004,6 +19004,15 @@ "node": ">=7.0.0" } }, + "node_modules/@storybook/core/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/@storybook/core/node_modules/cosmiconfig": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", @@ -27780,11 +27789,12 @@ } }, "node_modules/commander": { - "version": "6.2.1", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.0.0.tgz", + "integrity": "sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==", "dev": true, - "license": "MIT", "engines": { - "node": ">= 6" + "node": ">=18" } }, "node_modules/comment-json": { diff --git a/package.json b/package.json index 91d0c9d0381..06b9e04eb00 100644 --- a/package.json +++ b/package.json @@ -135,7 +135,7 @@ "@typescript-eslint/parser": "5.62.0", "@typescript-eslint/typescript-estree": "7.1.1", "ajv": "^8.12.0", - "commander": "6.2.1", + "commander": "12.0.0", "css-loader": "^6.10.0", "dotenv": "16.1.3", "editorjs-html": "3.4.3", From 89466df8aac5a23691b34fe4af14b07e3395857d Mon Sep 17 00:00:00 2001 From: Denys Vuika Date: Mon, 25 Mar 2024 15:23:00 -0400 Subject: [PATCH 2/3] chore: migrate CLI to latest commander library --- lib/cli/scripts/audit.ts | 17 ++- lib/cli/scripts/changelog.ts | 10 +- lib/cli/scripts/check-cs-env.ts | 29 +++-- lib/cli/scripts/check-plugin-env.ts | 58 +++++---- lib/cli/scripts/docker.ts | 4 +- lib/cli/scripts/init-aae-env.ts | 34 +++--- lib/cli/scripts/init-acs-env.ts | 35 ++++-- lib/cli/scripts/init-aps-env.ts | 150 ++++++++++++++---------- lib/cli/scripts/licenses.ts | 16 ++- lib/cli/scripts/plugins/check-env.ts | 2 +- lib/cli/scripts/plugins/plugin-model.ts | 7 -- 11 files changed, 225 insertions(+), 137 deletions(-) diff --git a/lib/cli/scripts/audit.ts b/lib/cli/scripts/audit.ts index 57dbb0513e0..51d4ffc4d4b 100644 --- a/lib/cli/scripts/audit.ts +++ b/lib/cli/scripts/audit.ts @@ -22,7 +22,14 @@ import * as ejs from 'ejs'; import * as path from 'path'; import * as fs from 'fs'; import { argv, exit } from 'node:process'; -import program from 'commander'; +import { Command } from 'commander'; + +const program = new Command(); + +interface AuditCommandArgs { + package?: string; + outDir?: string; +} /** * Audit report command @@ -44,10 +51,12 @@ export default function main(_args: string[], workingDir: string) { exit(0); } + const options = program.opts(); + let packagePath = path.resolve(workingDir, 'package.json'); - if (program.package) { - packagePath = path.resolve(program.package); + if (options.package) { + packagePath = path.resolve(options.package); } if (!fs.existsSync(packagePath)) { @@ -82,7 +91,7 @@ export default function main(_args: string[], workingDir: string) { console.error(err); reject(err); } else { - const outputPath = path.resolve(program.outDir || workingDir); + const outputPath = path.resolve(options.outDir || workingDir); const outputFile = path.join(outputPath, `audit-info-${packageJson.version}.md`); fs.writeFileSync(outputFile, mdText); diff --git a/lib/cli/scripts/changelog.ts b/lib/cli/scripts/changelog.ts index f0096250445..619056ec756 100644 --- a/lib/cli/scripts/changelog.ts +++ b/lib/cli/scripts/changelog.ts @@ -22,11 +22,13 @@ import { argv, exit } from 'node:process'; import * as shell from 'shelljs'; import * as path from 'path'; -import program from 'commander'; +import { Command } from 'commander'; import { logger } from './logger'; import * as fs from 'fs'; import * as ejs from 'ejs'; +const program = new Command(); + interface Commit { hash: string; author: string; @@ -167,8 +169,10 @@ export default function main(_args: string[], workingDir: string) { exit(0); } - const dir = path.resolve(program.dir || workingDir); - const { range, skip, max, format, output, exclude } = program; + const options = program.opts(); + + const dir = path.resolve(options.dir || workingDir); + const { range, skip, max, format, output, exclude } = options; const remote = getRemote(dir); diff --git a/lib/cli/scripts/check-cs-env.ts b/lib/cli/scripts/check-cs-env.ts index b10557e79a9..cf8c68bdff0 100755 --- a/lib/cli/scripts/check-cs-env.ts +++ b/lib/cli/scripts/check-cs-env.ts @@ -17,11 +17,21 @@ import { AlfrescoApi /*, NodesApi, UploadApi*/ } from '@alfresco/js-api'; import { argv, exit } from 'node:process'; -// import { Buffer } from 'node:buffer'; -const program = require('commander'); +import { Command } from 'commander'; import { logger } from './logger'; + +interface CheckCsEnvArgs { + host?: string; + username?: string; + password?: string; + time?: number; + retry?: number; +} + +const program = new Command(); const MAX_RETRY = 3; const TIMEOUT = 20000; + let counter = 0; let alfrescoJsApi: AlfrescoApi; @@ -40,23 +50,26 @@ export default async function main() { .option('-r, --retry [type]', 'retry ') .parse(argv); - await checkEnv(); + const opts = program.opts(); + await checkEnv(opts); // TODO: https://alfresco.atlassian.net/browse/ACS-5873 // await checkDiskSpaceFullEnv(); } /** * Check environment + * + * @param opts command options */ -async function checkEnv() { +async function checkEnv(opts?: CheckCsEnvArgs) { try { alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', - hostEcm: program.host, + hostEcm: opts.host, contextRoot: 'alfresco' }); - await alfrescoJsApi.login(program.username, program.password); + await alfrescoJsApi.login(opts.username, opts.password); } catch (error) { if (error?.error?.code === 'ETIMEDOUT') { logger.error('The env is not reachable. Terminating'); @@ -64,8 +77,8 @@ async function checkEnv() { } logger.error('Login error environment down or inaccessible'); counter++; - const retry = program.retry || MAX_RETRY; - const time = program.time || TIMEOUT; + const retry = opts.retry || MAX_RETRY; + const time = opts.time || TIMEOUT; if (retry === counter) { logger.error('Give up'); exit(1); diff --git a/lib/cli/scripts/check-plugin-env.ts b/lib/cli/scripts/check-plugin-env.ts index b78cde2708c..022ff1eb20a 100644 --- a/lib/cli/scripts/check-plugin-env.ts +++ b/lib/cli/scripts/check-plugin-env.ts @@ -16,15 +16,25 @@ */ import { argv } from 'node:process'; -import { PluginTarget } from './plugins/plugin-model'; import { CheckEnv } from './plugins/check-env'; -import program = require('commander'); +import { Command } from 'commander'; import { ProcessServiceCheckPlugin } from './plugins/process-service-check-plugin'; import { ProcessAutomationCheckPlugin } from './plugins/process-automation-check-plugin'; import { GovernanceCheckPlugin } from './plugins/governance-check-plugin'; +const program = new Command(); let pluginEnv: CheckEnv; +interface CheckPluginArgs { + host?: string; + pluginName?: 'processService' | 'processAutomation' | 'governance'; + clientId?: string; + appName?: string; + username?: string; + password?: string; + uiName?: string; +} + /** * Check environment plugin */ @@ -40,30 +50,34 @@ export default async function main() { .option('--ui, --uiName [type]', 'uiName', 'Deployed app UI type on activiti-cloud') .parse(argv); - pluginEnv = new CheckEnv(program.host, program.username, program.password, program.clientId); + const options = program.opts(); + + pluginEnv = new CheckEnv(options.host, options.username, options.password, options.clientId); await pluginEnv.checkEnv(); - if (program.pluginName === PluginTarget.processService) { - await checkProcessServicesPlugin(); + if (options.pluginName === 'processService') { + await checkProcessServicesPlugin(options); } - if (program.pluginName === PluginTarget.processAutomation) { - await checkProcessAutomationPlugin(); + if (options.pluginName === 'processAutomation') { + await checkProcessAutomationPlugin(options); } - if (program.pluginName === PluginTarget.governance) { - await checkGovernancePlugin(); + if (options.pluginName === 'governance') { + await checkGovernancePlugin(options); } } /** * Check PS plugin + * + * @param options program arguments */ -async function checkProcessServicesPlugin() { +async function checkProcessServicesPlugin(options: CheckPluginArgs) { const processServiceCheckPlugin = new ProcessServiceCheckPlugin( { - host: program.host, - name: PluginTarget.processService + host: options.host, + name: 'processService' }, pluginEnv.alfrescoJsApi ); @@ -72,14 +86,16 @@ async function checkProcessServicesPlugin() { /** * Check APA plugin + * + * @param options program arguments */ -async function checkProcessAutomationPlugin() { +async function checkProcessAutomationPlugin(options: CheckPluginArgs) { const processAutomationCheckPlugin = new ProcessAutomationCheckPlugin( { - host: program.host, - name: PluginTarget.processAutomation, - appName: program.appName, - uiName: program.uiName + host: options.host, + name: 'processAutomation', + appName: options.appName, + uiName: options.uiName }, pluginEnv.alfrescoJsApi ); @@ -88,12 +104,14 @@ async function checkProcessAutomationPlugin() { /** * Check AGS plugin + * + * @param options program arguments */ -async function checkGovernancePlugin() { +async function checkGovernancePlugin(options: CheckPluginArgs) { const governancePluginCheck = new GovernanceCheckPlugin( { - host: program.host, - name: PluginTarget.governance + host: options.host, + name: 'governance' }, pluginEnv.alfrescoJsApi ); diff --git a/lib/cli/scripts/docker.ts b/lib/cli/scripts/docker.ts index 3118db74c42..3c39cd4a236 100644 --- a/lib/cli/scripts/docker.ts +++ b/lib/cli/scripts/docker.ts @@ -19,10 +19,12 @@ import { argv, exit } from 'node:process'; import { exec } from './exec'; -import program from 'commander'; +import { Command } from 'commander'; import { logger } from './logger'; import { resolve } from 'path'; +const program = new Command(); + // eslint-disable-next-line no-shadow enum TARGETS { publish = 'publish', diff --git a/lib/cli/scripts/init-aae-env.ts b/lib/cli/scripts/init-aae-env.ts index 25de52dad3e..715f8a32d46 100755 --- a/lib/cli/scripts/init-aae-env.ts +++ b/lib/cli/scripts/init-aae-env.ts @@ -17,18 +17,21 @@ * limitations under the License. */ -import program from 'commander'; +import { Command } from 'commander'; import fetch from 'node-fetch'; import * as fs from 'fs'; import { logger } from './logger'; import { AlfrescoApi, AlfrescoApiConfig } from '@alfresco/js-api'; import { argv, exit } from 'node:process'; + +const program = new Command(); const ACTIVITI_CLOUD_APPS = require('./resources').ACTIVITI_CLOUD_APPS; let alfrescoJsApiModeler: AlfrescoApi; let alfrescoJsApiDevops: AlfrescoApi; let args: ConfigArgs; let isValid = true; + export interface ConfigArgs { modelerUsername: string; modelerPassword: string; @@ -424,7 +427,7 @@ function deploy(model: any) { * @param options token options * @returns options */ -function initializeDefaultToken(options: any): any { +function initializeDefaultToken(options: ConfigArgs): any { options.tokenEndpoint = options.tokenEndpoint.replace('${clientId}', options.clientId); return options; } @@ -680,18 +683,21 @@ async function getFileFromRemote(url: string, name: string): Promise { } return response; }) - .then((response) => new Promise((resolve, reject) => { - const outputFile = fs.createWriteStream(`${name}.zip`); - response.body.pipe(outputFile); - outputFile.on('finish', () => { - logger.info(`The file is finished downloading.`); - resolve(); - }); - outputFile.on('error', (error) => { - logger.error(`Not possible to download the project form remote`); - reject(error); - }); - })) + .then( + (response) => + new Promise((resolve, reject) => { + const outputFile = fs.createWriteStream(`${name}.zip`); + response.body.pipe(outputFile); + outputFile.on('finish', () => { + logger.info(`The file is finished downloading.`); + resolve(); + }); + outputFile.on('error', (error) => { + logger.error(`Not possible to download the project form remote`); + reject(error); + }); + }) + ) .catch((error) => { logger.error(`Failed to fetch file from remote: ${error.message}`); throw error; diff --git a/lib/cli/scripts/init-acs-env.ts b/lib/cli/scripts/init-acs-env.ts index 59c314ca9f2..149ac99d3fc 100755 --- a/lib/cli/scripts/init-acs-env.ts +++ b/lib/cli/scripts/init-acs-env.ts @@ -17,10 +17,19 @@ import { AlfrescoApi, SharedlinksApi, FavoritesApi, NodesApi, UploadApi, NodeEntry } from '@alfresco/js-api'; import { exit, argv } from 'node:process'; -const program = require('commander'); -const fs = require('fs'); -const path = require('path'); +import { Command } from 'commander'; +import * as fs from 'fs'; +import * as path from 'path'; import { logger } from './logger'; + +interface InitAcsEnvArgs { + host?: string; + clientId?: string; + username?: string; + password?: string; +} + +const program = new Command(); const MAX_RETRY = 10; let counter = 0; const TIMEOUT = 6000; @@ -40,7 +49,8 @@ export default async function main() { .option('-u, --username [type]', 'username ') .parse(argv); - await checkEnv(); + const opts = program.opts(); + await checkEnv(opts); logger.info(`***** Step initialize ACS *****`); await initializeDefaultFiles(); @@ -192,23 +202,25 @@ async function favoriteFile(nodeId: string) { /** * Check environment state + * + * @param opts command options */ -async function checkEnv() { +async function checkEnv(opts: InitAcsEnvArgs) { try { alfrescoJsApi = new AlfrescoApi({ provider: 'ALL', - hostBpm: program.host, - hostEcm: program.host, + hostBpm: opts.host, + hostEcm: opts.host, authType: 'OAUTH', oauth2: { - host: `${program.host}/auth/realms/alfresco`, - clientId: `${program.clientId}`, + host: `${opts.host}/auth/realms/alfresco`, + clientId: `${opts.clientId}`, scope: 'openid', redirectUri: '/' }, contextRoot: 'alfresco' }); - await alfrescoJsApi.login(program.username, program.password); + await alfrescoJsApi.login(opts.username, opts.password); } catch (e) { if (e.error.code === 'ETIMEDOUT') { logger.error('The env is not reachable. Terminating'); @@ -222,12 +234,11 @@ async function checkEnv() { } else { logger.error(`Retry in 1 minute attempt N ${counter}`); sleep(TIMEOUT); - await checkEnv(); + await checkEnv(opts); } } } - /** * Perform a delay * diff --git a/lib/cli/scripts/init-aps-env.ts b/lib/cli/scripts/init-aps-env.ts index fcaf6ae8481..1c482158d65 100755 --- a/lib/cli/scripts/init-aps-env.ts +++ b/lib/cli/scripts/init-aps-env.ts @@ -15,14 +15,33 @@ * limitations under the License. */ -import { AdminTenantsApi, AdminUsersApi, AlfrescoApi, TenantRepresentation, AppDefinitionsApi, RuntimeAppDefinitionsApi, UserRepresentation, AppDefinitionUpdateResultRepresentation } from '@alfresco/js-api'; +import { + AdminTenantsApi, + AdminUsersApi, + AlfrescoApi, + TenantRepresentation, + AppDefinitionsApi, + RuntimeAppDefinitionsApi, + UserRepresentation, + AppDefinitionUpdateResultRepresentation +} from '@alfresco/js-api'; import { argv, exit } from 'node:process'; import { spawnSync } from 'node:child_process'; import { createReadStream } from 'node:fs'; -const program = require('commander'); -const path = require('path'); +import { Command } from 'commander'; +import * as path from 'path'; import { logger } from './logger'; -const { throwError } = require('rxjs'); +import { throwError } from 'rxjs'; + +interface InitApsEnvArgs { + host?: string; + clientId?: string; + username?: string; + password?: string; + license?: string; +} + +const program = new Command(); const MAX_RETRY = 10; let counter = 0; const TIMEOUT = 6000; @@ -37,7 +56,6 @@ let alfrescoJsApi: AlfrescoApi; * Init APS command */ export default async function main() { - program .version('0.1.0') .option('--host [type]', 'Remote environment host') @@ -47,23 +65,25 @@ export default async function main() { .option('--license [type]', 'APS license S3 path ') .parse(argv); - await checkEnv(); + const opts = program.opts(); + await checkEnv(opts); logger.info(`***** Step 1 - Check License *****`); let licenceUploaded = false; - const hasValidLicense = await hasLicense() ; + const hasValidLicense = await hasLicense(opts); if (!hasValidLicense) { logger.info(`Aps License missing`); - const isLicenseFileDownloaded = await downloadLicenseFile(program.license); + const isLicenseFileDownloaded = await downloadLicenseFile(opts.license); if (isLicenseFileDownloaded) { - licenceUploaded = await updateLicense(); + licenceUploaded = await updateLicense(opts); } } else { licenceUploaded = true; logger.info(`Aps License present`); } - let tenantId; + + let tenantId: number; if (licenceUploaded) { logger.info(`***** Step 2 - Check Tenant *****`); logger.info(`is tenantId:${TENANT_DEFAULT_ID} with name:${TENANT_DEFAULT_NAME} present?`); @@ -75,13 +95,13 @@ export default async function main() { tenantId = await createDefaultTenant(TENANT_DEFAULT_NAME); } logger.info(`***** Step 3 - Add Content Repo *****`); - const isContentPresent = await isContentRepoPresent(TENANT_DEFAULT_ID, CONTENT_DEFAULT_NAME); + const isContentPresent = await isContentRepoPresent(opts, TENANT_DEFAULT_ID, CONTENT_DEFAULT_NAME); if (!isContentPresent) { logger.info(`No content repo with name ${CONTENT_DEFAULT_NAME} found`); - await addContentRepoWithBasic(TENANT_DEFAULT_ID, CONTENT_DEFAULT_NAME); + await addContentRepoWithBasic(opts, TENANT_DEFAULT_ID, CONTENT_DEFAULT_NAME); } logger.info(`***** Step 4 - Create users *****`); - const users = await getDefaultApsUsersFromRealm(); + const users = await getDefaultApsUsersFromRealm(opts); if (tenantId && users && users.length > 0) { for (let i = 0; i < users.length; i++) { await createUsers(tenantId, users[i]); @@ -89,19 +109,17 @@ export default async function main() { for (let i = 0; i < users.length; i++) { logger.info('Impersonate user: ' + users[i].username); await alfrescoJsApi.login(users[i].username, 'password'); - await authorizeUserToContentRepo(users[i]); + await authorizeUserToContentRepo(opts, users[i]); const defaultUser = 'hruser'; if (users[i].username.includes(defaultUser)) { logger.info(`***** Step initialize APS apps for user ${defaultUser} *****`); await initializeDefaultApps(); } - } } else { logger.info('Something went wrong. Was not able to create the users'); } - } catch (error) { logger.info(`Aps something went wrong. Tenant id ${tenantId}`); exit(1); @@ -110,7 +128,6 @@ export default async function main() { logger.info('APS license error: check the configuration'); exit(1); } - } /** @@ -131,23 +148,25 @@ async function initializeDefaultApps() { /** * Check environment + * + * @param opts command options */ -async function checkEnv() { +async function checkEnv(opts: InitApsEnvArgs) { try { alfrescoJsApi = new AlfrescoApi({ provider: 'ALL', - hostBpm: program.host, - hostEcm: program.host, + hostBpm: opts.host, + hostEcm: opts.host, authType: 'OAUTH', contextRoot: 'alfresco', oauth2: { - host: `${program.host}/auth/realms/alfresco`, - clientId: `${program.clientId}`, + host: `${opts.host}/auth/realms/alfresco`, + clientId: `${opts.clientId}`, scope: 'openid', redirectUri: '/' } }); - await alfrescoJsApi.login(program.username, program.password); + await alfrescoJsApi.login(opts.username, opts.password); } catch (e) { if (e.error.code === 'ETIMEDOUT') { logger.error('The env is not reachable. Terminating'); @@ -161,7 +180,7 @@ async function checkEnv() { } else { logger.error(`Retry in 1 minute attempt N ${counter}`); sleep(TIMEOUT); - await checkEnv(); + await checkEnv(opts); } } } @@ -203,7 +222,7 @@ async function createDefaultTenant(tenantName: string) { const tenantPost = { active: true, maxUsers: 10000, - name : tenantName + name: tenantName }; try { @@ -212,7 +231,7 @@ async function createDefaultTenant(tenantName: string) { logger.info(`APS: Tenant ${tenantName} created with id: ${tenant.id}`); return tenant.id; } catch (error) { - logger.info(`APS: not able to create the default tenant: ${JSON.parse(error.message)}` ); + logger.info(`APS: not able to create the default tenant: ${JSON.parse(error.message)}`); return null; } } @@ -242,19 +261,21 @@ async function createUsers(tenantId: number, user: any) { logger.info(`APS: User ${userInfo.email} created with id: ${userInfo.id}`); return user; } catch (error) { - logger.info(`APS: not able to create the default user: ${error.message}` ); + logger.info(`APS: not able to create the default user: ${error.message}`); } } /** * Update Activiti license + * + * @param opts command options */ -async function updateLicense() { +async function updateLicense(opts: InitApsEnvArgs) { const fileContent = createReadStream(path.join(__dirname, '/activiti.lic')); try { await alfrescoJsApi.oauth2Auth.callCustomApi( - `${program.host}/activiti-app/app/rest/license`, + `${opts.host}/activiti-app/app/rest/license`, 'POST', {}, {}, @@ -283,7 +304,7 @@ async function isDefaultAppDeployed(appName: string): Promise { try { const runtimeAppDefinitionsApi = new RuntimeAppDefinitionsApi(alfrescoJsApi); const availableApps = await runtimeAppDefinitionsApi.getAppDefinitions(); - const defaultApp = availableApps.data?.filter(app => app.name?.includes(appName)); + const defaultApp = availableApps.data?.filter((app) => app.name?.includes(appName)); return defaultApp && defaultApp.length > 0; } catch (error) { logger.error(`Aps app failed to import/Publish!`); @@ -304,7 +325,7 @@ async function importPublishApp(appName: string): Promise { +async function hasLicense(opts: InitApsEnvArgs): Promise { try { const license = await alfrescoJsApi.oauth2Auth.callCustomApi( - `${program.host}/activiti-app/app/rest/license`, + `${opts.host}/activiti-app/app/rest/license`, 'GET', {}, {}, @@ -356,18 +379,20 @@ async function hasLicense(): Promise { logger.info(`Aps does NOT have a valid License!`); return false; } catch (error) { - logger.error(`Aps not able to check the license` ); + logger.error(`Aps not able to check the license`); return false; } } /** * Get default users from the realm + * + * @param opts command options */ -async function getDefaultApsUsersFromRealm() { +async function getDefaultApsUsersFromRealm(opts: InitApsEnvArgs) { try { const users: any[] = await alfrescoJsApi.oauth2Auth.callCustomApi( - `${program.host}/auth/admin/realms/alfresco/users`, + `${opts.host}/auth/admin/realms/alfresco/users`, 'GET', {}, { max: 1000 }, @@ -378,11 +403,11 @@ async function getDefaultApsUsersFromRealm() { ['application/json'] ); const usernamesOfApsDefaultUsers = ['hruser', 'salesuser', 'superadminuser']; - const apsDefaultUsers = users.filter(user => usernamesOfApsDefaultUsers.includes(user.username)); + const apsDefaultUsers = users.filter((user) => usernamesOfApsDefaultUsers.includes(user.username)); logger.info(`Keycloak found ${apsDefaultUsers.length} users`); return apsDefaultUsers; } catch (error) { - logger.error(`APS: not able to fetch user: ${error.message}` ); + logger.error(`APS: not able to fetch user: ${error.message}`); return null; } } @@ -390,13 +415,14 @@ async function getDefaultApsUsersFromRealm() { /** * Validate that ACS repo for Activiti is present * + * @param opts command options * @param tenantId tenant id * @param contentName content service name */ -async function isContentRepoPresent(tenantId: number, contentName: string): Promise { +async function isContentRepoPresent(opts: InitApsEnvArgs, tenantId: number, contentName: string): Promise { try { const contentRepos = await alfrescoJsApi.oauth2Auth.callCustomApi( - `${program.host}/activiti-app/app/rest/integration/alfresco?tenantId=${tenantId}`, + `${opts.host}/activiti-app/app/rest/integration/alfresco?tenantId=${tenantId}`, 'GET', {}, {}, @@ -406,9 +432,9 @@ async function isContentRepoPresent(tenantId: number, contentName: string): Prom ['application/json'], ['application/json'] ); - return !!contentRepos.data.find(repo => repo.name === contentName); + return !!contentRepos.data.find((repo) => repo.name === contentName); } catch (error) { - logger.error(`APS: not able to create content: ${error.message}` ); + logger.error(`APS: not able to create content: ${error.message}`); return null; } } @@ -416,18 +442,19 @@ async function isContentRepoPresent(tenantId: number, contentName: string): Prom /** * Add content service with basic auth * + * @param opts command options * @param tenantId tenant id * @param name content name */ -async function addContentRepoWithBasic(tenantId: number, name: string) { +async function addContentRepoWithBasic(opts: InitApsEnvArgs, tenantId: number, name: string) { logger.info(`Create Content with name ${name} and basic auth`); const body = { alfrescoTenantId: '', authenticationType: 'basic', name, - repositoryUrl: `${program.host}/alfresco`, - shareUrl: `${program.host}/share`, + repositoryUrl: `${opts.host}/alfresco`, + shareUrl: `${opts.host}/share`, // sitesFolder: '', not working on activiti 1.11.1.1 tenantId, version: '6.1.1' @@ -435,7 +462,7 @@ async function addContentRepoWithBasic(tenantId: number, name: string) { try { const content = await alfrescoJsApi.oauth2Auth.callCustomApi( - `${program.host}/activiti-app/app/rest/integration/alfresco`, + `${opts.host}/activiti-app/app/rest/integration/alfresco`, 'POST', {}, {}, @@ -448,20 +475,21 @@ async function addContentRepoWithBasic(tenantId: number, name: string) { logger.info(`Content created!`); return content; } catch (error) { - logger.error(`APS: not able to create content: ${error.message}` ); + logger.error(`APS: not able to create content: ${error.message}`); } } /** * Authorize activiti user to ACS repo * + * @param opts command options * @param user user object */ -async function authorizeUserToContentRepo(user: any) { +async function authorizeUserToContentRepo(opts: InitApsEnvArgs, user: any) { logger.info(`Authorize user ${user.email}`); try { const content = await alfrescoJsApi.oauth2Auth.callCustomApi( - `${program.host}/activiti-app/app/rest/integration/alfresco`, + `${opts.host}/activiti-app/app/rest/integration/alfresco`, 'GET', {}, {}, @@ -475,28 +503,29 @@ async function authorizeUserToContentRepo(user: any) { if (content.data) { for (let i = 0; i < content.data.length; i++) { if (content.data[i].authenticationType === 'basic') { - await authorizeUserToContentWithBasic(user.username, content.data[i].id); + await authorizeUserToContentWithBasic(opts, user.username, content.data[i].id); } } } return; } catch (error) { - logger.error(`APS: not able to authorize content: ${error.message}` ); + logger.error(`APS: not able to authorize content: ${error.message}`); } } /** * Authorize user with content using basic auth * + * @param opts command options * @param username username * @param contentId content id */ -async function authorizeUserToContentWithBasic(username: string, contentId: string) { +async function authorizeUserToContentWithBasic(opts: InitApsEnvArgs, username: string, contentId: string) { logger.info(`Authorize ${username} on contentId: ${contentId} in basic auth`); try { - const body = {username, password: 'password'}; + const body = { username, password: 'password' }; const content = await alfrescoJsApi.oauth2Auth.callCustomApi( - `${program.host}/activiti-app/app/rest/integration/alfresco/${contentId}/account`, + `${opts.host}/activiti-app/app/rest/integration/alfresco/${contentId}/account`, 'POST', {}, {}, @@ -509,7 +538,7 @@ async function authorizeUserToContentWithBasic(username: string, contentId: stri logger.info(`User authorized!`); return content; } catch (error) { - logger.error(`APS: not able to authorize content: ${error.message}` ); + logger.error(`APS: not able to authorize content: ${error.message}`); } } @@ -519,12 +548,7 @@ async function authorizeUserToContentWithBasic(username: string, contentId: stri * @param apsLicensePath path to license file */ async function downloadLicenseFile(apsLicensePath: string) { - const args = [ - `s3`, - `cp`, - apsLicensePath, - `./` - ]; + const args = [`s3`, `cp`, apsLicensePath, `./`]; const result = spawnSync(`aws`, args, { cwd: path.resolve(__dirname, `./`), shell: false @@ -545,5 +569,5 @@ async function downloadLicenseFile(apsLicensePath: string) { */ function sleep(delay: number) { const start = new Date().getTime(); - while (new Date().getTime() < start + delay) { } + while (new Date().getTime() < start + delay) {} } diff --git a/lib/cli/scripts/licenses.ts b/lib/cli/scripts/licenses.ts index 6c29544ecec..45e99d58890 100644 --- a/lib/cli/scripts/licenses.ts +++ b/lib/cli/scripts/licenses.ts @@ -23,7 +23,14 @@ import * as fs from 'fs'; import * as checker from 'license-checker'; import * as licenseList from 'spdx-license-list'; import * as ejs from 'ejs'; -import program from 'commander'; +import { Command } from 'commander'; + +const program = new Command(); + +interface LicensesCommandArgs { + package?: string; + outDir?: string; +} interface PackageInfo { name: string; @@ -110,10 +117,11 @@ export default function main(_args: string[], workingDir: string) { exit(0); } + const options = program.opts(); let packagePath = path.resolve(workingDir, 'package.json'); - if (program.package) { - packagePath = path.resolve(program.package); + if (options.package) { + packagePath = path.resolve(options.package); } if (!fs.existsSync(packagePath)) { @@ -183,7 +191,7 @@ export default function main(_args: string[], workingDir: string) { console.error(ejsError); reject(ejsError); } else { - const outputPath = path.resolve(program.outDir || workingDir); + const outputPath = path.resolve(options.outDir || workingDir); const outputFile = path.join(outputPath, `license-info-${packageJson.version}.md`); fs.writeFileSync(outputFile, mdText); diff --git a/lib/cli/scripts/plugins/check-env.ts b/lib/cli/scripts/plugins/check-env.ts index 25ef7a39396..05830b112ae 100644 --- a/lib/cli/scripts/plugins/check-env.ts +++ b/lib/cli/scripts/plugins/check-env.ts @@ -17,7 +17,7 @@ import { AlfrescoApi } from '@alfresco/js-api'; import { exit } from 'node:process'; -import { logger } from './../logger'; +import { logger } from '../logger'; const TIMEOUT = 6000; const MAX_RETRY = 10; diff --git a/lib/cli/scripts/plugins/plugin-model.ts b/lib/cli/scripts/plugins/plugin-model.ts index 3401b66e7d6..51cdebbb919 100644 --- a/lib/cli/scripts/plugins/plugin-model.ts +++ b/lib/cli/scripts/plugins/plugin-model.ts @@ -15,13 +15,6 @@ * limitations under the License. */ -// eslint-disable-next-line no-shadow -export enum PluginTarget { - processService = 'processService', - processAutomation = 'processAutomation', - governance = 'governance' -} - export interface PluginInterface { name: string; host: string; From 6602ad3ef6ab97a6bf0179cff2f8582be394510a Mon Sep 17 00:00:00 2001 From: Denys Vuika Date: Mon, 25 Mar 2024 15:44:04 -0400 Subject: [PATCH 3/3] chore: migrate CLI to latest commander library [ci:force] --- lib/cli/scripts/init-acs-env.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/cli/scripts/init-acs-env.ts b/lib/cli/scripts/init-acs-env.ts index 149ac99d3fc..337fb7694a6 100755 --- a/lib/cli/scripts/init-acs-env.ts +++ b/lib/cli/scripts/init-acs-env.ts @@ -18,7 +18,7 @@ import { AlfrescoApi, SharedlinksApi, FavoritesApi, NodesApi, UploadApi, NodeEntry } from '@alfresco/js-api'; import { exit, argv } from 'node:process'; import { Command } from 'commander'; -import * as fs from 'fs'; +import { createReadStream } from 'fs'; import * as path from 'path'; import { logger } from './logger'; @@ -127,7 +127,7 @@ async function createFolder(folderName: string, parentId: string) { */ async function uploadFile(fileName: string, fileDestination: string): Promise { const filePath = `../resources/content/${fileName}`; - const file = fs.createReadStream(path.join(__dirname, filePath)); + const file = createReadStream(path.join(__dirname, filePath)); let uploadedFile: NodeEntry; try { uploadedFile = await new UploadApi(alfrescoJsApi).uploadFile(file, '', fileDestination, null, {