name: Rust on: push: branches: - main pull_request: paths: - Cargo.toml - rust/** - .github/workflows/rust.yml concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true env: # This env var is used by Swatinem/rust-cache@v2 for the cache # key, so we set it to make sure it is always consistent. CARGO_TERM_COLOR: always # Disable full debug symbol generation to speed up CI build and keep memory down # "1" means line tables only, which is useful for panic tracebacks. RUSTFLAGS: "-C debuginfo=1" RUST_BACKTRACE: "1" CARGO_INCREMENTAL: 0 jobs: lint: timeout-minutes: 30 runs-on: ubuntu-24.04 defaults: run: shell: bash env: # Need up-to-date compilers for kernels CC: clang-18 CXX: clang++-18 steps: - uses: actions/checkout@v4 with: fetch-depth: 0 lfs: true - uses: Swatinem/rust-cache@v2 with: workspaces: rust - name: Install dependencies run: | sudo apt update sudo apt install -y protobuf-compiler libssl-dev - name: Run format run: cargo fmt --all -- --check - name: Run clippy run: cargo clippy --workspace --tests --all-features -- -D warnings build-no-lock: runs-on: ubuntu-24.04 timeout-minutes: 30 env: # Need up-to-date compilers for kernels CC: clang CXX: clang++ steps: - uses: actions/checkout@v4 # Remote cargo.lock to force a fresh build - name: Remove Cargo.lock run: rm -f Cargo.lock - uses: rui314/setup-mold@v1 - uses: Swatinem/rust-cache@v2 - name: Install dependencies run: | sudo apt update sudo apt install -y protobuf-compiler libssl-dev - name: Build all run: | cargo build --benches --all-features --tests linux: timeout-minutes: 30 # To build all features, we need more disk space than is available # on the free OSS github runner. This is mostly due to the the # sentence-transformers feature. runs-on: ubuntu-2404-4x-x64 defaults: run: shell: bash working-directory: rust env: # Need up-to-date compilers for kernels CC: clang-18 CXX: clang++-18 steps: - uses: actions/checkout@v4 with: fetch-depth: 0 lfs: true - uses: Swatinem/rust-cache@v2 with: workspaces: rust - name: Install dependencies run: | # This shaves 2 minutes off this step in CI. This doesn't seem to be # necessary in standard runners, but it is in the 4x runners. sudo rm /var/lib/man-db/auto-update sudo apt install -y protobuf-compiler libssl-dev - uses: rui314/setup-mold@v1 - name: Make Swap run: | sudo fallocate -l 16G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile - name: Start S3 integration test environment working-directory: . run: docker compose up --detach --wait - name: Build run: cargo build --all-features --tests --locked --examples - name: Run tests run: cargo test --all-features --locked - name: Run examples run: cargo run --example simple --locked macos: timeout-minutes: 30 strategy: matrix: mac-runner: ["macos-13", "macos-14"] runs-on: "${{ matrix.mac-runner }}" defaults: run: shell: bash working-directory: rust steps: - uses: actions/checkout@v4 with: fetch-depth: 0 lfs: true - name: CPU features run: sysctl -a | grep cpu - uses: Swatinem/rust-cache@v2 with: workspaces: rust - name: Install dependencies run: brew install protobuf - name: Run tests run: | # Don't run the s3 integration tests since docker isn't available # on this image. ALL_FEATURES=`cargo metadata --format-version=1 --no-deps \ | jq -r '.packages[] | .features | keys | .[]' \ | grep -v s3-test | sort | uniq | paste -s -d "," -` cargo test --features $ALL_FEATURES --locked windows: runs-on: windows-2022 steps: - uses: actions/checkout@v4 - uses: Swatinem/rust-cache@v2 with: workspaces: rust - name: Install Protoc v21.12 working-directory: C:\ run: | New-Item -Path 'C:\protoc' -ItemType Directory Set-Location C:\protoc Invoke-WebRequest https://github.com/protocolbuffers/protobuf/releases/download/v21.12/protoc-21.12-win64.zip -OutFile C:\protoc\protoc.zip 7z x protoc.zip Add-Content $env:GITHUB_PATH "C:\protoc\bin" shell: powershell - name: Run tests run: | $env:VCPKG_ROOT = $env:VCPKG_INSTALLATION_ROOT cargo test --features remote --locked windows-arm64-cross: # We cross compile in Node releases, so we want to make sure # this can run successfully. runs-on: ubuntu-latest container: alpine:edge steps: - name: Checkout uses: actions/checkout@v4 - name: Install dependencies run: | set -e apk add protobuf-dev curl clang lld llvm19 grep npm bash msitools sed curl --proto '=https' --tlsv1.3 -sSf https://raw.githubusercontent.com/rust-lang/rustup/refs/heads/master/rustup-init.sh | sh -s -- -y source $HOME/.cargo/env rustup target add aarch64-pc-windows-msvc mkdir -p sysroot cd sysroot sh ../ci/sysroot-aarch64-pc-windows-msvc.sh - name: Check env: CC: clang AR: llvm-ar C_INCLUDE_PATH: /usr/aarch64-pc-windows-msvc/usr/include CARGO_BUILD_TARGET: aarch64-pc-windows-msvc RUSTFLAGS: -Ctarget-feature=+crt-static,+neon,+fp16,+fhm,+dotprod -Clinker=lld -Clink-arg=/LIBPATH:/usr/aarch64-pc-windows-msvc/usr/lib -Clink-arg=arm64rt.lib run: | source $HOME/.cargo/env cargo check --features remote --locked windows-arm64: runs-on: windows-4x-arm steps: - name: Install Git run: | Invoke-WebRequest -Uri "https://github.com/git-for-windows/git/releases/download/v2.44.0.windows.1/Git-2.44.0-64-bit.exe" -OutFile "git-installer.exe" Start-Process -FilePath "git-installer.exe" -ArgumentList "/VERYSILENT", "/NORESTART" -Wait shell: powershell - name: Add Git to PATH run: | Add-Content $env:GITHUB_PATH "C:\Program Files\Git\bin" $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User") shell: powershell - name: Configure Git symlinks run: git config --global core.symlinks true - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.13" - name: Install Visual Studio Build Tools run: | Invoke-WebRequest -Uri "https://aka.ms/vs/17/release/vs_buildtools.exe" -OutFile "vs_buildtools.exe" Start-Process -FilePath "vs_buildtools.exe" -ArgumentList "--quiet", "--wait", "--norestart", "--nocache", ` "--installPath", "C:\BuildTools", ` "--add", "Microsoft.VisualStudio.Component.VC.Tools.ARM64", ` "--add", "Microsoft.VisualStudio.Component.VC.Tools.x86.x64", ` "--add", "Microsoft.VisualStudio.Component.Windows11SDK.22621", ` "--add", "Microsoft.VisualStudio.Component.VC.ATL", ` "--add", "Microsoft.VisualStudio.Component.VC.ATLMFC", ` "--add", "Microsoft.VisualStudio.Component.VC.Llvm.Clang" -Wait shell: powershell - name: Add Visual Studio Build Tools to PATH run: | $vsPath = "C:\BuildTools\VC\Tools\MSVC" $latestVersion = (Get-ChildItem $vsPath | Sort-Object {[version]$_.Name} -Descending)[0].Name Add-Content $env:GITHUB_PATH "C:\BuildTools\VC\Tools\MSVC\$latestVersion\bin\Hostx64\arm64" Add-Content $env:GITHUB_PATH "C:\BuildTools\VC\Tools\MSVC\$latestVersion\bin\Hostx64\x64" Add-Content $env:GITHUB_PATH "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\arm64" Add-Content $env:GITHUB_PATH "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64" Add-Content $env:GITHUB_PATH "C:\BuildTools\VC\Tools\Llvm\x64\bin" # Add MSVC runtime libraries to LIB $env:LIB = "C:\BuildTools\VC\Tools\MSVC\$latestVersion\lib\arm64;" + "C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\um\arm64;" + "C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\ucrt\arm64" Add-Content $env:GITHUB_ENV "LIB=$env:LIB" # Add INCLUDE paths $env:INCLUDE = "C:\BuildTools\VC\Tools\MSVC\$latestVersion\include;" + "C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\ucrt;" + "C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\um;" + "C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\shared" Add-Content $env:GITHUB_ENV "INCLUDE=$env:INCLUDE" shell: powershell - name: Install Rust run: | Invoke-WebRequest https://win.rustup.rs/x86_64 -OutFile rustup-init.exe .\rustup-init.exe -y --default-host aarch64-pc-windows-msvc shell: powershell - name: Add Rust to PATH run: | Add-Content $env:GITHUB_PATH "$env:USERPROFILE\.cargo\bin" shell: powershell - uses: Swatinem/rust-cache@v2 with: workspaces: rust - name: Install 7-Zip ARM run: | New-Item -Path 'C:\7zip' -ItemType Directory Invoke-WebRequest https://7-zip.org/a/7z2408-arm64.exe -OutFile C:\7zip\7z-installer.exe Start-Process -FilePath C:\7zip\7z-installer.exe -ArgumentList '/S' -Wait shell: powershell - name: Add 7-Zip to PATH run: Add-Content $env:GITHUB_PATH "C:\Program Files\7-Zip" shell: powershell - name: Install Protoc v21.12 working-directory: C:\ run: | if (Test-Path 'C:\protoc') { Write-Host "Protoc directory exists, skipping installation" return } New-Item -Path 'C:\protoc' -ItemType Directory Set-Location C:\protoc Invoke-WebRequest https://github.com/protocolbuffers/protobuf/releases/download/v21.12/protoc-21.12-win64.zip -OutFile C:\protoc\protoc.zip & 'C:\Program Files\7-Zip\7z.exe' x protoc.zip shell: powershell - name: Add Protoc to PATH run: Add-Content $env:GITHUB_PATH "C:\protoc\bin" shell: powershell - name: Run tests run: | $env:VCPKG_ROOT = $env:VCPKG_INSTALLATION_ROOT cargo test --target aarch64-pc-windows-msvc --features remote --locked msrv: # Check the minimum supported Rust version name: MSRV Check - Rust v${{ matrix.msrv }} runs-on: ubuntu-24.04 strategy: matrix: msrv: ["1.78.0"] # This should match up with rust-version in Cargo.toml env: # Need up-to-date compilers for kernels CC: clang-18 CXX: clang++-18 steps: - uses: actions/checkout@v4 with: submodules: true - name: Install dependencies run: | sudo apt update sudo apt install -y protobuf-compiler libssl-dev - name: Install ${{ matrix.msrv }} uses: dtolnay/rust-toolchain@master with: toolchain: ${{ matrix.msrv }} - name: Downgrade dependencies # These packages have newer requirements for MSRV run: | cargo update -p aws-sdk-bedrockruntime --precise 1.64.0 cargo update -p aws-sdk-dynamodb --precise 1.55.0 cargo update -p aws-config --precise 1.5.10 cargo update -p aws-sdk-kms --precise 1.51.0 cargo update -p aws-sdk-s3 --precise 1.65.0 cargo update -p aws-sdk-sso --precise 1.50.0 cargo update -p aws-sdk-ssooidc --precise 1.51.0 cargo update -p aws-sdk-sts --precise 1.51.0 cargo update -p home --precise 0.5.9 - name: cargo +${{ matrix.msrv }} check run: cargo check --workspace --tests --benches --all-features