Skip to content

Latest commit

 

History

History
319 lines (218 loc) · 6.39 KB

File metadata and controls

319 lines (218 loc) · 6.39 KB

CI/CD and Code Quality

This document describes the CI/CD pipeline and code quality tools used in the vtcode project.

GitHub Actions Workflows

The project uses several GitHub Actions workflows to ensure code quality and automate testing:

1. CI Workflow (ci.yml)

Triggers:

  • Push to main (filtered by .rs, .toml, .lock, .yml, .json, .md, scripts/)
  • Pull requests to main (same path filters)
  • Weekly schedule (Monday 5 AM UTC)
  • Manual workflow_dispatch

Jobs:

  • Format Check (rustfmt): Ensures code is properly formatted
  • Lint Check (clippy): Runs comprehensive linting with -D warnings
  • Test: Runs cargo nextest run on Ubuntu (plus macOS and Windows for PRs)
  • Benchmarks: Performance regression testing
  • Security Audit: cargo audit for vulnerable dependencies
  • Documentation: Builds and tests documentation (cargo doc)

2. Tool Eval Workflow (tool-eval.yml)

Triggers:

  • Push and PR to main on .rs, .toml, .lock, scripts/, .github/workflows/

Jobs:

  • Tool Evaluation: Validates built-in tool behavior and safety gateways
  • Integration tests: End-to-end tool execution checks

3. Build Linux & Windows (build-linux-windows.yml)

Triggers:

  • Manual workflow_dispatch with release tag input
  • Called from release.yml on publish

Jobs:

  • Build Linux: Compiles x86_64-unknown-linux-gnu binary
  • Build Windows: Compiles x86_64-pc-windows-msvc binary
  • Upload Artifacts: Stores compiled binaries for release

4. Coverage (coverage.yml)

Triggers:

  • Push and PR to main on .rs, Cargo.toml, Cargo.lock, coverage.yml

Jobs:

  • Code Coverage: cargo tarpaulin with XML output
  • Coverage Report: Uploads to code coverage service

5. Release (release.yml)

Triggers:

  • Manual workflow_dispatch with version tag

Jobs:

  • Build Binaries: Triggers build-linux-windows.yml
  • Create Release: Drafts GitHub Release with changelog
  • Publish: Publishes to crates.io and Homebrew

Code Quality Tools

rustfmt

Installation:

rustup component add rustfmt

Usage:

# Check formatting
cargo fmt --all -- --check

# Auto-format code
cargo fmt --all

# Print current configuration
cargo fmt --print-config default rustfmt.toml

Configuration: Create a rustfmt.toml or .rustfmt.toml file in your project root:

edition = "2021"
max_width = 100
tab_spaces = 4

clippy

Installation:

rustup component add clippy

Usage:

# Run clippy with warnings as errors
cargo clippy -- -D warnings

# Run on specific target
cargo clippy --lib

# Fix clippy suggestions automatically
cargo clippy --fix

Common clippy lints:

  • clippy::all: Enable all lints
  • clippy::pedantic: More strict lints
  • clippy::nursery: Experimental lints
  • clippy::cargo: Cargo.toml specific lints

Local Development

Development Check Script

Use the provided development check script to run the same checks locally:

# Run all checks
./scripts/check.sh

# Run specific checks
./scripts/check.sh fmt      # Format check
./scripts/check.sh clippy   # Clippy check
./scripts/check.sh test     # Run tests
./scripts/check.sh build    # Build project
./scripts/check.sh docs     # Generate docs

Manual Setup

To set up the development environment manually:

# Install required components
rustup component add rustfmt clippy

# Install additional tools
cargo install cargo-audit      # Security auditing
cargo install cargo-outdated   # Dependency checking
cargo install cargo-udeps      # Unused dependencies
cargo install cargo-msrv       # MSRV checking
cargo install cargo-license    # License checking
cargo install cargo-tarpaulin  # Code coverage

Best Practices

1. Pre-commit Hooks

Set up pre-commit hooks to run checks before committing:

# Install pre-commit (if using)
pre-commit install

# Or create .git/hooks/pre-commit manually:
#!/bin/bash
./scripts/check.sh

2. Editor Integration

VS Code

Add to .vscode/settings.json:

{
  "rust-analyzer.checkOnSave.command": "clippy",
  "editor.formatOnSave": true,
  "rust-analyzer.rustfmt.enableRangeFormatting": true
}

Vim/Neovim

autocmd BufWritePre *.rs :silent! !cargo fmt -- %:p

3. IDE Integration

Most Rust IDEs support rustfmt and clippy:

  • IntelliJ/CLion: Built-in Rust plugin
  • VS Code: rust-analyzer extension
  • Vim: rust.vim plugin
  • Emacs: rustic-mode

CI/CD Configuration

Branch Protection

Configure branch protection rules in GitHub:

  1. Go to repository Settings → Branches
  2. Add rule for main/master branch
  3. Require status checks to pass:
    • fmt
    • clippy
    • test
    • security-audit

Status Badges

Add these badges to your README:

[![CI](https://github.com/yourusername/vtcode/actions/workflows/ci.yml/badge.svg)](https://github.com/yourusername/vtcode/actions/workflows/ci.yml)
[![Code Quality](https://github.com/yourusername/vtcode/actions/workflows/code-quality.yml/badge.svg)](https://github.com/yourusername/vtcode/actions/workflows/code-quality.yml)

Troubleshooting

Common Issues

rustfmt not found

rustup component add rustfmt
rustup update

clippy warnings not showing

cargo clippy -- -W clippy::all

MSRV issues

cargo msrv --workspace
cargo msrv --workspace set 1.93.0  # Set specific version

Dependency issues

cargo update
cargo outdated
cargo udeps

Performance Optimization

Faster CI builds

# In workflow
- uses: actions/cache@v3
  with:
    path: |
      ~/.cargo/registry
      ~/.cargo/git
      target
    key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}

Parallel jobs

strategy:
  matrix:
    os: [ubuntu-latest, macos-latest, windows-latest]

Security

Dependency Auditing

# Install cargo-audit
cargo install cargo-audit

# Run audit
cargo audit

# Fix vulnerabilities
cargo audit fix

License Compliance

# Check licenses
cargo install cargo-license
cargo license --workspace

References