config.yml 81 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592
  1. version: 2.1
  2. parameters:
  3. upload-to-s3:
  4. type: string
  5. default: '1'
  6. run-lint:
  7. type: boolean
  8. default: true
  9. run-build-linux:
  10. type: boolean
  11. default: true
  12. run-build-mac:
  13. type: boolean
  14. default: true
  15. run-linux-publish:
  16. type: boolean
  17. default: false
  18. linux-publish-arch-limit:
  19. type: enum
  20. default: all
  21. enum: ["all", "arm", "arm64", "x64", "ia32"]
  22. run-macos-publish:
  23. type: boolean
  24. default: false
  25. macos-publish-arch-limit:
  26. type: enum
  27. default: all
  28. enum: ["all", "osx-x64", "osx-arm64", "mas-x64", "mas-arm64"]
  29. # Executors
  30. executors:
  31. linux-docker:
  32. parameters:
  33. size:
  34. description: "Docker executor size"
  35. default: 2xlarge+
  36. type: enum
  37. enum: ["medium", "xlarge", "2xlarge+"]
  38. docker:
  39. - image: electron.azurecr.io/build:ca93c6a7bc49e7d2a7b8c62ed04e0b870f3dfd1e
  40. resource_class: << parameters.size >>
  41. macos:
  42. parameters:
  43. size:
  44. description: "macOS executor size"
  45. default: large
  46. type: enum
  47. enum: ["medium", "large"]
  48. macos:
  49. xcode: "12.4.0"
  50. resource_class: << parameters.size >>
  51. # Electron Runners
  52. apple-silicon:
  53. resource_class: electronjs/macos-arm64
  54. machine: true
  55. linux-arm:
  56. resource_class: electronjs/linux-arm
  57. machine: true
  58. linux-arm64:
  59. resource_class: electronjs/linux-arm64
  60. machine: true
  61. # The config expects the following environment variables to be set:
  62. # - "SLACK_WEBHOOK" Slack hook URL to send notifications.
  63. #
  64. # The publishing scripts expect access tokens to be defined as env vars,
  65. # but those are not covered here.
  66. #
  67. # CircleCI docs on variables:
  68. # https://circleci.com/docs/2.0/env-vars/
  69. # Build configurations options.
  70. env-testing-build: &env-testing-build
  71. GN_CONFIG: //electron/build/args/testing.gn
  72. CHECK_DIST_MANIFEST: '1'
  73. env-release-build: &env-release-build
  74. GN_CONFIG: //electron/build/args/release.gn
  75. STRIP_BINARIES: true
  76. GENERATE_SYMBOLS: true
  77. CHECK_DIST_MANIFEST: '1'
  78. IS_RELEASE: true
  79. env-headless-testing: &env-headless-testing
  80. DISPLAY: ':99.0'
  81. env-stack-dumping: &env-stack-dumping
  82. ELECTRON_ENABLE_STACK_DUMPING: '1'
  83. env-browsertests: &env-browsertests
  84. GN_CONFIG: //electron/build/args/native_tests.gn
  85. BUILD_TARGET: electron/spec:chromium_browsertests
  86. TESTS_CONFIG: src/electron/spec/configs/browsertests.yml
  87. env-unittests: &env-unittests
  88. GN_CONFIG: //electron/build/args/native_tests.gn
  89. BUILD_TARGET: electron/spec:chromium_unittests
  90. TESTS_CONFIG: src/electron/spec/configs/unittests.yml
  91. # Build targets options.
  92. env-ia32: &env-ia32
  93. GN_EXTRA_ARGS: 'target_cpu = "x86"'
  94. NPM_CONFIG_ARCH: ia32
  95. TARGET_ARCH: ia32
  96. env-arm: &env-arm
  97. GN_EXTRA_ARGS: 'target_cpu = "arm"'
  98. MKSNAPSHOT_TOOLCHAIN: //build/toolchain/linux:clang_arm
  99. BUILD_NATIVE_MKSNAPSHOT: 1
  100. TARGET_ARCH: arm
  101. env-apple-silicon: &env-apple-silicon
  102. GN_EXTRA_ARGS: 'target_cpu = "arm64" use_prebuilt_v8_context_snapshot = true'
  103. TARGET_ARCH: arm64
  104. USE_PREBUILT_V8_CONTEXT_SNAPSHOT: 1
  105. npm_config_arch: arm64
  106. env-arm64: &env-arm64
  107. GN_EXTRA_ARGS: 'target_cpu = "arm64" fatal_linker_warnings = false enable_linux_installer = false'
  108. MKSNAPSHOT_TOOLCHAIN: //build/toolchain/linux:clang_arm64
  109. BUILD_NATIVE_MKSNAPSHOT: 1
  110. TARGET_ARCH: arm64
  111. env-mas: &env-mas
  112. GN_EXTRA_ARGS: 'is_mas_build = true'
  113. MAS_BUILD: 'true'
  114. env-mas-apple-silicon: &env-mas-apple-silicon
  115. GN_EXTRA_ARGS: 'target_cpu = "arm64" is_mas_build = true use_prebuilt_v8_context_snapshot = true'
  116. MAS_BUILD: 'true'
  117. TARGET_ARCH: arm64
  118. USE_PREBUILT_V8_CONTEXT_SNAPSHOT: 1
  119. env-send-slack-notifications: &env-send-slack-notifications
  120. NOTIFY_SLACK: true
  121. env-global: &env-global
  122. ELECTRON_OUT_DIR: Default
  123. env-linux-medium: &env-linux-medium
  124. <<: *env-global
  125. NUMBER_OF_NINJA_PROCESSES: 3
  126. env-linux-2xlarge: &env-linux-2xlarge
  127. <<: *env-global
  128. NUMBER_OF_NINJA_PROCESSES: 34
  129. env-linux-2xlarge-release: &env-linux-2xlarge-release
  130. <<: *env-global
  131. NUMBER_OF_NINJA_PROCESSES: 16
  132. env-machine-mac: &env-machine-mac
  133. <<: *env-global
  134. NUMBER_OF_NINJA_PROCESSES: 6
  135. env-mac-large: &env-mac-large
  136. <<: *env-global
  137. NUMBER_OF_NINJA_PROCESSES: 18
  138. env-mac-large-release: &env-mac-large-release
  139. <<: *env-global
  140. NUMBER_OF_NINJA_PROCESSES: 8
  141. env-ninja-status: &env-ninja-status
  142. NINJA_STATUS: "[%r processes, %f/%t @ %o/s : %es] "
  143. env-disable-run-as-node: &env-disable-run-as-node
  144. GN_BUILDFLAG_ARGS: 'enable_run_as_node = false'
  145. env-32bit-release: &env-32bit-release
  146. # Set symbol level to 1 for 32 bit releases because of https://crbug.com/648948
  147. GN_BUILDFLAG_ARGS: 'symbol_level = 1'
  148. env-macos-build: &env-macos-build
  149. # Disable pre-compiled headers to reduce out size, only useful for rebuilds
  150. GN_BUILDFLAG_ARGS: 'enable_precompiled_headers = false'
  151. # Individual (shared) steps.
  152. step-maybe-notify-slack-failure: &step-maybe-notify-slack-failure
  153. run:
  154. name: Send a Slack notification on failure
  155. command: |
  156. if [ "$NOTIFY_SLACK" == "true" ]; then
  157. export MESSAGE="Build failed for *<$CIRCLE_BUILD_URL|$CIRCLE_JOB>* nightly build from *$CIRCLE_BRANCH*."
  158. curl -g -H "Content-Type: application/json" -X POST \
  159. -d "{\"text\": \"$MESSAGE\", \"attachments\": [{\"color\": \"#FC5C3C\",\"title\": \"$CIRCLE_JOB nightly build results\",\"title_link\": \"$CIRCLE_BUILD_URL\"}]}" $SLACK_WEBHOOK
  160. fi
  161. when: on_fail
  162. step-maybe-notify-slack-success: &step-maybe-notify-slack-success
  163. run:
  164. name: Send a Slack notification on success
  165. command: |
  166. if [ "$NOTIFY_SLACK" == "true" ]; then
  167. export MESSAGE="Build succeeded for *<$CIRCLE_BUILD_URL|$CIRCLE_JOB>* nightly build from *$CIRCLE_BRANCH*."
  168. curl -g -H "Content-Type: application/json" -X POST \
  169. -d "{\"text\": \"$MESSAGE\", \"attachments\": [{\"color\": \"good\",\"title\": \"$CIRCLE_JOB nightly build results\",\"title_link\": \"$CIRCLE_BUILD_URL\"}]}" $SLACK_WEBHOOK
  170. fi
  171. when: on_success
  172. step-maybe-cleanup-arm64-mac: &step-maybe-cleanup-arm64-mac
  173. run:
  174. name: Cleanup after testing
  175. command: |
  176. if [ "$TARGET_ARCH" == "arm64" ] &&[ "`uname`" == "Darwin" ]; then
  177. killall Electron || echo "No Electron processes left running"
  178. killall Safari || echo "No Safari processes left running"
  179. rm -rf ~/Library/Application\ Support/Electron*
  180. rm -rf ~/Library/Application\ Support/electron*
  181. elif [ "$TARGET_ARCH" == "arm" ] || [ "$TARGET_ARCH" == "arm64" ]; then
  182. XVFB=/usr/bin/Xvfb
  183. /sbin/start-stop-daemon --stop --exec $XVFB || echo "Xvfb not running"
  184. pkill electron || echo "electron not running"
  185. rm -rf ~/.config/Electron*
  186. rm -rf ~/.config/electron*
  187. fi
  188. when: always
  189. step-checkout-electron: &step-checkout-electron
  190. checkout:
  191. path: src/electron
  192. step-depot-tools-get: &step-depot-tools-get
  193. run:
  194. name: Get depot tools
  195. command: |
  196. git clone --depth=1 https://chromium.googlesource.com/chromium/tools/depot_tools.git
  197. step-depot-tools-add-to-path: &step-depot-tools-add-to-path
  198. run:
  199. name: Add depot tools to PATH
  200. command: echo 'export PATH="$PATH:'"$PWD"'/depot_tools"' >> $BASH_ENV
  201. step-gclient-sync: &step-gclient-sync
  202. run:
  203. name: Gclient sync
  204. command: |
  205. # If we did not restore a complete sync then we need to sync for realz
  206. if [ ! -s "src/electron/.circle-sync-done" ]; then
  207. gclient config \
  208. --name "src/electron" \
  209. --unmanaged \
  210. $GCLIENT_EXTRA_ARGS \
  211. "$CIRCLE_REPOSITORY_URL"
  212. ELECTRON_USE_THREE_WAY_MERGE_FOR_PATCHES=1 gclient sync --with_branch_heads --with_tags
  213. if [ "$IS_RELEASE" != "true" ]; then
  214. # Re-export all the patches to check if there were changes.
  215. python src/electron/script/export_all_patches.py src/electron/patches/config.json
  216. cd src/electron
  217. git update-index --refresh || true
  218. if ! git diff-index --quiet HEAD --; then
  219. # There are changes to the patches. Make a git commit with the updated patches
  220. git add patches
  221. GIT_COMMITTER_NAME="PatchUp" GIT_COMMITTER_EMAIL="73610968+patchup[bot]@users.noreply.github.com" git commit -m "chore: update patches" --author="PatchUp <73610968+patchup[bot]@users.noreply.github.com>"
  222. # Export it
  223. mkdir -p ../../patches
  224. git format-patch -1 --stdout --keep-subject --no-stat --full-index > ../../patches/update-patches.patch
  225. if (node ./script/push-patch.js 2> /dev/null > /dev/null); then
  226. echo
  227. echo "======================================================================"
  228. echo "Changes to the patches when applying, we have auto-pushed the diff to the current branch"
  229. echo "A new CI job will kick off shortly"
  230. echo "======================================================================"
  231. exit 1
  232. else
  233. echo
  234. echo "======================================================================"
  235. echo "There were changes to the patches when applying."
  236. echo "Check the CI artifacts for a patch you can apply to fix it."
  237. echo "======================================================================"
  238. exit 1
  239. fi
  240. fi
  241. fi
  242. fi
  243. step-setup-env-for-build: &step-setup-env-for-build
  244. run:
  245. name: Setup Environment Variables
  246. command: |
  247. # To find `gn` executable.
  248. echo 'export CHROMIUM_BUILDTOOLS_PATH="'"$PWD"'/src/buildtools"' >> $BASH_ENV
  249. step-setup-goma-for-build: &step-setup-goma-for-build
  250. run:
  251. name: Setup Goma
  252. command: |
  253. echo 'export NUMBER_OF_NINJA_PROCESSES=300' >> $BASH_ENV
  254. if [ "`uname`" == "Darwin" ]; then
  255. echo 'ulimit -n 10000' >> $BASH_ENV
  256. echo 'sudo launchctl limit maxfiles 65536 200000' >> $BASH_ENV
  257. fi
  258. if [ ! -z "$RAW_GOMA_AUTH" ]; then
  259. echo $RAW_GOMA_AUTH > ~/.goma_oauth2_config
  260. fi
  261. git clone https://github.com/electron/build-tools.git
  262. cd build-tools
  263. npm install
  264. mkdir third_party
  265. node -e "require('./src/utils/goma.js').downloadAndPrepare({ gomaOneForAll: true })"
  266. export GOMA_FALLBACK_ON_AUTH_FAILURE=true
  267. third_party/goma/goma_ctl.py ensure_start
  268. echo 'export GN_GOMA_FILE='`node -e "console.log(require('./src/utils/goma.js').gnFilePath)"` >> $BASH_ENV
  269. echo 'export LOCAL_GOMA_DIR='`node -e "console.log(require('./src/utils/goma.js').dir)"` >> $BASH_ENV
  270. echo 'export GOMA_FALLBACK_ON_AUTH_FAILURE=true' >> $BASH_ENV
  271. cd ..
  272. step-restore-brew-cache: &step-restore-brew-cache
  273. restore_cache:
  274. paths:
  275. - /usr/local/Cellar/gnu-tar
  276. - /usr/local/bin/gtar
  277. keys:
  278. - v4-brew-cache-{{ arch }}
  279. step-save-brew-cache: &step-save-brew-cache
  280. save_cache:
  281. paths:
  282. - /usr/local/Cellar/gnu-tar
  283. - /usr/local/bin/gtar
  284. key: v4-brew-cache-{{ arch }}
  285. name: Persisting brew cache
  286. step-get-more-space-on-mac: &step-get-more-space-on-mac
  287. run:
  288. name: Free up space on MacOS
  289. command: |
  290. if [ "`uname`" == "Darwin" ]; then
  291. sudo mkdir -p $TMPDIR/del-target
  292. if [ "$TARGET_ARCH" == "arm64" ]; then
  293. # Remount the root volume as writable, don't ask questions plz
  294. sudo mount -uw /
  295. fi
  296. tmpify() {
  297. if [ -d "$1" ]; then
  298. sudo mv "$1" $TMPDIR/del-target/$(echo $1|shasum -a 256|head -n1|cut -d " " -f1)
  299. fi
  300. }
  301. strip_arm_deep() {
  302. opwd=$(pwd)
  303. cd $1
  304. f=$(find . -perm +111 -type f)
  305. for fp in $f
  306. do
  307. if [[ $(file "$fp") == *"universal binary"* ]]; then
  308. if [[ $(file "$fp") == *"arm64e)"* ]]; then
  309. sudo lipo -remove arm64e "$fp" -o "$fp" || true
  310. fi
  311. if [[ $(file "$fp") == *"arm64)"* ]]; then
  312. sudo lipo -remove arm64 "$fp" -o "$fp" || true
  313. fi
  314. fi
  315. done
  316. cd $opwd
  317. }
  318. tmpify /Library/Developer/CoreSimulator
  319. tmpify ~/Library/Developer/CoreSimulator
  320. tmpify $(xcode-select -p)/Platforms/AppleTVOS.platform
  321. tmpify $(xcode-select -p)/Platforms/iPhoneOS.platform
  322. tmpify $(xcode-select -p)/Platforms/WatchOS.platform
  323. tmpify $(xcode-select -p)/Platforms/WatchSimulator.platform
  324. tmpify $(xcode-select -p)/Platforms/AppleTVSimulator.platform
  325. tmpify $(xcode-select -p)/Platforms/iPhoneSimulator.platform
  326. tmpify $(xcode-select -p)/Toolchains/XcodeDefault.xctoolchain/usr/metal/ios
  327. tmpify $(xcode-select -p)/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift
  328. tmpify $(xcode-select -p)/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift-5.0
  329. tmpify ~/.rubies
  330. tmpify ~/Library/Caches/Homebrew
  331. tmpify /usr/local/Homebrew
  332. sudo rm -rf $TMPDIR/del-target
  333. if [ "$TARGET_ARCH" == "arm64" ]; then
  334. sudo rm -rf "/System/Library/Desktop Pictures"
  335. sudo rm -rf /System/Library/Templates/Data
  336. sudo rm -rf /System/Library/Speech/Voices
  337. sudo rm -rf "/System/Library/Screen Savers"
  338. sudo rm -rf /System/Volumes/Data/Library/Developer/CommandLineTools/SDKs
  339. sudo rm -rf "/System/Volumes/Data/Library/Application Support/Apple/Photos/Print Products"
  340. sudo rm -rf /System/Volumes/Data/Library/Java
  341. sudo rm -rf /System/Volumes/Data/Library/Ruby
  342. sudo rm -rf /System/Volumes/Data/Library/Printers
  343. sudo rm -rf /System/iOSSupport
  344. sudo rm -rf /System/Applications/*.app
  345. sudo rm -rf /System/Applications/Utilities/*.app
  346. sudo rm -rf /System/Library/LinguisticData
  347. sudo rm -rf /System/Volumes/Data/private/var/db/dyld/*
  348. # sudo rm -rf /System/Library/Fonts/*
  349. # sudo rm -rf /System/Library/PreferencePanes
  350. sudo rm -rf /System/Library/AssetsV2/*
  351. sudo rm -rf /Applications/Safari.app
  352. sudo rm -rf ~/project/src/build/linux
  353. sudo rm -rf ~/project/src/third_party/catapult/tracing/test_data
  354. sudo rm -rf ~/project/src/third_party/angle/third_party/VK-GL-CTS
  355. # lipo off some huge binaries arm64 versions to save space
  356. strip_arm_deep $(xcode-select -p)/../SharedFrameworks
  357. strip_arm_deep /System/Volumes/Data/Library/Developer/CommandLineTools/usr
  358. fi
  359. fi
  360. background: true
  361. # On macOS delete all .git directories under src/ expect for
  362. # third_party/angle/ because of build time generation of file
  363. # gen/angle/commit.h depends on third_party/angle/.git/HEAD
  364. # https://chromium-review.googlesource.com/c/angle/angle/+/2074924
  365. # TODO: maybe better to always leave out */.git/HEAD file for all targets ?
  366. step-delete-git-directories: &step-delete-git-directories
  367. run:
  368. name: Delete all .git directories under src on MacOS to free space
  369. command: |
  370. if [ "`uname`" == "Darwin" ]; then
  371. cd src
  372. ( find . -type d -name ".git" -not -path "./third_party/angle/*" ) | xargs rm -rf
  373. fi
  374. # On macOS the yarn install command during gclient sync was run on a linux
  375. # machine and therefore installed a slightly different set of dependencies
  376. # Notably "fsevents" is a macOS only dependency, we rerun yarn install once
  377. # we are on a macOS machine to get the correct state
  378. step-install-npm-deps-on-mac: &step-install-npm-deps-on-mac
  379. run:
  380. name: Install node_modules on MacOS
  381. command: |
  382. if [ "`uname`" == "Darwin" ]; then
  383. cd src/electron
  384. node script/yarn install
  385. fi
  386. # This step handles the differences between the linux "gclient sync"
  387. # and the expected state on macOS
  388. step-fix-sync-on-mac: &step-fix-sync-on-mac
  389. run:
  390. name: Fix Sync on macOS
  391. command: |
  392. if [ "`uname`" == "Darwin" ]; then
  393. # Fix Clang Install (wrong binary)
  394. rm -rf src/third_party/llvm-build
  395. python src/tools/clang/scripts/update.py
  396. fi
  397. step-install-signing-cert-on-mac: &step-install-signing-cert-on-mac
  398. run:
  399. name: Import and trust self-signed codesigning cert on MacOS
  400. command: |
  401. if [ "$TARGET_ARCH" != "arm64" ] && [ "`uname`" == "Darwin" ]; then
  402. cd src/electron
  403. ./script/codesign/generate-identity.sh
  404. fi
  405. step-install-gnutar-on-mac: &step-install-gnutar-on-mac
  406. run:
  407. name: Install gnu-tar on macos
  408. command: |
  409. if [ "`uname`" == "Darwin" ]; then
  410. if [ ! -d /usr/local/Cellar/gnu-tar/ ]; then
  411. brew update
  412. brew install gnu-tar
  413. fi
  414. ln -fs /usr/local/bin/gtar /usr/local/bin/tar
  415. fi
  416. step-gn-gen-default: &step-gn-gen-default
  417. run:
  418. name: Default GN gen
  419. command: |
  420. cd src
  421. gn gen out/Default --args="import(\"$GN_CONFIG\") import(\"$GN_GOMA_FILE\") $GN_EXTRA_ARGS $GN_BUILDFLAG_ARGS"
  422. step-gn-check: &step-gn-check
  423. run:
  424. name: GN check
  425. command: |
  426. cd src
  427. gn check out/Default //electron:electron_lib
  428. gn check out/Default //electron:electron_app
  429. gn check out/Default //electron/shell/common/api:mojo
  430. # Check the hunspell filenames
  431. node electron/script/gen-hunspell-filenames.js --check
  432. node electron/script/gen-libc++-filenames.js --check
  433. step-electron-build: &step-electron-build
  434. run:
  435. name: Electron build
  436. no_output_timeout: 30m
  437. command: |
  438. # On arm platforms we generate a cross-arch ffmpeg that ninja does not seem
  439. # to realize is not correct / should be rebuilt. We delete it here so it is
  440. # rebuilt
  441. if [ "$TRIGGER_ARM_TEST" == "true" ]; then
  442. rm -f src/out/Default/libffmpeg.so
  443. fi
  444. cd src
  445. # Enable if things get really bad
  446. # if [ "$TARGET_ARCH" == "arm64" ] &&[ "`uname`" == "Darwin" ]; then
  447. # diskutil erasevolume HFS+ "xcode_disk" `hdiutil attach -nomount ram://12582912`
  448. # mv /Applications/Xcode-12.beta.5.app /Volumes/xcode_disk/
  449. # ln -s /Volumes/xcode_disk/Xcode-12.beta.5.app /Applications/Xcode-12.beta.5.app
  450. # fi
  451. # Lets generate a snapshot and mksnapshot and then delete all the x-compiled generated files to save space
  452. if [ "$USE_PREBUILT_V8_CONTEXT_SNAPSHOT" == "1" ]; then
  453. ninja -C out/Default electron:electron_mksnapshot_zip -j $NUMBER_OF_NINJA_PROCESSES
  454. ninja -C out/Default tools/v8_context_snapshot -j $NUMBER_OF_NINJA_PROCESSES
  455. gn desc out/Default v8:run_mksnapshot_default args > out/Default/mksnapshot_args
  456. (cd out/Default; zip mksnapshot.zip mksnapshot_args clang_x64_v8_arm64/gen/v8/embedded.S)
  457. rm -rf out/Default/clang_x64_v8_arm64/gen
  458. rm -rf out/Default/clang_x64_v8_arm64/obj
  459. rm -rf out/Default/clang_x64/obj
  460. # Regenerate because we just deleted some ninja files
  461. gn gen out/Default --args="import(\"$GN_CONFIG\") import(\"$GN_GOMA_FILE\") $GN_EXTRA_ARGS $GN_BUILDFLAG_ARGS"
  462. fi
  463. NINJA_SUMMARIZE_BUILD=1 autoninja -C out/Default electron -j $NUMBER_OF_NINJA_PROCESSES
  464. cp out/Default/.ninja_log out/electron_ninja_log
  465. node electron/script/check-symlinks.js
  466. step-native-unittests-build: &step-native-unittests-build
  467. run:
  468. name: Build native test targets
  469. no_output_timeout: 30m
  470. command: |
  471. cd src
  472. ninja -C out/Default shell_browser_ui_unittests -j $NUMBER_OF_NINJA_PROCESSES
  473. step-maybe-electron-dist-strip: &step-maybe-electron-dist-strip
  474. run:
  475. name: Strip electron binaries
  476. command: |
  477. if [ "$STRIP_BINARIES" == "true" ] && [ "`uname`" == "Linux" ]; then
  478. if [ x"$TARGET_ARCH" == x ]; then
  479. target_cpu=x64
  480. elif [ "$TARGET_ARCH" == "ia32" ]; then
  481. target_cpu=x86
  482. else
  483. target_cpu="$TARGET_ARCH"
  484. fi
  485. cd src
  486. electron/script/copy-debug-symbols.py --target-cpu="$target_cpu" --out-dir=out/Default/debug --compress
  487. electron/script/strip-binaries.py --target-cpu="$target_cpu"
  488. electron/script/add-debug-link.py --target-cpu="$target_cpu" --debug-dir=out/Default/debug
  489. fi
  490. step-electron-dist-build: &step-electron-dist-build
  491. run:
  492. name: Build dist.zip
  493. command: |
  494. cd src
  495. if [ "$SKIP_DIST_ZIP" != "1" ]; then
  496. ninja -C out/Default electron:electron_dist_zip
  497. if [ "$CHECK_DIST_MANIFEST" == "1" ]; then
  498. if [ "`uname`" == "Darwin" ]; then
  499. target_os=mac
  500. target_cpu=x64
  501. if [ x"$MAS_BUILD" == x"true" ]; then
  502. target_os=mac_mas
  503. fi
  504. if [ "$TARGET_ARCH" == "arm64" ]; then
  505. target_cpu=arm64
  506. fi
  507. elif [ "`uname`" == "Linux" ]; then
  508. target_os=linux
  509. if [ x"$TARGET_ARCH" == x ]; then
  510. target_cpu=x64
  511. elif [ "$TARGET_ARCH" == "ia32" ]; then
  512. target_cpu=x86
  513. else
  514. target_cpu="$TARGET_ARCH"
  515. fi
  516. else
  517. echo "Unknown system: `uname`"
  518. exit 1
  519. fi
  520. electron/script/zip_manifests/check-zip-manifest.py out/Default/dist.zip electron/script/zip_manifests/dist_zip.$target_os.$target_cpu.manifest
  521. fi
  522. fi
  523. step-electron-chromedriver-build: &step-electron-chromedriver-build
  524. run:
  525. name: Build chromedriver.zip
  526. command: |
  527. cd src
  528. if [ "$TARGET_ARCH" == "arm" ] || [ "$TARGET_ARCH" == "arm64" ]; then
  529. gn gen out/chromedriver --args="import(\"$GN_CONFIG\") import(\"$GN_GOMA_FILE\") is_component_ffmpeg=false proprietary_codecs=false $GN_EXTRA_ARGS $GN_BUILDFLAG_ARGS"
  530. export CHROMEDRIVER_DIR="out/chromedriver"
  531. else
  532. export CHROMEDRIVER_DIR="out/Default"
  533. fi
  534. ninja -C $CHROMEDRIVER_DIR electron:electron_chromedriver -j $NUMBER_OF_NINJA_PROCESSES
  535. if [ "`uname`" == "Linux" ]; then
  536. electron/script/strip-binaries.py --target-cpu="$TARGET_ARCH" --file $PWD/$CHROMEDRIVER_DIR/chromedriver
  537. fi
  538. ninja -C $CHROMEDRIVER_DIR electron:electron_chromedriver_zip
  539. if [ "$TARGET_ARCH" == "arm" ] || [ "$TARGET_ARCH" == "arm64" ]; then
  540. cp out/chromedriver/chromedriver.zip out/Default
  541. fi
  542. step-nodejs-headers-build: &step-nodejs-headers-build
  543. run:
  544. name: Build Node.js headers
  545. command: |
  546. cd src
  547. ninja -C out/Default third_party/electron_node:headers
  548. step-electron-publish: &step-electron-publish
  549. run:
  550. name: Publish Electron Dist
  551. command: |
  552. if [ "`uname`" == "Darwin" ]; then
  553. rm -rf src/out/Default/obj
  554. fi
  555. cd src/electron
  556. if [ "$UPLOAD_TO_S3" == "1" ]; then
  557. echo 'Uploading Electron release distribution to S3'
  558. script/release/uploaders/upload.py --verbose --upload_to_s3
  559. else
  560. echo 'Uploading Electron release distribution to Github releases'
  561. script/release/uploaders/upload.py --verbose
  562. fi
  563. step-persist-data-for-tests: &step-persist-data-for-tests
  564. persist_to_workspace:
  565. root: .
  566. paths:
  567. # Build artifacts
  568. - src/out/Default/dist.zip
  569. - src/out/Default/mksnapshot.zip
  570. - src/out/Default/chromedriver.zip
  571. - src/out/Default/shell_browser_ui_unittests
  572. - src/out/Default/gen/node_headers
  573. - src/out/ffmpeg/ffmpeg.zip
  574. - src/electron
  575. - src/third_party/electron_node
  576. - src/third_party/nan
  577. - src/cross-arch-snapshots
  578. - src/third_party/llvm-build
  579. - src/build/linux
  580. - src/buildtools/third_party/libc++
  581. - src/buildtools/third_party/libc++abi
  582. - src/out/Default/obj/buildtools/third_party
  583. step-electron-dist-unzip: &step-electron-dist-unzip
  584. run:
  585. name: Unzip dist.zip
  586. command: |
  587. cd src/out/Default
  588. # -o overwrite files WITHOUT prompting
  589. # TODO(alexeykuzmin): Remove '-o' when it's no longer needed.
  590. # -: allows to extract archive members into locations outside
  591. # of the current ``extraction root folder''.
  592. # ASan builds have the llvm-symbolizer binaries listed as
  593. # runtime_deps, with their paths as `../../third_party/...`
  594. # unzip exits with non-zero code on such zip files unless -: is
  595. # passed.
  596. unzip -:o dist.zip
  597. step-ffmpeg-unzip: &step-ffmpeg-unzip
  598. run:
  599. name: Unzip ffmpeg.zip
  600. command: |
  601. cd src/out/ffmpeg
  602. unzip -:o ffmpeg.zip
  603. step-mksnapshot-unzip: &step-mksnapshot-unzip
  604. run:
  605. name: Unzip mksnapshot.zip
  606. command: |
  607. cd src/out/Default
  608. unzip -:o mksnapshot.zip
  609. step-chromedriver-unzip: &step-chromedriver-unzip
  610. run:
  611. name: Unzip chromedriver.zip
  612. command: |
  613. cd src/out/Default
  614. unzip -:o chromedriver.zip
  615. step-ffmpeg-gn-gen: &step-ffmpeg-gn-gen
  616. run:
  617. name: ffmpeg GN gen
  618. command: |
  619. cd src
  620. gn gen out/ffmpeg --args="import(\"//electron/build/args/ffmpeg.gn\") import(\"$GN_GOMA_FILE\") $GN_EXTRA_ARGS"
  621. step-ffmpeg-build: &step-ffmpeg-build
  622. run:
  623. name: Non proprietary ffmpeg build
  624. command: |
  625. cd src
  626. ninja -C out/ffmpeg electron:electron_ffmpeg_zip -j $NUMBER_OF_NINJA_PROCESSES
  627. step-verify-ffmpeg: &step-verify-ffmpeg
  628. run:
  629. name: Verify ffmpeg
  630. command: |
  631. cd src
  632. python electron/script/verify-ffmpeg.py --source-root "$PWD" --build-dir out/Default --ffmpeg-path out/ffmpeg
  633. step-verify-mksnapshot: &step-verify-mksnapshot
  634. run:
  635. name: Verify mksnapshot
  636. command: |
  637. if [ "$IS_ASAN" != "1" ]; then
  638. cd src
  639. if [ "$TARGET_ARCH" == "arm" ] || [ "$TARGET_ARCH" == "arm64" ]; then
  640. python electron/script/verify-mksnapshot.py --source-root "$PWD" --build-dir out/Default --snapshot-files-dir $PWD/cross-arch-snapshots
  641. else
  642. python electron/script/verify-mksnapshot.py --source-root "$PWD" --build-dir out/Default
  643. fi
  644. fi
  645. step-verify-chromedriver: &step-verify-chromedriver
  646. run:
  647. name: Verify ChromeDriver
  648. command: |
  649. if [ "$IS_ASAN" != "1" ]; then
  650. cd src
  651. python electron/script/verify-chromedriver.py --source-root "$PWD" --build-dir out/Default
  652. fi
  653. step-setup-linux-for-headless-testing: &step-setup-linux-for-headless-testing
  654. run:
  655. name: Setup for headless testing
  656. command: |
  657. if [ "`uname`" != "Darwin" ]; then
  658. sh -e /etc/init.d/xvfb start
  659. fi
  660. step-show-goma-stats: &step-show-goma-stats
  661. run:
  662. shell: /bin/bash
  663. name: Check goma stats after build
  664. command: |
  665. set +e
  666. set +o pipefail
  667. $LOCAL_GOMA_DIR/goma_ctl.py stat
  668. $LOCAL_GOMA_DIR/diagnose_goma_log.py
  669. true
  670. when: always
  671. step-mksnapshot-build: &step-mksnapshot-build
  672. run:
  673. name: mksnapshot build
  674. command: |
  675. cd src
  676. if [ "$USE_PREBUILT_V8_CONTEXT_SNAPSHOT" != "1" ]; then
  677. ninja -C out/Default electron:electron_mksnapshot -j $NUMBER_OF_NINJA_PROCESSES
  678. gn desc out/Default v8:run_mksnapshot_default args > out/Default/mksnapshot_args
  679. fi
  680. if [ "`uname`" != "Darwin" ]; then
  681. if [ "$TARGET_ARCH" == "arm" ]; then
  682. electron/script/strip-binaries.py --file $PWD/out/Default/clang_x86_v8_arm/mksnapshot
  683. electron/script/strip-binaries.py --file $PWD/out/Default/clang_x86_v8_arm/v8_context_snapshot_generator
  684. elif [ "$TARGET_ARCH" == "arm64" ]; then
  685. electron/script/strip-binaries.py --file $PWD/out/Default/clang_x64_v8_arm64/mksnapshot
  686. electron/script/strip-binaries.py --file $PWD/out/Default/clang_x64_v8_arm64/v8_context_snapshot_generator
  687. else
  688. electron/script/strip-binaries.py --file $PWD/out/Default/mksnapshot
  689. electron/script/strip-binaries.py --file $PWD/out/Default/v8_context_snapshot_generator
  690. fi
  691. fi
  692. if [ "$USE_PREBUILT_V8_CONTEXT_SNAPSHOT" != "1" ] && [ "$SKIP_DIST_ZIP" != "1" ]; then
  693. ninja -C out/Default electron:electron_mksnapshot_zip -j $NUMBER_OF_NINJA_PROCESSES
  694. (cd out/Default; zip mksnapshot.zip mksnapshot_args gen/v8/embedded.S)
  695. fi
  696. step-hunspell-build: &step-hunspell-build
  697. run:
  698. name: hunspell build
  699. command: |
  700. cd src
  701. if [ "$SKIP_DIST_ZIP" != "1" ]; then
  702. ninja -C out/Default electron:hunspell_dictionaries_zip -j $NUMBER_OF_NINJA_PROCESSES
  703. fi
  704. step-maybe-generate-libcxx: &step-maybe-generate-libcxx
  705. run:
  706. name: maybe generate libcxx
  707. command: |
  708. cd src
  709. if [ "`uname`" == "Linux" ]; then
  710. ninja -C out/Default electron:libcxx_headers_zip -j $NUMBER_OF_NINJA_PROCESSES
  711. ninja -C out/Default electron:libcxxabi_headers_zip -j $NUMBER_OF_NINJA_PROCESSES
  712. ninja -C out/Default electron:libcxx_objects_zip -j $NUMBER_OF_NINJA_PROCESSES
  713. fi
  714. step-maybe-generate-breakpad-symbols: &step-maybe-generate-breakpad-symbols
  715. run:
  716. name: Generate breakpad symbols
  717. no_output_timeout: 30m
  718. command: |
  719. if [ "$GENERATE_SYMBOLS" == "true" ]; then
  720. cd src
  721. ninja -C out/Default electron:electron_symbols
  722. fi
  723. step-maybe-zip-symbols: &step-maybe-zip-symbols
  724. run:
  725. name: Zip symbols
  726. command: |
  727. cd src
  728. export BUILD_PATH="$PWD/out/Default"
  729. ninja -C out/Default electron:licenses
  730. ninja -C out/Default electron:electron_version
  731. DELETE_DSYMS_AFTER_ZIP=1 electron/script/zip-symbols.py -b $BUILD_PATH
  732. step-maybe-cross-arch-snapshot: &step-maybe-cross-arch-snapshot
  733. run:
  734. name: Generate cross arch snapshot (arm/arm64)
  735. command: |
  736. if [ "$GENERATE_CROSS_ARCH_SNAPSHOT" == "true" ] && [ -z "$CIRCLE_PR_NUMBER" ]; then
  737. cd src
  738. if [ "$TARGET_ARCH" == "arm" ]; then
  739. export MKSNAPSHOT_PATH="clang_x86_v8_arm"
  740. elif [ "$TARGET_ARCH" == "arm64" ]; then
  741. export MKSNAPSHOT_PATH="clang_x64_v8_arm64"
  742. fi
  743. cp "out/Default/$MKSNAPSHOT_PATH/mksnapshot" out/Default
  744. cp "out/Default/$MKSNAPSHOT_PATH/v8_context_snapshot_generator" out/Default
  745. if [ "`uname`" == "Linux" ]; then
  746. cp "out/Default/$MKSNAPSHOT_PATH/libffmpeg.so" out/Default
  747. elif [ "`uname`" == "Darwin" ]; then
  748. cp "out/Default/$MKSNAPSHOT_PATH/libffmpeg.dylib" out/Default
  749. fi
  750. python electron/script/verify-mksnapshot.py --source-root "$PWD" --build-dir out/Default --create-snapshot-only
  751. mkdir cross-arch-snapshots
  752. cp out/Default-mksnapshot-test/*.bin cross-arch-snapshots
  753. fi
  754. step-maybe-generate-typescript-defs: &step-maybe-generate-typescript-defs
  755. run:
  756. name: Generate type declarations
  757. command: |
  758. if [ "`uname`" == "Darwin" ]; then
  759. cd src/electron
  760. node script/yarn create-typescript-definitions
  761. fi
  762. step-fix-known-hosts-linux: &step-fix-known-hosts-linux
  763. run:
  764. name: Fix Known Hosts on Linux
  765. command: |
  766. if [ "`uname`" == "Linux" ]; then
  767. ./src/electron/.circleci/fix-known-hosts.sh
  768. fi
  769. # Checkout Steps
  770. step-generate-deps-hash: &step-generate-deps-hash
  771. run:
  772. name: Generate DEPS Hash
  773. command: node src/electron/script/generate-deps-hash.js && cat src/electron/.depshash-target
  774. step-touch-sync-done: &step-touch-sync-done
  775. run:
  776. name: Touch Sync Done
  777. command: touch src/electron/.circle-sync-done
  778. # Restore exact src cache based on the hash of DEPS and patches/*
  779. # If no cache is matched EXACTLY then the .circle-sync-done file is empty
  780. # If a cache is matched EXACTLY then the .circle-sync-done file contains "done"
  781. step-maybe-restore-src-cache: &step-maybe-restore-src-cache
  782. restore_cache:
  783. keys:
  784. - v8-src-cache-{{ checksum "src/electron/.depshash" }}
  785. name: Restoring src cache
  786. step-maybe-restore-src-cache-marker: &step-maybe-restore-src-cache-marker
  787. restore_cache:
  788. keys:
  789. - v1-src-cache-marker-{{ checksum "src/electron/.depshash" }}
  790. name: Restoring src cache marker
  791. # Restore exact or closest git cache based on the hash of DEPS and .circle-sync-done
  792. # If the src cache was restored above then this will match an empty cache
  793. # If the src cache was not restored above then this will match a close git cache
  794. step-maybe-restore-git-cache: &step-maybe-restore-git-cache
  795. restore_cache:
  796. paths:
  797. - ~/.gclient-cache
  798. keys:
  799. - v2-gclient-cache-{{ checksum "src/electron/.circle-sync-done" }}-{{ checksum "src/electron/DEPS" }}
  800. - v2-gclient-cache-{{ checksum "src/electron/.circle-sync-done" }}
  801. name: Conditionally restoring git cache
  802. step-restore-out-cache: &step-restore-out-cache
  803. restore_cache:
  804. paths:
  805. - ./src/out/Default
  806. keys:
  807. - v9-out-cache-{{ checksum "src/electron/.depshash" }}-{{ checksum "src/electron/.depshash-target" }}
  808. name: Restoring out cache
  809. step-set-git-cache-path: &step-set-git-cache-path
  810. run:
  811. name: Set GIT_CACHE_PATH to make gclient to use the cache
  812. command: |
  813. # CircleCI does not support interpolation when setting environment variables.
  814. # https://circleci.com/docs/2.0/env-vars/#setting-an-environment-variable-in-a-shell-command
  815. echo 'export GIT_CACHE_PATH="$HOME/.gclient-cache"' >> $BASH_ENV
  816. # Persist the git cache based on the hash of DEPS and .circle-sync-done
  817. # If the src cache was restored above then this will persist an empty cache
  818. step-save-git-cache: &step-save-git-cache
  819. save_cache:
  820. paths:
  821. - ~/.gclient-cache
  822. key: v2-gclient-cache-{{ checksum "src/electron/.circle-sync-done" }}-{{ checksum "src/electron/DEPS" }}
  823. name: Persisting git cache
  824. step-save-out-cache: &step-save-out-cache
  825. save_cache:
  826. paths:
  827. - ./src/out/Default
  828. key: v9-out-cache-{{ checksum "src/electron/.depshash" }}-{{ checksum "src/electron/.depshash-target" }}
  829. name: Persisting out cache
  830. step-run-electron-only-hooks: &step-run-electron-only-hooks
  831. run:
  832. name: Run Electron Only Hooks
  833. command: gclient runhooks --spec="solutions=[{'name':'src/electron','url':None,'deps_file':'DEPS','custom_vars':{'process_deps':False},'managed':False}]"
  834. step-generate-deps-hash-cleanly: &step-generate-deps-hash-cleanly
  835. run:
  836. name: Generate DEPS Hash
  837. command: (cd src/electron && git checkout .) && node src/electron/script/generate-deps-hash.js && cat src/electron/.depshash-target
  838. # Mark the sync as done for future cache saving
  839. step-mark-sync-done: &step-mark-sync-done
  840. run:
  841. name: Mark Sync Done
  842. command: echo DONE > src/electron/.circle-sync-done
  843. # Minimize the size of the cache
  844. step-minimize-workspace-size-from-checkout: &step-minimize-workspace-size-from-checkout
  845. run:
  846. name: Remove some unused data to avoid storing it in the workspace/cache
  847. command: |
  848. rm -rf src/android_webview
  849. rm -rf src/ios/chrome
  850. rm -rf src/third_party/blink/web_tests
  851. rm -rf src/third_party/blink/perf_tests
  852. rm -rf src/third_party/WebKit/LayoutTests
  853. rm -rf third_party/electron_node/deps/openssl
  854. rm -rf third_party/electron_node/deps/v8
  855. rm -rf chrome/test/data/xr/webvr_info
  856. # Save the src cache based on the deps hash
  857. step-save-src-cache: &step-save-src-cache
  858. save_cache:
  859. paths:
  860. - /var/portal
  861. key: v8-src-cache-{{ checksum "/var/portal/src/electron/.depshash" }}
  862. name: Persisting src cache
  863. step-make-src-cache-marker: &step-make-src-cache-marker
  864. run:
  865. name: Making src cache marker
  866. command: touch .src-cache-marker
  867. step-save-src-cache-marker: &step-save-src-cache-marker
  868. save_cache:
  869. paths:
  870. - .src-cache-marker
  871. key: v1-src-cache-marker-{{ checksum "/var/portal/src/electron/.depshash" }}
  872. # Check for doc only change
  873. step-check-for-doc-only-change: &step-check-for-doc-only-change
  874. run:
  875. name: Check if commit is doc only change
  876. command: |
  877. cd src/electron
  878. node script/yarn install --frozen-lockfile
  879. if node script/doc-only-change.js --prNumber=$CIRCLE_PR_NUMBER --prURL=$CIRCLE_PULL_REQUEST --prBranch=$CIRCLE_BRANCH; then
  880. #PR is doc only change; save file with value true to indicate doc only change
  881. echo "true" > .skip-ci-build
  882. else
  883. #PR is not a doc only change; create empty file to indicate check has been done
  884. touch .skip-ci-build
  885. fi
  886. step-persist-doc-only-change: &step-persist-doc-only-change
  887. persist_to_workspace:
  888. root: .
  889. paths:
  890. - src/electron/.skip-ci-build
  891. step-maybe-early-exit-doc-only-change: &step-maybe-early-exit-doc-only-change
  892. run:
  893. name: Shortcircuit build if doc only change
  894. command: |
  895. if [ -s src/electron/.skip-ci-build ]; then
  896. circleci-agent step halt
  897. fi
  898. step-maybe-early-exit-no-doc-change: &step-maybe-early-exit-no-doc-change
  899. run:
  900. name: Shortcircuit job if change is not doc only
  901. command: |
  902. if [ ! -s src/electron/.skip-ci-build ]; then
  903. circleci-agent step halt
  904. fi
  905. step-ts-compile: &step-ts-compile
  906. run:
  907. name: Run TS/JS compile on doc only change
  908. command: |
  909. cd src
  910. ninja -C out/Default electron:default_app_js -j $NUMBER_OF_NINJA_PROCESSES
  911. ninja -C out/Default electron:electron_js2c -j $NUMBER_OF_NINJA_PROCESSES
  912. # Lists of steps.
  913. steps-lint: &steps-lint
  914. steps:
  915. - *step-checkout-electron
  916. - run:
  917. name: Setup third_party Depot Tools
  918. command: |
  919. # "depot_tools" has to be checkout into "//third_party/depot_tools" so pylint.py can a "pylintrc" file.
  920. git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git src/third_party/depot_tools
  921. echo 'export PATH="$PATH:'"$PWD"'/src/third_party/depot_tools"' >> $BASH_ENV
  922. - run:
  923. name: Download GN Binary
  924. command: |
  925. chromium_revision="$(grep -A1 chromium_version src/electron/DEPS | tr -d '\n' | cut -d\' -f4)"
  926. gn_version="$(curl -sL "https://chromium.googlesource.com/chromium/src/+/${chromium_revision}/DEPS?format=TEXT" | base64 -d | grep gn_version | head -n1 | cut -d\' -f4)"
  927. cipd ensure -ensure-file - -root . \<<-CIPD
  928. \$ServiceURL https://chrome-infra-packages.appspot.com/
  929. @Subdir src/buildtools/linux64
  930. gn/gn/linux-amd64 $gn_version
  931. CIPD
  932. echo 'export CHROMIUM_BUILDTOOLS_PATH="'"$PWD"'/src/buildtools"' >> $BASH_ENV
  933. - run:
  934. name: Download clang-format Binary
  935. command: |
  936. chromium_revision="$(grep -A1 chromium_version src/electron/DEPS | tr -d '\n' | cut -d\' -f4)"
  937. sha1_path='buildtools/linux64/clang-format.sha1'
  938. curl -sL "https://chromium.googlesource.com/chromium/src/+/${chromium_revision}/${sha1_path}?format=TEXT" | base64 -d > "src/${sha1_path}"
  939. download_from_google_storage.py --no_resume --no_auth --bucket chromium-clang-format -s "src/${sha1_path}"
  940. - run:
  941. name: Run Lint
  942. command: |
  943. # gn.py tries to find a gclient root folder starting from the current dir.
  944. # When it fails and returns "None" path, the whole script fails. Let's "fix" it.
  945. touch .gclient
  946. # Another option would be to checkout "buildtools" inside the Electron checkout,
  947. # but then we would lint its contents (at least gn format), and it doesn't pass it.
  948. cd src/electron
  949. node script/yarn install --frozen-lockfile
  950. node script/yarn lint
  951. - run:
  952. name: Run Script Typechecker
  953. command: |
  954. cd src/electron
  955. node script/yarn tsc -p tsconfig.script.json
  956. steps-electron-gn-check: &steps-electron-gn-check
  957. steps:
  958. - attach_workspace:
  959. at: .
  960. - *step-maybe-early-exit-doc-only-change
  961. - *step-depot-tools-add-to-path
  962. - *step-setup-env-for-build
  963. - *step-setup-goma-for-build
  964. - *step-gn-gen-default
  965. - *step-gn-check
  966. steps-electron-ts-compile-for-doc-change: &steps-electron-ts-compile-for-doc-change
  967. steps:
  968. # Checkout - Copied ffrom steps-checkout
  969. - *step-checkout-electron
  970. - *step-check-for-doc-only-change
  971. - *step-maybe-early-exit-no-doc-change
  972. - *step-depot-tools-get
  973. - *step-depot-tools-add-to-path
  974. - *step-restore-brew-cache
  975. - *step-install-gnutar-on-mac
  976. - *step-get-more-space-on-mac
  977. - *step-generate-deps-hash
  978. - *step-touch-sync-done
  979. - maybe-restore-portaled-src-cache
  980. - *step-maybe-restore-git-cache
  981. - *step-set-git-cache-path
  982. # This sync call only runs if .circle-sync-done is an EMPTY file
  983. - *step-gclient-sync
  984. # These next few steps reset Electron to the correct commit regardless of which cache was restored
  985. - run:
  986. name: Wipe Electron
  987. command: rm -rf src/electron
  988. - *step-checkout-electron
  989. - *step-run-electron-only-hooks
  990. - *step-generate-deps-hash-cleanly
  991. - *step-mark-sync-done
  992. - *step-minimize-workspace-size-from-checkout
  993. - *step-depot-tools-add-to-path
  994. - *step-setup-env-for-build
  995. - *step-setup-goma-for-build
  996. - *step-get-more-space-on-mac
  997. - *step-install-npm-deps-on-mac
  998. - *step-fix-sync-on-mac
  999. - *step-gn-gen-default
  1000. #Compile ts/js to verify doc change didn't break anything
  1001. - *step-ts-compile
  1002. steps-native-tests: &steps-native-tests
  1003. steps:
  1004. - attach_workspace:
  1005. at: .
  1006. - *step-depot-tools-add-to-path
  1007. - *step-setup-env-for-build
  1008. - *step-setup-goma-for-build
  1009. - *step-gn-gen-default
  1010. - run:
  1011. name: Build tests
  1012. command: |
  1013. cd src
  1014. ninja -C out/Default $BUILD_TARGET
  1015. - *step-show-goma-stats
  1016. - *step-setup-linux-for-headless-testing
  1017. - run:
  1018. name: Run tests
  1019. command: |
  1020. mkdir test_results
  1021. python src/electron/script/native-tests.py run \
  1022. --config $TESTS_CONFIG \
  1023. --tests-dir src/out/Default \
  1024. --output-dir test_results \
  1025. $TESTS_ARGS
  1026. - store_artifacts:
  1027. path: test_results
  1028. destination: test_results # Put it in the root folder.
  1029. - store_test_results:
  1030. path: test_results
  1031. steps-verify-ffmpeg: &steps-verify-ffmpeg
  1032. steps:
  1033. - attach_workspace:
  1034. at: .
  1035. - *step-depot-tools-add-to-path
  1036. - *step-electron-dist-unzip
  1037. - *step-ffmpeg-unzip
  1038. - *step-setup-linux-for-headless-testing
  1039. - *step-verify-ffmpeg
  1040. - *step-maybe-notify-slack-failure
  1041. steps-tests: &steps-tests
  1042. steps:
  1043. - attach_workspace:
  1044. at: .
  1045. - *step-maybe-early-exit-doc-only-change
  1046. - *step-depot-tools-add-to-path
  1047. - *step-electron-dist-unzip
  1048. - *step-mksnapshot-unzip
  1049. - *step-chromedriver-unzip
  1050. - *step-setup-linux-for-headless-testing
  1051. - *step-restore-brew-cache
  1052. - *step-fix-known-hosts-linux
  1053. - *step-install-signing-cert-on-mac
  1054. - run:
  1055. name: Run Electron tests
  1056. environment:
  1057. MOCHA_REPORTER: mocha-multi-reporters
  1058. ELECTRON_TEST_RESULTS_DIR: junit
  1059. MOCHA_MULTI_REPORTERS: mocha-junit-reporter, tap
  1060. ELECTRON_DISABLE_SECURITY_WARNINGS: 1
  1061. command: |
  1062. cd src
  1063. if [ "$IS_ASAN" == "1" ]; then
  1064. ASAN_SYMBOLIZE="$PWD/tools/valgrind/asan/asan_symbolize.py --executable-path=$PWD/out/Default/electron"
  1065. export ASAN_OPTIONS="symbolize=0 handle_abort=1"
  1066. export G_SLICE=always-malloc
  1067. export NSS_DISABLE_ARENA_FREE_LIST=1
  1068. export NSS_DISABLE_UNLOAD=1
  1069. export LLVM_SYMBOLIZER_PATH=$PWD/third_party/llvm-build/Release+Asserts/bin/llvm-symbolizer
  1070. export MOCHA_TIMEOUT=180000
  1071. echo "Piping output to ASAN_SYMBOLIZE ($ASAN_SYMBOLIZE)"
  1072. (cd electron && node script/yarn test --runners=main --trace-uncaught --enable-logging --files $(circleci tests glob spec-main/*-spec.ts | circleci tests split --split-by=timings)) 2>&1 | $ASAN_SYMBOLIZE
  1073. (cd electron && node script/yarn test --runners=remote --trace-uncaught --enable-logging --files $(circleci tests glob spec/*-spec.js | circleci tests split --split-by=timings)) 2>&1 | $ASAN_SYMBOLIZE
  1074. else
  1075. if [ "$TARGET_ARCH" == "arm" ] || [ "$TARGET_ARCH" == "arm64" ]; then
  1076. export ELECTRON_SKIP_NATIVE_MODULE_TESTS=true
  1077. (cd electron && node script/yarn test --runners=main --trace-uncaught --enable-logging)
  1078. (cd electron && node script/yarn test --runners=remote --trace-uncaught --enable-logging)
  1079. else
  1080. (cd electron && node script/yarn test --runners=main --trace-uncaught --enable-logging --files $(circleci tests glob spec-main/*-spec.ts | circleci tests split --split-by=timings))
  1081. (cd electron && node script/yarn test --runners=remote --trace-uncaught --enable-logging --files $(circleci tests glob spec/*-spec.js | circleci tests split --split-by=timings))
  1082. fi
  1083. fi
  1084. - run:
  1085. name: Check test results existence
  1086. command: |
  1087. cd src
  1088. # Check if test results exist and are not empty.
  1089. if [ ! -s "junit/test-results-remote.xml" ]; then
  1090. exit 1
  1091. fi
  1092. if [ ! -s "junit/test-results-main.xml" ]; then
  1093. exit 1
  1094. fi
  1095. - store_test_results:
  1096. path: src/junit
  1097. - *step-verify-mksnapshot
  1098. - *step-verify-chromedriver
  1099. - *step-maybe-notify-slack-failure
  1100. - *step-maybe-cleanup-arm64-mac
  1101. steps-test-nan: &steps-test-nan
  1102. steps:
  1103. - attach_workspace:
  1104. at: .
  1105. - *step-maybe-early-exit-doc-only-change
  1106. - *step-depot-tools-add-to-path
  1107. - *step-electron-dist-unzip
  1108. - *step-setup-linux-for-headless-testing
  1109. - *step-fix-known-hosts-linux
  1110. - run:
  1111. name: Run Nan Tests
  1112. command: |
  1113. cd src
  1114. node electron/script/nan-spec-runner.js
  1115. steps-test-node: &steps-test-node
  1116. steps:
  1117. - attach_workspace:
  1118. at: .
  1119. - *step-maybe-early-exit-doc-only-change
  1120. - *step-depot-tools-add-to-path
  1121. - *step-electron-dist-unzip
  1122. - *step-setup-linux-for-headless-testing
  1123. - *step-fix-known-hosts-linux
  1124. - run:
  1125. name: Run Node Tests
  1126. command: |
  1127. cd src
  1128. node electron/script/node-spec-runner.js --default --jUnitDir=junit
  1129. - store_test_results:
  1130. path: src/junit
  1131. # Command Aliases
  1132. commands:
  1133. maybe-restore-portaled-src-cache:
  1134. parameters:
  1135. halt-if-successful:
  1136. type: boolean
  1137. default: false
  1138. steps:
  1139. - run:
  1140. name: Prepare for cross-OS sync restore
  1141. command: |
  1142. sudo mkdir -p /var/portal
  1143. sudo chown -R $(id -u):$(id -g) /var/portal
  1144. - when:
  1145. condition: << parameters.halt-if-successful >>
  1146. steps:
  1147. - *step-maybe-restore-src-cache-marker
  1148. - run:
  1149. name: Halt the job early if the src cache exists
  1150. command: |
  1151. if [ -f ".src-cache-marker" ]; then
  1152. circleci-agent step halt
  1153. fi
  1154. - *step-maybe-restore-src-cache
  1155. - run:
  1156. name: Fix the src cache restore point on macOS
  1157. command: |
  1158. if [ -d "/var/portal/src" ]; then
  1159. echo Relocating Cache
  1160. rm -rf src
  1161. mv /var/portal/src ./
  1162. fi
  1163. move_and_store_all_artifacts:
  1164. steps:
  1165. - run:
  1166. name: Move all generated artifacts to upload folder
  1167. command: |
  1168. rm -rf generated_artifacts
  1169. mkdir generated_artifacts
  1170. mv_if_exist() {
  1171. if [ -f "$1" ] || [ -d "$1" ]; then
  1172. echo Storing $1
  1173. mv $1 generated_artifacts
  1174. else
  1175. echo Skipping $1 - It is not present on disk
  1176. fi
  1177. }
  1178. mv_if_exist src/out/Default/dist.zip
  1179. mv_if_exist src/out/Default/shell_browser_ui_unittests
  1180. mv_if_exist src/out/Default/gen/node_headers.tar.gz
  1181. mv_if_exist src/out/Default/symbols.zip
  1182. mv_if_exist src/out/Default/mksnapshot.zip
  1183. mv_if_exist src/out/Default/chromedriver.zip
  1184. mv_if_exist src/out/ffmpeg/ffmpeg.zip
  1185. mv_if_exist src/out/Default/hunspell_dictionaries.zip
  1186. mv_if_exist src/cross-arch-snapshots
  1187. mv_if_exist src/out/electron_ninja_log
  1188. when: always
  1189. - store_artifacts:
  1190. path: generated_artifacts
  1191. destination: ./
  1192. - store_artifacts:
  1193. path: generated_artifacts/cross-arch-snapshots
  1194. destination: cross-arch-snapshots
  1195. checkout-from-cache:
  1196. steps:
  1197. - *step-checkout-electron
  1198. - *step-maybe-early-exit-doc-only-change
  1199. - *step-depot-tools-get
  1200. - *step-depot-tools-add-to-path
  1201. - *step-generate-deps-hash
  1202. - maybe-restore-portaled-src-cache
  1203. - run:
  1204. name: Ensure src checkout worked
  1205. command: |
  1206. if [ ! -d "src/third_party/blink" ]; then
  1207. echo src cache was not restored for some reason, idk what happened here...
  1208. exit 1
  1209. fi
  1210. - run:
  1211. name: Wipe Electron
  1212. command: rm -rf src/electron
  1213. - *step-checkout-electron
  1214. - *step-run-electron-only-hooks
  1215. - *step-generate-deps-hash-cleanly
  1216. electron-build:
  1217. parameters:
  1218. attach:
  1219. type: boolean
  1220. default: false
  1221. persist:
  1222. type: boolean
  1223. default: true
  1224. persist-checkout:
  1225. type: boolean
  1226. default: false
  1227. checkout:
  1228. type: boolean
  1229. default: true
  1230. checkout-and-assume-cache:
  1231. type: boolean
  1232. default: false
  1233. save-git-cache:
  1234. type: boolean
  1235. default: false
  1236. checkout-to-create-src-cache:
  1237. type: boolean
  1238. default: false
  1239. build:
  1240. type: boolean
  1241. default: true
  1242. use-out-cache:
  1243. type: boolean
  1244. default: true
  1245. restore-src-cache:
  1246. type: boolean
  1247. default: true
  1248. build-nonproprietary-ffmpeg:
  1249. type: boolean
  1250. default: true
  1251. steps:
  1252. - when:
  1253. condition: << parameters.attach >>
  1254. steps:
  1255. - attach_workspace:
  1256. at: .
  1257. - *step-maybe-early-exit-doc-only-change
  1258. - run: rm -rf src/electron
  1259. - *step-restore-brew-cache
  1260. - *step-install-gnutar-on-mac
  1261. - *step-save-brew-cache
  1262. - when:
  1263. condition: << parameters.checkout-and-assume-cache >>
  1264. steps:
  1265. - checkout-from-cache
  1266. - when:
  1267. condition: << parameters.checkout >>
  1268. steps:
  1269. # Checkout - Copied ffrom steps-checkout
  1270. - *step-checkout-electron
  1271. - *step-check-for-doc-only-change
  1272. - *step-persist-doc-only-change
  1273. - *step-maybe-early-exit-doc-only-change
  1274. - *step-depot-tools-get
  1275. - *step-depot-tools-add-to-path
  1276. - *step-get-more-space-on-mac
  1277. - *step-generate-deps-hash
  1278. - *step-touch-sync-done
  1279. - when:
  1280. condition: << parameters.restore-src-cache >>
  1281. steps:
  1282. - maybe-restore-portaled-src-cache:
  1283. halt-if-successful: << parameters.checkout-to-create-src-cache >>
  1284. - *step-maybe-restore-git-cache
  1285. - *step-set-git-cache-path
  1286. # This sync call only runs if .circle-sync-done is an EMPTY file
  1287. - *step-gclient-sync
  1288. - store_artifacts:
  1289. path: patches
  1290. - when:
  1291. condition: << parameters.save-git-cache >>
  1292. steps:
  1293. - *step-save-git-cache
  1294. # These next few steps reset Electron to the correct commit regardless of which cache was restored
  1295. - run:
  1296. name: Wipe Electron
  1297. command: rm -rf src/electron
  1298. - *step-checkout-electron
  1299. - *step-run-electron-only-hooks
  1300. - *step-generate-deps-hash-cleanly
  1301. - *step-mark-sync-done
  1302. - *step-minimize-workspace-size-from-checkout
  1303. - *step-delete-git-directories
  1304. - when:
  1305. condition: << parameters.persist-checkout >>
  1306. steps:
  1307. - persist_to_workspace:
  1308. root: .
  1309. paths:
  1310. - depot_tools
  1311. - src
  1312. - when:
  1313. condition: << parameters.checkout-to-create-src-cache >>
  1314. steps:
  1315. - run:
  1316. name: Move src folder to the cross-OS portal
  1317. command: |
  1318. sudo mkdir -p /var/portal
  1319. sudo chown -R $(id -u):$(id -g) /var/portal
  1320. mv ./src /var/portal
  1321. - *step-save-src-cache
  1322. - *step-make-src-cache-marker
  1323. - *step-save-src-cache-marker
  1324. - when:
  1325. condition: << parameters.build >>
  1326. steps:
  1327. - *step-depot-tools-add-to-path
  1328. - *step-setup-env-for-build
  1329. - *step-setup-goma-for-build
  1330. - *step-get-more-space-on-mac
  1331. - *step-fix-sync-on-mac
  1332. - *step-delete-git-directories
  1333. # Electron app
  1334. - when:
  1335. condition: << parameters.use-out-cache >>
  1336. steps:
  1337. - *step-restore-out-cache
  1338. - *step-gn-gen-default
  1339. - *step-electron-build
  1340. - *step-maybe-electron-dist-strip
  1341. - *step-electron-dist-build
  1342. # Native test targets
  1343. - *step-native-unittests-build
  1344. # Node.js headers
  1345. - *step-nodejs-headers-build
  1346. - *step-show-goma-stats
  1347. # mksnapshot
  1348. - *step-mksnapshot-build
  1349. - *step-maybe-cross-arch-snapshot
  1350. # chromedriver
  1351. - *step-electron-chromedriver-build
  1352. - when:
  1353. condition: << parameters.build-nonproprietary-ffmpeg >>
  1354. steps:
  1355. # ffmpeg
  1356. - *step-ffmpeg-gn-gen
  1357. - *step-ffmpeg-build
  1358. # hunspell
  1359. - *step-hunspell-build
  1360. # Save all data needed for a further tests run.
  1361. - when:
  1362. condition: << parameters.persist >>
  1363. steps:
  1364. - *step-persist-data-for-tests
  1365. - when:
  1366. condition: << parameters.build >>
  1367. steps:
  1368. - *step-maybe-generate-breakpad-symbols
  1369. - *step-maybe-zip-symbols
  1370. - when:
  1371. condition: << parameters.build >>
  1372. steps:
  1373. - move_and_store_all_artifacts
  1374. - run:
  1375. name: Remove the big things on macOS, this seems to be better on average
  1376. command: |
  1377. if [ "`uname`" == "Darwin" ]; then
  1378. mkdir -p src/out/Default
  1379. cd src/out/Default
  1380. find . -type f -size +50M -delete
  1381. mkdir -p gen/electron
  1382. cd gen/electron
  1383. # These files do not seem to like being in a cache, let us remove them
  1384. find . -type f -name '*_pkg_info' -delete
  1385. fi
  1386. - when:
  1387. condition: << parameters.use-out-cache >>
  1388. steps:
  1389. - *step-save-out-cache
  1390. - *step-maybe-notify-slack-failure
  1391. electron-publish:
  1392. parameters:
  1393. attach:
  1394. type: boolean
  1395. default: false
  1396. checkout:
  1397. type: boolean
  1398. default: true
  1399. steps:
  1400. - when:
  1401. condition: << parameters.attach >>
  1402. steps:
  1403. - attach_workspace:
  1404. at: .
  1405. - when:
  1406. condition: << parameters.checkout >>
  1407. steps:
  1408. - *step-depot-tools-get
  1409. - *step-depot-tools-add-to-path
  1410. - *step-restore-brew-cache
  1411. - *step-get-more-space-on-mac
  1412. - when:
  1413. condition: << parameters.checkout >>
  1414. steps:
  1415. - *step-checkout-electron
  1416. - *step-touch-sync-done
  1417. - *step-maybe-restore-git-cache
  1418. - *step-set-git-cache-path
  1419. - *step-gclient-sync
  1420. - *step-delete-git-directories
  1421. - *step-minimize-workspace-size-from-checkout
  1422. - *step-fix-sync-on-mac
  1423. - *step-setup-env-for-build
  1424. - *step-setup-goma-for-build
  1425. - *step-gn-gen-default
  1426. # Electron app
  1427. - *step-electron-build
  1428. - *step-show-goma-stats
  1429. - *step-maybe-generate-breakpad-symbols
  1430. - *step-maybe-electron-dist-strip
  1431. - *step-electron-dist-build
  1432. - *step-maybe-zip-symbols
  1433. # mksnapshot
  1434. - *step-mksnapshot-build
  1435. # chromedriver
  1436. - *step-electron-chromedriver-build
  1437. # Node.js headers
  1438. - *step-nodejs-headers-build
  1439. # ffmpeg
  1440. - *step-ffmpeg-gn-gen
  1441. - *step-ffmpeg-build
  1442. # hunspell
  1443. - *step-hunspell-build
  1444. # libcxx
  1445. - *step-maybe-generate-libcxx
  1446. # typescript defs
  1447. - *step-maybe-generate-typescript-defs
  1448. # Publish
  1449. - *step-electron-publish
  1450. - move_and_store_all_artifacts
  1451. # List of all jobs.
  1452. jobs:
  1453. # Layer 0: Lint. Standalone.
  1454. lint:
  1455. executor:
  1456. name: linux-docker
  1457. size: medium
  1458. environment:
  1459. <<: *env-linux-medium
  1460. <<: *steps-lint
  1461. ts-compile-doc-change:
  1462. executor:
  1463. name: linux-docker
  1464. size: medium
  1465. environment:
  1466. <<: *env-linux-medium
  1467. <<: *env-testing-build
  1468. <<: *steps-electron-ts-compile-for-doc-change
  1469. # Layer 1: Checkout.
  1470. linux-checkout-for-workspace:
  1471. executor: linux-docker
  1472. environment:
  1473. <<: *env-linux-2xlarge
  1474. GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
  1475. steps:
  1476. - electron-build:
  1477. persist: false
  1478. build: false
  1479. checkout: true
  1480. persist-checkout: true
  1481. linux-make-src-cache:
  1482. executor: linux-docker
  1483. environment:
  1484. <<: *env-linux-2xlarge
  1485. GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
  1486. steps:
  1487. - electron-build:
  1488. persist: false
  1489. build: false
  1490. checkout: true
  1491. save-git-cache: true
  1492. checkout-to-create-src-cache: true
  1493. linux-checkout-for-native-tests:
  1494. executor: linux-docker
  1495. environment:
  1496. <<: *env-linux-2xlarge
  1497. GCLIENT_EXTRA_ARGS: '--custom-var=checkout_pyyaml=True'
  1498. steps:
  1499. - electron-build:
  1500. persist: false
  1501. build: false
  1502. checkout: true
  1503. persist-checkout: true
  1504. linux-checkout-for-native-tests-with-no-patches:
  1505. executor: linux-docker
  1506. environment:
  1507. <<: *env-linux-2xlarge
  1508. GCLIENT_EXTRA_ARGS: '--custom-var=apply_patches=False --custom-var=checkout_pyyaml=True'
  1509. steps:
  1510. - electron-build:
  1511. persist: false
  1512. build: false
  1513. checkout: true
  1514. persist-checkout: true
  1515. mac-checkout:
  1516. executor: linux-docker
  1517. environment:
  1518. <<: *env-linux-2xlarge
  1519. <<: *env-testing-build
  1520. <<: *env-macos-build
  1521. GCLIENT_EXTRA_ARGS: '--custom-var=checkout_mac=True --custom-var=host_os=mac'
  1522. steps:
  1523. - electron-build:
  1524. persist: false
  1525. build: false
  1526. checkout: true
  1527. persist-checkout: true
  1528. restore-src-cache: false
  1529. mac-checkout-for-workspace:
  1530. executor: linux-docker
  1531. environment:
  1532. <<: *env-linux-2xlarge
  1533. <<: *env-testing-build
  1534. <<: *env-macos-build
  1535. GCLIENT_EXTRA_ARGS: '--custom-var=checkout_mac=True --custom-var=host_os=mac'
  1536. steps:
  1537. - electron-build:
  1538. persist: false
  1539. build: false
  1540. checkout: true
  1541. persist-checkout: true
  1542. mac-make-src-cache:
  1543. executor: linux-docker
  1544. environment:
  1545. <<: *env-linux-2xlarge
  1546. <<: *env-testing-build
  1547. <<: *env-macos-build
  1548. GCLIENT_EXTRA_ARGS: '--custom-var=checkout_mac=True --custom-var=host_os=mac'
  1549. steps:
  1550. - electron-build:
  1551. persist: false
  1552. build: false
  1553. checkout: true
  1554. save-git-cache: true
  1555. checkout-to-create-src-cache: true
  1556. # Layer 2: Builds.
  1557. linux-x64-testing:
  1558. executor: linux-docker
  1559. environment:
  1560. <<: *env-global
  1561. <<: *env-testing-build
  1562. <<: *env-ninja-status
  1563. GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
  1564. steps:
  1565. - electron-build:
  1566. persist: true
  1567. checkout: true
  1568. use-out-cache: false
  1569. linux-x64-testing-asan:
  1570. executor: linux-docker
  1571. environment:
  1572. <<: *env-global
  1573. <<: *env-testing-build
  1574. <<: *env-ninja-status
  1575. CHECK_DIST_MANIFEST: '0'
  1576. GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
  1577. GN_EXTRA_ARGS: 'is_asan = true'
  1578. steps:
  1579. - electron-build:
  1580. persist: true
  1581. checkout: true
  1582. use-out-cache: false
  1583. build-nonproprietary-ffmpeg: false
  1584. linux-x64-testing-no-run-as-node:
  1585. executor: linux-docker
  1586. environment:
  1587. <<: *env-linux-2xlarge
  1588. <<: *env-testing-build
  1589. <<: *env-ninja-status
  1590. <<: *env-disable-run-as-node
  1591. GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
  1592. steps:
  1593. - electron-build:
  1594. persist: false
  1595. checkout: true
  1596. use-out-cache: false
  1597. linux-x64-testing-gn-check:
  1598. executor:
  1599. name: linux-docker
  1600. size: medium
  1601. environment:
  1602. <<: *env-linux-medium
  1603. <<: *env-testing-build
  1604. <<: *steps-electron-gn-check
  1605. linux-x64-release:
  1606. executor: linux-docker
  1607. environment:
  1608. <<: *env-linux-2xlarge-release
  1609. <<: *env-release-build
  1610. <<: *env-send-slack-notifications
  1611. <<: *env-ninja-status
  1612. GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
  1613. steps:
  1614. - electron-build:
  1615. persist: true
  1616. checkout: true
  1617. linux-x64-publish:
  1618. executor: linux-docker
  1619. environment:
  1620. <<: *env-linux-2xlarge-release
  1621. <<: *env-release-build
  1622. UPLOAD_TO_S3: << pipeline.parameters.upload-to-s3 >>
  1623. <<: *env-ninja-status
  1624. steps:
  1625. - run: echo running
  1626. - when:
  1627. condition:
  1628. or:
  1629. - equal: ["all", << pipeline.parameters.linux-publish-arch-limit >>]
  1630. - equal: ["x64", << pipeline.parameters.linux-publish-arch-limit >>]
  1631. steps:
  1632. - electron-publish:
  1633. attach: false
  1634. checkout: true
  1635. linux-ia32-testing:
  1636. executor: linux-docker
  1637. environment:
  1638. <<: *env-global
  1639. <<: *env-ia32
  1640. <<: *env-testing-build
  1641. <<: *env-ninja-status
  1642. GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
  1643. steps:
  1644. - electron-build:
  1645. persist: true
  1646. checkout: true
  1647. use-out-cache: false
  1648. linux-ia32-release:
  1649. executor: linux-docker
  1650. environment:
  1651. <<: *env-linux-2xlarge-release
  1652. <<: *env-ia32
  1653. <<: *env-release-build
  1654. <<: *env-send-slack-notifications
  1655. <<: *env-ninja-status
  1656. GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
  1657. steps:
  1658. - electron-build:
  1659. persist: true
  1660. checkout: true
  1661. linux-ia32-publish:
  1662. executor: linux-docker
  1663. environment:
  1664. <<: *env-linux-2xlarge-release
  1665. <<: *env-ia32
  1666. <<: *env-release-build
  1667. <<: *env-32bit-release
  1668. UPLOAD_TO_S3: << pipeline.parameters.upload-to-s3 >>
  1669. <<: *env-ninja-status
  1670. steps:
  1671. - run: echo running
  1672. - when:
  1673. condition:
  1674. or:
  1675. - equal: ["all", << pipeline.parameters.linux-publish-arch-limit >>]
  1676. - equal: ["ia32", << pipeline.parameters.linux-publish-arch-limit >>]
  1677. steps:
  1678. - electron-publish:
  1679. attach: false
  1680. checkout: true
  1681. linux-arm-testing:
  1682. executor: linux-docker
  1683. environment:
  1684. <<: *env-global
  1685. <<: *env-arm
  1686. <<: *env-testing-build
  1687. <<: *env-ninja-status
  1688. TRIGGER_ARM_TEST: true
  1689. GENERATE_CROSS_ARCH_SNAPSHOT: true
  1690. GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
  1691. steps:
  1692. - electron-build:
  1693. persist: true
  1694. checkout: true
  1695. use-out-cache: false
  1696. linux-arm-release:
  1697. executor: linux-docker
  1698. environment:
  1699. <<: *env-linux-2xlarge-release
  1700. <<: *env-arm
  1701. <<: *env-release-build
  1702. <<: *env-send-slack-notifications
  1703. <<: *env-ninja-status
  1704. GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
  1705. steps:
  1706. - electron-build:
  1707. persist: false
  1708. checkout: true
  1709. linux-arm-publish:
  1710. executor: linux-docker
  1711. environment:
  1712. <<: *env-linux-2xlarge-release
  1713. <<: *env-arm
  1714. <<: *env-release-build
  1715. <<: *env-32bit-release
  1716. GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True'
  1717. UPLOAD_TO_S3: << pipeline.parameters.upload-to-s3 >>
  1718. <<: *env-ninja-status
  1719. steps:
  1720. - run: echo running
  1721. - when:
  1722. condition:
  1723. or:
  1724. - equal: ["all", << pipeline.parameters.linux-publish-arch-limit >>]
  1725. - equal: ["arm", << pipeline.parameters.linux-publish-arch-limit >>]
  1726. steps:
  1727. - electron-publish:
  1728. attach: false
  1729. checkout: true
  1730. linux-arm64-testing:
  1731. executor: linux-docker
  1732. environment:
  1733. <<: *env-global
  1734. <<: *env-arm64
  1735. <<: *env-testing-build
  1736. <<: *env-ninja-status
  1737. TRIGGER_ARM_TEST: true
  1738. GENERATE_CROSS_ARCH_SNAPSHOT: true
  1739. GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
  1740. steps:
  1741. - electron-build:
  1742. persist: true
  1743. checkout: true
  1744. use-out-cache: false
  1745. linux-arm64-testing-gn-check:
  1746. executor:
  1747. name: linux-docker
  1748. size: medium
  1749. environment:
  1750. <<: *env-linux-medium
  1751. <<: *env-arm64
  1752. <<: *env-testing-build
  1753. <<: *steps-electron-gn-check
  1754. linux-arm64-release:
  1755. executor: linux-docker
  1756. environment:
  1757. <<: *env-linux-2xlarge-release
  1758. <<: *env-arm64
  1759. <<: *env-release-build
  1760. <<: *env-send-slack-notifications
  1761. <<: *env-ninja-status
  1762. GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
  1763. steps:
  1764. - electron-build:
  1765. persist: false
  1766. checkout: true
  1767. linux-arm64-publish:
  1768. executor: linux-docker
  1769. environment:
  1770. <<: *env-linux-2xlarge-release
  1771. <<: *env-arm64
  1772. <<: *env-release-build
  1773. GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm64=True'
  1774. UPLOAD_TO_S3: << pipeline.parameters.upload-to-s3 >>
  1775. <<: *env-ninja-status
  1776. steps:
  1777. - run: echo running
  1778. - when:
  1779. condition:
  1780. or:
  1781. - equal: ["all", << pipeline.parameters.linux-publish-arch-limit >>]
  1782. - equal: ["arm64", << pipeline.parameters.linux-publish-arch-limit >>]
  1783. steps:
  1784. - electron-publish:
  1785. attach: false
  1786. checkout: true
  1787. osx-testing-x64:
  1788. executor: macos
  1789. environment:
  1790. <<: *env-mac-large
  1791. <<: *env-testing-build
  1792. <<: *env-ninja-status
  1793. <<: *env-macos-build
  1794. GCLIENT_EXTRA_ARGS: '--custom-var=checkout_mac=True --custom-var=host_os=mac'
  1795. steps:
  1796. - electron-build:
  1797. persist: true
  1798. checkout: false
  1799. checkout-and-assume-cache: true
  1800. attach: true
  1801. osx-testing-x64-gn-check:
  1802. executor:
  1803. name: macos
  1804. size: medium
  1805. environment:
  1806. <<: *env-machine-mac
  1807. <<: *env-testing-build
  1808. <<: *steps-electron-gn-check
  1809. osx-publish-x64-skip-checkout:
  1810. executor: macos
  1811. environment:
  1812. <<: *env-mac-large-release
  1813. <<: *env-release-build
  1814. UPLOAD_TO_S3: << pipeline.parameters.upload-to-s3 >>
  1815. <<: *env-ninja-status
  1816. steps:
  1817. - run: echo running
  1818. - when:
  1819. condition:
  1820. or:
  1821. - equal: ["all", << pipeline.parameters.macos-publish-arch-limit >>]
  1822. - equal: ["osx-x64", << pipeline.parameters.macos-publish-arch-limit >>]
  1823. steps:
  1824. - electron-publish:
  1825. attach: true
  1826. checkout: false
  1827. osx-publish-arm64-skip-checkout:
  1828. executor: macos
  1829. environment:
  1830. <<: *env-mac-large-release
  1831. <<: *env-release-build
  1832. <<: *env-apple-silicon
  1833. UPLOAD_TO_S3: << pipeline.parameters.upload-to-s3 >>
  1834. <<: *env-ninja-status
  1835. steps:
  1836. - run: echo running
  1837. - when:
  1838. condition:
  1839. or:
  1840. - equal: ["all", << pipeline.parameters.macos-publish-arch-limit >>]
  1841. - equal: ["osx-arm64", << pipeline.parameters.macos-publish-arch-limit >>]
  1842. steps:
  1843. - electron-publish:
  1844. attach: true
  1845. checkout: false
  1846. osx-testing-arm64:
  1847. executor: macos
  1848. environment:
  1849. <<: *env-mac-large
  1850. <<: *env-testing-build
  1851. <<: *env-ninja-status
  1852. <<: *env-macos-build
  1853. <<: *env-apple-silicon
  1854. GCLIENT_EXTRA_ARGS: '--custom-var=checkout_mac=True --custom-var=host_os=mac'
  1855. GENERATE_CROSS_ARCH_SNAPSHOT: true
  1856. steps:
  1857. - electron-build:
  1858. persist: true
  1859. checkout: false
  1860. checkout-and-assume-cache: true
  1861. attach: true
  1862. mas-testing-x64:
  1863. executor: macos
  1864. environment:
  1865. <<: *env-mac-large
  1866. <<: *env-mas
  1867. <<: *env-testing-build
  1868. <<: *env-ninja-status
  1869. <<: *env-macos-build
  1870. GCLIENT_EXTRA_ARGS: '--custom-var=checkout_mac=True --custom-var=host_os=mac'
  1871. steps:
  1872. - electron-build:
  1873. persist: true
  1874. checkout: false
  1875. checkout-and-assume-cache: true
  1876. attach: true
  1877. mas-testing-x64-gn-check:
  1878. executor:
  1879. name: macos
  1880. size: medium
  1881. environment:
  1882. <<: *env-machine-mac
  1883. <<: *env-mas
  1884. <<: *env-testing-build
  1885. <<: *steps-electron-gn-check
  1886. mas-publish-x64-skip-checkout:
  1887. executor: macos
  1888. environment:
  1889. <<: *env-mac-large-release
  1890. <<: *env-mas
  1891. <<: *env-release-build
  1892. UPLOAD_TO_S3: << pipeline.parameters.upload-to-s3 >>
  1893. steps:
  1894. - run: echo running
  1895. - when:
  1896. condition:
  1897. or:
  1898. - equal: ["all", << pipeline.parameters.macos-publish-arch-limit >>]
  1899. - equal: ["mas-x64", << pipeline.parameters.macos-publish-arch-limit >>]
  1900. steps:
  1901. - electron-publish:
  1902. attach: true
  1903. checkout: false
  1904. mas-publish-arm64-skip-checkout:
  1905. executor: macos
  1906. environment:
  1907. <<: *env-mac-large-release
  1908. <<: *env-mas-apple-silicon
  1909. <<: *env-release-build
  1910. UPLOAD_TO_S3: << pipeline.parameters.upload-to-s3 >>
  1911. <<: *env-ninja-status
  1912. steps:
  1913. - run: echo running
  1914. - when:
  1915. condition:
  1916. or:
  1917. - equal: ["all", << pipeline.parameters.macos-publish-arch-limit >>]
  1918. - equal: ["mas-arm64", << pipeline.parameters.macos-publish-arch-limit >>]
  1919. steps:
  1920. - electron-publish:
  1921. attach: true
  1922. checkout: false
  1923. mas-testing-arm64:
  1924. executor: macos
  1925. environment:
  1926. <<: *env-mac-large
  1927. <<: *env-testing-build
  1928. <<: *env-ninja-status
  1929. <<: *env-macos-build
  1930. <<: *env-mas-apple-silicon
  1931. GCLIENT_EXTRA_ARGS: '--custom-var=checkout_mac=True --custom-var=host_os=mac'
  1932. GENERATE_CROSS_ARCH_SNAPSHOT: true
  1933. steps:
  1934. - electron-build:
  1935. persist: true
  1936. checkout: false
  1937. checkout-and-assume-cache: true
  1938. attach: true
  1939. # Layer 3: Tests.
  1940. linux-x64-unittests:
  1941. executor: linux-docker
  1942. environment:
  1943. <<: *env-linux-2xlarge
  1944. <<: *env-unittests
  1945. <<: *env-headless-testing
  1946. <<: *steps-native-tests
  1947. linux-x64-disabled-unittests:
  1948. executor: linux-docker
  1949. environment:
  1950. <<: *env-linux-2xlarge
  1951. <<: *env-unittests
  1952. <<: *env-headless-testing
  1953. TESTS_ARGS: '--only-disabled-tests'
  1954. <<: *steps-native-tests
  1955. linux-x64-chromium-unittests:
  1956. executor: linux-docker
  1957. environment:
  1958. <<: *env-linux-2xlarge
  1959. <<: *env-unittests
  1960. <<: *env-headless-testing
  1961. TESTS_ARGS: '--include-disabled-tests'
  1962. <<: *steps-native-tests
  1963. linux-x64-browsertests:
  1964. executor: linux-docker
  1965. environment:
  1966. <<: *env-linux-2xlarge
  1967. <<: *env-browsertests
  1968. <<: *env-testing-build
  1969. <<: *env-headless-testing
  1970. <<: *steps-native-tests
  1971. linux-x64-testing-tests:
  1972. executor:
  1973. name: linux-docker
  1974. size: medium
  1975. environment:
  1976. <<: *env-linux-medium
  1977. <<: *env-headless-testing
  1978. <<: *env-stack-dumping
  1979. parallelism: 3
  1980. <<: *steps-tests
  1981. linux-x64-testing-asan-tests:
  1982. executor:
  1983. name: linux-docker
  1984. size: xlarge
  1985. environment:
  1986. <<: *env-linux-medium
  1987. <<: *env-headless-testing
  1988. <<: *env-stack-dumping
  1989. IS_ASAN: '1'
  1990. DISABLE_CRASH_REPORTER_TESTS: '1'
  1991. parallelism: 3
  1992. <<: *steps-tests
  1993. linux-x64-testing-nan:
  1994. executor:
  1995. name: linux-docker
  1996. size: medium
  1997. environment:
  1998. <<: *env-linux-medium
  1999. <<: *env-headless-testing
  2000. <<: *env-stack-dumping
  2001. <<: *steps-test-nan
  2002. linux-x64-testing-node:
  2003. executor: linux-docker
  2004. environment:
  2005. <<: *env-linux-medium
  2006. <<: *env-headless-testing
  2007. <<: *env-stack-dumping
  2008. <<: *steps-test-node
  2009. linux-x64-release-tests:
  2010. executor:
  2011. name: linux-docker
  2012. size: medium
  2013. environment:
  2014. <<: *env-linux-medium
  2015. <<: *env-headless-testing
  2016. <<: *env-send-slack-notifications
  2017. <<: *steps-tests
  2018. linux-x64-verify-ffmpeg:
  2019. executor:
  2020. name: linux-docker
  2021. size: medium
  2022. environment:
  2023. <<: *env-linux-medium
  2024. <<: *env-headless-testing
  2025. <<: *env-send-slack-notifications
  2026. <<: *steps-verify-ffmpeg
  2027. linux-ia32-testing-tests:
  2028. executor:
  2029. name: linux-docker
  2030. size: medium
  2031. environment:
  2032. <<: *env-linux-medium
  2033. <<: *env-ia32
  2034. <<: *env-headless-testing
  2035. <<: *env-stack-dumping
  2036. parallelism: 3
  2037. <<: *steps-tests
  2038. linux-ia32-testing-nan:
  2039. executor:
  2040. name: linux-docker
  2041. size: medium
  2042. environment:
  2043. <<: *env-linux-medium
  2044. <<: *env-ia32
  2045. <<: *env-headless-testing
  2046. <<: *env-stack-dumping
  2047. <<: *steps-test-nan
  2048. linux-ia32-testing-node:
  2049. executor: linux-docker
  2050. environment:
  2051. <<: *env-linux-medium
  2052. <<: *env-ia32
  2053. <<: *env-headless-testing
  2054. <<: *env-stack-dumping
  2055. <<: *steps-test-node
  2056. linux-ia32-release-tests:
  2057. executor:
  2058. name: linux-docker
  2059. size: medium
  2060. environment:
  2061. <<: *env-linux-medium
  2062. <<: *env-ia32
  2063. <<: *env-headless-testing
  2064. <<: *env-send-slack-notifications
  2065. <<: *steps-tests
  2066. linux-ia32-verify-ffmpeg:
  2067. executor:
  2068. name: linux-docker
  2069. size: medium
  2070. environment:
  2071. <<: *env-linux-medium
  2072. <<: *env-ia32
  2073. <<: *env-headless-testing
  2074. <<: *env-send-slack-notifications
  2075. <<: *steps-verify-ffmpeg
  2076. linux-arm-testing-tests:
  2077. executor: linux-arm
  2078. environment:
  2079. <<: *env-arm
  2080. <<: *env-global
  2081. <<: *env-headless-testing
  2082. <<: *env-stack-dumping
  2083. <<: *steps-tests
  2084. linux-arm64-testing-tests:
  2085. executor: linux-arm64
  2086. environment:
  2087. <<: *env-arm64
  2088. <<: *env-global
  2089. <<: *env-headless-testing
  2090. <<: *env-stack-dumping
  2091. <<: *steps-tests
  2092. osx-testing-x64-tests:
  2093. executor:
  2094. name: macos
  2095. size: medium
  2096. environment:
  2097. <<: *env-mac-large
  2098. <<: *env-stack-dumping
  2099. parallelism: 2
  2100. <<: *steps-tests
  2101. osx-testing-arm64-tests:
  2102. executor: apple-silicon
  2103. environment:
  2104. <<: *env-mac-large
  2105. <<: *env-stack-dumping
  2106. <<: *env-apple-silicon
  2107. <<: *steps-tests
  2108. mas-testing-x64-tests:
  2109. executor:
  2110. name: macos
  2111. size: medium
  2112. environment:
  2113. <<: *env-mac-large
  2114. <<: *env-stack-dumping
  2115. parallelism: 2
  2116. <<: *steps-tests
  2117. mas-testing-arm64-tests:
  2118. executor: apple-silicon
  2119. environment:
  2120. <<: *env-mac-large
  2121. <<: *env-stack-dumping
  2122. <<: *env-apple-silicon
  2123. <<: *steps-tests
  2124. # Layer 4: Summary.
  2125. linux-release-summary:
  2126. executor:
  2127. name: linux-docker
  2128. size: medium
  2129. environment:
  2130. <<: *env-linux-medium
  2131. <<: *env-send-slack-notifications
  2132. steps:
  2133. - *step-maybe-notify-slack-success
  2134. workflows:
  2135. version: 2.1
  2136. publish-linux:
  2137. when: << pipeline.parameters.run-linux-publish >>
  2138. jobs:
  2139. - linux-x64-publish:
  2140. context: release-env
  2141. - linux-ia32-publish:
  2142. context: release-env
  2143. - linux-arm-publish:
  2144. context: release-env
  2145. - linux-arm64-publish:
  2146. context: release-env
  2147. publish-macos:
  2148. when: << pipeline.parameters.run-macos-publish >>
  2149. jobs:
  2150. - mac-checkout
  2151. - osx-publish-x64-skip-checkout:
  2152. requires:
  2153. - mac-checkout
  2154. context: release-env
  2155. - mas-publish-x64-skip-checkout:
  2156. requires:
  2157. - mac-checkout
  2158. context: release-env
  2159. - osx-publish-arm64-skip-checkout:
  2160. requires:
  2161. - mac-checkout
  2162. context: release-env
  2163. - mas-publish-arm64-skip-checkout:
  2164. requires:
  2165. - mac-checkout
  2166. context: release-env
  2167. lint:
  2168. when: << pipeline.parameters.run-lint >>
  2169. jobs:
  2170. - lint
  2171. build-linux:
  2172. when: << pipeline.parameters.run-build-linux >>
  2173. jobs:
  2174. - linux-checkout-for-workspace
  2175. - linux-make-src-cache
  2176. - linux-x64-testing
  2177. - linux-x64-testing-asan
  2178. - linux-x64-testing-no-run-as-node
  2179. - linux-x64-testing-gn-check:
  2180. requires:
  2181. - linux-checkout-for-workspace
  2182. - linux-x64-testing-tests:
  2183. requires:
  2184. - linux-x64-testing
  2185. - linux-x64-testing-asan-tests:
  2186. requires:
  2187. - linux-x64-testing-asan
  2188. - linux-x64-testing-nan:
  2189. requires:
  2190. - linux-x64-testing
  2191. - linux-x64-testing-node:
  2192. requires:
  2193. - linux-x64-testing
  2194. - linux-ia32-testing
  2195. - linux-ia32-testing-tests:
  2196. requires:
  2197. - linux-ia32-testing
  2198. - linux-ia32-testing-nan:
  2199. requires:
  2200. - linux-ia32-testing
  2201. - linux-ia32-testing-node:
  2202. requires:
  2203. - linux-ia32-testing
  2204. - linux-arm-testing
  2205. - linux-arm-testing-tests:
  2206. filters:
  2207. branches:
  2208. # Do not run this on forked pull requests
  2209. ignore: /pull\/[0-9]+/
  2210. requires:
  2211. - linux-arm-testing
  2212. - linux-arm64-testing
  2213. - linux-arm64-testing-tests:
  2214. filters:
  2215. branches:
  2216. # Do not run this on forked pull requests
  2217. ignore: /pull\/[0-9]+/
  2218. requires:
  2219. - linux-arm64-testing
  2220. - linux-arm64-testing-gn-check:
  2221. requires:
  2222. - linux-checkout-for-workspace
  2223. - ts-compile-doc-change
  2224. build-mac:
  2225. when: << pipeline.parameters.run-build-mac >>
  2226. jobs:
  2227. - mac-checkout-for-workspace
  2228. - mac-make-src-cache
  2229. - osx-testing-x64:
  2230. requires:
  2231. - mac-make-src-cache
  2232. - osx-testing-x64-gn-check:
  2233. requires:
  2234. - mac-checkout-for-workspace
  2235. - osx-testing-x64-tests:
  2236. requires:
  2237. - osx-testing-x64
  2238. - osx-testing-arm64:
  2239. requires:
  2240. - mac-make-src-cache
  2241. - osx-testing-arm64-tests:
  2242. filters:
  2243. branches:
  2244. # Do not run this on forked pull requests
  2245. ignore: /pull\/[0-9]+/
  2246. requires:
  2247. - osx-testing-arm64
  2248. - mas-testing-x64:
  2249. requires:
  2250. - mac-make-src-cache
  2251. - mas-testing-x64-gn-check:
  2252. requires:
  2253. - mac-checkout-for-workspace
  2254. - mas-testing-x64-tests:
  2255. requires:
  2256. - mas-testing-x64
  2257. - mas-testing-arm64:
  2258. requires:
  2259. - mac-make-src-cache
  2260. - mas-testing-arm64-tests:
  2261. filters:
  2262. branches:
  2263. # Do not run this on forked pull requests
  2264. ignore: /pull\/[0-9]+/
  2265. requires:
  2266. - mas-testing-arm64
  2267. nightly-linux-release-test:
  2268. triggers:
  2269. - schedule:
  2270. cron: "0 0 * * *"
  2271. filters:
  2272. branches:
  2273. only:
  2274. - master
  2275. jobs:
  2276. - linux-checkout-for-workspace
  2277. - linux-make-src-cache
  2278. - linux-x64-release
  2279. - linux-x64-release-tests:
  2280. requires:
  2281. - linux-x64-release
  2282. - linux-x64-verify-ffmpeg:
  2283. requires:
  2284. - linux-x64-release
  2285. - linux-release-summary:
  2286. name: linux-x64-release-summary
  2287. requires:
  2288. - linux-x64-release
  2289. - linux-x64-release-tests
  2290. - linux-x64-verify-ffmpeg
  2291. - linux-ia32-release
  2292. - linux-ia32-release-tests:
  2293. requires:
  2294. - linux-ia32-release
  2295. - linux-ia32-verify-ffmpeg:
  2296. requires:
  2297. - linux-ia32-release
  2298. - linux-release-summary:
  2299. name: linux-ia32-release-summary
  2300. requires:
  2301. - linux-ia32-release
  2302. - linux-ia32-release-tests
  2303. - linux-ia32-verify-ffmpeg
  2304. - linux-arm-release
  2305. - linux-release-summary:
  2306. name: linux-arm-release-summary
  2307. requires:
  2308. - linux-arm-release
  2309. - linux-arm64-release
  2310. - linux-release-summary:
  2311. name: linux-arm64-release-summary
  2312. requires:
  2313. - linux-arm64-release
  2314. # Various slow and non-essential checks we run only nightly.
  2315. # Sanitizer jobs should be added here.
  2316. linux-checks-nightly:
  2317. triggers:
  2318. - schedule:
  2319. cron: "0 0 * * *"
  2320. filters:
  2321. branches:
  2322. only:
  2323. - master
  2324. jobs:
  2325. - linux-checkout-for-native-tests
  2326. # TODO(alexeykuzmin): Enable it back.
  2327. # Tons of crashes right now, see
  2328. # https://circleci.com/gh/electron/electron/67463
  2329. # - linux-x64-browsertests:
  2330. # requires:
  2331. # - linux-checkout-for-native-tests
  2332. - linux-x64-unittests:
  2333. requires:
  2334. - linux-checkout-for-native-tests
  2335. - linux-x64-disabled-unittests:
  2336. requires:
  2337. - linux-checkout-for-native-tests
  2338. - linux-checkout-for-native-tests-with-no-patches
  2339. - linux-x64-chromium-unittests:
  2340. requires:
  2341. - linux-checkout-for-native-tests-with-no-patches