name: CI
on:
push:
branches: [main, master, develop]
pull_request:
branches: [main, master, develop]
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
jobs:
msrv:
name: MSRV (Rust 1.95.0)
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Install declared minimum Rust toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: 1.95.0
- name: Check all targets at the declared MSRV
run: cargo check --locked --all-targets --all-features
test:
name: Test
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
rust: [stable]
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.rust }}
components: rustfmt, clippy
- name: Cache cargo registry
uses: actions/cache@v5
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-registry-
- name: Cache cargo index
uses: actions/cache@v5
with:
path: ~/.cargo/git
key: ${{ runner.os }}-cargo-git-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-git-
- name: Cache cargo build
uses: actions/cache@v5
with:
path: target
key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-build-target-
- name: Check formatting
run: cargo fmt -- --check
- name: Run clippy
run: cargo clippy --all-targets --all-features -- -D warnings
- name: Run tests
run: cargo test --verbose
- name: Run integration tests
run: cargo test --test integration_test --verbose
- name: Run diagnostics integration tests
run: cargo test --test diagnostics_integration_test --verbose
- name: Validate asset naming contract
if: runner.os == 'Linux'
run: ./scripts/validate-asset-names.sh
build:
name: Build
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
artifact_name: css-variable-lsp-linux-x86_64
- os: macos-latest
target: x86_64-apple-darwin
artifact_name: css-variable-lsp-macos-x86_64
- os: macos-latest
target: aarch64-apple-darwin
artifact_name: css-variable-lsp-macos-aarch64
- os: windows-latest
target: x86_64-pc-windows-msvc
artifact_name: css-variable-lsp-windows-x86_64.exe
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
targets: ${{ matrix.target }}
- name: Build release binary
run: cargo build --release --target ${{ matrix.target }}
- name: Rename binary (Unix)
if: runner.os != 'Windows'
run: |
cp target/${{ matrix.target }}/release/css-variable-lsp ${{ matrix.artifact_name }}
- name: Rename binary (Windows)
if: runner.os == 'Windows'
run: |
copy target\${{ matrix.target }}\release\css-variable-lsp.exe ${{ matrix.artifact_name }}
- name: Upload artifact
uses: actions/upload-artifact@v6
with:
name: ${{ matrix.artifact_name }}
path: ${{ matrix.artifact_name }}
coverage:
name: Code Coverage
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Install tarpaulin
run: cargo install cargo-tarpaulin
- name: Generate coverage
run: cargo tarpaulin --out Xml --verbose
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v6
with:
fail_ci_if_error: false