(Tyr) fix flashing console window on windows (#105) #3
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
name: EasyTier GUI | |
on: | |
push: | |
branches: ["develop", "main"] | |
pull_request: | |
branches: ["develop", "main"] | |
env: | |
CARGO_TERM_COLOR: always | |
defaults: | |
run: | |
# necessary for windows | |
shell: bash | |
jobs: | |
pre_job: | |
# continue-on-error: true # Uncomment once integration is finished | |
runs-on: ubuntu-latest | |
# Map a step output to a job output | |
outputs: | |
should_skip: ${{ steps.skip_check.outputs.should_skip }} | |
steps: | |
- id: skip_check | |
uses: fkirc/skip-duplicate-actions@v5 | |
with: | |
# All of these options are optional, so you can remove them if you are happy with the defaults | |
concurrent_skipping: 'never' | |
skip_after_successful_duplicate: 'true' | |
paths: '["Cargo.toml", "easytier/**", "easytier-gui/**", ".github/workflows/gui.yml"]' | |
build-gui: | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- TARGET: aarch64-unknown-linux-musl | |
OS: ubuntu-latest | |
GUI_TARGET: aarch64-unknown-linux-gnu | |
- TARGET: x86_64-unknown-linux-musl | |
OS: ubuntu-latest | |
GUI_TARGET: x86_64-unknown-linux-gnu | |
- TARGET: x86_64-apple-darwin | |
OS: macos-latest | |
GUI_TARGET: x86_64-apple-darwin | |
- TARGET: aarch64-apple-darwin | |
OS: macos-latest | |
GUI_TARGET: aarch64-apple-darwin | |
- TARGET: x86_64-pc-windows-msvc | |
OS: windows-latest | |
GUI_TARGET: x86_64-pc-windows-msvc | |
runs-on: ${{ matrix.OS }} | |
env: | |
NAME: easytier | |
TARGET: ${{ matrix.TARGET }} | |
OS: ${{ matrix.OS }} | |
GUI_TARGET: ${{ matrix.GUI_TARGET }} | |
OSS_BUCKET: ${{ secrets.ALIYUN_OSS_BUCKET }} | |
needs: pre_job | |
if: needs.pre_job.outputs.should_skip != 'true' | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 21 | |
- name: Install pnpm | |
uses: pnpm/action-setup@v3 | |
with: | |
version: 9 | |
run_install: false | |
- name: Get pnpm store directory | |
shell: bash | |
run: | | |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV | |
- name: Setup pnpm cache | |
uses: actions/cache@v4 | |
with: | |
path: ${{ env.STORE_PATH }} | |
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} | |
restore-keys: | | |
${{ runner.os }}-pnpm-store- | |
- name: Install frontend dependencies | |
run: | | |
cd easytier-gui | |
pnpm install | |
- name: Cargo cache | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/.cargo | |
./target | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
- name: Install rust target | |
run: bash ./.github/workflows/install_rust.sh | |
- name: Setup protoc | |
uses: arduino/setup-protoc@v2 | |
with: | |
# GitHub repo token to use to avoid rate limiter | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Install GUI cross compile (aarch64 only) | |
if: ${{ matrix.TARGET == 'aarch64-unknown-linux-musl' }} | |
run: | | |
# see https://tauri.app/v1/guides/building/linux/ | |
echo "deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ jammy main restricted" | sudo tee /etc/apt/sources.list | |
echo "deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ jammy-updates main restricted" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ jammy universe" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ jammy-updates universe" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ jammy multiverse" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ jammy-updates multiverse" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ jammy-backports main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=amd64] http://security.ubuntu.com/ubuntu/ jammy-security main restricted" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=amd64] http://security.ubuntu.com/ubuntu/ jammy-security universe" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=amd64] http://security.ubuntu.com/ubuntu/ jammy-security multiverse" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy main restricted" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy-updates main restricted" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy universe" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy-updates universe" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy multiverse" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy-updates multiverse" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy-backports main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy-security main restricted" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy-security universe" | sudo tee -a /etc/apt/sources.list | |
echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports jammy-security multiverse" | sudo tee -a /etc/apt/sources.list | |
sudo dpkg --add-architecture arm64 | |
sudo apt-get update && sudo apt-get upgrade -y | |
sudo apt install libwebkit2gtk-4.0-dev:arm64 | |
sudo apt install libssl-dev:arm64 | |
echo "PKG_CONFIG_SYSROOT_DIR=/usr/aarch64-linux-gnu/" >> "$GITHUB_ENV" | |
- name: Build GUI | |
if: ${{ matrix.GUI_TARGET != '' }} | |
uses: tauri-apps/tauri-action@v0 | |
with: | |
projectPath: ./easytier-gui | |
# https://tauri.app/v1/guides/building/linux/#cross-compiling-tauri-applications-for-arm-based-devices | |
args: --verbose --target ${{ matrix.GUI_TARGET }} ${{ matrix.OS == 'ubuntu-latest' && contains(matrix.TARGET, 'aarch64') && '--bundles deb' || '' }} | |
- name: Compress | |
run: | | |
mkdir -p ./artifacts/objects/ | |
if [[ $GITHUB_REF_TYPE =~ ^tag$ ]]; then | |
TAG=$GITHUB_REF_NAME | |
else | |
TAG=$GITHUB_SHA | |
fi | |
# copy gui bundle, gui is built without specific target | |
if [[ $OS =~ ^windows.*$ ]]; then | |
mv ./target/$GUI_TARGET/release/bundle/nsis/*.exe ./artifacts/objects/ | |
elif [[ $OS =~ ^macos.*$ ]]; then | |
mv ./target/$GUI_TARGET/release/bundle/dmg/*.dmg ./artifacts/objects/ | |
elif [[ $OS =~ ^ubuntu.*$ && ! $TARGET =~ ^mips.*$ ]]; then | |
mv ./target/$GUI_TARGET/release/bundle/deb/*.deb ./artifacts/objects/ | |
if [[ $GUI_TARGET =~ ^x86_64.*$ ]]; then | |
# currently only x86 appimage is supported | |
mv ./target/$GUI_TARGET/release/bundle/appimage/*.AppImage ./artifacts/objects/ | |
fi | |
fi | |
tar -cvf ./artifacts/$NAME-$TARGET-$TAG.tar -C ./artifacts/objects/ . | |
rm -rf ./artifacts/objects/ | |
- name: Archive artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: easytier-gui-${{ matrix.OS }}-${{ matrix.TARGET }} | |
path: | | |
./artifacts/* | |
- name: Upload OSS | |
if: ${{ env.OSS_BUCKET != '' }} | |
uses: Menci/upload-to-oss@main | |
with: | |
access-key-id: ${{ secrets.ALIYUN_OSS_ACCESS_ID }} | |
access-key-secret: ${{ secrets.ALIYUN_OSS_ACCESS_KEY }} | |
endpoint: ${{ secrets.ALIYUN_OSS_ENDPOINT }} | |
bucket: ${{ secrets.ALIYUN_OSS_BUCKET }} | |
local-path: ./artifacts/ | |
remote-path: /easytier-releases/${{ github.sha }}/gui | |
no-delete-remote-files: true | |
retry: 5 | |
gui-result: | |
if: needs.pre_job.outputs.should_skip != 'true' && always() | |
runs-on: ubuntu-latest | |
needs: | |
- pre_job | |
- build-gui | |
steps: | |
- name: Mark result as failed | |
if: needs.build-gui.result != 'success' | |
run: exit 1 |