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
name: CI
on:
push:
branches:
pull_request:
branches:
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
jobs:
# ---------------------------------------------------------------------------
# Format check (fast, fail-fast)
# ---------------------------------------------------------------------------
fmt:
name: rustfmt
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust (stable + rustfmt)
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- name: cargo fmt --check
run: cargo fmt --all -- --check
# ---------------------------------------------------------------------------
# Clippy: run across every feature combo we test
# Uses stable toolchain. Clippy on MSRV / beta would just duplicate noise.
# ---------------------------------------------------------------------------
clippy:
name: clippy (${{ matrix.name }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- name: all-features
flags: --all-features
- name: default-features
flags: ""
- name: no-default-features
flags: --no-default-features
- name: artifact+weak (default)
flags: --features "artifact-binding weak-algos"
- name: artifact+weak (no-default)
flags: --features "artifact-binding weak-algos" --no-default-features
steps:
- uses: actions/checkout@v4
- name: Install Rust (stable + clippy)
uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- uses: Swatinem/rust-cache@v2
with:
key: clippy-${{ matrix.name }}
- name: cargo clippy ${{ matrix.flags }}
run: cargo clippy --workspace --all-targets ${{ matrix.flags }} -- -D warnings
# ---------------------------------------------------------------------------
# Tests: matrix on Rust toolchain X feature combo, Ubuntu only
# ---------------------------------------------------------------------------
test:
name: test ${{ matrix.rust }} / ${{ matrix.features.name }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
rust:
features:
- name: default
flags: ""
- name: all-features
flags: --all-features
- name: no-default-features
flags: --no-default-features
- name: artifact+weak (default)
flags: --features "artifact-binding weak-algos"
- name: artifact+weak (no-default)
flags: --features "artifact-binding weak-algos" --no-default-features
steps:
- uses: actions/checkout@v4
- name: Install Rust ${{ matrix.rust }}
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.rust }}
- uses: Swatinem/rust-cache@v2
with:
key: test-${{ matrix.rust }}-${{ matrix.features.name }}
- name: cargo test ${{ matrix.features.flags }}
# Exclude the keycloak example from default test runs — it requires
# SAML_RUN_KEYCLOAK_E2E=1 and a live Keycloak instance.
run: cargo test --workspace --exclude saml-keycloak-example ${{ matrix.features.flags }}
# ---------------------------------------------------------------------------
# Cross-platform smoke test: default features only, stable only.
# Keeps CI minutes reasonable; full matrix lives on Linux.
# ---------------------------------------------------------------------------
cross-platform:
name: smoke (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os:
steps:
- uses: actions/checkout@v4
- name: Install Rust (stable)
uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
with:
key: smoke-${{ matrix.os }}
- name: cargo test (default features)
run: cargo test --workspace --exclude saml-keycloak-example
# ---------------------------------------------------------------------------
# Documentation must build cleanly.
# ---------------------------------------------------------------------------
doc:
name: rustdoc
runs-on: ubuntu-latest
env:
RUSTDOCFLAGS: "-D warnings"
steps:
- uses: actions/checkout@v4
- name: Install Rust (stable)
uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
with:
key: doc
- name: cargo doc --all-features
run: cargo doc --workspace --all-features --no-deps
# ---------------------------------------------------------------------------
# Future home of the Keycloak e2e suite — gated by SAML_RUN_KEYCLOAK_E2E=1
# and a docker-spun Keycloak. Left as a stub for now.
# ---------------------------------------------------------------------------
# keycloak-e2e:
# name: keycloak e2e
# runs-on: ubuntu-latest
# services:
# keycloak:
# image: quay.io/keycloak/keycloak:25.0
# ports: ["8080:8080"]
# env:
# KEYCLOAK_ADMIN: admin
# KEYCLOAK_ADMIN_PASSWORD: admin
# options: --health-cmd "curl -fsS http://localhost:8080/health/ready || exit 1"
# steps:
# - uses: actions/checkout@v4
# - uses: dtolnay/rust-toolchain@stable
# - uses: Swatinem/rust-cache@v2
# - name: Run keycloak e2e tests
# env:
# SAML_RUN_KEYCLOAK_E2E: "1"
# run: cargo test -p saml-keycloak-example --tests