build.yml 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. name: Package-Build
  2. on: [push, pull_request]
  3. jobs:
  4. Lint:
  5. runs-on: macos-11.0
  6. steps:
  7. - name: Checkout
  8. uses: actions/[email protected]
  9. with:
  10. fetch-depth: 0
  11. - name: Installing Node
  12. uses: actions/[email protected]
  13. with:
  14. node-version: 16
  15. - name: Install deps
  16. run: |
  17. npm i -g [email protected]
  18. cd app
  19. yarn
  20. cd ..
  21. rm app/node_modules/.yarn-integrity
  22. yarn
  23. - name: Build typings
  24. run: yarn run build:typings
  25. - name: Lint
  26. run: yarn run lint
  27. macOS-Build:
  28. runs-on: macos-11.0
  29. needs: Lint
  30. strategy:
  31. matrix:
  32. include:
  33. - arch: x86_64
  34. - arch: arm64
  35. steps:
  36. - name: Checkout
  37. uses: actions/[email protected]
  38. with:
  39. fetch-depth: 0
  40. - name: Installing Node
  41. uses: actions/[email protected]
  42. with:
  43. node-version: 16
  44. - name: Install deps
  45. run: |
  46. sudo npm i -g [email protected]
  47. cd app
  48. yarn
  49. cd ..
  50. rm app/node_modules/.yarn-integrity
  51. yarn
  52. - name: Build native deps
  53. run: scripts/build-native.js
  54. env:
  55. ARCH: ${{matrix.arch}}
  56. - name: Build native deps
  57. run: |
  58. rm -rf app/node_modules/cpu-features
  59. rm -rf app/node_modules/ssh2/crypto/build
  60. if: ${{ matrix.arch == 'arm64' }}
  61. - name: Webpack
  62. run: yarn run build
  63. - name: Prepackage plugins
  64. run: scripts/prepackage-plugins.js
  65. env:
  66. ARCH: ${{matrix.arch}}
  67. - run: sed -i '' 's/updateInfo = await/\/\/updateInfo = await/g' node_modules/app-builder-lib/out/targets/ArchiveTarget.js
  68. - name: Build and sign packages
  69. run: scripts/build-macos.js
  70. if: github.repository == 'Eugeny/tabby' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags'))
  71. env:
  72. ARCH: ${{matrix.arch}}
  73. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  74. CSC_LINK: ${{ secrets.CSC_LINK }}
  75. CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
  76. APPSTORE_USERNAME: ${{ secrets.APPSTORE_USERNAME }}
  77. APPSTORE_PASSWORD: ${{ secrets.APPSTORE_PASSWORD }}
  78. USE_HARD_LINKS: false
  79. # DEBUG: electron-builder,electron-builder:*
  80. - name: Build packages without signing
  81. run: scripts/build-macos.js
  82. if: "! (github.repository == 'Eugeny/tabby' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags')))"
  83. env:
  84. ARCH: ${{matrix.arch}}
  85. # DEBUG: electron-builder,electron-builder:*
  86. - name: Upload symbols
  87. run: |
  88. sudo npm install -g @sentry/cli --unsafe-perm
  89. ./scripts/sentry-upload.js
  90. env:
  91. SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
  92. SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
  93. SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}
  94. - name: Package artifacts
  95. run: |
  96. mkdir artifact-pkg
  97. mv dist/*.pkg artifact-pkg/
  98. mkdir artifact-zip
  99. mv dist/*.zip artifact-zip/
  100. - uses: actions/upload-artifact@master
  101. name: Upload PKG
  102. with:
  103. name: macOS .pkg (${{matrix.arch}})
  104. path: artifact-pkg
  105. - uses: actions/upload-artifact@master
  106. name: Upload ZIP
  107. with:
  108. name: macOS .zip (${{matrix.arch}})
  109. path: artifact-zip
  110. Linux-Build:
  111. runs-on: ubuntu-18.04 # build against an older glibc for compatibility
  112. needs: Lint
  113. steps:
  114. - name: Checkout
  115. uses: actions/[email protected]
  116. with:
  117. fetch-depth: 0
  118. - name: Install Node
  119. uses: actions/[email protected]
  120. with:
  121. node-version: 16
  122. - name: Install deps
  123. run: |
  124. sudo apt-get update
  125. sudo apt-get install libarchive-tools zsh
  126. npm i -g [email protected]
  127. cd app
  128. yarn
  129. cd ..
  130. rm app/node_modules/.yarn-integrity
  131. yarn
  132. - name: Build native deps
  133. run: scripts/build-native.js
  134. - name: Webpack
  135. run: yarn run build
  136. - name: Prepackage plugins
  137. run: scripts/prepackage-plugins.js
  138. - name: Build packages
  139. run: scripts/build-linux.js
  140. env:
  141. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  142. USE_HARD_LINKS: false
  143. # DEBUG: electron-builder,electron-builder:*
  144. - name: Build web resources
  145. run: zsh -c 'tar czf tabby-web.tar.gz (tabby-*|web)/dist'
  146. - name: Upload symbols
  147. run: |
  148. sudo npm install -g @sentry/cli --unsafe-perm
  149. ./scripts/sentry-upload.js
  150. env:
  151. SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
  152. SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
  153. SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}
  154. - name: Upload packages to packagecloud.io
  155. uses: Eugeny/packagecloud-action@main
  156. if: github.repository == 'Eugeny/tabby' && github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
  157. env:
  158. PACKAGECLOUD_TOKEN: ${{ secrets.PACKAGECLOUD_TOKEN }}
  159. with:
  160. repo: 'eugeny/tabby'
  161. dir: 'dist'
  162. - name: Package artifacts
  163. run: |
  164. mkdir artifact-deb
  165. mv dist/*.deb artifact-deb/ || true
  166. mkdir artifact-rpm
  167. mv dist/*.rpm artifact-rpm/ || true
  168. mkdir artifact-pacman
  169. mv dist/*.pacman artifact-pacman/ || true
  170. mkdir artifact-snap
  171. mv dist/*.snap artifact-snap/ || true
  172. mkdir artifact-tar.gz
  173. mv dist/*.tar.gz artifact-tar.gz/ || true
  174. mkdir artifact-web
  175. mv tabby-web.tar.gz artifact-web/ || true
  176. - uses: actions/upload-artifact@master
  177. name: Upload DEB
  178. with:
  179. name: Linux DEB
  180. path: artifact-deb
  181. - uses: actions/upload-artifact@master
  182. name: Upload RPM
  183. with:
  184. name: Linux RPM
  185. path: artifact-rpm
  186. - uses: actions/upload-artifact@master
  187. name: Upload Pacman Package
  188. with:
  189. name: Linux Pacman
  190. path: artifact-pacman
  191. - uses: actions/upload-artifact@master
  192. name: Upload Snap
  193. with:
  194. name: Linux Snap
  195. path: artifact-snap
  196. - uses: actions/upload-artifact@master
  197. name: Upload Linux tarball
  198. with:
  199. name: Linux tarball
  200. path: artifact-tar.gz
  201. - uses: actions/upload-artifact@master
  202. name: Upload web tarball
  203. with:
  204. name: Web tarball
  205. path: artifact-web
  206. Windows-Build:
  207. runs-on: windows-2022
  208. needs: Lint
  209. steps:
  210. - name: Checkout
  211. uses: actions/[email protected]
  212. with:
  213. fetch-depth: 0
  214. - name: Installing Node
  215. uses: actions/[email protected]
  216. with:
  217. node-version: 16
  218. - name: Update node-gyp
  219. run: |
  220. npm install --global [email protected]
  221. npm prefix -g | % {npm config set node_gyp "$_\node_modules\node-gyp\bin\node-gyp.js"}
  222. - name: Build
  223. shell: powershell
  224. run: |
  225. npm i -g [email protected]
  226. yarn
  227. node scripts/build-native.js
  228. yarn run build
  229. node scripts/prepackage-plugins.js
  230. - name: Build and sign packages
  231. run: node scripts/build-windows.js
  232. if: github.repository == 'Eugeny/tabby' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags'))
  233. env:
  234. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  235. WIN_CSC_LINK: ${{ secrets.WIN_CSC_LINK }}
  236. WIN_CSC_KEY_PASSWORD: ${{ secrets.WIN_CSC_KEY_PASSWORD }}
  237. DEBUG: electron-builder,electron-builder:*
  238. - name: Build packages without signing
  239. run: node scripts/build-windows.js
  240. if: "!(github.repository == 'Eugeny/tabby' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags')))"
  241. - name: Upload symbols
  242. run: |
  243. npm install @sentry/cli
  244. node scripts/sentry-upload.js
  245. env:
  246. SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
  247. SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
  248. SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}
  249. - name: Package artifacts
  250. run: |
  251. mkdir artifact-setup
  252. mv dist/*-setup.exe artifact-setup/
  253. mkdir artifact-portable
  254. mv dist/*-portable.zip artifact-portable/
  255. - uses: actions/upload-artifact@master
  256. name: Upload installer
  257. with:
  258. name: Windows installer
  259. path: artifact-setup
  260. - uses: actions/upload-artifact@master
  261. name: Upload portable build
  262. with:
  263. name: Windows portable build
  264. path: artifact-portable