base.yml 77 KB

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