2022-03-21 13:20:26 +03:00
name : Package-Build
on : [ push, pull_request]
jobs :
Lint :
runs-on : macos-11
steps :
- name : Checkout
uses : actions/checkout@v3
with :
fetch-depth : 0
- name : Installing Node
2023-01-06 07:03:45 +03:00
uses : actions/setup-node@v3.6.0
2022-03-21 13:20:26 +03:00
with :
node-version : 16
- name : Install deps
run : |
npm i -g yarn@1.19.1
cd app
yarn
cd ..
rm app/node_modules/.yarn-integrity
yarn
- name : Build typings
run : yarn run build:typings
- name : Lint
run : yarn run lint
macOS-Build :
runs-on : macos-11
needs : Lint
strategy :
matrix :
include :
- arch : x86_64
- arch : arm64
2022-06-18 22:11:07 +03:00
fail-fast : false
2022-09-04 18:59:48 +03:00
2022-03-21 13:20:26 +03:00
steps :
- name : Checkout
uses : actions/checkout@v3
with :
fetch-depth : 0
- name : Installing Node
2023-01-06 07:03:45 +03:00
uses : actions/setup-node@v3.6.0
2022-03-21 13:20:26 +03:00
with :
node-version : 16
- name : Install deps
run : |
sudo npm i -g yarn@1.22.1
yarn --network-timeout 1000000
env :
ARCH : ${{matrix.arch}}
- name : Fix cross build
run : |
rm -rf app/node_modules/cpu-features
rm -rf app/node_modules/ssh2/crypto/build
2022-09-04 19:04:33 +03:00
if : matrix.arch == 'arm64'
2022-03-21 13:20:26 +03:00
- name : Webpack
run : yarn run build
- name : Prepackage plugins
2023-02-26 22:42:31 +03:00
run : scripts/prepackage-plugins.mjs
2022-03-21 13:20:26 +03:00
env :
ARCH : ${{matrix.arch}}
- run : sed -i '' 's/updateInfo = await/\/\/updateInfo = await/g' node_modules/app-builder-lib/out/targets/ArchiveTarget.js
2022-10-26 10:45:12 +03:00
# Work around electron-builder beta bug
- run : ln -s ../../node_modules/electron app/node_modules
2022-03-21 13:20:26 +03:00
- name : Build and sign packages
2023-02-26 22:42:31 +03:00
run : scripts/build-macos.mjs
2022-03-21 13:20:26 +03:00
if : github.repository == 'Eugeny/tabby' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags'))
env :
ARCH : ${{matrix.arch}}
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
2022-10-01 15:40:13 +03:00
KEYGEN_TOKEN : ${{ secrets.KEYGEN_TOKEN }}
2022-03-21 13:20:26 +03:00
CSC_LINK : ${{ secrets.CSC_LINK }}
CSC_KEY_PASSWORD : ${{ secrets.CSC_KEY_PASSWORD }}
2023-07-18 23:05:36 +03:00
CSC_INSTALLER_LINK : ${{ secrets.CSC_INSTALLER_LINK }}
CSC_INSTALLER_KEY_PASSWORD : ${{ secrets.CSC_INSTALLER_KEY_PASSWORD }}
2022-03-21 13:20:26 +03:00
APPSTORE_USERNAME : ${{ secrets.APPSTORE_USERNAME }}
APPSTORE_PASSWORD : ${{ secrets.APPSTORE_PASSWORD }}
USE_HARD_LINKS : false
# DEBUG: electron-builder,electron-builder:*
- name : Build packages without signing
2023-02-26 22:42:31 +03:00
run : scripts/build-macos.mjs
2022-03-21 13:20:26 +03:00
if : "! (github.repository == 'Eugeny/tabby' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags')))"
env :
ARCH : ${{matrix.arch}}
# DEBUG: electron-builder,electron-builder:*
- name : Upload symbols
run : |
sudo npm install -g @sentry/cli --unsafe-perm
2023-02-26 22:42:31 +03:00
./scripts/sentry-upload.mjs
2022-03-21 13:20:26 +03:00
env :
SENTRY_AUTH_TOKEN : ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG : ${{ secrets.SENTRY_ORG }}
SENTRY_PROJECT : ${{ secrets.SENTRY_PROJECT }}
- name : Package artifacts
run : |
mkdir artifact-pkg
mv dist/*.pkg artifact-pkg/
mkdir artifact-zip
mv dist/*.zip artifact-zip/
- uses : actions/upload-artifact@master
name : Upload PKG
with :
name : macOS .pkg (${{matrix.arch}})
path : artifact-pkg
- uses : actions/upload-artifact@master
name : Upload ZIP
with :
name : macOS .zip (${{matrix.arch}})
path : artifact-zip
Linux-Build :
2023-04-27 19:45:19 +03:00
runs-on : ubuntu-20.04
2022-03-21 13:20:26 +03:00
needs : Lint
2022-06-15 13:01:27 +03:00
strategy :
matrix :
2023-06-26 17:28:43 +03:00
include :
- build-arch : x64
arch : amd64
- build-arch : arm64
arch : arm64
triplet : aarch64-linux-gnu-
2023-07-18 23:05:36 +03:00
- build-arch : arm
2023-06-26 17:28:43 +03:00
arch : armhf
triplet : arm-linux-gnueabihf-
env :
CC : ${{matrix.triplet}}gcc
CXX : ${{matrix.triplet}}g++
ARCH : ${{matrix.build-arch}}
npm_config_arch : ${{matrix.build-arch}}
npm_config_target_arch : ${{matrix.build-arch}}
2022-09-04 18:59:48 +03:00
2022-03-21 13:20:26 +03:00
steps :
- name : Checkout
uses : actions/checkout@v3
with :
fetch-depth : 0
2023-07-18 23:05:36 +03:00
2023-06-26 17:28:43 +03:00
- name : Install Node
2023-01-06 07:03:45 +03:00
uses : actions/setup-node@v3.6.0
2022-03-21 13:20:26 +03:00
with :
2023-06-26 17:28:43 +03:00
node-version : 18
2022-03-21 13:20:26 +03:00
2023-06-26 17:28:43 +03:00
- name : Install deps (amd64)
2022-03-21 13:20:26 +03:00
run : |
sudo apt-get update
2023-07-18 23:05:36 +03:00
sudo apt-get install libarchive-tools zsh
2023-06-26 17:28:43 +03:00
- name : Install npm_modules (amd64)
run : |
2022-06-15 13:01:27 +03:00
npm i -g yarn
2022-03-21 13:20:26 +03:00
yarn --network-timeout 1000000
2022-09-04 19:04:33 +03:00
if : matrix.build-arch == 'x64'
2023-07-18 23:05:36 +03:00
2023-06-26 17:28:43 +03:00
- name : Setup Crossbuild (${{matrix.arch}})
run : |
sudo apt-get update -y && sudo apt-get install schroot sbuild debootstrap -y
sudo debootstrap --include=git,curl,gnupg,ca-certificates,crossbuild-essential-${{matrix.arch}},python-dev,python3-dev,libarchive-tools,cmake --variant=buildd --exclude=snapd --components=main,restricted,universe,multiverse --extractor=dpkg-deb bionic /build-chroot/
echo 'deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu bionic main restricted universe multiverse' | sudo tee /build-chroot/etc/apt/sources.list >/dev/null
echo 'deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports bionic main restricted universe multiverse' | sudo tee -a /build-chroot/etc/apt/sources.list >/dev/null
curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | gpg --dearmor | sudo tee /build-chroot/etc/apt/trusted.gpg.d/nodesource.gpg >/dev/null
echo 'deb http://deb.nodesource.com/node_16.x bionic main' | sudo tee /build-chroot/etc/apt/sources.list.d/nodesource.list >/dev/null
echo "[build-chroot]
description=Ubuntu 18.04 Build chroot
type=directory
directory=/build-chroot
root-groups=root,sudo
profile=buildd
personality=linux
2023-07-18 23:05:36 +03:00
union-type=overlay" | sudo tee /etc/schroot/chroot.d/build-chroot.pref >/dev/null
2023-06-26 17:28:43 +03:00
echo "/home /home none rw,bind 0 0" | sudo tee -a /etc/schroot/buildd/fstab >/dev/null
2022-09-04 18:59:48 +03:00
2023-06-26 17:28:43 +03:00
if : matrix.build-arch != 'x64'
2022-03-21 13:20:26 +03:00
2023-06-26 17:28:43 +03:00
- name : Install node_modules & CrossBuild native modules for ${{matrix.arch}}
run : |
sudo schroot -c build-chroot -u root -- bash -c "apt-get update -y
dpkg --add-architecture ${{matrix.arch}}
apt-get install -y nodejs libfontconfig-dev:${{matrix.arch}} libsecret-1-dev:${{matrix.arch}} libnss3:${{matrix.arch}} libatk1.0-0:${{matrix.arch}} libatk-bridge2.0-0:${{matrix.arch}} libgdk-pixbuf2.0-0:${{matrix.arch}} libgtk-3-0:${{matrix.arch}} libgbm1:${{matrix.arch}}
2023-07-18 23:05:36 +03:00
export CC=${{matrix.triplet}}gcc CXX=${{matrix.triplet}}g++ LD=${{matrix.triplet}}ld
2023-06-26 17:28:43 +03:00
if [[ ${{matrix.arch}} == 'arm64' ]]; then
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/aarch64-linux-gnu/pkgconfig/
elif [[ ${{matrix.arch}} == 'armhf' ]]; then
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/arm-linux-gnueabihf/pkgconfig/
fi
export ARCH=${{matrix.build-arch}} npm_config_arch=${{matrix.build-arch}} npm_config_target_arch=${{matrix.build-arch}}
npm i -g yarn
yarn --network-timeout 1000000 --arch=${{matrix.build-arch}} --target_arch=${{matrix.build-arch}}"
if : matrix.build-arch != 'x64'
2022-09-04 18:59:48 +03:00
2023-06-26 17:28:43 +03:00
- name : Webpack (${{matrix.arch}})
run : yarn run build --arch=${{matrix.build-arch}} --target_arch=${{matrix.build-arch}}
- name : Prepackage plugins (${{matrix.arch}})
run : scripts/prepackage-plugins.mjs
2023-07-18 23:05:36 +03:00
2023-06-26 17:28:43 +03:00
- name : Build packages (${{matrix.arch}})
2023-02-26 22:42:31 +03:00
run : scripts/build-linux.mjs
2022-03-21 13:20:26 +03:00
env :
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
2022-10-01 15:40:13 +03:00
KEYGEN_TOKEN : ${{ secrets.KEYGEN_TOKEN }}
2022-03-21 13:20:26 +03:00
USE_HARD_LINKS : false
# DEBUG: electron-builder,electron-builder:*
2023-07-18 23:05:36 +03:00
2022-03-21 13:20:26 +03:00
- name : Build web resources
run : zsh -c 'tar czf tabby-web.tar.gz (tabby-*|web)/dist'
2022-09-04 19:04:33 +03:00
if : matrix.build-arch == 'x64'
2022-06-15 13:01:27 +03:00
2023-06-26 17:28:43 +03:00
# - name: Install deps and Build (arm64)
# uses: docker://multiarch/ubuntu-core:arm64-bionic
# with:
# args: >
# bash -c
# "apt update && apt install curl lsb-release gnupg -y &&
# curl -fsSL https://deb.nodesource.com/setup_16.x | bash - &&
# apt install make build-essential git ruby libarchive-tools nodejs rpm libsecret-1-dev libfontconfig1-dev -y &&
# git config --global --add safe.directory /github/workspace &&
# gem install public_suffix -v 4.0.7 &&
# gem install fpm --no-document &&
# npm i -g yarn &&
# cd /github/workspace &&
# yarn --network-timeout 1000000 &&
# yarn run build &&
# scripts/prepackage-plugins.mjs &&
# USE_SYSTEM_FPM=true scripts/build-linux.mjs"
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }}
# USE_HARD_LINKS: false
# if: matrix.build-arch == 'arm64' && github.repository == 'Eugeny/tabby' && startsWith(github.ref, 'refs/tags')
# - name: Install deps and Build (armv7l)
# uses: docker://multiarch/ubuntu-core:armhf-bionic
# with:
# args: >
# bash -c
# "apt update && apt install curl lsb-release gnupg -y &&
# curl -fsSL https://deb.nodesource.com/setup_16.x | bash - &&
# apt install make build-essential git ruby libarchive-tools nodejs rpm libsecret-1-dev libfontconfig1-dev -y &&
# git config --global --add safe.directory /github/workspace &&
# gem install public_suffix -v 4.0.7 &&
# gem install fpm --no-document &&
# npm i -g yarn &&
# cd /github/workspace &&
# sed -i '/ \"electron\":/c\ \"electron\": \"17.0.0\",' package.json &&
# yarn --network-timeout 1000000 &&
# yarn run build &&
# scripts/prepackage-plugins.mjs &&
# USE_SYSTEM_FPM=true scripts/build-linux.mjs"
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }}
# USE_HARD_LINKS: false
# if: matrix.build-arch == 'arm' && github.repository == 'Eugeny/tabby' && startsWith(github.ref, 'refs/tags')
- name : Upload symbols (amd64 only)
2022-03-21 13:20:26 +03:00
run : |
sudo npm install -g @sentry/cli --unsafe-perm
2023-02-26 22:42:31 +03:00
./scripts/sentry-upload.mjs
2022-09-04 19:04:33 +03:00
if : matrix.build-arch == 'x64'
2022-03-21 13:20:26 +03:00
env :
SENTRY_AUTH_TOKEN : ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG : ${{ secrets.SENTRY_ORG }}
SENTRY_PROJECT : ${{ secrets.SENTRY_PROJECT }}
- name : Upload packages to packagecloud.io
uses : Eugeny/packagecloud-action@main
if : github.repository == 'Eugeny/tabby' && github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
env :
PACKAGECLOUD_TOKEN : ${{ secrets.PACKAGECLOUD_TOKEN }}
with :
repo : 'eugeny/tabby'
dir : 'dist'
- uses : actions/upload-artifact@master
2023-06-26 17:28:43 +03:00
name : Upload AppImage (${{matrix.arch}})
with :
name : Linux AppImage (${{matrix.arch}})
path : dist/*.AppImage
2023-07-18 23:05:36 +03:00
2023-06-26 17:28:43 +03:00
- uses : actions/upload-artifact@master
name : Upload DEB (${{matrix.arch}})
2022-03-21 13:20:26 +03:00
with :
2023-06-26 17:28:43 +03:00
name : Linux DEB (${{matrix.arch}})
2022-06-15 13:01:27 +03:00
path : dist/*.deb
2022-03-21 13:20:26 +03:00
- uses : actions/upload-artifact@master
2023-06-26 17:28:43 +03:00
name : Upload RPM (${{matrix.arch}})
2022-03-21 13:20:26 +03:00
with :
2023-06-26 17:28:43 +03:00
name : Linux RPM (${{matrix.arch}})
2022-06-15 13:01:27 +03:00
path : dist/*.rpm
2022-03-21 13:20:26 +03:00
- uses : actions/upload-artifact@master
2023-06-26 17:28:43 +03:00
name : Upload Pacman Package (${{matrix.arch}})
2022-03-21 13:20:26 +03:00
with :
2023-06-26 17:28:43 +03:00
name : Linux Pacman (${{matrix.arch}})
2022-06-15 13:01:27 +03:00
path : dist/*.pacman
2022-03-21 13:20:26 +03:00
- uses : actions/upload-artifact@master
2023-06-26 17:28:43 +03:00
name : Upload Linux tarball (${{matrix.arch}})
2022-03-21 13:20:26 +03:00
with :
2023-06-26 17:28:43 +03:00
name : Linux tarball (${{matrix.arch}})
2022-06-15 13:01:27 +03:00
path : dist/*.tar.gz
2022-03-21 13:20:26 +03:00
- uses : actions/upload-artifact@master
2023-06-26 17:28:43 +03:00
name : Upload web tarball (amd64 only)
2022-03-21 13:20:26 +03:00
with :
name : Web tarball
2022-06-15 13:01:27 +03:00
path : tabby-web.tar.gz
2022-09-04 19:04:33 +03:00
if : matrix.build-arch == 'x64'
2022-03-21 13:20:26 +03:00
Windows-Build :
runs-on : windows-2022
needs : Lint
strategy :
matrix :
include :
2022-04-09 20:08:39 +03:00
- arch : x64
2022-03-21 13:20:26 +03:00
- arch : arm64
2022-06-18 22:11:07 +03:00
fail-fast : false
2022-03-21 13:20:26 +03:00
steps :
- name : Checkout
uses : actions/checkout@v3
with :
fetch-depth : 0
- name : Installing Node
2023-01-06 07:03:45 +03:00
uses : actions/setup-node@v3.6.0
2022-03-21 13:20:26 +03:00
with :
node-version : 16
- name : Update node-gyp
run : |
npm install --global node-gyp@8.4.1
npm prefix -g | % {npm config set node_gyp "$_\node_modules\node-gyp\bin\node-gyp.js"}
- name : Build
2022-04-06 14:30:35 +03:00
shell : powershell
2022-03-21 13:20:26 +03:00
run : |
npm i -g yarn@1.19.1
yarn --network-timeout 1000000
yarn run build
2023-02-26 22:42:31 +03:00
node scripts/prepackage-plugins.mjs
2022-03-21 13:20:26 +03:00
env :
ARCH : ${{matrix.arch}}
- name : Build and sign packages
2023-02-26 22:42:31 +03:00
run : node scripts/build-windows.mjs
2022-03-21 13:20:26 +03:00
if : github.repository == 'Eugeny/tabby' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags'))
env :
2022-04-19 00:24:48 +03:00
ARCH : ${{matrix.arch}}
2022-03-21 13:20:26 +03:00
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
2022-10-01 15:40:13 +03:00
KEYGEN_TOKEN : ${{ secrets.KEYGEN_TOKEN }}
2022-03-21 13:20:26 +03:00
WIN_CSC_LINK : ${{ secrets.WIN_CSC_LINK }}
WIN_CSC_KEY_PASSWORD : ${{ secrets.WIN_CSC_KEY_PASSWORD }}
DEBUG : electron-builder,electron-builder:*
- name : Build packages without signing
2023-02-26 22:42:31 +03:00
run : node scripts/build-windows.mjs
2022-03-21 13:20:26 +03:00
if : "!(github.repository == 'Eugeny/tabby' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags')))"
env :
ARCH : ${{matrix.arch}}
- name : Upload symbols
run : |
npm install @sentry/cli
2023-02-26 22:42:31 +03:00
node scripts/sentry-upload.mjs
2022-03-21 13:20:26 +03:00
env :
SENTRY_AUTH_TOKEN : ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG : ${{ secrets.SENTRY_ORG }}
SENTRY_PROJECT : ${{ secrets.SENTRY_PROJECT }}
- name : Package artifacts
run : |
mkdir artifact-setup
mv dist/*-setup-*.exe artifact-setup/
mkdir artifact-portable
mv dist/*-portable-*.zip artifact-portable/
- uses : actions/upload-artifact@master
name : Upload installer
with :
name : Windows installer (${{matrix.arch}})
path : artifact-setup
- uses : actions/upload-artifact@master
name : Upload portable build
with :
name : Windows portable build (${{matrix.arch}})
path : artifact-portable