mirror of
https://github.com/Eugeny/tabby.git
synced 2024-11-26 13:10:36 +03:00
9da21a82a8
- Fix cache on x64 - Run tar as root
357 lines
11 KiB
YAML
357 lines
11 KiB
YAML
name: Package-Build
|
|
on: [push, pull_request]
|
|
jobs:
|
|
Lint:
|
|
runs-on: ubuntu-20.04
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Installing Node
|
|
uses: actions/setup-node@v3.7.0
|
|
with:
|
|
node-version: 18
|
|
|
|
- name: Install deps
|
|
run: |
|
|
npm i -g yarn
|
|
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-12
|
|
needs: Lint
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- arch: x86_64
|
|
- arch: arm64
|
|
fail-fast: false
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Installing Node
|
|
uses: actions/setup-node@v3.7.0
|
|
with:
|
|
node-version: 18
|
|
|
|
- name: Install deps
|
|
run: |
|
|
sudo -H pip3 install setuptools
|
|
sudo npm i -g yarn
|
|
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
|
|
if: matrix.arch == 'arm64'
|
|
|
|
- name: Webpack
|
|
run: yarn run build
|
|
|
|
- name: Prepackage plugins
|
|
run: scripts/prepackage-plugins.mjs
|
|
env:
|
|
ARCH: ${{matrix.arch}}
|
|
|
|
- run: sed -i '' 's/updateInfo = await/\/\/updateInfo = await/g' node_modules/app-builder-lib/out/targets/ArchiveTarget.js
|
|
|
|
# Work around electron-builder beta bug
|
|
- run: ln -s ../../node_modules/electron app/node_modules
|
|
|
|
- name: Build and sign packages
|
|
run: scripts/build-macos.mjs
|
|
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 }}
|
|
KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }}
|
|
CSC_LINK: ${{ secrets.CSC_LINK }}
|
|
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
|
|
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
|
APPSTORE_USERNAME: ${{ secrets.APPSTORE_USERNAME }}
|
|
APPSTORE_PASSWORD: ${{ secrets.APPSTORE_PASSWORD }}
|
|
USE_HARD_LINKS: false
|
|
# DEBUG: electron-builder,electron-builder:*
|
|
|
|
- name: Build packages without signing
|
|
run: scripts/build-macos.mjs
|
|
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
|
|
./scripts/sentry-upload.mjs
|
|
env:
|
|
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
|
SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
|
|
SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}
|
|
|
|
- name: Package artifacts
|
|
run: |
|
|
mkdir artifact-dmg
|
|
mv dist/*.dmg artifact-dmg/
|
|
mkdir artifact-zip
|
|
mv dist/*.zip artifact-zip/
|
|
|
|
- uses: actions/upload-artifact@master
|
|
name: Upload DMG
|
|
with:
|
|
name: macOS .dmg (${{matrix.arch}})
|
|
path: artifact-dmg
|
|
|
|
- uses: actions/upload-artifact@master
|
|
name: Upload ZIP
|
|
with:
|
|
name: macOS .zip (${{matrix.arch}})
|
|
path: artifact-zip
|
|
|
|
Linux-Build:
|
|
runs-on: ubuntu-20.04
|
|
needs: Lint
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- build-arch: x64
|
|
arch: amd64
|
|
- build-arch: arm64
|
|
arch: arm64
|
|
triplet: aarch64-linux-gnu-
|
|
- build-arch: arm
|
|
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}}
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Install Node
|
|
uses: actions/setup-node@v3.7.0
|
|
with:
|
|
node-version: 18
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install libarchive-tools zsh crossbuild-essential-${{matrix.arch}}
|
|
|
|
- name: Setup tar to run as root
|
|
run: sudo chmod u+s "$(command -v tar)"
|
|
if: matrix.build-arch != 'x64'
|
|
|
|
- name: Download cached sysroot
|
|
uses: actions/cache@v3
|
|
id: dl-cached-sysroot
|
|
if: matrix.build-arch !='x64'
|
|
with:
|
|
key: sysroot-${{matrix.build-arch}}
|
|
path: /${{matrix.build-arch}}-sysroot
|
|
|
|
- name: Setup crossbuild sysroot
|
|
run: |
|
|
sudo apt-get update -y && sudo apt-get install debootstrap qemu-user-static binfmt-support -y
|
|
sudo qemu-debootstrap --include=libfontconfig1-dev,libsecret-1-dev,libnss3,libatk1.0-0,libatk-bridge2.0-0,libgdk-pixbuf2.0-0,libgtk-3-0,libgbm1 --variant=buildd --exclude=snapd --components=main,restricted,universe,multiverse --extractor=dpkg-deb --arch ${{matrix.arch}} bionic /${{matrix.build-arch}}-sysroot/ http://ports.ubuntu.com/ubuntu-ports/
|
|
sudo find /${{matrix.build-arch}}-sysroot -type l -lname '/*' -exec sh -c 'file="$0"; dir=$(dirname "$file"); target=$(readlink "$0"); prefix=$(dirname "$dir" | sed 's@[^/]*@\.\.@g'); newtarget="$prefix$target"; ln -snf $newtarget $file' {} \; ;
|
|
if: matrix.build-arch != 'x64' && steps.dl-cached-sysroot.outputs.cache-hit != 'true'
|
|
|
|
- name: Setup env to use ${{matrix.build-arch}} sysroot
|
|
run: |
|
|
echo "CFLAGS=--sysroot=/${{matrix.build-arch}}-sysroot/" >> $GITHUB_ENV
|
|
echo "CXXFLAGS=--sysroot=/${{matrix.build-arch}}-sysroot/" >> $GITHUB_ENV
|
|
echo "LDFLAGS=--sysroot=/${{matrix.build-arch}}-sysroot/" >> $GITHUB_ENV
|
|
|
|
[[ ${npm_config_arch} == 'arm' ]] && echo "npm_config_arch=armv7l" >> $GITHUB_ENV
|
|
|
|
if [[ ${{matrix.arch}} == 'armhf' ]]; then
|
|
echo "PKG_CONFIG_PATH=/${{matrix.build-arch}}-sysroot/usr/lib/pkgconfig/:/${{matrix.build-arch}}-sysroot/usr/lib/arm-linux-gnueabihf/pkgconfig/" >> $GITHUB_ENV
|
|
elif [[ ${{matrix.arch}} == 'arm64' ]]; then
|
|
echo "PKG_CONFIG_PATH=/${{matrix.build-arch}}-sysroot/usr/lib/pkgconfig/:/${{matrix.build-arch}}-sysroot/usr/lib/aarch64-linux-gnu/pkgconfig/" >> $GITHUB_ENV
|
|
fi
|
|
if: matrix.build-arch != 'x64'
|
|
|
|
- name: Install npm_modules (amd64)
|
|
run: |
|
|
npm i -g yarn node-gyp
|
|
yarn --network-timeout 1000000 --arch=${{matrix.build-arch}} --target-arch=${{matrix.build-arch}}
|
|
|
|
- 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
|
|
|
|
- name: Build packages (${{matrix.arch}})
|
|
run: scripts/build-linux.mjs
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }}
|
|
USE_HARD_LINKS: false
|
|
# DEBUG: electron-builder,electron-builder:*
|
|
|
|
- name: Build web resources (amd64 only)
|
|
run: zsh -c 'tar czf tabby-web.tar.gz (tabby-*|web)/dist'
|
|
if: matrix.build-arch == 'x64'
|
|
|
|
- name: Upload symbols (amd64 only)
|
|
run: |
|
|
sudo npm install -g @sentry/cli --unsafe-perm
|
|
./scripts/sentry-upload.mjs
|
|
if: matrix.build-arch == 'x64'
|
|
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
|
|
name: Upload AppImage (${{matrix.arch}})
|
|
with:
|
|
name: Linux AppImage (${{matrix.arch}})
|
|
path: dist/*.AppImage
|
|
|
|
- uses: actions/upload-artifact@master
|
|
name: Upload DEB (${{matrix.arch}})
|
|
with:
|
|
name: Linux DEB (${{matrix.arch}})
|
|
path: dist/*.deb
|
|
|
|
- uses: actions/upload-artifact@master
|
|
name: Upload RPM (${{matrix.arch}})
|
|
with:
|
|
name: Linux RPM (${{matrix.arch}})
|
|
path: dist/*.rpm
|
|
|
|
- uses: actions/upload-artifact@master
|
|
name: Upload Pacman Package (${{matrix.arch}})
|
|
with:
|
|
name: Linux Pacman (${{matrix.arch}})
|
|
path: dist/*.pacman
|
|
|
|
- uses: actions/upload-artifact@master
|
|
name: Upload Linux tarball (${{matrix.arch}})
|
|
with:
|
|
name: Linux tarball (${{matrix.arch}})
|
|
path: dist/*.tar.gz
|
|
|
|
- uses: actions/upload-artifact@master
|
|
name: Upload web tarball (amd64 only)
|
|
with:
|
|
name: Web tarball
|
|
path: tabby-web.tar.gz
|
|
if: matrix.build-arch == 'x64'
|
|
|
|
|
|
Windows-Build:
|
|
runs-on: windows-2022
|
|
needs: Lint
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- arch: x64
|
|
- arch: arm64
|
|
fail-fast: false
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Installing Node
|
|
uses: actions/setup-node@v3.7.0
|
|
with:
|
|
node-version: 18
|
|
|
|
- name: Build
|
|
shell: powershell
|
|
run: |
|
|
npm i -g yar node-gyp
|
|
yarn --network-timeout 1000000
|
|
yarn run build
|
|
node scripts/prepackage-plugins.mjs
|
|
env:
|
|
ARCH: ${{matrix.arch}}
|
|
|
|
- name: Build and sign packages
|
|
run: node scripts/build-windows.mjs
|
|
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 }}
|
|
KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }}
|
|
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
|
|
run: node scripts/build-windows.mjs
|
|
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
|
|
node scripts/sentry-upload.mjs
|
|
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
|