# 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 if files in runtime/rust change. pull_request: branches: - main paths: - .github/workflows/pre-merge-rust.yml - 'lib/runtime/**' - 'lib/llm/**' - 'lib/bindings/**' - 'launch/**' - 'components/**' - '**.rs' - 'Cargo.toml' - 'Cargo.lock' jobs: pre-merge-rust: runs-on: ubuntu-latest strategy: matrix: { dir: ['.', 'lib/bindings/python', 'lib/runtime/examples'] } permissions: contents: read steps: - uses: actions/checkout@v4 - name: Set up system dependencies run: | sudo apt-get update -y sudo apt-get install -y protobuf-compiler - name: Cache Cargo Registry uses: actions/cache@v3 with: path: ~/.cargo/registry key: ${{ runner.os }}-cargo-registry-${{ github.head_ref || github.ref_name }}-${{ hashFiles('**/Cargo.lock') }} - name: Cache Cargo Tools uses: actions/cache@v3 with: path: ~/.cargo/bin key: ${{ runner.os }}-cargo-tools-${{ github.head_ref || github.ref_name }}-${{ hashFiles('**/Cargo.lock') }} - name: Install Rust in dev environment # Install Rust only to run GitHub Local Actions in (dev environment) using the `ACT` environment variable. # See act usage: https://nektosact.com/introduction.html # https://nektosact.com/usage/index.html?highlight=env.Act#skipping-steps if: ${{ env.ACT }} run: | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y rustup toolchain install 1.85.0-x86_64-unknown-linux-gnu echo "$HOME/.cargo/bin" >> $GITHUB_PATH - name: Set up Rust Toolchain Components run: rustup component add rustfmt clippy - name: Run Cargo Check working-directory: ${{ matrix.dir }} run: cargo check --locked timeout-minutes: 5 - 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 - 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 --config ${{ github.workspace }}/deny.toml - name: Run Unit Tests working-directory: ${{ matrix.dir }} run: cargo test --locked --all-targets