diff --git a/.azure-pipelines/OfficialBuild.yml b/.azure-pipelines/OfficialBuild.yml index 47220751c..d15598b26 100644 --- a/.azure-pipelines/OfficialBuild.yml +++ b/.azure-pipelines/OfficialBuild.yml @@ -63,11 +63,17 @@ steps: # customCommand: run increment-version - task: Npm@1 - displayName: 'Build and package VSIX' + displayName: 'Official Build and Package VSIX' inputs: command: custom customCommand: run dist -- --feedPAT $(AZ_DevOps_Read_PAT) --isOfficialBuild true +- task: Npm@1 + displayName: 'Preview Build and Package VSIX' + inputs: + command: custom + customCommand: run dist -- --feedPAT $(AZ_DevOps_Read_PAT) --isPreviewBuild true + # https://microsoft.sharepoint.com/teams/prss/esrp/info/ESRP%20Onboarding%20Wiki/Generating%20Signing%20JSON.aspx # https://microsoft.sharepoint.com/teams/prss/esrp/info/ESRP%20Onboarding%20Wiki/Selecting%20CodeSign%20Certificates.aspx - task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@1 diff --git a/gulpfile.js b/gulpfile.js index d7e00a387..7bce99a7a 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -35,6 +35,7 @@ const outdir = path.resolve('./out'); const packagedir = path.resolve('./package'); const feedPAT = argv.feedPAT || process.env['AZ_DevOps_Read_PAT']; const isOfficialBuild = argv.isOfficialBuild && argv.isOfficialBuild.toLowerCase() == "true"; +const isPreviewBuild = argv.isPreviewBuild && argv.isPreviewBuild.toLowerCase() == "true"; async function clean() { (await pslist()) @@ -48,7 +49,7 @@ async function clean() { } function setTelemetryTarget() { - const telemetryConfigurationSource = isOfficialBuild + const telemetryConfigurationSource = isOfficialBuild && !isPreviewBuild ? 'src/common/telemetry/telemetryConfigurationProd.ts' : 'src/common/telemetry/telemetryConfigurationDev.ts'; @@ -58,6 +59,7 @@ function setTelemetryTarget() { .pipe(gulp.dest(path.join('src', 'common', 'telemetry', 'generated'))); } + function compile() { return gulp .src('src/**/*.ts') @@ -215,10 +217,44 @@ const test = gulp.series(testUnitTests, testWeb); const testInt = gulp.series(testDebugger); async function packageVsix() { - fs.emptyDirSync(packagedir); - return vsce.createVSIX({ + const standardHeader = '# Power Platform Extension'; + const previewHeader = '# Power Platform Tools [PREVIEW]\n\n## This extension is used for internal testing against targets such as vscode.dev which require Marketplace published extensions, and is not supported.'; + const standardPackageOptions = { + name: 'powerplatform-vscode', + displayName: 'Power Platform Tools', + description: 'Tooling to create Power Platform solutions & packages, manage Power Platform environments and edit Power Apps Portals', + readmeHeader: standardHeader, + readmeReplacementTarget: previewHeader, + }; + const previewPackageOptions = { + name: 'powerplatform-vscode-preview', + displayName: 'Power Platform Tools [PREVIEW]', + description: 'Unsupported extension for testing Power Platform Tools', + readmeHeader: previewHeader, + readmeReplacementTarget: standardHeader, + }; + + const setPackageInfo = async function(pkgOptions) { + await npm(['pkg', 'set', `name=${pkgOptions.name}`]); + await npm(['pkg', 'set', `displayName="${pkgOptions.displayName}"`]); + await npm(['pkg', 'set', `description="${pkgOptions.description}"`]); + + gulp.src('README.md') + .pipe(replace(pkgOptions.readmeReplacementTarget, pkgOptions.readmeHeader)) + .pipe(gulp.dest('./')); + } + + await setPackageInfo(isPreviewBuild ? previewPackageOptions : standardPackageOptions); + + await vsce.createVSIX({ packagePath: packagedir, + preRelease: isPreviewBuild, }); + + // Reset to non-preview settings to prevent polluting git diffs + if (isPreviewBuild) { + await setPackageInfo(standardPackageOptions); + } } @@ -228,6 +264,12 @@ async function git(args) { return {stdout: stdout, stderr: stderr}; } +async function npm(args) { + args.unshift('npm'); + const {stdout, stderr } = await exec(args.join(' ')); + return {stdout: stdout, stderr: stderr}; +} + async function setGitAuthN() { const repoUrl = 'https://github.com'; const repoToken = argv.repoToken; diff --git a/package-lock.json b/package-lock.json index abfbbc210..02879bd70 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,7 +34,7 @@ "@types/sinon": "^10.0.12", "@types/unzip-stream": "^0.3.0", "@types/uuid": "^8.3.0", - "@types/vscode": "^1.51.0", + "@types/vscode": "^1.72.0", "@types/webpack": "^5.28.0", "@types/webpack-env": "^1.17.0", "@typescript-eslint/eslint-plugin": "^5.15.0", @@ -72,7 +72,7 @@ "yargs": "^16.2.0" }, "engines": { - "vscode": "^1.51.0" + "vscode": "^1.72.0" }, "optionalDependencies": { "bufferutil": "^4.0.6", @@ -666,9 +666,9 @@ } }, "node_modules/@types/vscode": { - "version": "1.68.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.68.0.tgz", - "integrity": "sha512-duBwEK5ta/eBBMJMQ7ECMEsMvlE3XJdRGh3xoS1uOO4jl2Z4LPBl5vx8WvBP10ERAgDRmIt/FaSD4RHyBGbChw==", + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.72.0.tgz", + "integrity": "sha512-WvHluhUo+lQvE3I4wUagRpnkHuysB4qSyOQUyIAS9n9PYMJjepzTUD8Jyks0YeXoPD0UGctjqp2u84/b3v6Ydw==", "dev": true }, "node_modules/@types/webpack": { @@ -13141,9 +13141,9 @@ } }, "@types/vscode": { - "version": "1.68.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.68.0.tgz", - "integrity": "sha512-duBwEK5ta/eBBMJMQ7ECMEsMvlE3XJdRGh3xoS1uOO4jl2Z4LPBl5vx8WvBP10ERAgDRmIt/FaSD4RHyBGbChw==", + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.72.0.tgz", + "integrity": "sha512-WvHluhUo+lQvE3I4wUagRpnkHuysB4qSyOQUyIAS9n9PYMJjepzTUD8Jyks0YeXoPD0UGctjqp2u84/b3v6Ydw==", "dev": true }, "@types/webpack": { diff --git a/package.json b/package.json index 8ea14d8aa..2ad8a46e2 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "email": "PPTools@microsoft.com" }, "engines": { - "vscode": "^1.51.0" + "vscode": "^1.72.0" }, "extensionKind": [ "workspace" @@ -723,7 +723,7 @@ "@types/sinon": "^10.0.12", "@types/unzip-stream": "^0.3.0", "@types/uuid": "^8.3.0", - "@types/vscode": "^1.51.0", + "@types/vscode": "^1.72.0", "@types/webpack": "^5.28.0", "@types/webpack-env": "^1.17.0", "@typescript-eslint/eslint-plugin": "^5.15.0", @@ -739,8 +739,8 @@ "gulp-eslint": "^6.0.0", "gulp-filter": "^7.0.0", "gulp-mocha": "^8.0.0", - "gulp-replace": "^1.1.3", "gulp-rename": "^2.0.0", + "gulp-replace": "^1.1.3", "gulp-sourcemaps": "^2.6.5", "gulp-typescript": "^6.0.0-alpha.1", "mocha": "^9.2.2",