eae5d8c807
These conflicts will be resolved in the following commits. We do it this way so that PR review is possible.
293 lines
10 KiB
YAML
293 lines
10 KiB
YAML
steps:
|
|
- task: NodeTool@0
|
|
inputs:
|
|
versionSpec: "12.18.3"
|
|
|
|
- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
|
|
inputs:
|
|
versionSpec: "1.x"
|
|
|
|
- task: AzureKeyVault@1
|
|
displayName: "Azure Key Vault: Get Secrets"
|
|
inputs:
|
|
azureSubscription: "vscode-builds-subscription"
|
|
KeyVaultName: vscode
|
|
|
|
- task: DownloadPipelineArtifact@2
|
|
inputs:
|
|
artifact: Compilation
|
|
path: $(Build.ArtifactStagingDirectory)
|
|
displayName: Download compilation output
|
|
|
|
- script: |
|
|
set -e
|
|
tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz
|
|
displayName: Extract compilation output
|
|
|
|
- script: |
|
|
set -e
|
|
cat << EOF > ~/.netrc
|
|
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 pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro")
|
|
displayName: Merge distro
|
|
|
|
- script: |
|
|
mkdir -p .build
|
|
node build/azure-pipelines/common/computeNodeModulesCacheKey.js $VSCODE_ARCH $ENABLE_TERRAPIN > .build/yarnlockhash
|
|
displayName: Prepare yarn cache flags
|
|
|
|
- task: Cache@2
|
|
inputs:
|
|
key: 'nodeModules | $(Agent.OS) | .build/yarnlockhash'
|
|
path: .build/node_modules_cache
|
|
cacheHitVar: NODE_MODULES_RESTORED
|
|
displayName: Restore node_modules cache
|
|
|
|
- script: |
|
|
set -e
|
|
tar -xzf .build/node_modules_cache/cache.tgz
|
|
condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true'))
|
|
displayName: Extract node_modules cache
|
|
|
|
- script: |
|
|
set -e
|
|
npm install -g node-gyp@latest
|
|
node-gyp --version
|
|
displayName: Update node-gyp
|
|
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), eq(variables['VSCODE_ARCH'], 'x64'))
|
|
|
|
- script: |
|
|
npx https://aka.ms/enablesecurefeed standAlone
|
|
timeoutInMinutes: 5
|
|
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), eq(variables['ENABLE_TERRAPIN'], 'true'))
|
|
displayName: Switch to Terrapin packages
|
|
|
|
- script: |
|
|
set -e
|
|
export npm_config_arch=$(NPM_ARCH)
|
|
export npm_config_build_from_source=true
|
|
|
|
if [ -z "$CC" ] || [ -z "$CXX" ]; then
|
|
export CC=$(which gcc-5)
|
|
export CXX=$(which g++-5)
|
|
fi
|
|
|
|
if [ "$VSCODE_ARCH" == "x64" ]; then
|
|
export VSCODE_REMOTE_CC=$(which gcc-4.8)
|
|
export VSCODE_REMOTE_CXX=$(which g++-4.8)
|
|
export VSCODE_REMOTE_NODE_GYP=$(which node-gyp)
|
|
fi
|
|
|
|
for i in {1..3}; do # try 3 times, for Terrapin
|
|
yarn --frozen-lockfile && break
|
|
if [ $i -eq 3 ]; then
|
|
echo "Yarn failed too many times" >&2
|
|
exit 1
|
|
fi
|
|
echo "Yarn failed $i, trying again..."
|
|
done
|
|
|
|
# remove once https://github.com/prebuild/prebuild-install/pull/140 is merged and found in keytar
|
|
cd ./node_modules/keytar
|
|
npx node-gyp rebuild
|
|
env:
|
|
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
|
|
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
|
|
displayName: Install dependencies
|
|
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
|
|
|
|
- script: |
|
|
set -e
|
|
node build/azure-pipelines/common/listNodeModules.js .build/node_modules_list.txt
|
|
mkdir -p .build/node_modules_cache
|
|
tar -czf .build/node_modules_cache/cache.tgz --files-from .build/node_modules_list.txt
|
|
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
|
|
displayName: Create node_modules archive
|
|
|
|
- script: |
|
|
set -e
|
|
node build/azure-pipelines/mixin
|
|
displayName: Mix in quality
|
|
|
|
- script: |
|
|
set -e
|
|
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
|
yarn gulp vscode-linux-$(VSCODE_ARCH)-min-ci
|
|
displayName: Build
|
|
|
|
- script: |
|
|
set -e
|
|
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
|
yarn gulp vscode-reh-linux-$(VSCODE_ARCH)-min-ci
|
|
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
|
yarn gulp vscode-reh-web-linux-$(VSCODE_ARCH)-min-ci
|
|
displayName: Build Server
|
|
|
|
- script: |
|
|
set -e
|
|
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
|
yarn npm-run-all -lp "electron $(VSCODE_ARCH)" "playwright-install"
|
|
displayName: Download Electron and Playwright
|
|
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
|
|
|
- script: |
|
|
set -e
|
|
DISPLAY=:10 ./scripts/test.sh --build --tfs "Unit Tests"
|
|
displayName: Run unit tests (Electron)
|
|
timeoutInMinutes: 5
|
|
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
|
|
|
- script: |
|
|
set -e
|
|
DISPLAY=:10 yarn test-browser --build --browser chromium --tfs "Browser Unit Tests"
|
|
displayName: Run unit tests (Browser)
|
|
timeoutInMinutes: 5
|
|
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
|
|
|
- script: |
|
|
set -e
|
|
yarn --cwd test/integration/browser compile
|
|
displayName: Compile integration tests
|
|
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
|
|
|
- script: |
|
|
# Figure out the full absolute path of the product we just built
|
|
# including the remote server and configure the integration tests
|
|
# to run with these builds instead of running out of sources.
|
|
set -e
|
|
APP_ROOT=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)
|
|
APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName")
|
|
INTEGRATION_TEST_APP_NAME="$APP_NAME" \
|
|
INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \
|
|
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-linux-$(VSCODE_ARCH)" \
|
|
DISPLAY=:10 ./scripts/test-integration.sh --build --tfs "Integration Tests"
|
|
displayName: Run integration tests (Electron)
|
|
timeoutInMinutes: 5
|
|
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
|
|
|
- script: |
|
|
set -e
|
|
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-web-linux-$(VSCODE_ARCH)" \
|
|
DISPLAY=:10 ./resources/server/test/test-web-integration.sh --browser chromium
|
|
displayName: Run integration tests (Browser)
|
|
timeoutInMinutes: 5
|
|
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
|
|
|
- script: |
|
|
set -e
|
|
APP_ROOT=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)
|
|
APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName")
|
|
INTEGRATION_TEST_APP_NAME="$APP_NAME" \
|
|
INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \
|
|
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-linux-$(VSCODE_ARCH)" \
|
|
DISPLAY=:10 ./resources/server/test/test-remote-integration.sh
|
|
displayName: Run remote integration tests (Electron)
|
|
timeoutInMinutes: 5
|
|
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
|
|
|
- task: PublishPipelineArtifact@0
|
|
inputs:
|
|
artifactName: "crash-dump-linux-$(VSCODE_ARCH)"
|
|
targetPath: .build/crashes
|
|
displayName: "Publish Crash Reports"
|
|
continueOnError: true
|
|
condition: failed()
|
|
|
|
- task: PublishTestResults@2
|
|
displayName: Publish Tests Results
|
|
inputs:
|
|
testResultsFiles: "*-results.xml"
|
|
searchFolder: "$(Build.ArtifactStagingDirectory)/test-results"
|
|
condition: and(succeededOrFailed(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
|
|
|
- script: |
|
|
set -e
|
|
yarn gulp "vscode-linux-$(VSCODE_ARCH)-build-deb"
|
|
yarn gulp "vscode-linux-$(VSCODE_ARCH)-build-rpm"
|
|
displayName: Build deb, rpm packages
|
|
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
|
|
- script: |
|
|
set -e
|
|
yarn gulp "vscode-linux-$(VSCODE_ARCH)-prepare-snap"
|
|
displayName: Prepare snap package
|
|
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
|
|
# needed for code signing
|
|
- task: UseDotNet@2
|
|
displayName: "Install .NET Core SDK 2.x"
|
|
inputs:
|
|
version: 2.x
|
|
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
|
|
- task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@1
|
|
inputs:
|
|
ConnectedServiceName: "ESRP CodeSign"
|
|
FolderPath: ".build/linux/rpm"
|
|
Pattern: "*.rpm"
|
|
signConfigType: inlineSignParams
|
|
inlineOperation: |
|
|
[
|
|
{
|
|
"keyCode": "CP-450779-Pgp",
|
|
"operationSetCode": "LinuxSign",
|
|
"parameters": [ ],
|
|
"toolName": "sign",
|
|
"toolVersion": "1.0"
|
|
}
|
|
]
|
|
SessionTimeout: 120
|
|
displayName: Codesign rpm
|
|
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
|
|
- 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_ARCH="$(VSCODE_ARCH)" \
|
|
./build/azure-pipelines/linux/publish.sh
|
|
displayName: Publish
|
|
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
|
|
- publish: $(DEB_PATH)
|
|
artifact: vscode-linux-deb-$(VSCODE_ARCH)
|
|
displayName: Publish deb package
|
|
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
|
|
- publish: $(RPM_PATH)
|
|
artifact: vscode-linux-rpm-$(VSCODE_ARCH)
|
|
displayName: Publish rpm package
|
|
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
|
|
- publish: $(Agent.BuildDirectory)/vscode-server-linux-$(VSCODE_ARCH).tar.gz
|
|
artifact: vscode-server-linux-$(VSCODE_ARCH)
|
|
displayName: Publish server archive
|
|
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
|
|
- publish: $(Agent.BuildDirectory)/vscode-server-linux-$(VSCODE_ARCH)-web.tar.gz
|
|
artifact: vscode-server-linux-$(VSCODE_ARCH)-web
|
|
displayName: Publish web server archive
|
|
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
|
|
- task: PublishPipelineArtifact@0
|
|
displayName: "Publish Pipeline Artifact"
|
|
inputs:
|
|
artifactName: "snap-$(VSCODE_ARCH)"
|
|
targetPath: .build/linux/snap-tarball
|
|
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
|
|
- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0
|
|
displayName: "Component Detection"
|
|
continueOnError: true
|