config.yml 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. build-steps: &build-steps
  2. steps:
  3. - run:
  4. name: Fix Known Hosts on Linux
  5. command: |
  6. if [ "`uname`" == "Linux" ]; then
  7. /home/builduser/fix-known-hosts.sh
  8. fi
  9. - checkout
  10. - run:
  11. name: Install Node.js 10 on MacOS
  12. command: |
  13. if [ "$INSTALL_MACOS_NODE" == "true" ]; then
  14. echo 'Installing Node.js 10 for MacOS'
  15. brew update
  16. brew install node@10
  17. echo 'export PATH="/usr/local/opt/node@10/bin:$PATH"' >> $BASH_ENV
  18. fi
  19. - run:
  20. name: Check for release
  21. command: |
  22. if [ -n "${RUN_RELEASE_BUILD}" ]; then
  23. echo 'release build triggered from api'
  24. echo 'export ELECTRON_RELEASE=1 UPLOAD_TO_S3=1' >> $BASH_ENV
  25. fi
  26. - run:
  27. name: Bootstrap
  28. command: |
  29. if [ "$ELECTRON_RELEASE" == "1" ]; then
  30. echo "Bootstrapping Electron for release build for $TARGET_ARCH"
  31. script/bootstrap.py --target_arch=$TARGET_ARCH
  32. else
  33. echo "Bootstrapping Electron for debug build for $TARGET_ARCH"
  34. script/bootstrap.py --target_arch=$TARGET_ARCH --dev
  35. fi
  36. - run:
  37. name: Lint
  38. command: npm run lint
  39. - run:
  40. name: Build
  41. command: |
  42. if [ "$ELECTRON_RELEASE" == "1" ]; then
  43. echo 'Building Electron for release'
  44. script/build.py -c R
  45. else
  46. echo 'Building Electron for debug'
  47. script/build.py -c D
  48. fi
  49. - run:
  50. name: Create distribution
  51. command: |
  52. if [ "$ELECTRON_RELEASE" == "1" ]; then
  53. echo 'Creating Electron release distribution'
  54. script/create-dist.py
  55. else
  56. echo 'Skipping create distribution because build is not for release'
  57. fi
  58. - run:
  59. name: Upload distribution
  60. command: |
  61. if [ "$ELECTRON_RELEASE" == "1" ] && [ "$UPLOAD_TO_S3" != "1" ]; then
  62. echo 'Uploading Electron release distribution to github releases'
  63. script/upload.py
  64. elif [ "$ELECTRON_RELEASE" == "1" ] && [ "$UPLOAD_TO_S3" == "1" ]; then
  65. echo 'Uploading Electron release distribution to s3'
  66. script/upload.py --upload_to_s3
  67. else
  68. echo 'Skipping upload distribution because build is not for release'
  69. fi
  70. - run:
  71. name: Setup for headless testing
  72. command: |
  73. if [ "$RUN_HEADLESS_TESTS" == "true" ]; then
  74. echo 'Setup for headless testing'
  75. sh -e /etc/init.d/xvfb start
  76. else
  77. echo 'Headless testing not needed'
  78. fi
  79. - run:
  80. name: Verify mksnapshot
  81. command: |
  82. if [ "$RUN_TESTS" == "true" ] && [ "$ELECTRON_RELEASE" == "1" ]; then
  83. echo 'Verifying mksnapshot on release build'
  84. script/verify-mksnapshot.py
  85. else
  86. echo 'Skipping mksnapshot tests due to configuration'
  87. fi
  88. - run:
  89. name: Test
  90. environment:
  91. MOCHA_FILE: junit/test-results.xml
  92. MOCHA_REPORTER: mocha-junit-reporter
  93. command: |
  94. if [ "$RUN_TESTS" == "true" ]; then
  95. if [ "$ELECTRON_RELEASE" != "1" ]; then
  96. echo 'Testing Electron debug build'
  97. mkdir junit
  98. script/test.py --ci --rebuild_native_modules
  99. else
  100. if [ "$UPLOAD_TO_S3" == "1" ]; then
  101. echo 'Testing Electron release build'
  102. mkdir junit
  103. script/test.py --ci --rebuild_native_modules -c R
  104. else
  105. echo 'Skipping tests on GitHub release'
  106. fi
  107. fi
  108. else
  109. echo 'Skipping tests due to configuration'
  110. fi
  111. - run:
  112. name: Verify FFmpeg
  113. command: |
  114. if [ "$RUN_TESTS" == "true" ]; then
  115. if [ "$ELECTRON_RELEASE" != "1" ]; then
  116. echo 'Verifying ffmpeg on debug build'
  117. script/verify-ffmpeg.py
  118. else
  119. echo 'Verifying ffmpeg on release build'
  120. script/verify-ffmpeg.py -R
  121. fi
  122. else
  123. echo 'Skipping tests due to configuration'
  124. fi
  125. - run:
  126. name: Generate Typescript Definitions
  127. command: |
  128. if [ "$CREATE_TYPESCRIPT_DEFS" == "true" ]; then
  129. npm run create-typescript-definitions
  130. fi
  131. - persist_to_workspace:
  132. root: out
  133. paths:
  134. - "*"
  135. - store_test_results:
  136. path: junit
  137. - store_artifacts:
  138. path: junit
  139. - store_artifacts:
  140. path: out
  141. build-defaults: &build-defaults
  142. docker:
  143. - image: electronbuilds/electron:0.0.8.1
  144. <<: *build-steps
  145. version: 2
  146. jobs:
  147. electron-linux-arm:
  148. environment:
  149. TARGET_ARCH: arm
  150. <<: *build-defaults
  151. resource_class: 2xlarge
  152. electron-linux-arm-test:
  153. machine: true
  154. steps:
  155. - attach_workspace:
  156. at: /tmp/workspace/project/out
  157. - checkout
  158. - run:
  159. name: Test in ARM docker container
  160. command: |
  161. if [ "$ELECTRON_RELEASE" != "1" ]; then
  162. docker run --rm --privileged multiarch/qemu-user-static:register --reset
  163. docker run -it \
  164. --mount type=bind,source=/tmp/workspace,target=/tmp/workspace \
  165. --rm electronbuilds/electronarm7:0.0.5 > version.txt
  166. cat version.txt
  167. if grep -q `script/get-version.py` version.txt; then
  168. echo "Versions match"
  169. else
  170. echo "Versions do not match"
  171. exit 1
  172. fi
  173. else
  174. echo "Skipping test for release build"
  175. fi
  176. electron-linux-arm-release-nightly:
  177. environment:
  178. TARGET_ARCH: arm
  179. RUN_RELEASE_BUILD: true
  180. <<: *build-defaults
  181. resource_class: 2xlarge
  182. electron-linux-arm64:
  183. environment:
  184. TARGET_ARCH: arm64
  185. <<: *build-defaults
  186. resource_class: 2xlarge
  187. electron-linux-arm64-test:
  188. machine: true
  189. steps:
  190. - attach_workspace:
  191. at: /tmp/workspace/project/out
  192. - checkout
  193. - run:
  194. name: Test in ARM64 docker container
  195. command: |
  196. if [ "$ELECTRON_RELEASE" != "1" ]; then
  197. docker run --rm --privileged multiarch/qemu-user-static:register --reset
  198. docker run -it \
  199. --mount type=bind,source=/tmp/workspace,target=/tmp/workspace \
  200. --rm electronbuilds/electronarm64:0.0.6 > version.txt
  201. cat version.txt
  202. if grep -q `script/get-version.py` version.txt; then
  203. echo "Versions match"
  204. else
  205. echo "Versions do not match"
  206. exit 1
  207. fi
  208. else
  209. echo "Skipping test for release build"
  210. fi
  211. electron-linux-arm64-release-nightly:
  212. environment:
  213. TARGET_ARCH: arm64
  214. RUN_RELEASE_BUILD: true
  215. <<: *build-defaults
  216. resource_class: 2xlarge
  217. electron-linux-ia32:
  218. environment:
  219. TARGET_ARCH: ia32
  220. DISPLAY: ':99.0'
  221. RUN_TESTS: true
  222. RUN_HEADLESS_TESTS: true
  223. <<: *build-defaults
  224. resource_class: xlarge
  225. electron-linux-ia32-release-nightly:
  226. environment:
  227. TARGET_ARCH: ia32
  228. RUN_RELEASE_BUILD: true
  229. <<: *build-defaults
  230. resource_class: xlarge
  231. electron-linux-mips64el:
  232. environment:
  233. TARGET_ARCH: mips64el
  234. <<: *build-defaults
  235. resource_class: xlarge
  236. electron-linux-x64:
  237. environment:
  238. TARGET_ARCH: x64
  239. DISPLAY: ':99.0'
  240. RUN_TESTS: true
  241. RUN_HEADLESS_TESTS: true
  242. CREATE_TYPESCRIPT_DEFS: true
  243. <<: *build-defaults
  244. resource_class: xlarge
  245. electron-linux-x64-release-nightly:
  246. environment:
  247. TARGET_ARCH: x64
  248. RUN_RELEASE_BUILD: true
  249. <<: *build-defaults
  250. resource_class: xlarge
  251. electron-osx-x64:
  252. environment:
  253. TARGET_ARCH: x64
  254. RUN_TESTS: true
  255. INSTALL_MACOS_NODE: true
  256. resource_class: large
  257. macos:
  258. xcode: "8.3.3"
  259. <<: *build-steps
  260. electron-osx-x64-release-nightly:
  261. environment:
  262. TARGET_ARCH: x64
  263. RUN_RELEASE_BUILD: true
  264. INSTALL_MACOS_NODE: true
  265. resource_class: large
  266. macos:
  267. xcode: "8.3.3"
  268. <<: *build-steps
  269. electron-mas-x64:
  270. environment:
  271. TARGET_ARCH: x64
  272. MAS_BUILD: 1
  273. RUN_TESTS: true
  274. INSTALL_MACOS_NODE: true
  275. resource_class: large
  276. macos:
  277. xcode: "8.3.3"
  278. <<: *build-steps
  279. electron-mas-x64-release-nightly:
  280. environment:
  281. TARGET_ARCH: x64
  282. MAS_BUILD: 1
  283. RUN_RELEASE_BUILD: true
  284. INSTALL_MACOS_NODE: true
  285. resource_class: large
  286. macos:
  287. xcode: "8.3.3"
  288. <<: *build-steps
  289. workflows:
  290. version: 2
  291. build-arm:
  292. jobs:
  293. - electron-linux-arm
  294. - electron-linux-arm-test:
  295. requires:
  296. - electron-linux-arm
  297. build-arm64:
  298. jobs:
  299. - electron-linux-arm64
  300. - electron-linux-arm64-test:
  301. requires:
  302. - electron-linux-arm64
  303. build-ia32:
  304. jobs:
  305. - electron-linux-ia32
  306. build-x64:
  307. jobs:
  308. - electron-linux-x64
  309. build-osx-x64:
  310. jobs:
  311. - electron-osx-x64
  312. build-mas-x64:
  313. jobs:
  314. - electron-mas-x64
  315. nightly-release-test:
  316. triggers:
  317. - schedule:
  318. cron: "0 0 * * *"
  319. filters:
  320. branches:
  321. only:
  322. - master
  323. - 2-0-x
  324. - 1-8-x
  325. - 1-7-x
  326. jobs:
  327. - electron-linux-arm-release-nightly
  328. - electron-linux-arm64-release-nightly
  329. - electron-linux-ia32-release-nightly
  330. - electron-linux-x64-release-nightly
  331. experimental:
  332. notify:
  333. branches:
  334. only:
  335. - master
  336. - 2-0-x
  337. - 1-8-x
  338. - 1-7-x