# SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. name: Rust pre-merge checks on: # Always run this workflow when commits are pushed to main. push: branches: - main # Run this workflow on pull requests targeting main but only on rust changes. pull_request: paths: - .github/workflows/pre-merge-rust.yml - '**.rs' - 'Cargo.toml' - 'Cargo.lock' # Cancel any previous check runs for the same pull request to avoid redundant workflows. concurrency: group: ${{ github.event_name == 'pull_request' && format('{0}-{1}', github.workflow, github.event.pull_request.number) || format('{0}-{1}', github.workflow, github.run_id) }} cancel-in-progress: ${{ github.event_name == 'pull_request' }} jobs: tests: runs-on: group: Fastchecker strategy: # removing kvbm from here - it will fail to test with nixl dep enabled matrix: { dir: ['.', 'lib/bindings/python', 'lib/runtime/examples', 'launch/dynamo-run'] } permissions: contents: read steps: - uses: actions/checkout@v4 with: lfs: true - name: Set up system dependencies run: | # Install protoc for Rust build dependencies (NOTE: much faster than apt install) PB_REL="https://github.com/protocolbuffers/protobuf/releases" curl -LO $PB_REL/download/v30.2/protoc-30.2-linux-x86_64.zip unzip protoc-30.2-linux-x86_64.zip -d $HOME/.local rm protoc-30.2-linux-x86_64.zip export PATH="$PATH:$HOME/.local/bin" protoc --version - name: Cache cargo artifacts uses: actions/cache@v4 with: path: | ~/.cargo/bin/ ~/.cargo/registry key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} restore-keys: ${{ runner.os }}-cargo- - name: Set up Rust Toolchain Components run: rustup component add rustfmt - name: Verify Code Formatting working-directory: ${{ matrix.dir }} run: cargo fmt -- --check - name: Install and Run cargo-deny working-directory: ${{ matrix.dir }} run: | cargo-deny --version || cargo install cargo-deny@0.16.4 cargo-deny --no-default-features check --hide-inclusion-graph licenses bans --config ${{ github.workspace }}/deny.toml # Have an explicit step to build tests first to separate time spent on build vs execution. - name: Compile Tests working-directory: ${{ matrix.dir }} run: cargo test --locked --no-run - name: Run Doc Tests working-directory: ${{ matrix.dir }} run: cargo doc --no-deps && cargo test --locked --doc - name: Run Unit Tests working-directory: ${{ matrix.dir }} # NOTE: --all-targets doesn't run doc tests run: cargo test --locked --all-targets clippy: runs-on: group: Fastchecker strategy: matrix: { dir: ['.', 'lib/bindings/python', 'lib/runtime/examples', 'launch/dynamo-run', 'lib/kvbm-kernels'] } permissions: contents: read steps: - uses: actions/checkout@v4 with: lfs: true - name: Set up system dependencies run: | # Install protoc for Rust build dependencies (NOTE: much faster than apt install) PB_REL="https://github.com/protocolbuffers/protobuf/releases" curl -LO $PB_REL/download/v30.2/protoc-30.2-linux-x86_64.zip unzip protoc-30.2-linux-x86_64.zip -d $HOME/.local rm protoc-30.2-linux-x86_64.zip export PATH="$PATH:$HOME/.local/bin" protoc --version - name: Cache cargo artifacts uses: actions/cache@v4 with: path: | ~/.cargo/bin/ ~/.cargo/registry key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} restore-keys: ${{ runner.os }}-cargo- - name: Set up Rust Toolchain Components run: rustup component add clippy rustfmt - name: Verify Code Formatting working-directory: ${{ matrix.dir }} run: cargo fmt -- --check - name: Run Clippy Checks working-directory: ${{ matrix.dir }} run: cargo clippy --no-deps --all-targets -- -D warnings