1+ name : CI
2+
3+ permissions :
4+ contents : write
5+
6+ on :
7+ push :
8+ branches : [ main, test ]
9+ tags :
10+ - ' v*'
11+ pull_request :
12+ branches : [ main, test ]
13+ release :
14+ types : [created]
15+
16+ jobs :
17+ build :
18+ name : Build on ${{ matrix.os }} (${{ matrix.target }})
19+ runs-on : ${{ matrix.os }}
20+ strategy :
21+ fail-fast : false
22+ matrix :
23+ include :
24+ - os : macos-latest
25+ target : x86_64-apple-darwin
26+ - os : macos-latest
27+ target : aarch64-apple-darwin
28+ - os : ubuntu-latest
29+ target : x86_64-unknown-linux-gnu
30+ - os : windows-latest
31+ target : x86_64-pc-windows-msvc
32+ steps :
33+ - uses : actions/checkout@v4
34+ - name : Install Rust toolchain
35+ uses : actions-rs/toolchain@v1
36+ with :
37+ toolchain : stable
38+ target : ${{ matrix.target }}
39+ override : true
40+ - name : Cache cargo registry
41+ uses : actions/cache@v4
42+ with :
43+ path : |
44+ ~/.cargo/registry
45+ ~/.cargo/git
46+ target
47+ key : ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
48+ - name : Install dependencies (Linux/macOS)
49+ if : runner.os != 'Windows'
50+ run : |
51+ if [[ "$RUNNER_OS" == "Linux" ]]; then
52+ sudo apt-get update
53+ sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev imagemagick
54+ elif [[ "$RUNNER_OS" == "macOS" ]]; then
55+ brew install imagemagick create-dmg
56+ fi
57+ - name : Install dependencies (Windows)
58+ if : runner.os == 'Windows'
59+ run : |
60+ choco install imagemagick nsis -y
61+ - name : Build
62+ run : |
63+ if [[ "$RUNNER_OS" == "Windows" ]]; then
64+ ./scripts/build.ps1 -SkipInstaller
65+ else
66+ ./scripts/build.sh
67+ fi
68+ - name : Package (macOS)
69+ if : runner.os == 'macOS'
70+ run : |
71+ ./scripts/build.sh
72+ - name : Package (Windows)
73+ if : runner.os == 'Windows'
74+ run : |
75+ ./scripts/build.ps1
76+ - name : Package (Linux)
77+ if : runner.os == 'Linux'
78+ run : |
79+ ./scripts/build.sh
80+ - name : Upload Artifacts
81+ uses : actions/upload-artifact@v4
82+ with :
83+ name : ${{ matrix.os }}-${{ matrix.target }}-artifacts
84+ path : |
85+ dist/**/*
86+ target/release/*
87+
88+ release :
89+ name : Release
90+ needs : build
91+ runs-on : ubuntu-latest
92+ if : startsWith(github.ref, 'refs/tags/v')
93+ steps :
94+ - uses : actions/checkout@v4
95+ - name : Download all build artifacts
96+ uses : actions/download-artifact@v4
97+ with :
98+ path : ./artifacts
99+ - name : Gather release assets
100+ run : |
101+ mkdir -p release-assets
102+ find ./artifacts -type f \( -name '*.dmg' -o -name '*.zip' -o -name '*.exe' -o -name '*.app' -o -name '*.tar.gz' -o -name '*.AppImage' -o -name '*.deb' -o -name '*.rpm' \) -exec cp {} release-assets/ \;
103+ - name : Create GitHub Release
104+ uses : softprops/action-gh-release@v2
105+ with :
106+ files : release-assets/*
107+ env :
108+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
0 commit comments