-
Notifications
You must be signed in to change notification settings - Fork 25
144 lines (118 loc) · 3.62 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
name: Rust
on: [push, pull_request, workflow_dispatch]
env:
SHELL: /bin/bash
CARGO_TERM_COLOR: never
SCCACHE_GHA_ENABLED: "true"
CC: clang
CXX: clang++
CCACHE: sccache
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
rust: [stable, beta]
os: [windows, macos, linux]
arch: [x86_64, aarch64]
include:
- os: windows
arch: x86_64
runner: windows-latest
target: x86_64-pc-windows-msvc
job: test
- os: windows
arch: aarch64
runner: windows-latest
target: aarch64-pc-windows-msvc
- os: macos
arch: x86_64
runner: macos-13
target: x86_64-apple-darwin
job: test
- os: macos
arch: aarch64
runner: macos-14
target: aarch64-apple-darwin
job: test
- os: linux
arch: x86_64
runner: ubuntu-latest
target: x86_64-unknown-linux-gnu
job: test
exclude:
- os: linux
arch: aarch64
env:
TARGET: ${{ matrix.target }}
steps:
- uses: actions/checkout@v4
- name: Install Rust Toolchain
uses: dtolnay/rust-toolchain@master
with:
targets: ${{ matrix.target }}
toolchain: ${{ matrix.rust }}
- name: Setup Dependencies
uses: ./.github/actions/setup
with:
os: ${{ matrix.os }}
cache-id: ${{ matrix.os }}-${{ matrix.arch }}
- name: Build Windows
if: matrix.os == 'windows'
run: |
just build-release -v --locked --target $env:TARGET
Rename-Item -Path .\target\$env:TARGET\release\cli.exe -NewName spiderfire.exe
- name: Build POSIX
if: matrix.os == 'macos' || matrix.os == 'linux'
run: |
just build-release -v --locked --target $TARGET
mv ./target/$TARGET/release/cli ./target/$TARGET/release/spiderfire
- name: Run Tests
if: matrix.job == 'test'
env:
NEXTEST_PROFILE: ci
shell: bash
run: just test-release -v --target $TARGET
- name: Upload Executables as Artifacts
uses: actions/upload-artifact@v4
if: matrix.rust == 'stable'
with:
name: spiderfire-${{ github.sha }}-${{ matrix.os }}-${{ matrix.arch }}
path: target/${{ matrix.target }}/release/spiderfire${{ matrix.os == 'windows' && '.exe' || '' }}
if-no-files-found: error
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Stable Rust Toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- name: Install Nightly Rust Toolchain
uses: dtolnay/rust-toolchain@nightly
with:
components: rustfmt
- name: Setup Dependencies
uses: ./.github/actions/setup
with:
cache-id: lint
- name: Lint
run: just lint
unused-dependencies:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust Toolchain
uses: dtolnay/rust-toolchain@nightly
- name: Setup Dependencies
uses: ./.github/actions/setup
with:
cache-id: udeps
- name: Install cargo-udeps
uses: taiki-e/install-action@cargo-udeps
- name: Check for Unused Dependencies
run: cargo udeps --all-targets --locked