diff --git a/packages/lu/src/parser/lubuild/builder.ts b/packages/lu/src/parser/lubuild/builder.ts index 7cc129d98..698bec1be 100644 --- a/packages/lu/src/parser/lubuild/builder.ts +++ b/packages/lu/src/parser/lubuild/builder.ts @@ -293,7 +293,7 @@ export class Builder { return settingsContent } - async writeDialogAssets(contents: any[], options: any = {}) { + async writeDialogAssets(contents: any[], options: any = {}, directVersionPublish?: boolean) { let force = options.force || false let out = options.out let luConfig = options.luConfig @@ -311,7 +311,8 @@ export class Builder { } else { outPath = path.resolve(settingsContents[0].id) } - writeContents.push(this.mergeSettingsContent(outPath, settingsContents)) + + writeContents.push(this.mergeSettingsContent(outPath, settingsContents, directVersionPublish)) } for (const content of writeContents) { @@ -478,14 +479,16 @@ export class Builder { return contents } - mergeSettingsContent(settingsPath: string, contents: any[]) { + mergeSettingsContent(settingsPath: string, contents: any[], directVersionPublish?: boolean) { let settings = new Settings(settingsPath, {}) for (const content of contents) { const luisAppsMap = JSON.parse(content.content).luis for (const appName of Object.keys(luisAppsMap)) { - settings.luis[appName] = { + settings.luis[appName] = directVersionPublish ? { "appId": luisAppsMap[appName]["appId"], "version": luisAppsMap[appName]["version"] + } : { + "appId": luisAppsMap[appName]["appId"] } } } diff --git a/packages/luis/src/commands/luis/build.ts b/packages/luis/src/commands/luis/build.ts index 3502dd61e..cdae52c76 100644 --- a/packages/luis/src/commands/luis/build.ts +++ b/packages/luis/src/commands/luis/build.ts @@ -154,13 +154,13 @@ export default class LuisBuild extends Command { fallbackLocale, schema, dialog - }) + }, directVersionPublish) let writeDone = await builder.writeDialogAssets(dialogContents, { force, out: outputFolder, luConfig - }) + }, directVersionPublish) if (writeDone) { this.log(`Successfully wrote .dialog files to ${outputFolder}\n`) @@ -173,7 +173,7 @@ export default class LuisBuild extends Command { force, out: outputFolder, luConfig - }) + }, directVersionPublish) if (writeDone) { this.log(`Successfully wrote settings file to ${outputFolder}\n`) diff --git a/packages/luis/test/commands/luis/build.test.ts b/packages/luis/test/commands/luis/build.test.ts index 96ae36308..2f11735b0 100644 --- a/packages/luis/test/commands/luis/build.test.ts +++ b/packages/luis/test/commands/luis/build.test.ts @@ -576,7 +576,7 @@ describe('luis:build write dialog and settings assets successfully if --dialog s test .stdout() - .command(['luis:build', '--in', './test/fixtures/testcases/lubuild/sandwich/lufiles/sandwich.en-us.lu', '--authoringKey', uuidv1(), '--botName', 'test', '--out', './results', '--dialog', 'multiLanguage', '--log', '--suffix', 'development']) + .command(['luis:build', '--in', './test/fixtures/testcases/lubuild/sandwich/lufiles/sandwich.en-us.lu', '--authoringKey', uuidv1(), '--botName', 'test', '--out', './results', '--dialog', 'multiLanguage', '--log', '--suffix', 'development', '--directVersionPublish']) .it('should write dialog and settings assets successfully when --dialog set to multiLanguage', async ctx => { expect(await compareFiles('./../../../results/luis.settings.development.westus.json', './../../fixtures/testcases/lubuild/sandwich/config/luis.settings.development.westus.json')).to.be.true expect(await compareFiles('./../../../results/sandwich.en-us.lu.dialog', './../../fixtures/testcases/lubuild/sandwich/dialogs/sandwich.en-us.lu.dialog')).to.be.true @@ -615,7 +615,7 @@ describe('luis:build write dialog and settings assets successfully if --dialog s test .stdout() - .command(['luis:build', '--in', './test/fixtures/testcases/lubuild/sandwich/lufiles/sandwich.en-us.lu', '--authoringKey', uuidv1(), '--botName', 'test', '--dialog', 'crosstrained', '--out', './results', '--log', '--suffix', 'development']) + .command(['luis:build', '--in', './test/fixtures/testcases/lubuild/sandwich/lufiles/sandwich.en-us.lu', '--authoringKey', uuidv1(), '--botName', 'test', '--dialog', 'crosstrained', '--out', './results', '--log', '--suffix', 'development', '--directVersionPublish']) .it('should write dialog and settings assets successfully when --dialog set to crosstrained', async ctx => { expect(await compareFiles('./../../../results/luis.settings.development.westus.json', './../../fixtures/testcases/lubuild/sandwich/config/luis.settings.development.westus.json')).to.be.true expect(await compareFiles('./../../../results/sandwich.lu.qna.dialog', './../../fixtures/testcases/lubuild/sandwich/dialogs/sandwich.lu.qna.dialog')).to.be.true @@ -758,7 +758,7 @@ describe('luis:build create multiple applications successfully when input is a f test .stdout() - .command(['luis:build', '--in', './test/fixtures/testcases/lubuild/foo/lufiles', '--authoringKey', uuidv1(), '--botName', 'test', '--dialog', 'multiLanguage', '--out', './results', '--log', '--suffix', 'development']) + .command(['luis:build', '--in', './test/fixtures/testcases/lubuild/foo/lufiles', '--authoringKey', uuidv1(), '--botName', 'test', '--dialog', 'multiLanguage', '--out', './results', '--log', '--suffix', 'development', '--directVersionPublish']) .it('should create multiple applications and write dialog and settings assets successfully when input is a folder', async ctx => { expect(ctx.stdout).to.contain('foo.fr-fr.lu loaded') expect(ctx.stdout).to.contain('foo.lu loaded') @@ -903,7 +903,7 @@ describe('luis:build update application succeed with parameters set from luconfi test .stdout() - .command(['luis:build', '--authoringKey', uuidv1(), '--luConfig', './test/fixtures/testcases/lubuild/luconfig/lufiles/luconfig.json', '--log', '--suffix', 'development']) + .command(['luis:build', '--authoringKey', uuidv1(), '--luConfig', './test/fixtures/testcases/lubuild/luconfig/lufiles/luconfig.json', '--log', '--suffix', 'development', '--directVersionPublish']) .it('should update a luis application when utterances changed', async ctx => { expect(ctx.stdout).to.contain('Handling applications...') expect(ctx.stdout).to.contain('creating version=0.2') @@ -1139,7 +1139,7 @@ describe('luis:build write dialog and settings assets successfully if schema is test .stdout() - .command(['luis:build', '--in', './test/fixtures/testcases/lubuild/sandwich/lufiles/sandwich.en-us.lu', '--authoringKey', uuidv1(), '--botName', 'test', '--out', './results', '--log', '--suffix', 'development', '--dialog', 'crosstrained', '--schema', 'https://raw.githubusercontent.com/microsoft/BotFramework-Composer/stable/Composer/packages/server/schemas/sdk.schema']) + .command(['luis:build', '--in', './test/fixtures/testcases/lubuild/sandwich/lufiles/sandwich.en-us.lu', '--authoringKey', uuidv1(), '--botName', 'test', '--out', './results', '--log', '--suffix', 'development', '--dialog', 'crosstrained', '--schema', 'https://raw.githubusercontent.com/microsoft/BotFramework-Composer/stable/Composer/packages/server/schemas/sdk.schema', '--directVersionPublish']) .it('should write dialog and settings assets successfully if schema is specified', async ctx => { expect(await compareFiles('./../../../results/luis.settings.development.westus.json', './../../fixtures/testcases/lubuild/sandwich/config/luis.settings.development.westus.json')).to.be.true expect(await compareFiles('./../../../results/sandwich.en-us.lu.dialog', './../../fixtures/testcases/lubuild/sandwich/dialogs-with-schema/sandwich.en-us.lu.dialog')).to.be.true @@ -1197,7 +1197,7 @@ describe('luis:build write dialog and settings assets successfully when empty fi test .stdout() - .command(['luis:build', '--in', './test/fixtures/testcases/lubuild/empty-file/lufiles', '--authoringKey', uuidv1(), '--botName', 'test', '--dialog', 'crosstrained', '--out', './results', '--log', '--suffix', 'development']) + .command(['luis:build', '--in', './test/fixtures/testcases/lubuild/empty-file/lufiles', '--authoringKey', uuidv1(), '--botName', 'test', '--dialog', 'crosstrained', '--out', './results', '--log', '--suffix', 'development', '--directVersionPublish']) .it('should write dialog and settings assets successfully when empty files exist', async ctx => { expect(ctx.stdout).to.contain('empty.lu loaded') expect(ctx.stdout).to.contain('non-empty.lu loaded') @@ -1249,7 +1249,7 @@ describe('luis:build write settings assets only successfully if --dialog is not test .stdout() - .command(['luis:build', '--in', './test/fixtures/testcases/lubuild/sandwich/lufiles/sandwich.en-us.lu', '--authoringKey', uuidv1(), '--botName', 'test', '--out', './results', '--log', '--suffix', 'development']) + .command(['luis:build', '--in', './test/fixtures/testcases/lubuild/sandwich/lufiles/sandwich.en-us.lu', '--authoringKey', uuidv1(), '--botName', 'test', '--out', './results', '--log', '--suffix', 'development', '--directVersionPublish']) .it('should write settings assets only successfully if --dialog is not set', async ctx => { expect(await compareFiles('./../../../results/luis.settings.development.westus.json', './../../fixtures/testcases/lubuild/sandwich/config/luis.settings.development.westus.json')).to.be.true expect(await compareFiles('./../../../results/sandwich.lu.qna.dialog', './../../fixtures/testcases/lubuild/sandwich/dialogs/sandwich.lu.qna.dialog')).to.be.false @@ -1257,6 +1257,43 @@ describe('luis:build write settings assets only successfully if --dialog is not }) }) +describe('luis:build write settings assets without version if --directVersionPublish is absent', () => { + const existingLuisApp = require('./../../fixtures/testcases/lubuild/sandwich/luis/test(development)-sandwich.en-us.lu.json') + before(async function () { + await fs.ensureDir(path.join(__dirname, './../../../results/')) + + nock('https://westus.api.cognitive.microsoft.com') + .get(uri => uri.includes('apps')) + .reply(200, [{ + name: 'test(development)-sandwich.en-us.lu', + id: 'f8c64e2a-8635-3a09-8f78-39d7adc76ec5' + }]) + + nock('https://westus.api.cognitive.microsoft.com') + .get(uri => uri.includes('apps')) + .reply(200, { + name: 'test(development)-sandwich.en-us.lu', + id: 'f8c64e2a-8635-3a09-8f78-39d7adc76ec5', + activeVersion: '0.1' + }) + + nock('https://westus.api.cognitive.microsoft.com') + .get(uri => uri.includes('export')) + .reply(200, existingLuisApp) + }) + + after(async function () { + await fs.remove(path.join(__dirname, './../../../results/')) + }) + + test + .stdout() + .command(['luis:build', '--in', './test/fixtures/testcases/lubuild/sandwich/lufiles/sandwich.en-us.lu', '--authoringKey', uuidv1(), '--botName', 'test', '--out', './results', '--log', '--suffix', 'development']) + .it('should write settings assets without version info when --directVersionPublish is absent', async ctx => { + expect(await compareFiles('./../../../results/luis.settings.development.westus.json', './../../fixtures/testcases/lubuild/sandwich/config/luis.settings.development_no_version.westus.config')).to.be.true + }) +}) + describe('luis:build throw luis build failed exception successfully', () => { before(function () { nock('https://westus.api.cognitive.microsoft.com') diff --git a/packages/luis/test/fixtures/testcases/lubuild/sandwich/config/luis.settings.development_no_version.westus.config b/packages/luis/test/fixtures/testcases/lubuild/sandwich/config/luis.settings.development_no_version.westus.config new file mode 100644 index 000000000..83f47a7a9 --- /dev/null +++ b/packages/luis/test/fixtures/testcases/lubuild/sandwich/config/luis.settings.development_no_version.westus.config @@ -0,0 +1,7 @@ +{ + "luis": { + "sandwich_en_us_lu": { + "appId": "f8c64e2a-8635-3a09-8f78-39d7adc76ec5" + } + } +} \ No newline at end of file