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
name: Platform Compatibility
on:
push:
branches:
pull_request:
branches:
jobs:
test:
name: Build & Test (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os:
rust:
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Rust (${{ matrix.rust }})
uses: dtolnay/rust-toolchain@stable
with:
toolchain: ${{ matrix.rust }}
- name: Cache Cargo registry & build
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-
- name: Install ODBC (Ubuntu)
if: matrix.os == 'ubuntu-latest'
run: |
sudo apt-get update
sudo apt-get install -y unixodbc-dev
- name: Install ODBC (macOS)
if: matrix.os == 'macos-latest'
run: |
brew install unixodbc
- name: Build
run: cargo build --verbose
- name: Run tests
run: cargo test --verbose
security-audit:
name: Security Audit
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install cargo-audit
run: cargo install cargo-audit --locked
- name: Audit Rust dependencies
# Ignored advisories — all transitive deps Elusion cannot control:
# RUSTSEC-2026-0041: lz4_flex — datafusion/parquet dep
# RUSTSEC-2026-0037: quinn-proto — reqwest/object_store dep
# RUSTSEC-2026-0049: rustls-webpki — reqwest/rustls dep
# RUSTSEC-2026-0002: lru IterMut — mysql_async dep (low severity)
# RUSTSEC-2024-0384: instant — azure_core dep (unmaintained warning)
# RUSTSEC-2024-0436: paste — parquet/datafusion dep (unmaintained warning)
# RUSTSEC-2025-0134: rustls-pemfile — object_store dep (unmaintained warning)
run: |
cargo audit \
--ignore RUSTSEC-2026-0041 \
--ignore RUSTSEC-2026-0037 \
--ignore RUSTSEC-2026-0049 \
--ignore RUSTSEC-2026-0002 \
--ignore RUSTSEC-2024-0384 \
--ignore RUSTSEC-2024-0436 \
--ignore RUSTSEC-2025-0134
# ─────────────────────────────────────────────
# HTTPS-only check — ensure no plain HTTP URLs
# ─────────────────────────────────────────────
tls-check:
name: HTTPS Check
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Check no plain HTTP URLs in source
run: |
if grep -rn "http://" src/ --include="*.rs"; then
echo "Plain HTTP URLs found in source. Use HTTPS instead."
exit 1
fi
echo "No plain HTTP URLs found."