edex-ui/.github/workflows/build-binaries.yaml
Gaby 6934283068
fix(ci): correctly build arm64v8 and armv7l/arm32v7 binaries using QEMU machine emulation - close #1051 (#1090)
* test: build armv7l and arm64v8 binaries using QEMU emulation #1051

* fix: use a 3-opts matrix for qemu emul buils, fix typo

* chore: remove leftover -qemu ci jobs

* fix: ci linux qemu cross-build: prevent unexpected crossbuilds

* feat: ci: disable fail-fast

* test: ci: specify electron-builder opts right in workflow file

* test: use arm64 ubuntu container on Actions

* test

* test2

* test2

* test2

* test2

* test3

* test4

* refactor: move arm64 builds to separate job

* fix typo

* fix: docker image name cannot be set with matrix otps

* fix missing rsync binary in arm64 node image

* fix missing rsync binary in arm64 node image

* fix missing rsync binary in arm64 node image

* perf: speed up arm64 qemu builds

* remove broken arm32v7 pipeline

* fix npm permissions errors on arm64

* do not restore incorrect caches

* rename linux-arm64 artifact to prevent conflicts

* test: re-enable qemu arm7 platform support

* fix ci job name typo

* cleanup workflow file

* disable broken apple silicon builds
2021-03-17 17:59:24 +01:00

206 lines
6.8 KiB
YAML

name: Build packaged binaries
on: [push, pull_request, create]
jobs:
build-linux:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Cache node modules
uses: actions/cache@v2
env:
cache-name: cache-node-modules
with:
# npm cache files are stored in `~/.npm` on Linux/macOS
path: ~/.npm
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
- name: Cache Electron binaries
uses: actions/cache@v2
env:
cache-name: cache-electron-bins
with:
# cache location is described here:
# https://github.com/electron/get#how-it-works
path: ~/.cache/electron
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
- name: Install system dependencies for x64->x32 cross-build
run: |
sudo apt update
sudo apt install libc6-dev-i386 gcc-multilib g++-multilib
- name: Setup Node.js
uses: actions/setup-node@v1
with:
node-version: 14
- name: Setup npm
run: sudo npm i -g npm@7
- name: Install build deps
run: npm install
- name: Run prebuild script
run: npm run prebuild-linux
- name: Build for x64 / ia32
run: ./node_modules/.bin/electron-builder build -l --x64 --ia32
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/upload-artifact@v2
with:
name: Linux-AppImages
path: dist/*.AppImage
if-no-files-found: error
build-linux-arm32:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup QEMU
uses: docker/setup-qemu-action@v1
with:
platforms: arm
- name: Cache node modules
uses: actions/cache@v2
env:
cache-name: cache-node-modules
with:
# npm cache files are stored in `~/.npm` on Linux/macOS
path: ~/.npm
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
- name: Cache Electron binaries
uses: actions/cache@v2
env:
cache-name: cache-electron-bins
with:
# cache location is described here:
# https://github.com/electron/get#how-it-works
path: ~/.cache/electron
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
- name: Run prebuild outside of QEMU emulator
run: sudo npm i -g npm@7 && npm install && rsync -a --info=progress2 src/ prebuild-src --exclude node_modules && node prebuild-minify.js && rm -rf node_modules
- name: Build for arm32v7 (aka armv7l)
uses: docker://arm32v7/node:14-buster
with:
args: bash -c "npm i -g npm@7 && npm install && ./node_modules/.bin/electron-builder build -l --armv7l"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/upload-artifact@v2
with:
name: Linux-arm32-AppImage
path: dist/*.AppImage
if-no-files-found: error
build-linux-arm64:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup QEMU
uses: docker/setup-qemu-action@v1
with:
platforms: arm64
- name: Cache node modules
uses: actions/cache@v2
env:
cache-name: cache-node-modules
with:
# npm cache files are stored in `~/.npm` on Linux/macOS
path: ~/.npm
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
- name: Cache Electron binaries
uses: actions/cache@v2
env:
cache-name: cache-electron-bins
with:
# cache location is described here:
# https://github.com/electron/get#how-it-works
path: ~/.cache/electron
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
- name: Run prebuild outside of QEMU emulator
run: sudo npm i -g npm@7 && npm install && rsync -a --info=progress2 src/ prebuild-src --exclude node_modules && node prebuild-minify.js && rm -rf node_modules
- name: Build for arm64 (aka arm64v8)
uses: docker://arm64v8/node:14-buster
with:
args: bash -c "npm i -g npm@7 && npm install && ./node_modules/.bin/electron-builder build -l --arm64"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/upload-artifact@v2
with:
name: Linux-arm64-AppImage
path: dist/*.AppImage
if-no-files-found: error
build-windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@v1
- name: Get npm cache directory
id: npm-cache
run: |
echo "::set-output name=dir::$(npm config get cache)"
- uses: actions/cache@v2
with:
path: ${{ steps.npm-cache.outputs.dir }}
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
- name: Cache Electron binaries
uses: actions/cache@v2
env:
cache-name: cache-electron-bins
with:
# cache location is described here:
# https://github.com/electron/get#how-it-works
path: ~/AppData/Local/electron/Cache
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
- name: Setup Node.js
uses: actions/setup-node@v1
with:
node-version: 14
- name: Setup npm
run: npm i -g npm@7
- name: npm install
run: npm install
- name: npm build
run: npm run build-windows
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/upload-artifact@v2
with:
name: Windows-Installer
path: dist/*.exe
if-no-files-found: error
build-darwin:
runs-on: macos-latest
steps:
- uses: actions/checkout@v1
- name: Cache node modules
uses: actions/cache@v2
env:
cache-name: cache-node-modules
with:
# npm cache files are stored in `~/.npm` on Linux/macOS
path: ~/.npm
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
- name: Cache Electron binaries
uses: actions/cache@v2
env:
cache-name: cache-electron-bins
with:
# cache location is described here:
# https://github.com/electron/get#how-it-works
path: ~/Library/Caches/electron
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
- name: Setup Node.js
uses: actions/setup-node@v1
with:
node-version: 14
- name: Setup npm
run: sudo npm i -g npm@7
- name: npm install
run: npm install
- name: npm build
run: npm run build-darwin
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/upload-artifact@v2
with:
name: MacOS-Image
path: dist/*.dmg
if-no-files-found: error