fix gui minor-bugs (#54) #195
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: Rust | |
on: | |
push: | |
branches: [ "develop", "main" ] | |
pull_request: | |
branches: [ "develop", "main" ] | |
env: | |
CARGO_TERM_COLOR: always | |
defaults: | |
run: | |
# necessary for windows | |
shell: bash | |
jobs: | |
build: | |
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 }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Setup protoc | |
uses: arduino/setup-protoc@v2 | |
with: | |
# GitHub repo token to use to avoid rate limiter | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 21 | |
cache: 'yarn' | |
cache-dependency-path: easytier-gui/yarn.lock | |
- name: Install Yarn | |
run: npm install -g yarn | |
- name: Cargo cache | |
uses: actions/cache@v4.0.0 | |
with: | |
path: | | |
~/.cargo | |
./target | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
- name: Install rust target | |
run: | | |
# dependencies are only needed on ubuntu as that's the only place where | |
# we make cross-compilation | |
if [[ $OS =~ ^ubuntu.*$ ]]; then | |
sudo apt-get update && sudo apt-get install -qq crossbuild-essential-arm64 crossbuild-essential-armhf musl-tools | |
# for easytier-gui | |
sudo apt install libwebkit2gtk-4.0-dev \ | |
build-essential \ | |
curl \ | |
wget \ | |
file \ | |
libssl-dev \ | |
libgtk-3-dev \ | |
libayatana-appindicator3-dev \ | |
librsvg2-dev | |
# curl -s musl.cc | grep mipsel | |
case $TARGET in | |
mipsel-unknown-linux-musl) | |
MUSL_URI=mipsel-linux-musl-cross | |
;; | |
aarch64-unknown-linux-musl) | |
MUSL_URI=aarch64-linux-musl-cross | |
;; | |
armv7-unknown-linux-musleabihf) | |
MUSL_URI=armv7l-linux-musleabihf-cross | |
;; | |
arm-unknown-linux-musleabihf) | |
MUSL_URI=arm-linux-musleabihf-cross | |
;; | |
mips-unknown-linux-musl) | |
MUSL_URI=mips-linux-musl-cross | |
;; | |
esac | |
if [ -n "$MUSL_URI" ]; then | |
mkdir -p ./musl_gcc | |
wget -c https://musl.cc/$MUSL_URI.tgz -P ./musl_gcc/ | |
tar zxf ./musl_gcc/$MUSL_URI.tgz -C ./musl_gcc/ | |
sudo ln -s $(pwd)/musl_gcc/$MUSL_URI/bin/*gcc /usr/bin/ | |
fi | |
fi | |
# see https://github.com/rust-lang/rustup/issues/3709 | |
rustup set auto-self-update disable | |
rustup install 1.75 | |
rustup default 1.75 | |
rustup target add $TARGET | |
rustup target add $GUI_TARGET | |
- name: Run build | |
run: cargo build --release --verbose --target $TARGET | |
- name: Install for aarch64 gui cross compile | |
run: | | |
# see https://tauri.app/v1/guides/building/linux/ | |
if [[ $TARGET == "aarch64-unknown-linux-musl" ]]; then | |
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" | |
fi | |
- name: Run build GUI | |
run: | | |
cd easytier-gui | |
yarn install | |
if [[ $OS =~ ^ubuntu.*$ && ! $GUI_TARGET =~ ^x86_64.*$ ]]; then | |
# only build deb for non-x86_64 linux | |
yarn tauri build -- --target $GUI_TARGET --verbose --bundles deb | |
else | |
yarn tauri build -- --target $GUI_TARGET --verbose | |
fi | |
- name: Compress | |
run: | | |
mkdir -p ./artifacts/objects/ | |
# windows is the only OS using a different convention for executable file name | |
if [[ $OS =~ ^windows.*$ ]]; then | |
SUFFIX=.exe | |
cp easytier/third_party/Packet.dll ./artifacts/objects/ | |
cp easytier/third_party/wintun.dll ./artifacts/objects/ | |
fi | |
if [[ $GITHUB_REF_TYPE =~ ^tag$ ]]; then | |
TAG=$GITHUB_REF_NAME | |
else | |
TAG=$GITHUB_SHA | |
fi | |
mv ./target/$TARGET/release/easytier-core"$SUFFIX" ./artifacts/objects/ | |
mv ./target/$TARGET/release/easytier-cli"$SUFFIX" ./artifacts/objects/ | |
# 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.*$ ]]; 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-${{ matrix.OS }}-${{ matrix.TARGET }} | |
path: | | |
./artifacts/* | |
- name: Upload OSS | |
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 }}/ | |
no-delete-remote-files: true | |
retry: 5 | |
test: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Setup protoc | |
uses: arduino/setup-protoc@v2 | |
with: | |
# GitHub repo token to use to avoid rate limiter | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Setup tools for test | |
run: sudo apt install bridge-utils | |
- name: Setup system for test | |
run: | | |
sudo sysctl net.bridge.bridge-nf-call-iptables=0 | |
sudo sysctl net.bridge.bridge-nf-call-ip6tables=0 | |
- name: Cargo cache | |
uses: actions/cache@v4.0.0 | |
with: | |
path: | | |
~/.cargo | |
./target | |
key: ${{ runner.os }}-cargo-test-${{ hashFiles('**/Cargo.lock') }} | |
- name: Run tests | |
run: | | |
sudo -E env "PATH=$PATH" cargo test --verbose | |
sudo chown -R $USER:$USER ./target | |
sudo chown -R $USER:$USER ~/.cargo |