| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411 |
- 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/[email protected]
- with:
- node-version: 16
- - name: Install deps
- run: |
- npm i -g [email protected]
- 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/[email protected]
- with:
- node-version: 16
- - name: Install deps
- run: |
- sudo -H pip install setuptools
- sudo npm i -g [email protected] node-gyp@10
- 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/[email protected]
- with:
- node-version: 18
- - name: Install deps (amd64)
- run: |
- sudo apt-get update
- sudo apt-get install libarchive-tools zsh python3-distutils
- - name: Install npm_modules (amd64)
- run: |
- npm i -g yarn
- yarn --network-timeout 1000000
- if: matrix.build-arch == 'x64'
- - 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
- union-type=overlay" | sudo tee /etc/schroot/chroot.d/build-chroot.pref >/dev/null
- echo "/home /home none rw,bind 0 0" | sudo tee -a /etc/schroot/buildd/fstab >/dev/null
- if: matrix.build-arch != 'x64'
- - 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}}
- export CC=${{matrix.triplet}}gcc CXX=${{matrix.triplet}}g++ LD=${{matrix.triplet}}ld
- 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'
- - 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
- run: zsh -c 'tar czf tabby-web.tar.gz (tabby-*|web)/dist'
- if: matrix.build-arch == 'x64'
- # - 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)
- 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/[email protected]
- with:
- node-version: 16
- - name: Update node-gyp
- run: |
- npm install --global [email protected]
- npm prefix -g | % {npm config set node_gyp "$_\node_modules\node-gyp\bin\node-gyp.js"}
- - name: Build
- shell: powershell
- run: |
- npm i -g [email protected]
- 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
|