electron/vsts-gn.yml
Charles Kerr e315e4d308 build: use electron-frameworks sccache (#14171)
* build: update-external-binaries fetches sccache

* build: add util.add_exec_bit in scripts/

* build: use util.add_exec_bit in create-dist

* build: use util.add_exec_bit in update-external-binaries

this is needed to work around a bug in python's zipfile module that doesn't preserve the exec bit

https://bugs.python.org/issue18262

* fix: linting errors

* build: vsts, circleci use patched sccache

* build: always look for the x64 sccache

as it's the only arch we have it on

* fix: windows-specific errors in updaste-external-binaries

* fix: tyop

* fix: set SCCACHE_BUCKET, SCCACHE_TWO_TIER on circleci

* fix: syntax error in circleci yaml

* fix: keep churning

* chore: add tracer to file downloader

* docs: add sccache instructions for GN builds

* build: pull down the darwin sccache on mas builds

* build: use gn sync verbosely on circleci and vsts

* docs: copyediting

* build: remove unnecessary cache-dir arg

* docs: fix shell quoting in gn build instructions

* fix: invoke gclient without -verbose in circleci

* refactor: remove debug tracer

* fix: invoke gclient without -verbose in appveyor

* fix: invoke gclient without -verbose in vsts

* fix: pull add_exec_bit from correct source

* fix: remove 'SCCACHE_TWO_TIER' from CI scripts

* refactor: remove SCCACHE_BUCKET from ci scripts

this environment variable will be set via the CI UI instead

* refactor: clarify log message

* fix: set SCCACHE_PATH correctly for Windows CI
2018-08-21 15:40:06 -04:00

96 lines
4.1 KiB
YAML

resources:
- repo: self
phases:
- phase: Build_Electron_via_GN
queue:
timeoutInMinutes: 180
steps:
- bash: |
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git "${AGENT_BUILDDIRECTORY}/depot_tools"
echo "##vso[task.setvariable variable=PATH]$PATH:${AGENT_BUILDDIRECTORY}/depot_tools"
name: Setup_depot_tools
- bash: |
export GIT_CACHE_PATH="/Users/electron/libcc_cache"
set -ex
gclient config \
--name "src/electron" \
--unmanaged \
"https://github.com/electron/electron"
mkdir src
git clone https://github.com/electron/electron src/electron
# TODO: there's a subtle race condition here in that if you push two
# commits to $BUILD_SOURCEBRANCH in quick succession, it's possible that
# fetching the BUILD_SOURCEBRANCH ref will not actually fetch the
# BUILD_SOURCEVERSION commit, and so the checkout will fail. Find a
# better solution for checking out the commit to be built.
(cd src/electron; git fetch origin +"${BUILD_SOURCEBRANCH}"; git checkout "${BUILD_SOURCEVERSION}")
gclient sync --with_branch_heads --with_tags
name: gclient_sync
- bash: |
cd src
export CHROMIUM_BUILDTOOLS_PATH=`pwd`/buildtools
export SCCACHE_WRAPPER="`pwd`/electron/external_binaries/sccache"
export SCCACHE_HELPER="`pwd`/libchromiumcontent/script/sccache"
"$SCCACHE_HELPER" --start-server --azure_container "$(SCCACHE_AZURE_BLOB_CONTAINER)" --azure_connection "$(SCCACHE_AZURE_CONNECTION_STRING)"
echo "##vso[task.setvariable variable=SCCACHE_WRAPPER]$SCCACHE_WRAPPER"
echo "##vso[task.setvariable variable=CHROMIUM_BUILDTOOLS_PATH]`pwd`/buildtools"
echo "GN gen for: $GN_CONFIG"
gn gen out/Default --args='import("'$GN_CONFIG'") cc_wrapper="'"$SCCACHE_WRAPPER"'"'
name: GN_gen
- bash: |
cd src
ninja -C out/Default electron:electron_app
name: Ninja_build
- bash: |
"$SCCACHE_WRAPPER" -s
"$SCCACHE_WRAPPER" --stop-server
name: Check_sccache_stats
- bash: |
set +e
cd src
ninja -C out/Default third_party/electron_node:headers
export npm_config_nodedir="$PWD/out/Default/gen/node_headers"
(cd electron/spec && npm install)
./out/Default/Electron.app/Contents/MacOS/Electron electron/spec --ci --enable-logging
name: Test
condition: and(succeeded(), ne(variables['ELECTRON_RELEASE'], '1'))
- bash: |
cd src
ninja -C out/Default electron:electron_dist_zip
name: Build_dist_zip
condition: and(succeeded(), eq(variables['ELECTRON_RELEASE'], '1'))
- task: PublishTestResults@2
displayName: Publish Test Results
inputs:
testResultsFiles: '**/test-*.xml'
condition: and(always(), eq(variables['MOCHA_FILE'], 'junit/test-results.xml'), ne(variables['ELECTRON_RELEASE'], '1'))
- task: PublishBuildArtifacts@1
displayName: Publish Build Artifacts
inputs:
PathtoPublish: '$(Build.SourcesDirectory)/out/Default/dist.zip'
ArtifactName: dist.zip
condition: and(succeeded(), eq(variables['ELECTRON_RELEASE'], '1'))
- bash: |
export BUILD_URL="${SYSTEM_TEAMFOUNDATIONCOLLECTIONURI}${SYSTEM_TEAMPROJECT}/_build/results?buildId=${BUILD_BUILDID}"
export MESSAGE="Build failed for *<$BUILD_URL|$BUILD_DEFINITIONNAME>* nightly build."
curl -g -H "Content-Type: application/json" -X POST \
-d "{\"text\": \"$MESSAGE\", \"attachments\": [{\"color\": \"#FC5C3C\",\"title\": \"$BUILD_DEFINITIONNAME nightly build results\",\"title_link\": \"$BUILD_URL\"}]}" $(slack_webhook)
name: Post_Slack_Notification_on_Failure
condition: failed()
- bash: |
export BUILD_URL="${SYSTEM_TEAMFOUNDATIONCOLLECTIONURI}${SYSTEM_TEAMPROJECT}/_build/results?buildId=${BUILD_BUILDID}"
export MESSAGE="Build succeeded for *<$BUILD_URL|$BUILD_DEFINITIONNAME>* nightly build."
curl -g -H "Content-Type: application/json" -X POST \
-d "{\"text\": \"$MESSAGE\", \"attachments\": [{\"color\": \"good\",\"title\": \"$BUILD_DEFINITIONNAME nightly build results\",\"title_link\": \"$BUILD_URL\"}]}" $(slack_webhook)
name: Post_Slack_Notification_on_Success
condition: succeeded()