diff --git a/build/.cachesalt b/build/.cachesalt new file mode 100644 index 0000000000000000000000000000000000000000..56a6051ca2b02b04ef92d5150c9ef600403cb1de --- /dev/null +++ b/build/.cachesalt @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/build/azure-pipelines/compile.yml b/build/azure-pipelines/compile.yml deleted file mode 100644 index a6b7f79a8a55b28087ee3dc935c750692319d8f4..0000000000000000000000000000000000000000 --- a/build/azure-pipelines/compile.yml +++ /dev/null @@ -1,78 +0,0 @@ -steps: -- task: AzureKeyVault@1 - displayName: 'Azure Key Vault: Get Secrets' - inputs: - azureSubscription: 'vscode-builds-subscription' - KeyVaultName: vscode - -- task: NodeTool@0 - inputs: - versionSpec: "10.15.1" - -- script: | - set -e - cat << EOF > ~/.netrc - machine monacotools.visualstudio.com - password $(devops-pat) - machine github.com - login vscode - password $(github-distro-mixin-password) - EOF - git config user.email "vscode@microsoft.com" - git config user.name "VSCode" - displayName: Prepare tooling - -- script: | - set -e - git remote add distro "https://github.com/$(VSCODE_MIXIN_REPO).git" - git fetch distro - git merge $(node -p "require('./package.json').distro") - displayName: Merge distro - -# - task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1 -# inputs: -# keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock' -# targetfolder: '**/node_modules, !**/node_modules/**/node_modules' -# vstsFeed: '$(ArtifactFeed)' - -- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2 - inputs: - versionSpec: "1.10.1" - -- script: 'yarn --frozen-lockfile' - displayName: Install Dependencies - condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) - -# - task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1 -# inputs: -# keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock' -# targetfolder: '**/node_modules, !**/node_modules/**/node_modules' -# vstsFeed: '$(ArtifactFeed)' -# condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) - -- script: 'yarn gulp mixin' - displayName: Mix in quality - -- script: 'yarn gulp hygiene' - displayName: Run hygiene checks - -- script: 'yarn monaco-compile-check' - displayName: Run Monaco compilation checks - -- script: | - set -e - cd $BUILD_STAGINGDIRECTORY - git clone https://github.com/microsoft/vscode-telemetry-extractor.git - cd vscode-telemetry-extractor - git checkout 3b04aba5bfdfcca1a5426cd2c51a90d18740d0bc - npm i - npm run setup-extension-repos - node ./out/cli-extract.js --sourceDir $BUILD_SOURCESDIRECTORY --excludedDirPattern extensions --outputDir . --applyEndpoints --includeIsMeasurement --patchWebsiteEvents - node ./out/cli-extract-extensions.js --sourceDir ./src/telemetry-sources --outputDir . --applyEndpoints --includeIsMeasurement - mkdir -p $BUILD_SOURCESDIRECTORY/.build/telemetry - mv declarations-resolved.json $BUILD_SOURCESDIRECTORY/.build/telemetry/telemetry-core.json - mv declarations-extensions-resolved.json $BUILD_SOURCESDIRECTORY/.build/telemetry/telemetry-extensions.json - displayName: Extract Telemetry - -- script: 'VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" ./build/azure-pipelines/linux/build.sh' - displayName: Build \ No newline at end of file diff --git a/build/azure-pipelines/darwin/product-build-darwin.yml b/build/azure-pipelines/darwin/product-build-darwin.yml index fda58607660524e485eeef3afcd1e1000ced1499..2fcc73f632d6f5bfc6ae6e37b574410710652848 100644 --- a/build/azure-pipelines/darwin/product-build-darwin.yml +++ b/build/azure-pipelines/darwin/product-build-darwin.yml @@ -1,4 +1,23 @@ steps: +- script: | + mkdir -p .build + echo -n $BUILD_SOURCEVERSION > .build/commit + displayName: Prepare cache flag + +- task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1 + inputs: + keyfile: '.build/commit' + targetfolder: '.build, **/out-build, **/out-vscode-min, **/out-vscode-reh-min, **/out-vscode-web-min' + vstsFeed: 'npm-vscode' + platformIndependent: true + alias: 'Compilation' + +- script: | + set -e + exit 1 + displayName: Check RestoreCache + condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true')) + - task: NodeTool@0 inputs: versionSpec: "10.15.1" @@ -35,66 +54,50 @@ steps: git merge $(node -p "require('./package.json').distro") displayName: Merge distro -# - task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1 -# inputs: -# keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock' -# targetfolder: '**/node_modules, !**/node_modules/**/node_modules' -# vstsFeed: 'npm-vscode' +- task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1 + inputs: + keyfile: 'build/.cachesalt, .yarnrc, remote/.yarnrc, quality/*/package.json, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock' + targetfolder: '**/node_modules, !**/node_modules/**/node_modules' + vstsFeed: 'npm-vscode' - script: | set -e CHILD_CONCURRENCY=1 yarn --frozen-lockfile displayName: Install dependencies - # condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) - -# - task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1 -# inputs: -# keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock' -# targetfolder: '**/node_modules, !**/node_modules/**/node_modules' -# vstsFeed: 'npm-vscode' -# condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) + condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) -# - script: | -# set -e -# yarn postinstall -# displayName: Run postinstall scripts - # condition: and(succeeded(), eq(variables['CacheRestored'], 'true')) - -- script: | - set -e - yarn gulp mixin - displayName: Mix in quality +- task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1 + inputs: + keyfile: 'build/.cachesalt, .yarnrc, remote/.yarnrc, quality/*/package.json, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock' + targetfolder: '**/node_modules, !**/node_modules/**/node_modules' + vstsFeed: 'npm-vscode' + condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) - script: | set -e - yarn gulp hygiene - yarn monaco-compile-check - displayName: Run hygiene checks - condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false')) + yarn postinstall + displayName: Run postinstall scripts + condition: and(succeeded(), eq(variables['CacheRestored'], 'true')) - script: | set -e node build/azure-pipelines/common/installDistroDependencies.js node build/azure-pipelines/common/installDistroDependencies.js remote - node build/lib/builtInExtensions.js - displayName: Install distro dependencies and extensions + displayName: Install distro dependencies - script: | set -e - ./build/azure-pipelines/common/extract-telemetry.sh - displayName: Extract Telemetry + yarn gulp mixin + displayName: Mix in quality - script: | set -e - yarn gulp compile-build - yarn gulp compile-extensions-build-legacy - yarn gulp compile-extensions-build VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \ - yarn gulp vscode-darwin-ci + yarn gulp vscode-darwin-min-ci VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \ - yarn gulp vscode-reh-darwin-ci + yarn gulp vscode-reh-darwin-min-ci VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \ - yarn gulp vscode-web-darwin-ci + yarn gulp vscode-web-darwin-min-ci AZURE_STORAGE_ACCESS_KEY="$(ticino-storage-key)" \ yarn gulp upload-vscode-sourcemaps displayName: Build diff --git a/build/azure-pipelines/linux/build-alpine.sh b/build/azure-pipelines/linux/multiarch/alpine/build.sh similarity index 100% rename from build/azure-pipelines/linux/build-alpine.sh rename to build/azure-pipelines/linux/multiarch/alpine/build.sh diff --git a/build/azure-pipelines/linux/build-arm.sh b/build/azure-pipelines/linux/multiarch/alpine/prebuild.sh similarity index 100% rename from build/azure-pipelines/linux/build-arm.sh rename to build/azure-pipelines/linux/multiarch/alpine/prebuild.sh diff --git a/build/azure-pipelines/linux/prebuild-alpine.sh b/build/azure-pipelines/linux/multiarch/alpine/publish.sh similarity index 100% rename from build/azure-pipelines/linux/prebuild-alpine.sh rename to build/azure-pipelines/linux/multiarch/alpine/publish.sh diff --git a/build/azure-pipelines/linux/prebuild-arm.sh b/build/azure-pipelines/linux/multiarch/armhf/build.sh similarity index 100% rename from build/azure-pipelines/linux/prebuild-arm.sh rename to build/azure-pipelines/linux/multiarch/armhf/build.sh diff --git a/build/azure-pipelines/linux/publish-alpine.sh b/build/azure-pipelines/linux/multiarch/armhf/prebuild.sh similarity index 100% rename from build/azure-pipelines/linux/publish-alpine.sh rename to build/azure-pipelines/linux/multiarch/armhf/prebuild.sh diff --git a/build/azure-pipelines/linux/publish-arm.sh b/build/azure-pipelines/linux/multiarch/armhf/publish.sh similarity index 100% rename from build/azure-pipelines/linux/publish-arm.sh rename to build/azure-pipelines/linux/multiarch/armhf/publish.sh diff --git a/build/azure-pipelines/linux/product-build-linux-alpine.yml b/build/azure-pipelines/linux/product-build-linux-alpine.yml deleted file mode 100644 index 50f490b46a723a678a756882cf721cd0a111e94a..0000000000000000000000000000000000000000 --- a/build/azure-pipelines/linux/product-build-linux-alpine.yml +++ /dev/null @@ -1,108 +0,0 @@ -steps: -- task: NodeTool@0 - inputs: - versionSpec: "10.15.1" - -- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2 - inputs: - versionSpec: "1.10.1" - -- task: AzureKeyVault@1 - displayName: 'Azure Key Vault: Get Secrets' - inputs: - azureSubscription: 'vscode-builds-subscription' - KeyVaultName: vscode - -- task: Docker@1 - displayName: 'Pull image' - inputs: - azureSubscriptionEndpoint: 'vscode-builds-subscription' - azureContainerRegistry: vscodehub.azurecr.io - command: 'Run an image' - imageName: 'vscode-linux-build-agent:alpine' - containerCommand: uname - -- script: | - set -e - - cat << EOF > ~/.netrc - machine monacotools.visualstudio.com - password $(devops-pat) - machine github.com - login vscode - password $(github-distro-mixin-password) - EOF - - git config user.email "vscode@microsoft.com" - git config user.name "VSCode" - displayName: Prepare tooling - -- script: | - set -e - git remote add distro "https://github.com/$(VSCODE_MIXIN_REPO).git" - git fetch distro - git merge $(node -p "require('./package.json').distro") - displayName: Merge distro - -# - task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1 -# inputs: -# keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock' -# targetfolder: '**/node_modules, !**/node_modules/**/node_modules' -# vstsFeed: 'npm-vscode' - -- script: | - set -e - CHILD_CONCURRENCY=1 yarn --frozen-lockfile - displayName: Install dependencies - # condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) - -# - task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1 -# inputs: -# keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock' -# targetfolder: '**/node_modules, !**/node_modules/**/node_modules' -# vstsFeed: 'npm-vscode' -# condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) - -# - script: | -# set -e -# yarn postinstall -# displayName: Run postinstall scripts -# condition: and(succeeded(), eq(variables['CacheRestored'], 'true')) - -- script: | - set -e - yarn gulp mixin - displayName: Mix in quality - -- script: | - set -e - yarn gulp hygiene - yarn monaco-compile-check - displayName: Run hygiene checks - condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false')) - -- script: | - set -e - ./build/azure-pipelines/linux/prebuild-alpine.sh - displayName: Prepare build - -- script: | - set -e - yarn gulp compile-build - yarn gulp compile-extensions-build-legacy - yarn gulp compile-extensions-build - ./build/azure-pipelines/linux/build-alpine.sh - displayName: Build - -- script: | - set -e - AZURE_DOCUMENTDB_MASTERKEY="$(builds-docdb-key-readwrite)" \ - AZURE_STORAGE_ACCESS_KEY_2="$(vscode-storage-key)" \ - VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \ - VSCODE_HOCKEYAPP_TOKEN="$(vscode-hockeyapp-token)" \ - ./build/azure-pipelines/linux/publish-alpine.sh - displayName: Publish - -- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0 - displayName: 'Component Detection' - continueOnError: true \ No newline at end of file diff --git a/build/azure-pipelines/linux/product-build-linux-arm.yml b/build/azure-pipelines/linux/product-build-linux-multiarch.yml similarity index 50% rename from build/azure-pipelines/linux/product-build-linux-arm.yml rename to build/azure-pipelines/linux/product-build-linux-multiarch.yml index 9c79d33a93ef1a822d8202a7d32b90bd5a158087..fb255944c0465eaa576067ef51401b2ea7356936 100644 --- a/build/azure-pipelines/linux/product-build-linux-arm.yml +++ b/build/azure-pipelines/linux/product-build-linux-multiarch.yml @@ -1,4 +1,23 @@ steps: +- script: | + mkdir -p .build + echo -n $BUILD_SOURCEVERSION > .build/commit + displayName: Prepare cache flag + +- task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1 + inputs: + keyfile: '.build/commit' + targetfolder: '.build, **/out-build, **/out-vscode-min, **/out-vscode-reh-min, **/out-vscode-web-min' + vstsFeed: 'npm-vscode' + platformIndependent: true + alias: 'Compilation' + +- script: | + set -e + exit 1 + displayName: Check RestoreCache + condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true')) + - task: NodeTool@0 inputs: versionSpec: "10.15.1" @@ -19,7 +38,7 @@ steps: azureSubscriptionEndpoint: 'vscode-builds-subscription' azureContainerRegistry: vscodehub.azurecr.io command: 'Run an image' - imageName: 'vscode-linux-build-agent:armhf' + imageName: 'vscode-linux-build-agent:$(VSCODE_ARCH)' containerCommand: uname - script: | @@ -44,54 +63,44 @@ steps: git merge $(node -p "require('./package.json').distro") displayName: Merge distro -# - task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1 -# inputs: -# keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock' -# targetfolder: '**/node_modules, !**/node_modules/**/node_modules' -# vstsFeed: 'npm-vscode' +- task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1 + inputs: + keyfile: 'build/.cachesalt, .yarnrc, remote/.yarnrc, quality/*/package.json, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock' + targetfolder: '**/node_modules, !**/node_modules/**/node_modules' + vstsFeed: 'npm-vscode' - script: | set -e CHILD_CONCURRENCY=1 yarn --frozen-lockfile displayName: Install dependencies - # condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) - -# - task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1 -# inputs: -# keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock' -# targetfolder: '**/node_modules, !**/node_modules/**/node_modules' -# vstsFeed: 'npm-vscode' -# condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) + condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) -# - script: | -# set -e -# yarn postinstall -# displayName: Run postinstall scripts -# condition: and(succeeded(), eq(variables['CacheRestored'], 'true')) +- task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1 + inputs: + keyfile: 'build/.cachesalt, .yarnrc, remote/.yarnrc, quality/*/package.json, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock' + targetfolder: '**/node_modules, !**/node_modules/**/node_modules' + vstsFeed: 'npm-vscode' + condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) - script: | set -e - yarn gulp mixin - displayName: Mix in quality + yarn postinstall + displayName: Run postinstall scripts + condition: and(succeeded(), eq(variables['CacheRestored'], 'true')) - script: | set -e - yarn gulp hygiene - yarn monaco-compile-check - displayName: Run hygiene checks - condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false')) + yarn gulp mixin + displayName: Mix in quality - script: | set -e - ./build/azure-pipelines/linux/prebuild-arm.sh + ./build/azure-pipelines/linux/multiarch/$(VSCODE_ARCH)/prebuild.sh displayName: Prebuild - script: | set -e - yarn gulp compile-build - yarn gulp compile-extensions-build-legacy - yarn gulp compile-extensions-build - ./build/azure-pipelines/linux/build-arm.sh + ./build/azure-pipelines/linux/multiarch/$(VSCODE_ARCH)/build.sh displayName: Build - script: | @@ -100,7 +109,7 @@ steps: AZURE_STORAGE_ACCESS_KEY_2="$(vscode-storage-key)" \ VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \ VSCODE_HOCKEYAPP_TOKEN="$(vscode-hockeyapp-token)" \ - ./build/azure-pipelines/linux/publish-arm.sh + ./build/azure-pipelines/linux/multiarch/$(VSCODE_ARCH)/publish.sh displayName: Publish - task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0 diff --git a/build/azure-pipelines/linux/product-build-linux.yml b/build/azure-pipelines/linux/product-build-linux.yml index 0960b70e59d678b95406895c0da18600c0bdbc5a..369c8abc7d0624e2cb7c43b7408c7269d1458de4 100644 --- a/build/azure-pipelines/linux/product-build-linux.yml +++ b/build/azure-pipelines/linux/product-build-linux.yml @@ -1,4 +1,23 @@ steps: +- script: | + mkdir -p .build + echo -n $BUILD_SOURCEVERSION > .build/commit + displayName: Prepare cache flag + +- task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1 + inputs: + keyfile: '.build/commit' + targetfolder: '.build, **/out-build, **/out-vscode-min, **/out-vscode-reh-min, **/out-vscode-web-min' + vstsFeed: 'npm-vscode' + platformIndependent: true + alias: 'Compilation' + +- script: | + set -e + exit 1 + displayName: Check RestoreCache + condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true')) + - task: NodeTool@0 inputs: versionSpec: "10.15.1" @@ -36,60 +55,44 @@ steps: git merge $(node -p "require('./package.json').distro") displayName: Merge distro -# - task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1 -# inputs: -# keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock' -# targetfolder: '**/node_modules, !**/node_modules/**/node_modules' -# vstsFeed: 'npm-vscode' +- task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1 + inputs: + keyfile: 'build/.cachesalt, .yarnrc, remote/.yarnrc, quality/*/package.json, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock' + targetfolder: '**/node_modules, !**/node_modules/**/node_modules' + vstsFeed: 'npm-vscode' - script: | set -e CHILD_CONCURRENCY=1 yarn --frozen-lockfile displayName: Install dependencies -# condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) - -# - task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1 -# inputs: -# keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock' -# targetfolder: '**/node_modules, !**/node_modules/**/node_modules' -# vstsFeed: 'npm-vscode' -# condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) - -# - script: | -# set -e -# yarn postinstall -# displayName: Run postinstall scripts -# condition: and(succeeded(), eq(variables['CacheRestored'], 'true')) + condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) -- script: | - set -e - yarn gulp mixin - displayName: Mix in quality +- task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1 + inputs: + keyfile: 'build/.cachesalt, .yarnrc, remote/.yarnrc, quality/*/package.json, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock' + targetfolder: '**/node_modules, !**/node_modules/**/node_modules' + vstsFeed: 'npm-vscode' + condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) - script: | set -e - yarn gulp hygiene - yarn monaco-compile-check - displayName: Run hygiene checks - condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false')) + yarn postinstall + displayName: Run postinstall scripts + condition: and(succeeded(), eq(variables['CacheRestored'], 'true')) - script: | set -e node build/azure-pipelines/common/installDistroDependencies.js node build/azure-pipelines/common/installDistroDependencies.js remote - node build/lib/builtInExtensions.js - displayName: Install distro dependencies and extensions + displayName: Install distro dependencies - script: | set -e - ./build/azure-pipelines/common/extract-telemetry.sh - displayName: Extract Telemetry + yarn gulp mixin + displayName: Mix in quality - script: | set -e - yarn gulp compile-build - yarn gulp compile-extensions-build-legacy - yarn gulp compile-extensions-build VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \ yarn gulp vscode-linux-$VSCODE_ARCH-min-ci VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \ @@ -119,12 +122,12 @@ steps: ./build/azure-pipelines/linux/publish.sh displayName: Publish -- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0 - displayName: 'Component Detection' - continueOnError: true - - task: PublishPipelineArtifact@0 displayName: 'Publish Pipeline Artifact' inputs: artifactName: snap-$(VSCODE_ARCH) targetPath: .build/linux/snap-tarball + +- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0 + displayName: 'Component Detection' + continueOnError: true diff --git a/build/azure-pipelines/product-build.yml b/build/azure-pipelines/product-build.yml index aca968c646da3da02b7afb30bbb876ae33e3cb2f..ddaabdcdc724b62c06e17a010d6919caafc092dc 100644 --- a/build/azure-pipelines/product-build.yml +++ b/build/azure-pipelines/product-build.yml @@ -7,45 +7,54 @@ resources: image: snapcore/snapcraft:stable jobs: -# - job: Compile -# pool: -# vmImage: 'Ubuntu-16.04' -# steps: -# - template: compile.yml +- job: Compile + pool: + vmImage: 'Ubuntu-16.04' + variables: + VSCODE_ARCH: x64 + container: vscode-x64 + steps: + - template: product-compile.yml - job: Windows - condition: and(succeeded(), eq(variables['VSCODE_BUILD_WIN32'], 'true')) + condition: and(succeeded(), eq(variables['VSCODE_COMPILE_ONLY'], 'false'), eq(variables['VSCODE_BUILD_WIN32'], 'true')) timeoutInMinutes: 120 pool: vmImage: VS2017-Win2016 variables: VSCODE_ARCH: x64 + dependsOn: + - Compile steps: - template: win32/product-build-win32.yml - job: Windows32 - condition: and(succeeded(), eq(variables['VSCODE_BUILD_WIN32_32BIT'], 'true')) + condition: and(succeeded(), eq(variables['VSCODE_COMPILE_ONLY'], 'false'), eq(variables['VSCODE_BUILD_WIN32_32BIT'], 'true')) timeoutInMinutes: 120 pool: vmImage: VS2017-Win2016 variables: VSCODE_ARCH: ia32 + dependsOn: + - Compile steps: - template: win32/product-build-win32.yml - job: Linux - condition: and(succeeded(), eq(variables['VSCODE_BUILD_LINUX'], 'true')) + condition: and(succeeded(), eq(variables['VSCODE_COMPILE_ONLY'], 'false'), eq(variables['VSCODE_BUILD_LINUX'], 'true')) timeoutInMinutes: 120 pool: vmImage: 'Ubuntu-16.04' variables: VSCODE_ARCH: x64 container: vscode-x64 + dependsOn: + - Compile steps: - template: linux/product-build-linux.yml - job: LinuxSnap - condition: and(succeeded(), eq(variables['VSCODE_BUILD_LINUX'], 'true')) + condition: and(succeeded(), eq(variables['VSCODE_COMPILE_ONLY'], 'false'), eq(variables['VSCODE_BUILD_LINUX'], 'true')) timeoutInMinutes: 120 pool: vmImage: 'Ubuntu-16.04' @@ -57,35 +66,41 @@ jobs: - template: linux/snap-build-linux.yml - job: LinuxArmhf - condition: and(succeeded(), eq(variables['VSCODE_BUILD_LINUX_ARMHF'], 'true'), ne(variables['VSCODE_QUALITY'], 'stable')) + condition: and(succeeded(), eq(variables['VSCODE_COMPILE_ONLY'], 'false'), eq(variables['VSCODE_BUILD_LINUX_ARMHF'], 'true'), ne(variables['VSCODE_QUALITY'], 'stable')) timeoutInMinutes: 120 pool: vmImage: 'Ubuntu-16.04' variables: VSCODE_ARCH: armhf + dependsOn: + - Compile steps: - - template: linux/product-build-linux-arm.yml + - template: linux/product-build-linux-multiarch.yml - job: LinuxAlpine - condition: and(succeeded(), eq(variables['VSCODE_BUILD_LINUX_ALPINE'], 'true'), ne(variables['VSCODE_QUALITY'], 'stable')) + condition: and(succeeded(), eq(variables['VSCODE_COMPILE_ONLY'], 'false'), eq(variables['VSCODE_BUILD_LINUX_ALPINE'], 'true'), ne(variables['VSCODE_QUALITY'], 'stable')) timeoutInMinutes: 120 pool: vmImage: 'Ubuntu-16.04' variables: VSCODE_ARCH: alpine + dependsOn: + - Compile steps: - - template: linux/product-build-linux-alpine.yml + - template: linux/product-build-linux-multiarch.yml - job: macOS - condition: and(succeeded(), eq(variables['VSCODE_BUILD_MACOS'], 'true')) + condition: and(succeeded(), eq(variables['VSCODE_COMPILE_ONLY'], 'false'), eq(variables['VSCODE_BUILD_MACOS'], 'true')) timeoutInMinutes: 120 pool: vmImage: macOS 10.13 + dependsOn: + - Compile steps: - template: darwin/product-build-darwin.yml - job: Release - condition: and(succeeded(), or(eq(variables['VSCODE_RELEASE'], 'true'), and(or(eq(variables['VSCODE_QUALITY'], 'insider'), eq(variables['VSCODE_QUALITY'], 'exploration')), eq(variables['Build.Reason'], 'Schedule')))) + condition: and(succeeded(), eq(variables['VSCODE_COMPILE_ONLY'], 'false'), or(eq(variables['VSCODE_RELEASE'], 'true'), and(or(eq(variables['VSCODE_QUALITY'], 'insider'), eq(variables['VSCODE_QUALITY'], 'exploration')), eq(variables['Build.Reason'], 'Schedule')))) pool: vmImage: 'Ubuntu-16.04' dependsOn: @@ -102,7 +117,7 @@ jobs: - job: Mooncake pool: vmImage: 'Ubuntu-16.04' - condition: true + condition: and(succeededOrFailed(), eq(variables['VSCODE_COMPILE_ONLY'], 'false')) dependsOn: - Windows - Windows32 diff --git a/build/azure-pipelines/product-compile.yml b/build/azure-pipelines/product-compile.yml new file mode 100644 index 0000000000000000000000000000000000000000..a894140f52dd9d7ef21df29b4c139dc4dab3d692 --- /dev/null +++ b/build/azure-pipelines/product-compile.yml @@ -0,0 +1,121 @@ +steps: +- script: | + mkdir -p .build + echo -n $BUILD_SOURCEVERSION > .build/commit + displayName: Prepare cache flag + +- task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1 + inputs: + keyfile: '.build/commit' + targetfolder: '.build, **/out-build, **/out-vscode-min, **/out-vscode-reh-min, **/out-vscode-web-min' + vstsFeed: 'npm-vscode' + platformIndependent: true + alias: 'Compilation' + +- task: NodeTool@0 + inputs: + versionSpec: "10.15.1" + condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true')) + +- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2 + inputs: + versionSpec: "1.10.1" + condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true')) + +- task: AzureKeyVault@1 + displayName: 'Azure Key Vault: Get Secrets' + inputs: + azureSubscription: 'vscode-builds-subscription' + KeyVaultName: vscode + condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true')) + +- script: | + set -e + export npm_config_arch="$(VSCODE_ARCH)" + + cat << EOF > ~/.netrc + machine monacotools.visualstudio.com + password $(devops-pat) + machine github.com + login vscode + password $(github-distro-mixin-password) + EOF + + git config user.email "vscode@microsoft.com" + git config user.name "VSCode" + displayName: Prepare tooling + condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true')) + +- script: | + set -e + git remote add distro "https://github.com/$(VSCODE_MIXIN_REPO).git" + git fetch distro + git merge $(node -p "require('./package.json').distro") + displayName: Merge distro + condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true')) + +- task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1 + inputs: + keyfile: 'build/.cachesalt, .yarnrc, remote/.yarnrc, quality/*/package.json, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock' + targetfolder: '**/node_modules, !**/node_modules/**/node_modules' + vstsFeed: 'npm-vscode' + condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true')) + +- script: | + set -e + CHILD_CONCURRENCY=1 yarn --frozen-lockfile + displayName: Install dependencies + condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'), ne(variables['CacheRestored'], 'true')) + +- task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1 + inputs: + keyfile: 'build/.cachesalt, .yarnrc, remote/.yarnrc, quality/*/package.json, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock' + targetfolder: '**/node_modules, !**/node_modules/**/node_modules' + vstsFeed: 'npm-vscode' + condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'), ne(variables['CacheRestored'], 'true')) + +- script: | + set -e + yarn postinstall + displayName: Run postinstall scripts + condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'), eq(variables['CacheRestored'], 'true')) + +- script: | + set -e + node build/azure-pipelines/common/installDistroDependencies.js + node build/azure-pipelines/common/installDistroDependencies.js remote + displayName: Install distro dependencies + condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true')) + +- script: | + set -e + yarn gulp hygiene + yarn monaco-compile-check + displayName: Run hygiene checks + condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true'), eq(variables['VSCODE_STEP_ON_IT'], 'false')) + +- script: | + set - + ./build/azure-pipelines/common/extract-telemetry.sh + displayName: Extract Telemetry + condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true')) + +- script: | + set -e + yarn gulp compile-build + yarn gulp compile-extensions-build-legacy + yarn gulp compile-extensions-build + yarn gulp minify-vscode + yarn gulp minify-vscode-reh + yarn gulp minify-vscode-web + displayName: Compile + condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true')) + +- task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1 + inputs: + keyfile: '.build/commit' + targetfolder: '.build, **/out-build, **/out-vscode-min, **/out-vscode-reh-min, **/out-vscode-web-min' + vstsFeed: 'npm-vscode' + platformIndependent: true + alias: 'Compilation' + condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true')) \ No newline at end of file diff --git a/build/azure-pipelines/win32/product-build-win32.yml b/build/azure-pipelines/win32/product-build-win32.yml index 0ccaab54a222556f288149026ae5e37a894503d0..0aba8e8c3ce44fbe50bd182b082ffee6af21310f 100644 --- a/build/azure-pipelines/win32/product-build-win32.yml +++ b/build/azure-pipelines/win32/product-build-win32.yml @@ -1,4 +1,23 @@ steps: +- powershell: | + mkdir .build -ea 0 + "$env:BUILD_SOURCEVERSION" | Out-File -Encoding ascii -NoNewLine .build\commit + displayName: Prepare cache flag + +- task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1 + inputs: + keyfile: '.build/commit' + targetfolder: '.build, **/out-build, **/out-vscode-min, **/out-vscode-reh-min, **/out-vscode-web-min' + vstsFeed: 'npm-vscode' + platformIndependent: true + alias: 'Compilation' + +- powershell: | + $ErrorActionPreference = "Stop" + exit 1 + displayName: Check RestoreCache + condition: and(succeeded(), ne(variables['CacheRestored-Compilation'], 'true')) + - task: NodeTool@0 inputs: versionSpec: "10.15.1" @@ -38,11 +57,11 @@ steps: exec { git merge $(node -p "require('./package.json').distro") } displayName: Merge distro -# - task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1 -# inputs: -# keyfile: '.build/arch, .yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock' -# targetfolder: '**/node_modules, !**/node_modules/**/node_modules' -# vstsFeed: 'npm-vscode' +- task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1 + inputs: + keyfile: 'build/.cachesalt, .build/arch, .yarnrc, remote/.yarnrc, quality/*/package.json, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock' + targetfolder: '**/node_modules, !**/node_modules/**/node_modules' + vstsFeed: 'npm-vscode' - powershell: | . build/azure-pipelines/win32/exec.ps1 @@ -51,67 +70,39 @@ steps: $env:CHILD_CONCURRENCY="1" exec { yarn --frozen-lockfile } displayName: Install dependencies - # condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) - -# - task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1 -# inputs: -# keyfile: '.build/arch, .yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock' -# targetfolder: '**/node_modules, !**/node_modules/**/node_modules' -# vstsFeed: 'npm-vscode' -# condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) - -# - powershell: | -# . build/azure-pipelines/win32/exec.ps1 -# $ErrorActionPreference = "Stop" -# exec { yarn postinstall } -# displayName: Run postinstall scripts -# condition: and(succeeded(), eq(variables['CacheRestored'], 'true')) + condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) -- powershell: | - . build/azure-pipelines/win32/exec.ps1 - $ErrorActionPreference = "Stop" - exec { yarn gulp mixin } - displayName: Mix in quality +- task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1 + inputs: + keyfile: 'build/.cachesalt, .build/arch, .yarnrc, remote/.yarnrc, quality/*/package.json, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock' + targetfolder: '**/node_modules, !**/node_modules/**/node_modules' + vstsFeed: 'npm-vscode' + condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) - powershell: | . build/azure-pipelines/win32/exec.ps1 $ErrorActionPreference = "Stop" - exec { yarn gulp hygiene } - exec { yarn monaco-compile-check } - displayName: Run hygiene checks - condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false')) + exec { yarn postinstall } + displayName: Run postinstall scripts + condition: and(succeeded(), eq(variables['CacheRestored'], 'true')) - powershell: | . build/azure-pipelines/win32/exec.ps1 $ErrorActionPreference = "Stop" exec { node build/azure-pipelines/common/installDistroDependencies.js } exec { node build/azure-pipelines/common/installDistroDependencies.js remote } - exec { node build/lib/builtInExtensions.js } - displayName: Install distro dependencies and extensions + displayName: Install distro dependencies - powershell: | . build/azure-pipelines/win32/exec.ps1 $ErrorActionPreference = "Stop" - cd $env:BUILD_STAGINGDIRECTORY - exec { git clone https://github.com/microsoft/vscode-telemetry-extractor.git } - cd vscode-telemetry-extractor - exec { git checkout f538e3157c84d1bd0b239dfc5ebccac226006d58 } - exec { npm i } - exec { npm run setup-extension-repos } - exec { node .\out\cli-extract.js --sourceDir $env:BUILD_SOURCESDIRECTORY --excludedDirPattern extensions --outputDir . --applyEndpoints --includeIsMeasurement --patchWebsiteEvents } - exec { node .\out\cli-extract-extensions.js --sourceDir .\src\telemetry-sources --outputDir . --applyEndpoints --includeIsMeasurement } - mkdir $env:BUILD_SOURCESDIRECTORY\.build\telemetry -ea 0 - mv declarations-resolved.json $env:BUILD_SOURCESDIRECTORY\.build\telemetry\telemetry-core.json - mv declarations-extensions-resolved.json $env:BUILD_SOURCESDIRECTORY\.build\telemetry\telemetry-extensions.json - displayName: Extract Telemetry + exec { yarn gulp mixin } + displayName: Mix in quality - powershell: | . build/azure-pipelines/win32/exec.ps1 $ErrorActionPreference = "Stop" $env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" - exec { yarn gulp compile-build } - exec { yarn gulp compile-extensions-build-legacy } - exec { yarn gulp compile-extensions-build } exec { yarn gulp "vscode-win32-$env:VSCODE_ARCH-min-ci" } exec { yarn gulp "vscode-reh-win32-$env:VSCODE_ARCH-min-ci" } exec { yarn gulp "vscode-web-win32-$env:VSCODE_ARCH-min-ci" } diff --git a/build/gulpfile.compile.js b/build/gulpfile.compile.js index a32936ef4b292be5595d8f14e75f3813fabdadee..21aa7896558272450c02e69ff8fb07282bfc9947 100644 --- a/build/gulpfile.compile.js +++ b/build/gulpfile.compile.js @@ -5,10 +5,12 @@ 'use strict'; +const gulp = require('gulp'); const util = require('./lib/util'); const task = require('./lib/task'); const compilation = require('./lib/compilation'); // Full compile, including nls and inline sources in sourcemaps, for build const compileBuildTask = task.define('compile-build', task.series(util.rimraf('out-build'), compilation.compileTask('src', 'out-build', true))); +gulp.task(compileBuildTask); exports.compileBuildTask = compileBuildTask; \ No newline at end of file diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js index 2846595f6057512a43690f964e878f79e7cb6b10..2475b3b6c45eff08a89f84735f04c62ca7ac6933 100644 --- a/build/gulpfile.vscode.js +++ b/build/gulpfile.vscode.js @@ -104,6 +104,7 @@ const optimizeVSCodeTask = task.define('optimize-vscode', task.series( bundleInfo: undefined }) )); +gulp.task(optimizeVSCodeTask); const sourceMappingURLBase = `https://ticino.blob.core.windows.net/sourcemaps/${commit}`; const minifyVSCodeTask = task.define('minify-vscode', task.series( @@ -117,6 +118,7 @@ const minifyVSCodeTask = task.define('minify-vscode', task.series( }, common.minifyTask('out-vscode', `${sourceMappingURLBase}/core`) )); +gulp.task(minifyVSCodeTask); // Package @@ -307,13 +309,22 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op const telemetry = gulp.src('.build/telemetry/**', { base: '.build/telemetry', dot: true }); - const depsSrc = [ - ..._.flatten(productionDependencies.map(d => path.relative(root, d.path)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`])), - // @ts-ignore JSON checking: dependencies is optional - ..._.flatten(Object.keys(product.dependencies || {}).map(d => [`node_modules/${d}/**`, `!node_modules/${d}/**/{test,tests}/**`])) - ]; + const dependenciesSrc = _.flatten(productionDependencies.map(d => path.relative(root, d.path)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`])); - const deps = gulp.src(depsSrc, { base: '.', dot: true }) + // Collect distro dependencies, if any + if (quality) { + const qualityPackagePath = path.join(root, 'quality', quality, 'package.json'); + + if (fs.existsSync(qualityPackagePath)) { + const pkg = JSON.parse(fs.readFileSync(qualityPackagePath, 'utf8')); + + // @ts-ignore JSON checking: dependencies is optional + const distroDependencies = _.flatten(Object.keys(pkg.dependencies || {}).map(d => [`node_modules/${d}/**`, `!node_modules/${d}/**/{test,tests}/**`])); + dependenciesSrc.push(...distroDependencies); + } + } + + const deps = gulp.src(dependenciesSrc, { base: '.', dot: true }) .pipe(filter(['**', '!**/package-lock.json'])) .pipe(util.cleanNodeModules(path.join(__dirname, '.nativeignore'))) .pipe(createAsar(path.join(process.cwd(), 'node_modules'), ['**/*.node', '**/vscode-ripgrep/bin/*', '**/node-pty/build/Release/*'], 'app/node_modules.asar')); @@ -438,7 +449,6 @@ BUILD_TARGETS.forEach(buildTarget => { const destinationFolderName = `VSCode${dashed(platform)}${dashed(arch)}`; const vscodeTaskCI = task.define(`vscode${dashed(platform)}${dashed(arch)}${dashed(minified)}-ci`, task.series( - minified ? minifyVSCodeTask : optimizeVSCodeTask, util.rimraf(path.join(buildRoot, destinationFolderName)), packageTask(platform, arch, sourceFolderName, destinationFolderName, opts) )); @@ -447,6 +457,7 @@ BUILD_TARGETS.forEach(buildTarget => { const vscodeTask = task.define(`vscode${dashed(platform)}${dashed(arch)}${dashed(minified)}`, task.series( compileBuildTask, compileExtensionsBuildTask, + minified ? minifyVSCodeTask : optimizeVSCodeTask, vscodeTaskCI )); gulp.task(vscodeTask); diff --git a/package.json b/package.json index 38463fe255f637c4beecc678f3bba51121892f77..df3df6ff757133dfa6f77b4574fd491573e12818 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "code-oss-dev", "version": "1.37.0", - "distro": "232f54dd8c50f5bdf086c2c557a42954a41170bd", + "distro": "65898cd4327756aaf3f5e65f02d0e1edee2db1a9", "author": { "name": "Microsoft Corporation" }, @@ -156,4 +156,4 @@ "windows-mutex": "0.2.1", "windows-process-tree": "0.2.3" } -} +} \ No newline at end of file diff --git a/src/vs/workbench/services/keybinding/browser/keybindingService.ts b/src/vs/workbench/services/keybinding/browser/keybindingService.ts index 1a165e03627ea03d2df2be339ff931d68d5c3af1..ed247dae97a3de777605b02398e9a5e129489fa9 100644 --- a/src/vs/workbench/services/keybinding/browser/keybindingService.ts +++ b/src/vs/workbench/services/keybinding/browser/keybindingService.ts @@ -532,7 +532,7 @@ export class WorkbenchKeybindingService extends AbstractKeybindingService { mightProducePrintableCharacter(event: IKeyboardEvent): boolean { if (event.ctrlKey || event.metaKey || event.altKey) { - // ignore ctrl/cmd-combination but not shift/alt-combinatios + // ignore ctrl/cmd/alt-combination but not shift-combinatios return false; } const code = ScanCodeUtils.toEnum(event.code); diff --git a/src/vs/workbench/services/textfile/test/textFileService.io.test.ts b/src/vs/workbench/services/textfile/test/textFileService.io.test.ts index 3337c56b2a24530e7ad6196a84ecd2878124fea1..8d4e1a407d1010479bcae807f9d6a364304c9627 100644 --- a/src/vs/workbench/services/textfile/test/textFileService.io.test.ts +++ b/src/vs/workbench/services/textfile/test/textFileService.io.test.ts @@ -247,7 +247,10 @@ suite('Files - TextFileService i/o', () => { } test('write - use encoding (cp1252)', async () => { - await testEncodingKeepsData(URI.file(join(testDir, 'some_cp1252.txt')), 'cp1252', ['ObjectCount = LoadObjects("Öffentlicher Ordner");', '', 'Private = "Persönliche Information"', ''].join(isWindows ? '\r\n' : '\n')); + const filePath = join(testDir, 'some_cp1252.txt'); + const contents = await readFile(filePath, 'utf8'); + const eol = /\r\n/.test(contents) ? '\r\n' : '\n'; + await testEncodingKeepsData(URI.file(filePath), 'cp1252', ['ObjectCount = LoadObjects("Öffentlicher Ordner");', '', 'Private = "Persönliche Information"', ''].join(eol)); }); test('write - use encoding (shiftjis)', async () => {