Skip to content

Commit 4b51858

Browse files
committed
feat: CI
1 parent 4808d75 commit 4b51858

11 files changed

+823
-0
lines changed

.config/nextest.toml

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[test-groups]
2+
run-in-isolation = { max-threads = 32 }
3+
# these are tests that must not run with other tests concurrently. All tests in
4+
# this group can take up at most 32 threads among them, but each one requiring
5+
# 16 threads also. The effect should be that tests run isolated.
6+
7+
[[profile.ci.overrides]]
8+
filter = 'test(::run_in_isolation::)'
9+
test-group = 'run-in-isolation'
10+
threads-required = 32

.github/dependabot.yaml

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Keep GitHub Actions up to date with GitHub's Dependabot...
2+
# https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot
3+
# https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#package-ecosystem
4+
version: 2
5+
updates:
6+
- package-ecosystem: github-actions
7+
directory: /
8+
groups:
9+
github-actions:
10+
patterns:
11+
- "*" # Group all Actions updates into a single larger pull request
12+
schedule:
13+
interval: weekly

.github/pull_request_template.md

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
## Description
2+
<!-- A summary of what this pull request achieves and a rough list of changes. -->
3+
## Breaking Changes
4+
<!-- Optional, if there are any breaking changes document them, including how to migrate older code. -->
5+
## Notes & open questions
6+
<!-- Any notes, remarks or open questions you have to make about the PR. -->
7+
## Change checklist
8+
- [ ] Self-review.
9+
- [ ] Documentation updates following the [style guide](https://rust-lang.github.io/rfcs/1574-more-api-documentation-conventions.html#appendix-a-full-conventions-text), if relevant.
10+
- [ ] Tests if relevant.
11+
- [ ] All breaking changes documented.

.github/workflows/beta.yaml

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Run tests using the beta Rust compiler
2+
3+
name: Beta Rust
4+
5+
on:
6+
schedule:
7+
# 06:50 UTC every Monday
8+
- cron: '50 6 * * 1'
9+
workflow_dispatch:
10+
11+
concurrency:
12+
group: beta-${{ github.workflow }}-${{ github.ref }}
13+
cancel-in-progress: true
14+
15+
env:
16+
IROH_FORCE_STAGING_RELAYS: "1"
17+
18+
jobs:
19+
tests:
20+
uses: './.github/workflows/tests.yaml'
21+
with:
22+
rust-version: beta
23+
notify:
24+
needs: tests
25+
if: ${{ always() }}
26+
runs-on: ubuntu-latest
27+
steps:
28+
- name: Extract test results
29+
run: |
30+
printf '${{ toJSON(needs) }}\n'
31+
result=$(echo '${{ toJSON(needs) }}' | jq -r .tests.result)
32+
echo TESTS_RESULT=$result
33+
echo "TESTS_RESULT=$result" >>"$GITHUB_ENV"
34+
- name: Notify discord on failure
35+
uses: n0-computer/discord-webhook-notify@v1
36+
if: ${{ env.TESTS_RESULT == 'failure' }}
37+
with:
38+
severity: error
39+
details: |
40+
Rustc beta tests failed in **${{ github.repository }}**
41+
See https://github.com/n0-computer/${{ github.repository }}/actions/workflows/beta.yaml
42+
webhookUrl: ${{ secrets.DISCORD_N0_GITHUB_CHANNEL_WEBHOOK_URL }}

.github/workflows/ci.yaml

+279
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,279 @@
1+
name: CI
2+
3+
on:
4+
pull_request:
5+
types: [ 'labeled', 'unlabeled', 'opened', 'synchronize', 'reopened' ]
6+
merge_group:
7+
push:
8+
branches:
9+
- main
10+
11+
concurrency:
12+
group: ci-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
13+
cancel-in-progress: true
14+
15+
env:
16+
RUST_BACKTRACE: 1
17+
RUSTFLAGS: -Dwarnings
18+
RUSTDOCFLAGS: -Dwarnings
19+
MSRV: "1.76"
20+
SCCACHE_CACHE_SIZE: "10G"
21+
IROH_FORCE_STAGING_RELAYS: "1"
22+
23+
jobs:
24+
tests:
25+
name: CI Test Suite
26+
if: "github.event_name != 'pull_request' || ! contains(github.event.pull_request.labels.*.name, 'flaky-test')"
27+
uses: './.github/workflows/tests.yaml'
28+
29+
cross_build:
30+
name: Cross Build Only
31+
if: "github.event_name != 'pull_request' || ! contains(github.event.pull_request.labels.*.name, 'flaky-test')"
32+
timeout-minutes: 30
33+
runs-on: [self-hosted, linux, X64]
34+
strategy:
35+
fail-fast: false
36+
matrix:
37+
target:
38+
# cross tests are currently broken vor armv7 and aarch64
39+
# see https://github.com/cross-rs/cross/issues/1311
40+
# - armv7-linux-androideabi
41+
# - aarch64-linux-android
42+
# Freebsd execution fails in cross
43+
# - i686-unknown-freebsd # Linking fails :/
44+
- x86_64-unknown-freebsd
45+
# Netbsd execution fails to link in cross
46+
# - x86_64-unknown-netbsd
47+
steps:
48+
- name: Checkout
49+
uses: actions/checkout@v4
50+
with:
51+
submodules: recursive
52+
53+
- name: Install rust stable
54+
uses: dtolnay/rust-toolchain@stable
55+
56+
- name: Cleanup Docker
57+
continue-on-error: true
58+
run: |
59+
docker kill $(docker ps -q)
60+
61+
# See https://github.com/cross-rs/cross/issues/1222
62+
- uses: taiki-e/install-action@cross
63+
64+
- name: build
65+
# cross tests are currently broken vor armv7 and aarch64
66+
# see https://github.com/cross-rs/cross/issues/1311. So on
67+
# those platforms we only build but do not run tests.
68+
run: cross build --all --target ${{ matrix.target }}
69+
env:
70+
RUST_LOG: ${{ runner.debug && 'TRACE' || 'DEBUG'}}
71+
72+
android_build:
73+
name: Android Build Only
74+
if: "github.event_name != 'pull_request' || ! contains(github.event.pull_request.labels.*.name, 'flaky-test')"
75+
timeout-minutes: 30
76+
# runs-on: ubuntu-latest
77+
runs-on: [self-hosted, linux, X64]
78+
strategy:
79+
fail-fast: false
80+
matrix:
81+
target:
82+
- aarch64-linux-android
83+
- armv7-linux-androideabi
84+
steps:
85+
- name: Checkout
86+
uses: actions/checkout@v4
87+
88+
- name: Set up Rust
89+
uses: dtolnay/rust-toolchain@stable
90+
with:
91+
target: ${{ matrix.target }}
92+
- name: Install rustup target
93+
run: rustup target add ${{ matrix.target }}
94+
95+
- name: Setup Java
96+
uses: actions/setup-java@v4
97+
with:
98+
distribution: 'temurin'
99+
java-version: '17'
100+
101+
- name: Setup Android SDK
102+
uses: android-actions/setup-android@v3
103+
104+
- name: Setup Android NDK
105+
uses: arqu/setup-ndk@main
106+
id: setup-ndk
107+
with:
108+
ndk-version: r23
109+
add-to-path: true
110+
111+
- name: Build
112+
env:
113+
ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
114+
run: |
115+
cargo install --version 3.5.4 cargo-ndk
116+
cargo ndk --target ${{ matrix.target }} build
117+
118+
cross_test:
119+
name: Cross Test
120+
if: "github.event_name != 'pull_request' || ! contains(github.event.pull_request.labels.*.name, 'flaky-test')"
121+
timeout-minutes: 30
122+
runs-on: [self-hosted, linux, X64]
123+
strategy:
124+
fail-fast: false
125+
matrix:
126+
target:
127+
- i686-unknown-linux-gnu
128+
steps:
129+
- name: Checkout
130+
uses: actions/checkout@v4
131+
with:
132+
submodules: recursive
133+
134+
- name: Install rust stable
135+
uses: dtolnay/rust-toolchain@stable
136+
137+
- name: Cleanup Docker
138+
continue-on-error: true
139+
run: |
140+
docker kill $(docker ps -q)
141+
142+
# See https://github.com/cross-rs/cross/issues/1222
143+
- uses: taiki-e/install-action@cross
144+
145+
- name: test
146+
run: cross test --all --target ${{ matrix.target }} -- --test-threads=12
147+
env:
148+
RUST_LOG: ${{ runner.debug && 'TRACE' || 'DEBUG' }}
149+
150+
check_semver:
151+
runs-on: ubuntu-latest
152+
env:
153+
RUSTC_WRAPPER: "sccache"
154+
SCCACHE_GHA_ENABLED: "on"
155+
steps:
156+
- uses: actions/checkout@v4
157+
with:
158+
fetch-depth: 0
159+
- name: Install sccache
160+
uses: mozilla-actions/[email protected]
161+
162+
- name: Setup Environment (PR)
163+
if: ${{ github.event_name == 'pull_request' }}
164+
shell: bash
165+
run: |
166+
echo "HEAD_COMMIT_SHA=$(git rev-parse origin/${{ github.base_ref }})" >> ${GITHUB_ENV}
167+
- name: Setup Environment (Push)
168+
if: ${{ github.event_name == 'push' || github.event_name == 'merge_group' }}
169+
shell: bash
170+
run: |
171+
echo "HEAD_COMMIT_SHA=$(git rev-parse origin/main)" >> ${GITHUB_ENV}
172+
- name: Check semver
173+
# uses: obi1kenobi/cargo-semver-checks-action@v2
174+
uses: n0-computer/cargo-semver-checks-action@feat-baseline
175+
with:
176+
package: iroh-gossip
177+
baseline-rev: ${{ env.HEAD_COMMIT_SHA }}
178+
use-cache: false
179+
180+
check_fmt:
181+
timeout-minutes: 30
182+
name: Checking fmt
183+
runs-on: ubuntu-latest
184+
env:
185+
RUSTC_WRAPPER: "sccache"
186+
SCCACHE_GHA_ENABLED: "on"
187+
steps:
188+
- uses: actions/checkout@v4
189+
- uses: dtolnay/rust-toolchain@stable
190+
with:
191+
components: rustfmt
192+
- uses: mozilla-actions/[email protected]
193+
- uses: taiki-e/install-action@cargo-make
194+
- run: cargo make format-check
195+
196+
check_docs:
197+
timeout-minutes: 30
198+
name: Checking docs
199+
runs-on: ubuntu-latest
200+
env:
201+
RUSTC_WRAPPER: "sccache"
202+
SCCACHE_GHA_ENABLED: "on"
203+
steps:
204+
- uses: actions/checkout@v4
205+
- uses: dtolnay/rust-toolchain@master
206+
with:
207+
toolchain: nightly-2024-05-02
208+
- name: Install sccache
209+
uses: mozilla-actions/[email protected]
210+
211+
- name: Docs
212+
run: cargo doc --workspace --all-features --no-deps --document-private-items
213+
env:
214+
RUSTDOCFLAGS: --cfg docsrs
215+
216+
clippy_check:
217+
timeout-minutes: 30
218+
runs-on: ubuntu-latest
219+
env:
220+
RUSTC_WRAPPER: "sccache"
221+
SCCACHE_GHA_ENABLED: "on"
222+
steps:
223+
- uses: actions/checkout@v4
224+
- uses: dtolnay/rust-toolchain@stable
225+
with:
226+
components: clippy
227+
- name: Install sccache
228+
uses: mozilla-actions/[email protected]
229+
230+
# TODO: We have a bunch of platform-dependent code so should
231+
# probably run this job on the full platform matrix
232+
- name: clippy check (all features)
233+
run: cargo clippy --workspace --all-features --all-targets --bins --tests --benches
234+
235+
- name: clippy check (no features)
236+
run: cargo clippy --workspace --no-default-features --lib --bins --tests
237+
238+
- name: clippy check (default features)
239+
run: cargo clippy --workspace --all-targets
240+
241+
msrv:
242+
if: "github.event_name != 'pull_request' || ! contains(github.event.pull_request.labels.*.name, 'flaky-test')"
243+
timeout-minutes: 30
244+
name: Minimal Supported Rust Version
245+
runs-on: ubuntu-latest
246+
env:
247+
RUSTC_WRAPPER: "sccache"
248+
SCCACHE_GHA_ENABLED: "on"
249+
steps:
250+
- uses: actions/checkout@v4
251+
- uses: dtolnay/rust-toolchain@master
252+
with:
253+
toolchain: ${{ env.MSRV }}
254+
- name: Install sccache
255+
uses: mozilla-actions/[email protected]
256+
257+
- name: Check MSRV all features
258+
run: |
259+
cargo +$MSRV check --workspace --all-targets
260+
261+
cargo_deny:
262+
timeout-minutes: 30
263+
name: cargo deny
264+
runs-on: ubuntu-latest
265+
steps:
266+
- uses: actions/checkout@v4
267+
- uses: EmbarkStudios/cargo-deny-action@v2
268+
with:
269+
arguments: --workspace --all-features
270+
command: check
271+
command-arguments: "-Dwarnings"
272+
273+
codespell:
274+
timeout-minutes: 30
275+
runs-on: ubuntu-latest
276+
steps:
277+
- uses: actions/checkout@v4
278+
- run: pip install --user codespell[toml]
279+
- run: codespell --ignore-words-list=ans,atmost,crate,inout,ratatui,ser,stayin,swarmin,worl --skip=CHANGELOG.md

0 commit comments

Comments
 (0)