Linux arm64 support #74
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Copyright 2020 Signal Messenger, LLC | |
# SPDX-License-Identifier: AGPL-3.0-only | |
name: CI | |
on: | |
push: | |
branches: | |
- development | |
- main | |
- '[0-9]+.[0-9]+.x' | |
pull_request: | |
jobs: | |
lint: | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 30 | |
steps: | |
- run: lsb_release -a | |
- run: uname -a | |
- uses: actions/checkout@v4 | |
- name: Setup pnpm | |
uses: pnpm/action-setup@v4 | |
with: | |
version: 10.3.0 | |
- name: Setup node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version-file: '.nvmrc' | |
cache: 'pnpm' | |
cache-dependency-path: 'pnpm-lock.yaml' | |
- name: Cache .electron-gyp | |
uses: actions/cache@v4 | |
with: | |
path: ~/.electron-gyp | |
key: electron-gyp-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }} | |
- name: Setup sccache | |
uses: mozilla-actions/sccache-action@v0.0.7 | |
- name: Restore sccache | |
uses: actions/cache@v4 | |
with: | |
path: ${{ env.SCCACHE_PATH }} | |
key: sccache-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml', 'patches/**') }} | |
- name: Restore cached .eslintcache and tsconfig.tsbuildinfo | |
uses: actions/cache/restore@v4 | |
id: cache-lint | |
with: | |
path: | | |
.eslintcache | |
tsconfig.tsbuildinfo | |
key: lint-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml', 'patches/**', '.eslintrc.js', '.eslint/**', 'tsconfig.json') }} | |
- name: Install Desktop node_modules | |
run: pnpm install | |
env: | |
CC: sccache gcc | |
CXX: sccache g++ | |
SCCACHE_GHA_ENABLED: "true" | |
NPM_CONFIG_LOGLEVEL: verbose | |
- run: pnpm run generate | |
- run: pnpm run lint | |
- run: pnpm run lint-deps | |
- run: pnpm run lint-license-comments | |
- name: Check acknowledgments file is up to date | |
run: pnpm run build:acknowledgments | |
env: | |
REQUIRE_SIGNAL_LIB_FILES: 1 | |
- run: git diff --exit-code | |
- name: Update cached .eslintcache and tsconfig.tsbuildinfo | |
uses: actions/cache/save@v4 | |
if: github.ref == 'refs/heads/main' | |
with: | |
path: | | |
.eslintcache | |
tsconfig.tsbuildinfo | |
key: ${{ steps.cache-lint.outputs.cache-primary-key }} | |
macos: | |
needs: lint | |
runs-on: macos-latest | |
if: github.ref == 'refs/heads/main' | |
timeout-minutes: 30 | |
steps: | |
- run: uname -a | |
- uses: actions/checkout@v4 | |
- name: Setup pnpm | |
uses: pnpm/action-setup@v4 | |
with: | |
version: 10.3.0 | |
- name: Setup node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version-file: '.nvmrc' | |
cache: 'pnpm' | |
cache-dependency-path: 'pnpm-lock.yaml' | |
- name: Cache .electron-gyp | |
uses: actions/cache@v4 | |
with: | |
path: ~/.electron-gyp | |
key: electron-gyp-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }} | |
- name: Setup sccache | |
uses: mozilla-actions/sccache-action@v0.0.7 | |
- name: Restore sccache | |
uses: actions/cache@v4 | |
with: | |
path: ${{ env.SCCACHE_PATH }} | |
key: sccache-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml', 'patches/**') }} | |
- name: Install Desktop node_modules | |
run: pnpm install | |
env: | |
CC: sccache clang | |
CXX: sccache clang++ | |
SCCACHE_GHA_ENABLED: "true" | |
NPM_CONFIG_LOGLEVEL: verbose | |
- run: pnpm run generate | |
- run: pnpm run prepare-beta-build | |
- run: pnpm run test-node | |
- run: pnpm run test-electron | |
env: | |
ARTIFACTS_DIR: artifacts/macos | |
WORKER_COUNT: 4 | |
timeout-minutes: 5 | |
- run: touch noop.sh && chmod +x noop.sh | |
- run: pnpm run build | |
env: | |
CC: sccache clang | |
CXX: sccache clang++ | |
SCCACHE_GHA_ENABLED: "true" | |
DISABLE_INSPECT_FUSE: on | |
SIGN_MACOS_SCRIPT: noop.sh | |
ARTIFACTS_DIR: artifacts/macos | |
- name: Upload installer size | |
if: ${{ github.repository == 'signalapp/Signal-Desktop-Private' && github.ref == 'refs/heads/main' }} | |
run: | | |
node ts/scripts/dd-installer-size.js macos-arm64 | |
node ts/scripts/dd-installer-size.js macos-x64 | |
node ts/scripts/dd-installer-size.js macos-universal | |
env: | |
DD_API_KEY: ${{ secrets.DATADOG_API_KEY }} | |
- run: pnpm run test-release | |
env: | |
NODE_ENV: production | |
- name: Upload artifacts on failure | |
if: failure() | |
uses: actions/upload-artifact@v4 | |
with: | |
path: artifacts | |
linux: | |
needs: lint | |
runs-on: ${{ matrix.os }} | |
timeout-minutes: 30 | |
strategy: | |
matrix: | |
# os: [ubuntu-22.04-8-cores, ubuntu-22.04-arm64-4-cores] | |
os: [ubuntu-22.04, ubuntu-22.04-arm] | |
steps: | |
- run: lsb_release -a | |
- run: uname -a | |
- uses: actions/checkout@v4 | |
- name: Setup pnpm | |
uses: pnpm/action-setup@v4 | |
with: | |
version: 10.3.0 | |
- name: Setup node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version-file: '.nvmrc' | |
cache: 'pnpm' | |
cache-dependency-path: 'pnpm-lock.yaml' | |
- name: Cache .electron-gyp | |
uses: actions/cache@v4 | |
with: | |
path: ~/.electron-gyp | |
key: electron-gyp-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }} | |
- name: Install xvfb and libpulse0 | |
run: sudo apt-get install xvfb libpulse0 || (sudo apt-get update && sudo apt-get install xvfb libpulse0) | |
# Needed because electron-builder's bundled FPM doesn't support arm64 | |
- name: Install FPM (for packaging) | |
if: ${{ matrix.os == 'ubuntu-22.04-arm' }} | |
run: sudo gem install fpm | |
- name: Setup sccache | |
uses: mozilla-actions/sccache-action@v0.0.7 | |
- name: Restore sccache | |
uses: actions/cache@v4 | |
with: | |
path: ${{ env.SCCACHE_PATH }} | |
key: sccache-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml', 'patches/**') }} | |
- name: Install Desktop node_modules | |
run: pnpm install | |
env: | |
CC: sccache gcc | |
CXX: sccache g++ | |
SCCACHE_GHA_ENABLED: "true" | |
NPM_CONFIG_LOGLEVEL: verbose | |
- run: pnpm run generate | |
- run: pnpm run prepare-beta-build | |
- name: Create bundle | |
run: pnpm run build:esbuild:prod | |
- name: Create preload cache | |
run: xvfb-run --auto-servernum pnpm run build:preload-cache | |
env: | |
ARTIFACTS_DIR: artifacts/linux | |
- name: Build with packaging .deb file | |
run: pnpm run build:release --publish=never | |
if: github.ref == 'refs/heads/main' | |
env: | |
CC: sccache gcc | |
CXX: sccache g++ | |
SCCACHE_GHA_ENABLED: "true" | |
DISABLE_INSPECT_FUSE: on | |
USE_SYSTEM_FPM: ${{ matrix.os == 'ubuntu-22.04-arm' && 'true' || '' }} | |
- name: Build without packaging .deb file | |
run: pnpm run build:release --linux dir | |
if: github.ref != 'refs/heads/main' | |
env: | |
CC: sccache gcc | |
CXX: sccache g++ | |
SCCACHE_GHA_ENABLED: "true" | |
DISABLE_INSPECT_FUSE: on | |
USE_SYSTEM_FPM: ${{ matrix.os == 'ubuntu-22.04-arm' && 'true' || '' }} | |
- name: Upload installer size | |
if: ${{ github.repository == 'signalapp/Signal-Desktop-Private' && github.ref == 'refs/heads/main' }} | |
run: node ts/scripts/dd-installer-size.js linux | |
env: | |
DD_API_KEY: ${{ secrets.DATADOG_API_KEY }} | |
- run: xvfb-run --auto-servernum pnpm run test-node | |
- name: Clone backup integration tests | |
uses: actions/checkout@v4 | |
with: | |
repository: 'signalapp/Signal-Message-Backup-Tests' | |
ref: '2e22808478e08c72e11a7483900c9af6c9b1acf4' | |
path: 'backup-integration-tests' | |
- run: xvfb-run --auto-servernum pnpm run test-electron | |
timeout-minutes: 5 | |
env: | |
ARTIFACTS_DIR: artifacts/linux | |
LANG: en_US | |
LANGUAGE: en_US | |
BACKUP_INTEGRATION_DIR: 'backup-integration-tests/test-cases' | |
WORKER_COUNT: 8 | |
- run: xvfb-run --auto-servernum pnpm run test-release | |
env: | |
NODE_ENV: production | |
- name: Upload artifacts on failure | |
if: failure() | |
uses: actions/upload-artifact@v4 | |
with: | |
path: artifacts | |
windows: | |
needs: lint | |
runs-on: windows-2019 | |
timeout-minutes: 30 | |
env: | |
BUILD_LOCATION: "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Enterprise\\VC\\Tools\\MSVC\\14.29.30133\\lib\\x86\\store\\references\\" | |
SDK_LOCATION: "C:\\Program Files (x86)\\Windows Kits\\10\\UnionMetadata\\10.0.17134.0" | |
steps: | |
- run: systeminfo | |
- run: git config --global core.autocrlf false | |
- run: git config --global core.eol lf | |
- uses: actions/checkout@v4 | |
- name: Setup pnpm | |
uses: pnpm/action-setup@v4 | |
with: | |
version: 10.3.0 | |
- name: Setup node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version-file: '.nvmrc' | |
- name: Cache .electron-gyp | |
uses: actions/cache@v4 | |
with: | |
path: ${{ env.SCCACHE_PATH }}\.electron-gyp | |
key: electron-gyp-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }} | |
- run: pnpm install -g node-gyp@10.0.1 | |
# Set things up so @nodert-win10-rs4 dependencies build properly | |
- run: dir "$env:BUILD_LOCATION" | |
- run: dir "$env:SDK_LOCATION" | |
- run: "copy \"$env:BUILD_LOCATION\\platform.winmd\" \"$env:SDK_LOCATION\"" | |
- run: dir "$env:SDK_LOCATION" | |
- name: Cache Desktop node_modules | |
id: cache-desktop-modules | |
uses: actions/cache@v4 | |
with: | |
path: node_modules | |
key: ${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml', 'patches/**') }} | |
- name: Install Desktop node_modules | |
if: steps.cache-desktop-modules.outputs.cache-hit != 'true' | |
run: pnpm install | |
env: | |
CHILD_CONCURRENCY: 1 | |
NPM_CONFIG_LOGLEVEL: verbose | |
- run: pnpm run generate | |
- run: pnpm run test-node | |
- run: copy package.json temp.json | |
- run: del package.json | |
- run: type temp.json | findstr /v certificateSubjectName | findstr /v certificateSha1 > package.json | |
- run: pnpm run prepare-beta-build | |
- name: Create bundle | |
run: pnpm run build:esbuild:prod | |
- name: Create preload cache | |
run: pnpm run build:preload-cache | |
env: | |
ARTIFACTS_DIR: artifacts/win | |
- name: Build with NSIS | |
run: pnpm run build:release | |
if: github.ref == 'refs/heads/main' | |
env: | |
DISABLE_INSPECT_FUSE: on | |
- name: Build without NSIS | |
run: pnpm run build:release --win dir | |
if: github.ref != 'refs/heads/main' | |
env: | |
DISABLE_INSPECT_FUSE: on | |
- name: Upload installer size | |
if: ${{ github.repository == 'signalapp/Signal-Desktop-Private' && github.ref == 'refs/heads/main' }} | |
run: node ts/scripts/dd-installer-size.js windows | |
env: | |
DD_API_KEY: ${{ secrets.DATADOG_API_KEY }} | |
- run: pnpm run test-electron | |
env: | |
ARTIFACTS_DIR: artifacts/windows | |
timeout-minutes: 5 | |
- run: pnpm run test-release | |
env: | |
SIGNAL_ENV: production | |
- name: Upload artifacts on failure | |
if: failure() | |
uses: actions/upload-artifact@v4 | |
with: | |
path: artifacts | |
sticker-creator: | |
name: Sticker Creator | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 30 | |
defaults: | |
run: | |
working-directory: sticker-creator | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup pnpm | |
uses: pnpm/action-setup@v4 | |
with: | |
version: 10.3.0 | |
- name: Setup node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version-file: '.nvmrc' | |
- name: Install Sticker Creator node_modules | |
run: pnpm install | |
- name: Build Sticker Creator | |
run: pnpm run build | |
- name: Check Sticker Creator types | |
run: pnpm run check:types | |
- name: Check Sticker Creator formatting | |
run: pnpm run prettier:check | |
- name: Check Sticker Creator linting | |
run: pnpm run lint | |
- name: Run tests | |
run: pnpm test -- --run | |
mock-tests: | |
needs: lint | |
runs-on: ubuntu-22.04 | |
if: ${{ github.repository == 'signalapp/Signal-Desktop-Private' }} | |
timeout-minutes: 30 | |
steps: | |
- name: Get system specs | |
run: lsb_release -a | |
- name: Get other system specs | |
run: uname -a | |
- name: Clone Desktop repo | |
uses: actions/checkout@v4 | |
- name: Setup pnpm | |
uses: pnpm/action-setup@v4 | |
with: | |
version: 10.3.0 | |
- name: Setup node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version-file: '.nvmrc' | |
cache: 'pnpm' | |
cache-dependency-path: 'pnpm-lock.yaml' | |
- name: Cache .electron-gyp | |
uses: actions/cache@v4 | |
with: | |
path: ~/.electron-gyp | |
key: electron-gyp-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }} | |
- name: Install xvfb and libpulse0 | |
run: sudo apt-get install xvfb libpulse0 || (sudo apt-get update && sudo apt-get install xvfb libpulse0) | |
- name: Setup sccache | |
uses: mozilla-actions/sccache-action@v0.0.7 | |
- name: Restore sccache | |
uses: actions/cache@v4 | |
with: | |
path: ${{ env.SCCACHE_PATH }} | |
key: sccache-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml', 'patches/**') }} | |
- name: Install Desktop node_modules | |
run: pnpm install | |
env: | |
CC: sccache gcc | |
CXX: sccache g++ | |
SCCACHE_GHA_ENABLED: "true" | |
NPM_CONFIG_LOGLEVEL: verbose | |
- name: Build typescript | |
run: pnpm run generate | |
- name: Bundle | |
run: pnpm run build:esbuild:prod | |
- name: Create preload cache | |
run: xvfb-run --auto-servernum pnpm run build:preload-cache | |
env: | |
ARTIFACTS_DIR: artifacts/linux | |
- name: Run mock server tests | |
run: | | |
set -o pipefail | |
xvfb-run --auto-servernum pnpm run test-mock | |
timeout-minutes: 10 | |
env: | |
NODE_ENV: production | |
DEBUG: mock:test:* | |
ARTIFACTS_DIR: artifacts/startup | |
- name: Upload mock server test logs on failure | |
if: failure() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: logs | |
path: artifacts |