diff --git a/package-lock.json b/package-lock.json index ca83ecea96..bdd155a8cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26933,14 +26933,14 @@ "@contentstack/cli-audit": "~2.0.0-beta.5", "@contentstack/cli-auth": "~2.0.0-beta.5", "@contentstack/cli-bulk-operations": "^1.0.0-beta", - "@contentstack/cli-cm-bootstrap": "~2.0.0-beta.9", + "@contentstack/cli-cm-bootstrap": "~2.0.0-beta.10", "@contentstack/cli-cm-branches": "~2.0.0-beta", "@contentstack/cli-cm-clone": "~2.0.0-beta.10", "@contentstack/cli-cm-export": "~2.0.0-beta.9", "@contentstack/cli-cm-export-to-csv": "~2.0.0-beta", "@contentstack/cli-cm-import": "~2.0.0-beta.9", "@contentstack/cli-cm-import-setup": "~2.0.0-beta.4", - "@contentstack/cli-cm-seed": "~2.0.0-beta.8", + "@contentstack/cli-cm-seed": "~2.0.0-beta.9", "@contentstack/cli-command": "~2.0.0-beta", "@contentstack/cli-config": "~2.0.0-beta.2", "@contentstack/cli-launch": "^1.9.6", @@ -27242,10 +27242,10 @@ }, "packages/contentstack-bootstrap": { "name": "@contentstack/cli-cm-bootstrap", - "version": "2.0.0-beta.9", + "version": "2.0.0-beta.10", "license": "MIT", "dependencies": { - "@contentstack/cli-cm-seed": "~2.0.0-beta.8", + "@contentstack/cli-cm-seed": "~2.0.0-beta.9", "@contentstack/cli-command": "~2.0.0-beta", "@contentstack/cli-config": "~2.0.0-beta.2", "@contentstack/cli-utilities": "~2.0.0-beta", @@ -28220,7 +28220,7 @@ }, "packages/contentstack-seed": { "name": "@contentstack/cli-cm-seed", - "version": "2.0.0-beta.8", + "version": "2.0.0-beta.9", "license": "MIT", "dependencies": { "@contentstack/cli-cm-import": "~2.0.0-beta.9", diff --git a/packages/contentstack-bootstrap/package.json b/packages/contentstack-bootstrap/package.json index 61dd932f03..804961290d 100644 --- a/packages/contentstack-bootstrap/package.json +++ b/packages/contentstack-bootstrap/package.json @@ -1,7 +1,7 @@ { "name": "@contentstack/cli-cm-bootstrap", "description": "Bootstrap contentstack apps", - "version": "2.0.0-beta.9", + "version": "2.0.0-beta.10", "author": "Contentstack", "bugs": "https://github.com/contentstack/cli/issues", "scripts": { @@ -16,7 +16,7 @@ "test:report": "nyc --reporter=lcov mocha \"test/**/*.test.js\"" }, "dependencies": { - "@contentstack/cli-cm-seed": "~2.0.0-beta.8", + "@contentstack/cli-cm-seed": "~2.0.0-beta.9", "@contentstack/cli-command": "~2.0.0-beta", "@contentstack/cli-utilities": "~2.0.0-beta", "@contentstack/cli-config": "~2.0.0-beta.2", diff --git a/packages/contentstack-bootstrap/src/bootstrap/index.ts b/packages/contentstack-bootstrap/src/bootstrap/index.ts index dca6a72201..c68bcdcaa9 100644 --- a/packages/contentstack-bootstrap/src/bootstrap/index.ts +++ b/packages/contentstack-bootstrap/src/bootstrap/index.ts @@ -28,7 +28,7 @@ export interface SeedParams { stackAPIKey?: string; org?: string; stackName?: string; - yes?: string; + yes?: boolean; managementTokenAlias?: string | undefined; managementToken?: string | undefined; } @@ -95,7 +95,7 @@ export default class Bootstrap { cmd.push('-n', this.options.seedParams.stackName); } if (this.options.seedParams.yes) { - cmd.push('-y', this.options.seedParams.yes); + cmd.push('-y'); } if (this.options.seedParams.managementTokenAlias) { cmd.push('--alias', this.options.seedParams.managementTokenAlias); diff --git a/packages/contentstack-bootstrap/src/commands/cm/bootstrap.ts b/packages/contentstack-bootstrap/src/commands/cm/bootstrap.ts index 1898338f4b..39fd9994f1 100644 --- a/packages/contentstack-bootstrap/src/commands/cm/bootstrap.ts +++ b/packages/contentstack-bootstrap/src/commands/cm/bootstrap.ts @@ -66,7 +66,7 @@ export default class BootstrapCommand extends Command { required: false, exclusive: ['stack-api-key'], }), - yes: flags.string({ + yes: flags.boolean({ description: '[Optional] Skip stack confirmation', char: 'y', required: false, @@ -123,7 +123,7 @@ export default class BootstrapCommand extends Command { }); } - const yes = bootstrapCommandFlags.yes as string; + const yes = bootstrapCommandFlags.yes as boolean; const appConfig: AppConfig = getAppLevelConfigByName(selectedAppName || selectedApp.configKey); const master_locale = appConfig.master_locale || DEFAULT_MASTER_LOCALE; @@ -147,7 +147,7 @@ export default class BootstrapCommand extends Command { if (stackAPIKey) seedParams.stackAPIKey = stackAPIKey; if (org) seedParams.org = org; if (stackName) seedParams.stackName = stackName; - if (yes) seedParams.yes = yes; + if (yes) seedParams.yes = true; if (managementTokenAlias) { seedParams.managementTokenAlias = managementTokenAlias; const listOfTokens = configHandler.get('tokens'); diff --git a/packages/contentstack-seed/package.json b/packages/contentstack-seed/package.json index 58ef88a705..735ffa86b6 100644 --- a/packages/contentstack-seed/package.json +++ b/packages/contentstack-seed/package.json @@ -1,7 +1,7 @@ { "name": "@contentstack/cli-cm-seed", "description": "create a Stack from existing content types, entries, assets, etc.", - "version": "2.0.0-beta.8", + "version": "2.0.0-beta.9", "author": "Contentstack", "bugs": "https://github.com/contentstack/cli/issues", "dependencies": { diff --git a/packages/contentstack-seed/src/commands/cm/stacks/seed.ts b/packages/contentstack-seed/src/commands/cm/stacks/seed.ts index c3beca01ef..5863dd76af 100644 --- a/packages/contentstack-seed/src/commands/cm/stacks/seed.ts +++ b/packages/contentstack-seed/src/commands/cm/stacks/seed.ts @@ -14,7 +14,7 @@ export default class SeedCommand extends Command { ]; static usage = - 'cm:stacks:seed [--repo ] [--org ] [--stack-api-key ] [--stack-name ] [--yes ] [--alias ] [--locale ]'; + 'cm:stacks:seed [--repo ] [--org ] [--stack-api-key ] [--stack-name ] [--yes] [--alias ] [--locale ]'; static flags: FlagInput = { repo: flags.string({ @@ -49,7 +49,7 @@ export default class SeedCommand extends Command { required: false, hidden: true, }), - yes: flags.string({ + yes: flags.boolean({ char: 'y', required: false, description: '[Optional] Skip the stack confirmation.', diff --git a/packages/contentstack-seed/src/seed/github/client.ts b/packages/contentstack-seed/src/seed/github/client.ts index 2bd9a70133..438356533d 100644 --- a/packages/contentstack-seed/src/seed/github/client.ts +++ b/packages/contentstack-seed/src/seed/github/client.ts @@ -118,6 +118,26 @@ export default class GitHubClient { return false; } + async getMasterLocaleFromRepo(repo: string): Promise { + try { + const response = await this.httpClient.get( + `https://raw.githubusercontent.com/${this.username}/${repo}/main/stack/locales/master-locale.json` + ); + + if (response.data) { + const localeData = response.data; + const localeKey = Object.keys(localeData)[0]; + if (localeKey && localeData[localeKey]?.code) { + return localeData[localeKey].code; + } + } + } catch (error) { + console.log('Could not fetch master locale from repository', error); + } + + return null; + } + async getLatestTarballUrl(repo: string) { try { const response = await this.httpClient.get(`${this.gitHubRepoUrl}/${repo}/releases/latest`); diff --git a/packages/contentstack-seed/src/seed/index.ts b/packages/contentstack-seed/src/seed/index.ts index 4223acb0a3..e298294f85 100644 --- a/packages/contentstack-seed/src/seed/index.ts +++ b/packages/contentstack-seed/src/seed/index.ts @@ -27,7 +27,7 @@ export interface ContentModelSeederOptions { stackUid: string | undefined; stackName: string | undefined; fetchLimit: string | undefined; - skipStackConfirmation: string | undefined; + skipStackConfirmation: boolean | undefined; isAuthenticated: boolean | false; managementToken?: string | undefined; alias?: string | undefined; @@ -183,50 +183,24 @@ export default class ContentModelSeeder { async shouldProceed(api_key: string) { let count; const stack_details = await this.csClient.getStack(api_key); - if(this.options.master_locale != stack_details.master_locale){ - cliux.print(`Compass app requires the master locale to be set to English (en).`,{ - color: "yellow", - bold: true, - }); - return false; - } - const managementBody = { - "name":"Checking roles for creating management token", - "description":"This is a compass app management token.", - "scope":[ - { - "module":"content_type", - "acl":{ - "read":true, - "write":true - } - }, - { - "module":"branch", - "branches":[ - "main" - ], - "acl":{ - "read":true - } - } - ], - "expires_on": "3000-01-01", - "is_email_notification_enabled":false - } - let managementTokenResult = await this.csClient.createManagementToken(api_key, this.managementToken, managementBody); - if(managementTokenResult?.response_code == "161" || managementTokenResult?.response_code == "401"){ + + const repoMasterLocale = await this.ghClient.getMasterLocaleFromRepo(this.ghRepo as string); + const expectedLocale = repoMasterLocale || this.options.master_locale || ENGLISH_LOCALE; + + if (stack_details.master_locale !== expectedLocale) { cliux.print( - `Info: Failed to generate a management token.\nNote: Management token is not available in your plan. Please contact the admin for support.`, + `Repository '${this.ghRepo}' requires the master locale to be set to '${expectedLocale}', but your stack has '${stack_details.master_locale}'.`, { - color: 'red', - }, + color: "yellow", + bold: true, + } ); return false; - } + } + count = await this.csClient.getContentTypeCount(api_key, this.managementToken); - if (count > 0 && this._options.skipStackConfirmation !== 'yes') { + if (count > 0 && !this._options.skipStackConfirmation) { const proceed = await inquireProceed(); if (!proceed) { diff --git a/packages/contentstack-seed/test/commands/cm/stacks/seed.test.ts b/packages/contentstack-seed/test/commands/cm/stacks/seed.test.ts index 889d133f37..05166d26f6 100644 --- a/packages/contentstack-seed/test/commands/cm/stacks/seed.test.ts +++ b/packages/contentstack-seed/test/commands/cm/stacks/seed.test.ts @@ -224,7 +224,7 @@ describe('SeedCommand', () => { 'stack-api-key': undefined, 'stack-name': undefined, 'fetch-limit': undefined, - yes: 'yes', + yes: true, alias: undefined, locale: undefined, }; @@ -239,7 +239,7 @@ describe('SeedCommand', () => { expect(ContentModelSeeder).toHaveBeenCalledWith( expect.objectContaining({ - skipStackConfirmation: 'yes', + skipStackConfirmation: true, }), ); }); @@ -251,7 +251,7 @@ describe('SeedCommand', () => { 'stack-api-key': undefined, 'stack-name': 'My Stack', 'fetch-limit': '100', - yes: 'yes', + yes: true, alias: 'my-alias', locale: 'fr-fr', }; @@ -273,7 +273,7 @@ describe('SeedCommand', () => { stackUid: undefined, stackName: 'My Stack', fetchLimit: '100', - skipStackConfirmation: 'yes', + skipStackConfirmation: true, isAuthenticated: true, alias: 'my-alias', master_locale: 'fr-fr', @@ -349,7 +349,7 @@ describe('SeedCommand', () => { it('should have correct usage', () => { expect(SeedCommand.usage).toBe( - 'cm:stacks:seed [--repo ] [--org ] [--stack-api-key ] [--stack-name ] [--yes ] [--alias ] [--locale ]', + 'cm:stacks:seed [--repo ] [--org ] [--stack-api-key ] [--stack-name ] [--yes] [--alias ] [--locale ]', ); }); diff --git a/packages/contentstack/package.json b/packages/contentstack/package.json index 9f323b0473..2c09e90da2 100755 --- a/packages/contentstack/package.json +++ b/packages/contentstack/package.json @@ -27,12 +27,12 @@ "@contentstack/cli-cm-import": "~2.0.0-beta.9", "@contentstack/cli-auth": "~2.0.0-beta.5", "@contentstack/cli-bulk-operations": "^1.0.0-beta", - "@contentstack/cli-cm-bootstrap": "~2.0.0-beta.9", + "@contentstack/cli-cm-bootstrap": "~2.0.0-beta.10", "@contentstack/cli-cm-branches": "~2.0.0-beta", "@contentstack/cli-cm-clone": "~2.0.0-beta.10", "@contentstack/cli-cm-export-to-csv": "~2.0.0-beta", "@contentstack/cli-cm-import-setup": "~2.0.0-beta.4", - "@contentstack/cli-cm-seed": "~2.0.0-beta.8", + "@contentstack/cli-cm-seed": "~2.0.0-beta.9", "@contentstack/cli-command": "~2.0.0-beta", "@contentstack/cli-config": "~2.0.0-beta.2", "@contentstack/cli-launch": "^1.9.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 71c20634c3..897d03bf79 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,14 +15,14 @@ importers: '@contentstack/cli-audit': ~2.0.0-beta.5 '@contentstack/cli-auth': ~2.0.0-beta.5 '@contentstack/cli-bulk-operations': ^1.0.0-beta - '@contentstack/cli-cm-bootstrap': ~2.0.0-beta.9 + '@contentstack/cli-cm-bootstrap': ~2.0.0-beta.10 '@contentstack/cli-cm-branches': ~2.0.0-beta '@contentstack/cli-cm-clone': ~2.0.0-beta.10 '@contentstack/cli-cm-export': ~2.0.0-beta.9 '@contentstack/cli-cm-export-to-csv': ~2.0.0-beta '@contentstack/cli-cm-import': ~2.0.0-beta.9 '@contentstack/cli-cm-import-setup': ~2.0.0-beta.4 - '@contentstack/cli-cm-seed': ~2.0.0-beta.8 + '@contentstack/cli-cm-seed': ~2.0.0-beta.9 '@contentstack/cli-command': ~2.0.0-beta '@contentstack/cli-config': ~2.0.0-beta.2 '@contentstack/cli-launch': ^1.9.6 @@ -245,7 +245,7 @@ importers: packages/contentstack-bootstrap: specifiers: - '@contentstack/cli-cm-seed': ~2.0.0-beta.8 + '@contentstack/cli-cm-seed': ~2.0.0-beta.9 '@contentstack/cli-command': ~2.0.0-beta '@contentstack/cli-config': ~2.0.0-beta.2 '@contentstack/cli-utilities': ~2.0.0-beta