diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..d4082205 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,268 @@ +name: Package-Build +on: [push, pull_request] +jobs: + macOS-Build: + runs-on: macos-11.0 + strategy: + matrix: + include: + - arch: x86_64 + - arch: arm64 + + steps: + - name: Checkout + uses: actions/checkout@v2.3.4 + with: + fetch-depth: 0 + + - name: Installing Node + uses: actions/setup-node@v2.1.5 + with: + node-version: 14 + + - name: Install deps + run: | + sudo npm i -g yarn@1.22.1 + cd app + yarn + cd .. + rm app/node_modules/.yarn-integrity + yarn + + - name: Build native deps + run: scripts/build-native.js + env: + ARCH: ${{matrix.arch}} + + - name: Build native deps + 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.js + env: + ARCH: ${{matrix.arch}} + + - run: sed -i '' 's/updateInfo = await/\/\/updateInfo = await/g' node_modules/app-builder-lib/out/targets/ArchiveTarget.js + + - name: Build and sign packages + run: scripts/build-macos.js + 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 }} + CSC_LINK: ${{ secrets.CSC_LINK }} + CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} + 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.js + 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.js + 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: + runs-on: ubuntu-18.04 + + steps: + - name: Checkout + uses: actions/checkout@v2.3.4 + with: + fetch-depth: 0 + + - name: Install Node + uses: actions/setup-node@v2.1.5 + with: + node-version: 14 + + - name: Install deps + run: | + sudo apt-get update + sudo apt-get install bsdtar zsh + npm i -g yarn@1.19.1 + cd app + yarn + cd .. + rm app/node_modules/.yarn-integrity + yarn + npm run patch + + - name: Build native deps + run: scripts/build-native.js + + - name: Webpack + run: yarn run build + + - name: Prepackage plugins + run: scripts/prepackage-plugins.js + + - name: Build packages + run: scripts/build-linux.js + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_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' + + - name: Upload symbols + run: | + sudo npm install -g @sentry/cli --unsafe-perm + ./scripts/sentry-upload.js + env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + SENTRY_ORG: ${{ secrets.SENTRY_ORG }} + SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} + + - name: Package artifacts + run: | + mkdir artifact-deb + mv dist/*.deb artifact-deb/ || true + mkdir artifact-rpm + mv dist/*.rpm artifact-rpm/ || true + mkdir artifact-pacman + mv dist/*.pacman artifact-pacman/ || true + mkdir artifact-snap + mv dist/*.snap artifact-snap/ || true + mkdir artifact-tar.gz + mv dist/*.tar.gz artifact-tar.gz/ || true + mkdir artifact-web + mv tabby-web.tar.gz artifact-web/ || true + + - uses: actions/upload-artifact@master + name: Upload DEB + with: + name: Linux DEB + path: artifact-deb + + - uses: actions/upload-artifact@master + name: Upload RPM + with: + name: Linux RPM + path: artifact-rpm + + - uses: actions/upload-artifact@master + name: Upload Pacman Package + with: + name: Linux Pacman + path: artifact-pacman + + - uses: actions/upload-artifact@master + name: Upload Snap + with: + name: Linux Snap + path: artifact-snap + + - uses: actions/upload-artifact@master + name: Upload Linux tarball + with: + name: Linux tarball + path: artifact-tar.gz + + - uses: actions/upload-artifact@master + name: Upload web tarball + with: + name: Web tarball + path: artifact-web + + Windows-Build: + runs-on: windows-2016 + + steps: + - name: Checkout + uses: actions/checkout@v2.3.4 + with: + fetch-depth: 0 + + - name: Installing Node + uses: actions/setup-node@v2.1.5 + with: + node-version: 14 + + - name: Build + shell: powershell + run: | + npm i -g yarn@1.19.1 + yarn + node scripts/build-native.js + yarn run build + node scripts/prepackage-plugins.js + + - name: Build and sign packages + run: node scripts/build-windows.js + if: github.repository == 'Eugeny/tabby' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags')) + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_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.js + if: "!(github.repository == 'Eugeny/tabby' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags')))" + + - name: Upload symbols + run: | + npm install @sentry/cli + node scripts/sentry-upload.js + 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: Installer + path: artifact-setup + + - uses: actions/upload-artifact@master + name: Upload portable build + with: + name: Portable build + path: artifact-portable diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 353af5f8..78de15d8 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -1,8 +1,8 @@ name: Lint on: [push, pull_request] jobs: - build: - runs-on: macOS-latest + Lint: + runs-on: macos-11.0 steps: - name: Checkout diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml deleted file mode 100644 index 428f82e9..00000000 --- a/.github/workflows/linux.yml +++ /dev/null @@ -1,107 +0,0 @@ -name: Linux Build -on: [push, pull_request] -jobs: - build: - runs-on: ubuntu-18.04 - - steps: - - name: Checkout - uses: actions/checkout@v2.3.4 - with: - fetch-depth: 0 - - - name: Install Node - uses: actions/setup-node@v2.1.5 - with: - node-version: 14 - - - name: Install deps - run: | - sudo apt-get update - sudo apt-get install bsdtar zsh - npm i -g yarn@1.19.1 - cd app - yarn - cd .. - rm app/node_modules/.yarn-integrity - yarn - npm run patch - - - name: Build native deps - run: scripts/build-native.js - - - name: Webpack - run: yarn run build - - - name: Prepackage plugins - run: scripts/prepackage-plugins.js - - - name: Build packages - run: scripts/build-linux.js - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_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' - - - name: Upload symbols - run: | - sudo npm install -g @sentry/cli --unsafe-perm - ./scripts/sentry-upload.js - env: - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - SENTRY_ORG: ${{ secrets.SENTRY_ORG }} - SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} - - - name: Package artifacts - run: | - mkdir artifact-deb - mv dist/*.deb artifact-deb/ || true - mkdir artifact-rpm - mv dist/*.rpm artifact-rpm/ || true - mkdir artifact-pacman - mv dist/*.pacman artifact-pacman/ || true - mkdir artifact-snap - mv dist/*.snap artifact-snap/ || true - mkdir artifact-tar.gz - mv dist/*.tar.gz artifact-tar.gz/ || true - mkdir artifact-web - mv tabby-web.tar.gz artifact-web/ || true - - - uses: actions/upload-artifact@master - name: Upload DEB - with: - name: Linux DEB - path: artifact-deb - - - uses: actions/upload-artifact@master - name: Upload RPM - with: - name: Linux RPM - path: artifact-rpm - - - uses: actions/upload-artifact@master - name: Upload Pacman Package - with: - name: Linux Pacman - path: artifact-pacman - - - uses: actions/upload-artifact@master - name: Upload Snap - with: - name: Linux Snap - path: artifact-snap - - - uses: actions/upload-artifact@master - name: Upload Linux tarball - with: - name: Linux tarball - path: artifact-tar.gz - - - uses: actions/upload-artifact@master - name: Upload web tarball - with: - name: Web tarball - path: artifact-web diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml deleted file mode 100644 index 741bc64e..00000000 --- a/.github/workflows/macos.yml +++ /dev/null @@ -1,99 +0,0 @@ -name: macOS Build -on: [push, pull_request] -jobs: - build: - runs-on: macos-11.0 - strategy: - matrix: - include: - - arch: x86_64 - - arch: arm64 - - steps: - - name: Checkout - uses: actions/checkout@v2.3.4 - with: - fetch-depth: 0 - - - name: Installing Node - uses: actions/setup-node@v2.1.5 - with: - node-version: 14 - - - name: Install deps - run: | - sudo npm i -g yarn@1.22.1 - cd app - yarn - cd .. - rm app/node_modules/.yarn-integrity - yarn - - - name: Build native deps - run: scripts/build-native.js - env: - ARCH: ${{matrix.arch}} - - - name: Build native deps - 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.js - env: - ARCH: ${{matrix.arch}} - - - run: sed -i '' 's/updateInfo = await/\/\/updateInfo = await/g' node_modules/app-builder-lib/out/targets/ArchiveTarget.js - - - name: Build and sign packages - run: scripts/build-macos.js - 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 }} - CSC_LINK: ${{ secrets.CSC_LINK }} - CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} - 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.js - 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.js - 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 diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml deleted file mode 100644 index e23236e9..00000000 --- a/.github/workflows/windows.yml +++ /dev/null @@ -1,66 +0,0 @@ -name: Windows Build -on: [push, pull_request] -jobs: - build: - runs-on: windows-2016 - - steps: - - name: Checkout - uses: actions/checkout@v2.3.4 - with: - fetch-depth: 0 - - - name: Installing Node - uses: actions/setup-node@v2.1.5 - with: - node-version: 14 - - - name: Build - shell: powershell - run: | - npm i -g yarn@1.19.1 - yarn - node scripts/build-native.js - yarn run build - node scripts/prepackage-plugins.js - - - name: Build and sign packages - run: node scripts/build-windows.js - if: github.repository == 'Eugeny/tabby' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags')) - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_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.js - if: "!(github.repository == 'Eugeny/tabby' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags')))" - - - name: Upload symbols - run: | - npm install @sentry/cli - node scripts/sentry-upload.js - 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: Installer - path: artifact-setup - - - uses: actions/upload-artifact@master - name: Upload portable build - with: - name: Portable build - path: artifact-portable diff --git a/package.json b/package.json index a5dc7c05..ef452e71 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "**/graceful-fs": "^4.2.4" }, "scripts": { - "build": "npm run build:typings && webpack --color --config app/webpack.main.config.js && webpack --color --config app/webpack.config.js && webpack --color --config tabby-core/webpack.config.js && webpack --color --config tabby-settings/webpack.config.js && webpack --color --config tabby-terminal/webpack.config.js && webpack --color --config tabby-local/webpack.config.js && webpack --color --config tabby-plugin-manager/webpack.config.js && webpack --color --config tabby-community-color-schemes/webpack.config.js && webpack --color --config tabby-ssh/webpack.config.js && webpack --color --config tabby-serial/webpack.config.js && webpack --color --config tabby-electron/webpack.config.js && webpack --color --config tabby-web/webpack.config.js && webpack --color --config web/webpack.config.js", + "build": "npm run build:typings && node scripts/build-modules.js", "build:typings": "node scripts/build-typings.js", "watch": "cross-env TABBY_DEV=1 webpack --progress --color --watch", "start": "cross-env TABBY_DEV=1 electron app --debug --inspect", diff --git a/scripts/build-modules.js b/scripts/build-modules.js new file mode 100755 index 00000000..45b26c4c --- /dev/null +++ b/scripts/build-modules.js @@ -0,0 +1,20 @@ +#!/usr/bin/env node +const sh = require('shelljs') +const vars = require('./vars') +const log = require('npmlog') +const webpack = require('webpack') +const { promisify } = require('util') + +const configs = [ + '../app/webpack.main.config.js', + '../app/webpack.config.js', + '../web/webpack.config.js', + ...vars.builtinPlugins.map(x => `../${x}/webpack.config.js`), +] + +;(async () => { + for (const c of configs) { + log.info('build', c) + await promisify(webpack)(require(c)) + } +})()