Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .cargo/audit.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
# 0.103.x (the patched copy, also in Cargo.lock). The vulnerable 0.102 code is
# linked but never executed. The relay is also an opt-in remote feature.
#
# Revisit when rumqttc ships a webpki-0.103 release, or if relay TLS adds custom
# certificate verification (CRLs / name constraints).
# Revisit by 2026-10-21, when rumqttc ships a webpki-0.103 release, or if relay
# TLS adds custom certificate verification (CRLs / name constraints).

[advisories]
ignore = [
Expand Down
8 changes: 4 additions & 4 deletions .github/build-setup.yml
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
- name: Set up JDK 17 (required by Android SDK tools)
if: ${{ contains(matrix.targets, 'aarch64-linux-android') }}
uses: actions/setup-java@v5.2.0
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
with:
java-version: '17'
distribution: temurin
- name: Set up Android SDK
if: ${{ contains(matrix.targets, 'aarch64-linux-android') }}
uses: android-actions/setup-android@v4.0.1
uses: android-actions/setup-android@40fd30fb8d7440372e1316f5d1809ec01dcd3699 # v4.0.1
- name: Install Android NDK
if: ${{ contains(matrix.targets, 'aarch64-linux-android') }}
run: yes | sdkmanager "ndk;25.2.9519653" > /dev/null
run: yes | sdkmanager "ndk;27.3.13750724" > /dev/null
- name: Configure Android target
if: ${{ contains(matrix.targets, 'aarch64-linux-android') }}
shell: bash
run: |
rustup target add aarch64-linux-android
NDK_BIN="$ANDROID_HOME/ndk/25.2.9519653/toolchains/llvm/prebuilt/linux-x86_64/bin"
NDK_BIN="$ANDROID_HOME/ndk/27.3.13750724/toolchains/llvm/prebuilt/linux-x86_64/bin"
echo "CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER=$NDK_BIN/aarch64-linux-android24-clang" >> "$GITHUB_ENV"
echo "CC_aarch64_linux_android=$NDK_BIN/aarch64-linux-android24-clang" >> "$GITHUB_ENV"
echo "AR_aarch64_linux_android=$NDK_BIN/llvm-ar" >> "$GITHUB_ENV"
26 changes: 15 additions & 11 deletions .github/workflows/build-wheels.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,51 +37,55 @@ jobs:
manylinux: auto
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false

- name: Build wheel
uses: PyO3/maturin-action@v1.50.1
uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0
with:
target: ${{ matrix.target }}
args: --release --out dist
manylinux: ${{ matrix.manylinux }}
docker-options: ${{ matrix.docker-options || '' }}

- name: Upload wheel
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: wheel-${{ matrix.target }}
path: dist/*.whl

build-android:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false

- uses: actions/setup-java@v5.2.0
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
with:
java-version: '17'
distribution: temurin

- uses: android-actions/setup-android@v4.0.1
- uses: android-actions/setup-android@40fd30fb8d7440372e1316f5d1809ec01dcd3699 # v4.0.1

- name: Install NDK r25b
run: yes | sdkmanager "ndk;25.2.9519653" > /dev/null
- name: Install NDK r27d
run: yes | sdkmanager "ndk;27.3.13750724" > /dev/null

- name: Build wheel
run: |
rustup target add aarch64-linux-android
pip install maturin==1.12.6
pip install maturin==1.14.1

NDK_BIN="$ANDROID_HOME/ndk/25.2.9519653/toolchains/llvm/prebuilt/linux-x86_64/bin"
NDK_BIN="$ANDROID_HOME/ndk/27.3.13750724/toolchains/llvm/prebuilt/linux-x86_64/bin"
export CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="$NDK_BIN/aarch64-linux-android24-clang"
export CC_aarch64_linux_android="$NDK_BIN/aarch64-linux-android24-clang"
export AR_aarch64_linux_android="$NDK_BIN/llvm-ar"

maturin build --release --target aarch64-linux-android --out dist

- name: Upload wheel
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: wheel-aarch64-linux-android
path: dist/*.whl
83 changes: 50 additions & 33 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,35 +2,52 @@ name: CI

on: [push, pull_request]

permissions:
contents: read

jobs:
rust-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
# Pinned so a new stable release can't fail CI on a fresh lint with no
# code change. Bump deliberately in its own PR. Local dev stays floating.
- uses: dtolnay/rust-toolchain@master
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
# Keep lint behavior reproducible across fresh runners and local installs.
- uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # 1.97.1
with:
toolchain: "1.97.1"
components: rustfmt, clippy
- uses: Swatinem/rust-cache@v2.9.1
- uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
- run: cargo fmt --all -- --check
- run: cargo clippy --all-targets --locked -- -D warnings
- run: cargo test --locked

msrv:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # 1.88
with:
toolchain: "1.88"
- uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
- run: cargo check --locked --all-targets

# Native Windows test gate. Release artifacts are built by cargo-dist on tags;
# the pinned real-tool lifecycle has its own matrix below.
windows-build:
runs-on: windows-latest
steps:
- uses: actions/checkout@v6
# Pinned so a new stable release can't fail CI on a fresh lint with no
# code change. Bump deliberately in its own PR. Local dev stays floating.
- uses: dtolnay/rust-toolchain@master
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
# Keep lint behavior reproducible across fresh runners and local installs.
- uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # 1.97.1
with:
toolchain: "1.97.1"
components: rustfmt, clippy
- uses: Swatinem/rust-cache@v2.9.1
- uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
- run: cargo fmt --all -- --check
- run: cargo clippy --all-targets --locked -- -D warnings
- run: cargo test --all-targets --locked
Expand All @@ -40,12 +57,12 @@ jobs:
permissions:
contents: read
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: actions/setup-node@v6
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: 22
node-version: 22.23.1
cache: npm
- run: bash ./scripts/typecheck.sh

Expand All @@ -57,11 +74,11 @@ jobs:
permissions:
contents: read
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- name: Install pinned cargo-dist
run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.31.0/cargo-dist-installer.sh | sh"
run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.32.0/cargo-dist-installer.sh | sh"
- run: dist generate --check

real-tool-tests:
Expand All @@ -76,44 +93,44 @@ jobs:
include:
- os: ubuntu-24.04
tool: codex
package: "@openai/codex@0.141.0"
cache: codex-0.141.0
package: "@openai/codex@0.145.0"
cache: codex-0.145.0
test: real_tool_codex
- os: ubuntu-latest
tool: claude
package: "@anthropic-ai/claude-code@2.1.185"
cache: claude-2.1.185
package: "@anthropic-ai/claude-code@2.1.216"
cache: claude-2.1.216
test: real_tool_claude
- os: ubuntu-latest
tool: relay
package: "@anthropic-ai/claude-code@2.1.185"
cache: relay-claude-2.1.185
package: "@anthropic-ai/claude-code@2.1.216"
cache: relay-claude-2.1.216
test: test_relay_roundtrip
- os: windows-latest
tool: codex
package: "@openai/codex@0.141.0"
cache: codex-0.141.0
package: "@openai/codex@0.145.0"
cache: codex-0.145.0
test: real_tool_codex
- os: windows-latest
tool: claude
package: "@anthropic-ai/claude-code@2.1.185"
cache: claude-2.1.185
package: "@anthropic-ai/claude-code@2.1.216"
cache: claude-2.1.216
test: real_tool_claude
- os: windows-latest
tool: relay
package: "@anthropic-ai/claude-code@2.1.185"
cache: relay-claude-2.1.185
package: "@anthropic-ai/claude-code@2.1.216"
cache: relay-claude-2.1.216
test: test_relay_roundtrip
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: dtolnay/rust-toolchain@master
- uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # 1.97.1
with:
toolchain: "1.97.1"
- uses: actions/setup-node@v6
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: 22
node-version: 22.23.1
- name: Configure Codex Linux sandbox
if: runner.os == 'Linux' && matrix.tool == 'codex'
run: |
Expand All @@ -123,8 +140,8 @@ jobs:
/usr/share/apparmor/extra-profiles/bwrap-userns-restrict \
/etc/apparmor.d/bwrap-userns-restrict
sudo apparmor_parser -r /etc/apparmor.d/bwrap-userns-restrict
- uses: Swatinem/rust-cache@v2.9.1
- uses: actions/cache@v4
- uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
- uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
path: |
target/mock-tools
Expand Down
7 changes: 5 additions & 2 deletions .github/workflows/publish-pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,14 @@ on:

permissions:
id-token: write
contents: read

jobs:
publish:
runs-on: ubuntu-latest
steps:
- name: Download all wheels
uses: actions/download-artifact@v8
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
pattern: wheel-*
path: dist/
Expand All @@ -25,6 +26,8 @@ jobs:
run: ls -la dist/

- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0
with:
password: ${{ secrets.PYPI_API_TOKEN }}
verbose: false
print-hash: false
Loading
Loading