-
Notifications
You must be signed in to change notification settings - Fork 29
164 lines (131 loc) · 4.77 KB
/
rust.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
on:
push:
pull_request:
workflow_dispatch:
# Run automatically every monday
schedule:
- cron: 1 12 * * 1
name: CI
jobs:
clippy:
name: Clippy
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: libgtk-4-dev build-essential
version: 2
- name: Install toolchain
run: |
rustup toolchain install stable
rustup default stable
- uses: Swatinem/rust-cache@v2
- name: Run clippy
run: cargo clippy -- --deny warnings
build_and_test:
name: Build and test
strategy:
fail-fast: false
matrix:
os: ['macos-latest', 'ubuntu-latest', 'windows-latest']
rust: ['stable', '1.75']
runs-on: ${{ matrix.os }}
env:
VCPKG_COMMIT: 01f602195983451bc83e72f4214af2cbc495aa94 # 2024.05.24 release
VCPKG_INSTALLED_DIR: ${{ github.workspace }}/vcpkg/installed
steps:
- uses: actions/checkout@v4
- name: Install toolchain
run: |
rustup toolchain install ${{ matrix.rust }}
rustup default ${{ matrix.rust }}
- uses: Swatinem/rust-cache@v2
with:
env-vars: VCPKG_COMMIT
if: runner.os == 'Windows'
- uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: libgtk-4-dev build-essential
version: 2
if: startsWith(matrix.os, 'ubuntu-')
- name: Install dependencies (macOS)
run: brew install gtk4
if: matrix.os == 'macos-latest'
- name: Install cargo-all-features
run: cargo install cargo-all-features
- name: Install cargo-wix (Windows)
uses: taiki-e/cache-cargo-install-action@v2
with:
tool: cargo-wix
if: matrix.os == 'windows-latest'
- name: Install cargo-license (Windows)
uses: taiki-e/cache-cargo-install-action@v2
with:
tool: cargo-license
if: matrix.os == 'windows-latest'
- name: Install dependencies (Windows)
uses: lukka/run-vcpkg@v11
with:
vcpkgGitCommitId: ${{ env.VCPKG_COMMIT }}
runVcpkgInstall: true
doNotCache: false
if: matrix.os == 'windows-latest'
- name: Set PKG_CONFIG (Windows)
run: echo "PKG_CONFIG=$env:VCPKG_INSTALLED_DIR/x64-windows/tools/pkgconf/pkgconf.exe" | Out-File -FilePath $env:GITHUB_ENV -Append
if: matrix.os == 'windows-latest'
- name: Set PKG_CONFIG_PATH (Windows)
run: echo "PKG_CONFIG_PATH=$env:VCPKG_INSTALLED_DIR/x64-windows/lib/pkgconfig" | Out-File -FilePath $env:GITHUB_ENV -Append
if: matrix.os == 'windows-latest'
- name: Set PATH (Windows)
run: echo "$env:VCPKG_INSTALLED_DIR/x64-windows/bin" | Out-File -FilePath $env:GITHUB_PATH -Append
if: matrix.os == 'windows-latest'
- name: Build
run: cargo build --release
- name: Test
run: cargo test
if: runner.os != 'Linux'
- name: Test under XVFB (Linux)
run: xvfb-run cargo test
if: runner.os == 'Linux'
- name: Check all feature combinations are buildable
run: cargo check-all-features
- name: Compile glib schemas (Windows)
run: |
& "$env:VCPKG_INSTALLED_DIR/x64-windows/tools/glib/glib-compile-schemas.exe" "$env:VCPKG_INSTALLED_DIR/x64-windows/share/glib-2.0/schemas"
if: matrix.os == 'windows-latest'
- name: Gather licenses (Windows)
# If the default shell is used, one command failing does not fail the action.
shell: bash
run: |
pip install license-expression
python -X utf8 wix/rust_licenses.py > wix/LICENSE-static-libraries.txt
python -X utf8 wix/vcpkg_licenses.py > wix/LICENSE-dynamic-libraries.txt
if: matrix.os == 'windows-latest'
- name: Generate components (Windows)
run: |
python wix/generate_components.py
if: matrix.os == 'windows-latest'
- name: Build installer (Windows)
run: cargo wix --no-build --nocapture -v
if: matrix.os == 'windows-latest'
- name: Upload binary
uses: actions/upload-artifact@v4
with:
name: Binaries for ${{ matrix.os }}
path: |
target/release/packetry
target/release/packetry.exe
target/release/packetry-cli
target/release/packetry-cli.exe
if-no-files-found: error
if: matrix.rust == 'stable'
- name: Upload installer (Windows)
uses: actions/upload-artifact@v4
with:
name: Windows installer
path: |
target/wix/*.msi
if-no-files-found: error
if: runner.os == 'Windows' && matrix.rust == 'stable'