Skip to content

Build Desktop (v2) #746

Build Desktop (v2)

Build Desktop (v2) #746

Workflow file for this run

name: Build Desktop (v2)
env:
NETWORK_CODE: canary
on:
workflow_dispatch:
inputs:
os:
description: 'OS'
required: true
type: choice
options:
- macos-11
- ubuntu-20.04
- windows-2019
stage:
description: 'Stage'
required: true
type: choice
options:
- alpha
- beta
- prod
jobs:
build:
runs-on: ${{ matrix.os }}
if: ${{ always() }}
strategy:
matrix:
os: ['${{ inputs.os }}']
fail-fast: true
env:
VERSION: ${{ needs.setup.outputs.version }}
STAGE: ${{ needs.setup.outputs.stage || github.event.inputs.stage }}
steps:
- uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 18.15.0
# Used to read the `binding.gyp` file from `@iota/wallet`
- name: Set up Python 3.10
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
profile: minimal
- name: Install LLVM and Clang (Windows) # required for bindgen to work, see https://github.com/rust-lang/rust-bindgen/issues/1797
uses: KyleMayes/install-llvm-action@32c4866ebb71e0949e8833eb49beeebed48532bd
if: matrix.os == 'windows-2019'
with:
version: '11.0'
directory: ${{ runner.temp }}/llvm
- name: Set LIBCLANG_PATH (Windows)
run: echo "LIBCLANG_PATH=$((gcm clang).source -replace "clang.exe")" >> $env:GITHUB_ENV
if: matrix.os == 'windows-2019'
- name: Set deployment target (macOS)
run: echo "MACOSX_DEPLOYMENT_TARGET=10.14" >> $GITHUB_ENV # TODO: set this to 10.12 once rocksDB issue is fixed
if: matrix.os == 'macos-11'
- name: Install required packages (Linux)
run: |
sudo apt update
sudo apt install -y gcc-multilib g++-multilib build-essential libssl-dev rpm libsecret-1-dev \
software-properties-common apt-transport-https libudev-dev libusb-1.0-0-dev \
llvm-dev libclang-dev clang
if: matrix.os == 'ubuntu-20.04'
- name: Enable verbose output for electron-builder (macOS/Linux)
run: echo "DEBUG=electron-builder" >> $GITHUB_ENV
if: matrix.os != 'windows-2019'
- name: Enable verbose output for electron-builder (Windows)
run: echo "DEBUG=electron-builder" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
if: matrix.os == 'windows-2019'
- name: Install dependencies
# Increase network timeout threshold to reduce build failures on Windows
run: yarn --network-timeout 1000000
- name: Install Sentry CLI
# Yarn has issues putting binaries in the PATH on Windows
run: npm i -g @sentry/cli
if: ${{ startsWith(github.ref, 'refs/tags/desktop') && matrix.os == 'windows-2019' }}
- name: Set productName
run: node scripts/fix-productName.js
working-directory: packages/desktop
- name: Bundle desktop JS
run: yarn build:${STAGE}
working-directory: packages/desktop
shell: bash
env:
HARDCODE_NODE_ENV: true
SENTRY: ${{ startsWith(github.ref, 'refs/tags/desktop') }}
SENTRY_DSN: ${{ secrets.SENTRY_DSN_PROD_DESKTOP }}
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
AMPLITUDE_API_KEY: ${{ secrets.AMPLITUDE_API_KEY }}
- name: Build Electron app (macOS)
run: yarn compile:${STAGE}:mac
env:
CSC_LINK: ${{ secrets.MAC_CERT_BASE64 }}
CSC_KEY_PASSWORD: ${{ secrets.MAC_CERT_PASSWORD }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
working-directory: packages/desktop
if: matrix.os == 'macos-11'
- name: Build Electron app (Windows)
run: yarn compile:${env:STAGE}:win
env:
CSC_LINK: ${{ secrets.WIN_CERT_BASE64 }}
CSC_KEY_PASSWORD: ${{ secrets.WIN_CERT_PASSWORD }}
working-directory: packages/desktop
if: matrix.os == 'windows-2019'
- name: Build Electron app (Linux)
run: yarn compile:${STAGE}:linux
working-directory: packages/desktop
if: matrix.os == 'ubuntu-20.04'
- name: Import GPG key (Linux)
run: |
echo "$GPG_PRIVATE_KEY" | base64 -d > /tmp/private.key && \
echo "$GPG_PASSPHRASE" | gpg --batch --yes --passphrase-fd 0 --import /tmp/private.key
env:
GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
if: matrix.os == 'ubuntu-20.04'
- name: Sign AppImage (Linux)
run: echo $GPG_PASSPHRASE | gpg --pinentry-mode loopback --batch --passphrase-fd 0 --armor --detach-sign --default-key contact@iota.org firefly-*.AppImage
working-directory: packages/desktop/out
env:
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
if: matrix.os == 'ubuntu-20.04'
- name: Compute checksums (Linux)
run: for i in `ls | grep 'firefly-*'` ; do sha256sum $i | awk {'print $1'} > $i.sha256 ; done
working-directory: packages/desktop/out
if: matrix.os == 'ubuntu-20.04'
- name: Compute checksums (macOS)
run: for i in `ls | grep 'firefly-*'` ; do shasum -a 256 $i | awk {'print $1'} > $i.sha256 ; done
working-directory: packages/desktop/out
if: matrix.os == 'macos-11'
- name: Compute checksums (Windows)
run: Get-ChildItem "." -Filter firefly-* | Foreach-Object { $(Get-FileHash -Path $_.FullName -Algorithm SHA256).Hash | Set-Content ($_.FullName + '.sha256') }
working-directory: packages/desktop/out
if: matrix.os == 'windows-2019'
- name: Upload artifacts
uses: actions/upload-artifact@v2
with:
name: firefly-${{ env.NETWORK_CODE }}-desktop-${{ matrix.os }}
path: |
packages/desktop/out/firefly-*