Repository navigation
150 lines (127 loc) · 5.64 KB
/
Copy pathci.yml
File metadata and controls
150 lines (127 loc) · 5.64 KB
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
name: CI
# 门禁:clippy 两端零告警(本地约定见 AGENTS.md「Lint state」)。
# 独立于 deploy-web.yml —— 不让一处 lint 挡住线上部署,但 PR/推送里可见。
on:
push:
branches: [master]
pull_request:
workflow_dispatch:
permissions:
contents: read
jobs:
# wasm 目标不需要 ffmpeg(build.rs 在非 desktop 特性下直接返回)
clippy-web:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Install Rust toolchain (wasm32)
uses: dtolnay/rust-toolchain@6bed0761d98439e5a578e2877258200ad565ba87 # stable branch
with:
targets: wasm32-unknown-unknown
components: clippy
# registry/git 用跨 workflow 共享键(cargo-…):此前四个 job 各用互不相交
# 的键前缀,clippy-desktop 刚下载的 300+ crates registry,release/tag 构建
# 完全复用不到,每次重新下载解压。target 保持 job 专属,互不污染。
- name: Cache cargo registry (shared)
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: |
~/.cargo/registry
~/.cargo/git
key: cargo-${{ runner.os }}-${{ hashFiles('Cargo.lock') }}
restore-keys: |
cargo-${{ runner.os }}-
- name: Cache build output
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: target
key: clippy-web-${{ runner.os }}-${{ hashFiles('Cargo.lock') }}
restore-keys: |
clippy-web-${{ runner.os }}-
- name: Clippy (wasm32)
run: cargo clippy --locked --tests --target wasm32-unknown-unknown --no-default-features --features web -- -D warnings
# 测试代码也要在 wasm 目标下编译过:cfg(wasm32) 分支的测试此前从未被
# 任何命令编译(首开时暴露 12 个编译错),光 lint 主代码挡不住它烂掉。
- name: Compile tests (wasm32)
run: cargo test --locked --target wasm32-unknown-unknown --no-default-features --features web --no-run
- name: Test web engines (Node)
run: node --test assets/*.test.js
# 两个 target 看到的 cfg 不同(对方的平台专属项会被报成 never used),所以两个都要跑
clippy-desktop:
runs-on: windows-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Install Rust toolchain (MSVC)
uses: dtolnay/rust-toolchain@6bed0761d98439e5a578e2877258200ad565ba87 # stable branch
with:
components: clippy
- name: Cache cargo registry (shared)
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: |
~/.cargo/registry
~/.cargo/git
key: cargo-${{ runner.os }}-${{ hashFiles('Cargo.lock') }}
restore-keys: |
cargo-${{ runner.os }}-
- name: Cache build output
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: target
key: clippy-desktop-${{ runner.os }}-${{ hashFiles('Cargo.lock') }}
restore-keys: |
clippy-desktop-${{ runner.os }}-
# 与 release-desktop.yml 同一份预构建静态库(clippy 也要过 build.rs);
# key 跟着取件脚本走,改 pin 就自动换缓存。
- name: Cache ffmpeg static libs
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: ffmpeg-dist
key: ffmpeg-static-win-${{ hashFiles('scripts/fetch-ffmpeg-static.sh') }}
- name: Fetch prebuilt ffmpeg static libs
shell: bash
run: |
if [ ! -f ffmpeg-dist/lib/avcodec.lib ]; then
bash scripts/fetch-ffmpeg-static.sh
fi
echo "FFMPEG_DIR=$GITHUB_WORKSPACE/ffmpeg-dist" >> "$GITHUB_ENV"
- name: Clippy (desktop)
run: cargo clippy --locked --tests -- -D warnings
# 单测门禁:此前 cargo test 只在 tag 触发的 release workflow 里跑,
# 回归可以全红合入 master。与 clippy 并行;夹具/环境同 clippy-desktop。
test-desktop:
runs-on: windows-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Install Rust toolchain (MSVC)
uses: dtolnay/rust-toolchain@6bed0761d98439e5a578e2877258200ad565ba87 # stable branch
- name: Cache cargo registry (shared)
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: |
~/.cargo/registry
~/.cargo/git
key: cargo-${{ runner.os }}-${{ hashFiles('Cargo.lock') }}
restore-keys: |
cargo-${{ runner.os }}-
- name: Cache build output
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: target
key: test-desktop-${{ runner.os }}-${{ hashFiles('Cargo.lock') }}
restore-keys: |
test-desktop-${{ runner.os }}-
- name: Cache ffmpeg static libs
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: ffmpeg-dist
key: ffmpeg-static-win-${{ hashFiles('scripts/fetch-ffmpeg-static.sh') }}
- name: Fetch prebuilt ffmpeg static libs
shell: bash
run: |
if [ ! -f ffmpeg-dist/lib/avcodec.lib ]; then
bash scripts/fetch-ffmpeg-static.sh
fi
echo "FFMPEG_DIR=$GITHUB_WORKSPACE/ffmpeg-dist" >> "$GITHUB_ENV"
- name: Test (desktop)
run: cargo test --locked