config.yml 88 KB

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