forked from microsoft/vscode
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Showing
3 changed files
with
285 additions
and
140 deletions.
There are no files selected for viewing
274 changes: 274 additions & 0 deletions
274
build/azure-pipelines/darwin/product-build-darwin-test.yml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,274 @@ | ||
steps: | ||
- task: NodeTool@0 | ||
inputs: | ||
versionSpec: "16.x" | ||
|
||
- task: AzureKeyVault@1 | ||
displayName: "Azure Key Vault: Get Secrets" | ||
inputs: | ||
azureSubscription: "vscode-builds-subscription" | ||
KeyVaultName: vscode | ||
SecretsFilter: "github-distro-mixin-password,macos-developer-certificate,macos-developer-certificate-key" | ||
|
||
- 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 | ||
# Set up the credentials to retrieve distro repo and setup git persona | ||
# to create a merge commit for when we merge distro into oss | ||
- script: | | ||
set -e | ||
cat << EOF > ~/.netrc | ||
machine github.com | ||
login vscode | ||
password $(github-distro-mixin-password) | ||
EOF | ||
git config user.email "[email protected]" | ||
git config user.name "VSCode" | ||
displayName: Prepare tooling | ||
- script: | | ||
set -e | ||
git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $VSCODE_DISTRO_REF | ||
echo "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)" | ||
git checkout FETCH_HEAD | ||
condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' ')) | ||
displayName: Checkout override commit | ||
- 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')) | ||
- script: | | ||
set -e | ||
npx https://aka.ms/enablesecurefeed standAlone | ||
timeoutInMinutes: 5 | ||
retryCountOnTaskFailure: 3 | ||
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=$(VSCODE_ARCH) | ||
export npm_config_node_gyp=$(which node-gyp) | ||
for i in {1..3}; do # try 3 times, for Terrapin | ||
yarn --frozen-lockfile --check-files && break | ||
if [ $i -eq 3 ]; then | ||
echo "Yarn failed too many times" >&2 | ||
exit 1 | ||
fi | ||
echo "Yarn failed $i, trying again..." | ||
done | ||
env: | ||
ELECTRON_SKIP_BINARY_DOWNLOAD: 1 | ||
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 | ||
GITHUB_TOKEN: "$(github-distro-mixin-password)" | ||
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 | ||
# This script brings in the right resources (images, icons, etc) based on the quality (insiders, stable, exploration) | ||
- 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-darwin-$(VSCODE_ARCH)-min-ci | ||
displayName: Build client | ||
- script: | | ||
set -e | ||
node build/azure-pipelines/mixin --server | ||
displayName: Mix in server quality | ||
- script: | | ||
set -e | ||
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \ | ||
yarn gulp vscode-reh-darwin-$(VSCODE_ARCH)-min-ci | ||
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \ | ||
yarn gulp vscode-reh-web-darwin-$(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_STEP_ON_IT'], 'false')) | ||
# Setting hardened entitlements is a requirement for: | ||
# * Running tests on Big Sur (because Big Sur has additional security precautions) | ||
- script: | | ||
set -e | ||
security create-keychain -p pwd $(agent.tempdirectory)/buildagent.keychain | ||
security default-keychain -s $(agent.tempdirectory)/buildagent.keychain | ||
security unlock-keychain -p pwd $(agent.tempdirectory)/buildagent.keychain | ||
echo "$(macos-developer-certificate)" | base64 -D > $(agent.tempdirectory)/cert.p12 | ||
security import $(agent.tempdirectory)/cert.p12 -k $(agent.tempdirectory)/buildagent.keychain -P "$(macos-developer-certificate-key)" -T /usr/bin/codesign | ||
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k pwd $(agent.tempdirectory)/buildagent.keychain | ||
VSCODE_ARCH=$(VSCODE_ARCH) DEBUG=electron-osx-sign* node build/darwin/sign.js | ||
displayName: Set Hardened Entitlements | ||
- script: | | ||
set -e | ||
./scripts/test.sh --build --tfs "Unit Tests" | ||
displayName: Run unit tests (Electron) | ||
timeoutInMinutes: 15 | ||
- script: | | ||
set -e | ||
yarn test-node --build | ||
displayName: Run unit tests (node.js) | ||
timeoutInMinutes: 15 | ||
- script: | | ||
set -e | ||
DEBUG=*browser* yarn test-browser-no-install --sequential --build --browser chromium --browser webkit --tfs "Browser Unit Tests" | ||
displayName: Run unit tests (Browser, Chromium & Webkit) | ||
timeoutInMinutes: 30 | ||
- 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-darwin-$(VSCODE_ARCH) | ||
APP_NAME="`ls $APP_ROOT | head -n 1`" | ||
INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME/Contents/MacOS/Electron" \ | ||
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-darwin-$(VSCODE_ARCH)" \ | ||
./scripts/test-integration.sh --build --tfs "Integration Tests" | ||
displayName: Run integration tests (Electron) | ||
timeoutInMinutes: 20 | ||
- script: | | ||
set -e | ||
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-web-darwin-$(VSCODE_ARCH)" \ | ||
./scripts/test-web-integration.sh --browser webkit | ||
displayName: Run integration tests (Browser, Webkit) | ||
timeoutInMinutes: 20 | ||
- script: | | ||
set -e | ||
APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) | ||
APP_NAME="`ls $APP_ROOT | head -n 1`" | ||
INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME/Contents/MacOS/Electron" \ | ||
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-darwin-$(VSCODE_ARCH)" \ | ||
./scripts/test-remote-integration.sh | ||
displayName: Run integration tests (Remote) | ||
timeoutInMinutes: 20 | ||
- script: | | ||
set -e | ||
ps -ef | ||
displayName: Diagnostics before smoke test run | ||
continueOnError: true | ||
condition: succeededOrFailed() | ||
- script: | | ||
set -e | ||
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-web-darwin-$(VSCODE_ARCH)" \ | ||
yarn smoketest-no-compile --web --tracing --headless | ||
timeoutInMinutes: 10 | ||
displayName: Run smoke tests (Browser, Chromium) | ||
- script: | | ||
set -e | ||
APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) | ||
APP_NAME="`ls $APP_ROOT | head -n 1`" | ||
yarn smoketest-no-compile --tracing --build "$APP_ROOT/$APP_NAME" | ||
timeoutInMinutes: 20 | ||
displayName: Run smoke tests (Electron) | ||
- script: | | ||
set -e | ||
APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) | ||
APP_NAME="`ls $APP_ROOT | head -n 1`" | ||
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-darwin-$(VSCODE_ARCH)" \ | ||
yarn smoketest-no-compile --tracing --remote --build "$APP_ROOT/$APP_NAME" | ||
timeoutInMinutes: 20 | ||
displayName: Run smoke tests (Remote) | ||
- script: | | ||
set -e | ||
ps -ef | ||
displayName: Diagnostics after smoke test run | ||
continueOnError: true | ||
condition: succeededOrFailed() | ||
- task: PublishPipelineArtifact@0 | ||
inputs: | ||
artifactName: crash-dump-macos-$(VSCODE_ARCH) | ||
targetPath: .build/crashes | ||
displayName: "Publish Crash Reports" | ||
continueOnError: true | ||
condition: failed() | ||
|
||
# In order to properly symbolify above crash reports | ||
# (if any), we need the compiled native modules too | ||
- task: PublishPipelineArtifact@0 | ||
inputs: | ||
artifactName: node-modules-macos-$(VSCODE_ARCH) | ||
targetPath: node_modules | ||
displayName: "Publish Node Modules" | ||
continueOnError: true | ||
condition: failed() | ||
|
||
- task: PublishPipelineArtifact@0 | ||
inputs: | ||
artifactName: logs-macos-$(VSCODE_ARCH)-$(System.JobAttempt) | ||
targetPath: .build/logs | ||
displayName: "Publish Log Files" | ||
continueOnError: true | ||
condition: succeededOrFailed() | ||
|
||
- task: PublishTestResults@2 | ||
displayName: Publish Tests Results | ||
inputs: | ||
testResultsFiles: "*-results.xml" | ||
searchFolder: "$(Build.ArtifactStagingDirectory)/test-results" | ||
condition: succeededOrFailed() |
Oops, something went wrong.