build.yml 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384
  1. name: Build
  2. on:
  3. workflow_dispatch:
  4. inputs:
  5. build-image-sha:
  6. type: string
  7. description: 'SHA for electron/build image'
  8. default: 'bc2f48b2415a670de18d13605b1cf0eb5fdbaae1'
  9. required: true
  10. skip-macos:
  11. type: boolean
  12. description: 'Skip macOS builds'
  13. default: false
  14. required: false
  15. skip-linux:
  16. type: boolean
  17. description: 'Skip Linux builds'
  18. default: false
  19. required: false
  20. skip-windows:
  21. type: boolean
  22. description: 'Skip Windows builds'
  23. default: false
  24. required: false
  25. skip-lint:
  26. type: boolean
  27. description: 'Skip lint check'
  28. default: false
  29. required: false
  30. push:
  31. branches:
  32. - main
  33. - '[1-9][0-9]-x-y'
  34. pull_request:
  35. defaults:
  36. run:
  37. shell: bash
  38. jobs:
  39. setup:
  40. runs-on: ubuntu-latest
  41. permissions:
  42. pull-requests: read
  43. outputs:
  44. docs: ${{ steps.filter.outputs.docs }}
  45. src: ${{ steps.filter.outputs.src }}
  46. build-image-sha: ${{ steps.set-output.outputs.build-image-sha }}
  47. docs-only: ${{ steps.set-output.outputs.docs-only }}
  48. steps:
  49. - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.0.2
  50. with:
  51. ref: ${{ github.event.pull_request.head.sha }}
  52. - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
  53. id: filter
  54. with:
  55. filters: |
  56. docs:
  57. - 'docs/**'
  58. src:
  59. - '!docs/**'
  60. - name: Set Outputs for Build Image SHA & Docs Only
  61. id: set-output
  62. run: |
  63. if [ -z "${{ inputs.build-image-sha }}" ]; then
  64. echo "build-image-sha=bc2f48b2415a670de18d13605b1cf0eb5fdbaae1" >> "$GITHUB_OUTPUT"
  65. else
  66. echo "build-image-sha=${{ inputs.build-image-sha }}" >> "$GITHUB_OUTPUT"
  67. fi
  68. echo "docs-only=${{ steps.filter.outputs.docs == 'true' && steps.filter.outputs.src == 'false' }}" >> "$GITHUB_OUTPUT"
  69. # Lint Jobs
  70. lint:
  71. needs: setup
  72. if: ${{ !inputs.skip-lint }}
  73. uses: ./.github/workflows/pipeline-electron-lint.yml
  74. with:
  75. container: '{"image":"ghcr.io/electron/build:${{ needs.setup.outputs.build-image-sha }}","options":"--user root"}'
  76. secrets: inherit
  77. # Docs Only Jobs
  78. docs-only:
  79. needs: setup
  80. if: ${{ needs.setup.outputs.docs-only == 'true' }}
  81. uses: ./.github/workflows/pipeline-electron-docs-only.yml
  82. with:
  83. container: '{"image":"ghcr.io/electron/build:${{ needs.setup.outputs.build-image-sha }}","options":"--user root"}'
  84. secrets: inherit
  85. # Checkout Jobs
  86. checkout-macos:
  87. needs: setup
  88. if: ${{ needs.setup.outputs.src == 'true' && !inputs.skip-macos}}
  89. runs-on: electron-arc-linux-amd64-32core
  90. container:
  91. image: ghcr.io/electron/build:${{ needs.setup.outputs.build-image-sha }}
  92. options: --user root
  93. volumes:
  94. - /mnt/cross-instance-cache:/mnt/cross-instance-cache
  95. - /var/run/sas:/var/run/sas
  96. env:
  97. GCLIENT_EXTRA_ARGS: '--custom-var=checkout_mac=True --custom-var=host_os=mac'
  98. outputs:
  99. build-image-sha: ${{ needs.setup.outputs.build-image-sha }}
  100. steps:
  101. - name: Checkout Electron
  102. uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
  103. with:
  104. path: src/electron
  105. fetch-depth: 0
  106. ref: ${{ github.event.pull_request.head.sha }}
  107. - name: Checkout & Sync & Save
  108. uses: ./src/electron/.github/actions/checkout
  109. with:
  110. generate-sas-token: 'true'
  111. checkout-linux:
  112. needs: setup
  113. if: ${{ needs.setup.outputs.src == 'true' && !inputs.skip-linux}}
  114. runs-on: electron-arc-linux-amd64-32core
  115. container:
  116. image: ghcr.io/electron/build:${{ needs.setup.outputs.build-image-sha }}
  117. options: --user root
  118. volumes:
  119. - /mnt/cross-instance-cache:/mnt/cross-instance-cache
  120. - /var/run/sas:/var/run/sas
  121. env:
  122. GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
  123. PATCH_UP_APP_CREDS: ${{ secrets.PATCH_UP_APP_CREDS }}
  124. outputs:
  125. build-image-sha: ${{ needs.setup.outputs.build-image-sha}}
  126. steps:
  127. - name: Checkout Electron
  128. uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
  129. with:
  130. path: src/electron
  131. fetch-depth: 0
  132. ref: ${{ github.event.pull_request.head.sha }}
  133. - name: Checkout & Sync & Save
  134. uses: ./src/electron/.github/actions/checkout
  135. checkout-windows:
  136. needs: setup
  137. if: ${{ needs.setup.outputs.src == 'true' && !inputs.skip-windows }}
  138. runs-on: electron-arc-linux-amd64-32core
  139. container:
  140. image: ghcr.io/electron/build:${{ needs.setup.outputs.build-image-sha }}
  141. options: --user root --device /dev/fuse --cap-add SYS_ADMIN
  142. volumes:
  143. - /mnt/cross-instance-cache:/mnt/cross-instance-cache
  144. env:
  145. GCLIENT_EXTRA_ARGS: '--custom-var=checkout_win=True'
  146. TARGET_OS: 'win'
  147. ELECTRON_DEPOT_TOOLS_WIN_TOOLCHAIN: '1'
  148. outputs:
  149. build-image-sha: ${{ needs.setup.outputs.build-image-sha}}
  150. steps:
  151. - name: Checkout Electron
  152. uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
  153. with:
  154. path: src/electron
  155. fetch-depth: 0
  156. ref: ${{ github.event.pull_request.head.sha }}
  157. - name: Checkout & Sync & Save
  158. uses: ./src/electron/.github/actions/checkout
  159. # GN Check Jobs
  160. macos-gn-check:
  161. uses: ./.github/workflows/pipeline-segment-electron-gn-check.yml
  162. needs: checkout-macos
  163. with:
  164. target-platform: macos
  165. target-archs: x64 arm64
  166. check-runs-on: macos-14
  167. gn-build-type: testing
  168. secrets: inherit
  169. linux-gn-check:
  170. uses: ./.github/workflows/pipeline-segment-electron-gn-check.yml
  171. needs: checkout-linux
  172. with:
  173. target-platform: linux
  174. target-archs: x64 arm arm64
  175. check-runs-on: electron-arc-linux-amd64-8core
  176. check-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root","volumes":["/mnt/cross-instance-cache:/mnt/cross-instance-cache"]}'
  177. gn-build-type: testing
  178. secrets: inherit
  179. windows-gn-check:
  180. uses: ./.github/workflows/pipeline-segment-electron-gn-check.yml
  181. needs: checkout-windows
  182. with:
  183. target-platform: win
  184. target-archs: x64 x86 arm64
  185. check-runs-on: electron-arc-linux-amd64-8core
  186. check-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-windows.outputs.build-image-sha }}","options":"--user root --device /dev/fuse --cap-add SYS_ADMIN","volumes":["/mnt/cross-instance-cache:/mnt/cross-instance-cache"]}'
  187. gn-build-type: testing
  188. secrets: inherit
  189. # Build Jobs - These cascade into testing jobs
  190. macos-x64:
  191. permissions:
  192. contents: read
  193. issues: read
  194. pull-requests: read
  195. uses: ./.github/workflows/pipeline-electron-build-and-test.yml
  196. needs: checkout-macos
  197. with:
  198. build-runs-on: macos-14-xlarge
  199. test-runs-on: macos-13
  200. target-platform: macos
  201. target-arch: x64
  202. is-release: false
  203. gn-build-type: testing
  204. generate-symbols: false
  205. upload-to-storage: '0'
  206. secrets: inherit
  207. macos-arm64:
  208. permissions:
  209. contents: read
  210. issues: read
  211. pull-requests: read
  212. uses: ./.github/workflows/pipeline-electron-build-and-test.yml
  213. needs: checkout-macos
  214. with:
  215. build-runs-on: macos-14-xlarge
  216. test-runs-on: macos-14
  217. target-platform: macos
  218. target-arch: arm64
  219. is-release: false
  220. gn-build-type: testing
  221. generate-symbols: false
  222. upload-to-storage: '0'
  223. secrets: inherit
  224. linux-x64:
  225. permissions:
  226. contents: read
  227. issues: read
  228. pull-requests: read
  229. uses: ./.github/workflows/pipeline-electron-build-and-test-and-nan.yml
  230. needs: checkout-linux
  231. with:
  232. build-runs-on: electron-arc-linux-amd64-32core
  233. test-runs-on: electron-arc-linux-amd64-4core
  234. build-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root","volumes":["/mnt/cross-instance-cache:/mnt/cross-instance-cache"]}'
  235. test-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root --privileged --init"}'
  236. target-platform: linux
  237. target-arch: x64
  238. is-release: false
  239. gn-build-type: testing
  240. generate-symbols: false
  241. upload-to-storage: '0'
  242. secrets: inherit
  243. linux-x64-asan:
  244. permissions:
  245. contents: read
  246. issues: read
  247. pull-requests: read
  248. uses: ./.github/workflows/pipeline-electron-build-and-test.yml
  249. needs: checkout-linux
  250. with:
  251. build-runs-on: electron-arc-linux-amd64-32core
  252. test-runs-on: electron-arc-linux-amd64-4core
  253. build-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root","volumes":["/mnt/cross-instance-cache:/mnt/cross-instance-cache"]}'
  254. test-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root --privileged --init"}'
  255. target-platform: linux
  256. target-arch: x64
  257. is-release: false
  258. gn-build-type: testing
  259. generate-symbols: false
  260. upload-to-storage: '0'
  261. is-asan: true
  262. secrets: inherit
  263. linux-arm:
  264. permissions:
  265. contents: read
  266. issues: read
  267. pull-requests: read
  268. uses: ./.github/workflows/pipeline-electron-build-and-test.yml
  269. needs: checkout-linux
  270. with:
  271. build-runs-on: electron-arc-linux-amd64-32core
  272. test-runs-on: electron-arc-linux-arm64-4core
  273. build-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root","volumes":["/mnt/cross-instance-cache:/mnt/cross-instance-cache"]}'
  274. test-container: '{"image":"ghcr.io/electron/test:arm32v7-${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root --privileged --init","volumes":["/home/runner/externals:/mnt/runner-externals"]}'
  275. target-platform: linux
  276. target-arch: arm
  277. is-release: false
  278. gn-build-type: testing
  279. generate-symbols: false
  280. upload-to-storage: '0'
  281. secrets: inherit
  282. linux-arm64:
  283. permissions:
  284. contents: read
  285. issues: read
  286. pull-requests: read
  287. uses: ./.github/workflows/pipeline-electron-build-and-test.yml
  288. needs: checkout-linux
  289. with:
  290. build-runs-on: electron-arc-linux-amd64-32core
  291. test-runs-on: electron-arc-linux-arm64-4core
  292. build-container: '{"image":"ghcr.io/electron/build:${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root","volumes":["/mnt/cross-instance-cache:/mnt/cross-instance-cache"]}'
  293. test-container: '{"image":"ghcr.io/electron/test:arm64v8-${{ needs.checkout-linux.outputs.build-image-sha }}","options":"--user root --privileged --init"}'
  294. target-platform: linux
  295. target-arch: arm64
  296. is-release: false
  297. gn-build-type: testing
  298. generate-symbols: false
  299. upload-to-storage: '0'
  300. secrets: inherit
  301. windows-x64:
  302. permissions:
  303. contents: read
  304. issues: read
  305. pull-requests: read
  306. uses: ./.github/workflows/pipeline-electron-build-and-test.yml
  307. needs: setup
  308. if: ${{ needs.setup.outputs.src == 'true' && !inputs.skip-windows }}
  309. with:
  310. build-runs-on: electron-arc-windows-amd64-16core
  311. test-runs-on: windows-latest
  312. target-platform: win
  313. target-arch: x64
  314. is-release: false
  315. gn-build-type: testing
  316. generate-symbols: false
  317. upload-to-storage: '0'
  318. secrets: inherit
  319. windows-x86:
  320. permissions:
  321. contents: read
  322. issues: read
  323. pull-requests: read
  324. uses: ./.github/workflows/pipeline-electron-build-and-test.yml
  325. needs: setup
  326. if: ${{ needs.setup.outputs.src == 'true' && !inputs.skip-windows }}
  327. with:
  328. build-runs-on: electron-arc-windows-amd64-16core
  329. test-runs-on: windows-latest
  330. target-platform: win
  331. target-arch: x86
  332. is-release: false
  333. gn-build-type: testing
  334. generate-symbols: false
  335. upload-to-storage: '0'
  336. secrets: inherit
  337. windows-arm64:
  338. permissions:
  339. contents: read
  340. issues: read
  341. pull-requests: read
  342. uses: ./.github/workflows/pipeline-electron-build-and-test.yml
  343. needs: setup
  344. if: ${{ needs.setup.outputs.src == 'true' && !inputs.skip-windows }}
  345. with:
  346. build-runs-on: electron-arc-windows-amd64-16core
  347. test-runs-on: electron-hosted-windows-arm64-4core
  348. target-platform: win
  349. target-arch: arm64
  350. is-release: false
  351. gn-build-type: testing
  352. generate-symbols: false
  353. upload-to-storage: '0'
  354. secrets: inherit
  355. gha-done:
  356. name: GitHub Actions Completed
  357. runs-on: ubuntu-latest
  358. needs: [docs-only, macos-x64, macos-arm64, linux-x64, linux-x64-asan, linux-arm, linux-arm64, windows-x64, windows-x86, windows-arm64]
  359. if: always() && !contains(needs.*.result, 'failure')
  360. steps:
  361. - name: GitHub Actions Jobs Done
  362. run: |
  363. echo "All GitHub Actions Jobs are done"