-
Notifications
You must be signed in to change notification settings - Fork 2
175 lines (142 loc) · 5.27 KB
/
Copy pathci.yml
File metadata and controls
175 lines (142 loc) · 5.27 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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
name: CI
on:
push:
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
env:
# Lint levels live in `[lints]` in Cargo.toml so local and CI runs agree;
# don't add a blanket RUSTFLAGS here.
CARGO_TERM_COLOR: always
jobs:
rust:
name: Rust
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
# This job executes repository code (cargo build/test); don't persist
# the token in git config.
persist-credentials: false
submodules: true
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- uses: Swatinem/rust-cache@v2
- name: Check formatting
run: cargo fmt --all -- --check
- name: Clippy
run: cargo clippy --all-targets --all-features -- -D warnings
- name: Build
run: cargo build --all-targets --all-features
- name: Test
run: cargo test --all-features
- name: Test default features
run: cargo test
- name: Install cargo-llvm-cov
uses: taiki-e/install-action@v2
with:
tool: cargo-llvm-cov
- name: Enforce per-file line coverage
shell: bash
run: |
set -euo pipefail
report="target/coverage.json"
cargo llvm-cov --all-features --all-targets --json --output-path "$report"
# Anchored at the workspace root: this repo is vendored inside other
# checkouts, so an unanchored "/vendor/" match would exclude the
# crate's own sources when it is built from one of those paths.
below_threshold="$(jq -r --arg root "$PWD" '
.data[0].files[]
| select(.filename | contains("/src/"))
# Vendored submodules carry code from another repository, whose
# coverage is not this one to enforce. They only entered the report
# when the module crate made tinybus part of the build graph.
# (No apostrophes here: the whole jq program is single-quoted.)
| select(.filename | startswith($root + "/vendor/") | not)
| select(.summary.lines.percent < 90)
| "\(.filename): \(.summary.lines.percent)%"
' "$report")"
if [[ -n "$below_threshold" ]]; then
echo "Files below 90% line coverage:" >&2
echo "$below_threshold" >&2
exit 1
fi
module-e2e:
name: TinyBus module E2E
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
persist-credentials: false
submodules: true
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Build the loadable module
run: cargo build --locked --release --package tinywallet-module
# The only test that exercises the real cdylib, the ABI and manifest
# gates, the dynamic loader and a broker routing frames. It asserts that
# signing through the module equals signing in-process, byte for byte.
- name: Load the module and sign on every chain
env:
TINYWALLET_TEST_MODULE: ${{ github.workspace }}/target/release/libtinywallet_module.so
run: cargo test --locked --release --package tinywallet-module --test module_e2e -- --ignored
docs:
name: Docs
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
persist-credentials: false
submodules: true
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Build documentation
env:
RUSTDOCFLAGS: -D warnings
run: cargo doc --no-deps --all-features
msrv:
name: Minimum supported Rust version
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
persist-credentials: false
submodules: true
- name: Read rust-version from Cargo.toml
id: msrv
run: |
set -euo pipefail
msrv="$(cargo metadata --format-version 1 --no-deps \
| jq -r '.packages[0].rust_version')"
if [[ -z "$msrv" || "$msrv" == "null" ]]; then
echo "package.rust-version is not set in Cargo.toml" >&2
exit 1
fi
echo "version=$msrv" >> "$GITHUB_OUTPUT"
- uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ steps.msrv.outputs.version }}
- uses: Swatinem/rust-cache@v2
# Scoped to the published library on purpose. `tinywallet-module` is
# `publish = false` and depends on tinybus, whose macros use let-chains
# and so need a newer compiler than this crate promises its consumers.
# Holding the module to the library's MSRV would either fail here or
# force the library's MSRV up for a crate nobody depends on.
- name: Build with the declared MSRV
run: cargo build --package tinywallet --all-targets --all-features
supply-chain:
name: Supply chain
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
persist-credentials: false
submodules: true
- name: Check advisories, licenses, bans, and sources
uses: EmbarkStudios/cargo-deny-action@v2
with:
command: check all