Files
sglang/.github/workflows/lint.yml
T
2026-08-21 10:25:40 +08:00

102 lines
3.6 KiB
YAML

name: Lint
on:
push:
branches: [main]
pull_request:
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Detect Rust workspace changes
id: paths
uses: dorny/paths-filter@v3
with:
filters: |
rust_workspace:
- 'rust/**'
- 'proto/sglang/runtime/v1/sglang.proto'
- '.github/workflows/lint.yml'
# Fail-fast gate: docs_new/ was renamed to docs/ (#32123). git's rename
# detection silently re-adds NEW files under docs_new/ on merge without a
# conflict, which would resurrect the directory. We check the checked-out
# tree directly (git ls-files) rather than diffing against the base ref —
# a presence check needs no merge-base and sidesteps the shallow-checkout
# / silent-diff failures that plagued the old legacy-docs/ gate.
- name: Forbid docs_new/ (renamed to docs/)
run: |
set -euo pipefail
matches="$(git ls-files -- docs_new)"
if [ -n "$matches" ]; then
echo "::error::docs_new/ was renamed to docs/. Move these files under docs/ instead:"
echo "$matches"
exit 1
fi
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.12"
- name: Install pre-commit hook
run: |
python -m pip install pre-commit
pre-commit install
# The clippy-rust-workspace pre-commit hook compiles the rust/ workspace
# (debug profile); cache cargo registry + target across runs.
- name: Rust cache (rust/ workspace)
uses: Swatinem/rust-cache@v2
with:
workspaces: rust
shared-key: "rust-workspace-lint"
- name: Run pre-commit checks
run: SKIP=no-commit-to-branch pre-commit run --all-files --show-diff-on-failure
# Not in the rust-ext build job: its cache key covers the built .so files,
# and a test script is not a build input. Tests take ~1s; the timeout is
# for a cold cache, which codegens the dependency graph first.
- name: Run rust/ workspace tests
if: steps.paths.outputs.rust_workspace == 'true'
run: cd rust && timeout 900 cargo test --workspace
- name: Run lychee docs checks (offline references)
uses: lycheeverse/lychee-action@8646ba30535128ac92d33dfc9133794bfdd9b411 # v2
with:
args: --config .github/linters/lychee.toml README.md
# docs/ (Mintlify) internal-link check. Runs only in CI — contributors
# are NOT required to install `mint` for local pre-commit. External links
# are covered separately by the nightly lychee job (no --check-external here).
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: "20"
- name: Check cookbook authoring contracts
run: node docs/scripts/check_cookbook_configs.mjs
# Hard gate: docs internal links/anchors/redirects must resolve.
# mint is pinned for reproducibility (its heading-slug rules are
# version-sensitive); bump deliberately after re-verifying locally.
- name: Check docs links (Mintlify broken-links)
run: |
npm install -g mint@4.2.559
cd docs
mint broken-links --check-anchors --check-redirects
- name: Run sgl-kernel clang-format checks
uses: DoozyX/clang-format-lint-action@v0.20
with:
source: python/sglang/kernels/aot
extensions: h,c,cpp,hpp,cu,cuh,cc
clangFormatVersion: 20
style: file