-
-
Notifications
You must be signed in to change notification settings - Fork 8
157 lines (125 loc) · 3.69 KB
/
build.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
name: Build & Test
on:
release:
types: [published]
pull_request:
branches:
- "trunk"
push:
branches:
- "trunk"
permissions:
contents: write
env:
CARGO_TERM_COLOR: always
CONTRIBUTORS_TOKEN: ${{ secrets.CONTRIBUTORS_TOKEN }}
IS_CI: true
IS_RELEASE: ${{ startsWith(github.ref, 'refs/tags/') }}
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_PUBLISH_TOKEN }}
jobs:
cargo-deny:
runs-on: ubuntu-latest
continue-on-error: true
steps:
- uses: actions/checkout@v4.2.2
- uses: EmbarkStudios/cargo-deny-action@v2.0.4
clippy:
name: Clippy
runs-on: windows-latest
steps:
- uses: actions/checkout@v4.2.2
- uses: Swatinem/rust-cache@v2.7.5
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- name: Run rust-clippy
run: cargo clippy --all-features
continue-on-error: true
format:
name: Formatting
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.2.2
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- name: Check Formatting
run: cargo fmt --all --check
test:
name: Test
runs-on: windows-latest
steps:
- uses: actions/checkout@v4.2.2
- uses: Swatinem/rust-cache@v2.7.5
- name: Install and setup Scoop
uses: MinoruSekine/setup-scoop@v4.0.1
with:
buckets: extras java
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Build and Test
run: cargo test --all --features beta
build:
strategy:
matrix:
arch: [x86_64, i686, aarch64]
name: Build for ${{ matrix.arch }}
runs-on: windows-latest
steps:
- uses: actions/checkout@v4.2.2
- uses: Swatinem/rust-cache@v2.7.5
with:
key: build-${{ matrix.arch }}
- uses: extractions/setup-just@v2
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Debug build
run: cargo b --all --features beta --target ${{ matrix.arch }}-pc-windows-msvc
publish:
if: ${{ startsWith(github.ref, 'refs/tags/') }}
name: Publish
runs-on: windows-latest
needs: [cargo-deny, build, test, clippy, format]
steps:
- uses: actions/checkout@v4.2.2
- uses: extractions/setup-just@v2
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
# - name: Verify crate
# run: cargo publish --dry-run
# - name: Check version matches tag
# run: |
# $version = (cargo metadata --format-version 1 | ConvertFrom-Json).packages[0].version
# $tag = "${{ github.ref_name }}"
# if ($tag -ne "v$version") {
# throw "Version mismatch: tag=$tag, Cargo.toml=$version"
# }
- name: Publish to crates.io
if: ${{ !github.event.release.prerelease }}
run: cargo publish
- name: Build and Package
if: ${{ !github.event.release.prerelease }}
run: just release-all
- name: Beta Build and Package
if: ${{ github.event.release.prerelease }}
run: just beta-release-all
- name: Upload a Build Artifact
uses: actions/upload-artifact@v4.4.3
with:
name: package.zip
path: release/*
- name: Upload & Publish
uses: softprops/action-gh-release@v2.0.4
with:
files: |
release/*.exe
release/*.exe.sha256
- name: VirusTotal Scan
uses: crazy-max/ghaction-virustotal@v4
with:
update_release_body: true
vt_api_key: ${{ secrets.VT_API_KEY }}
files: |
.exe$