mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-10-06 23:31:19 +00:00
A Linux job configures without the precompiled header and runs clang-tidy over the C++ lines a pull request changes. The only check for now is misc-include-cleaner for missing includes; .clang-tidy is where further checks get enabled. scripts/run_clang_tidy.sh (Linux, macOS) and scripts/run_clang_tidy.ps1 (Windows) run the same check locally: the same configure, the clang-tidy version pinned in scripts/clang_tidy_requirements.txt, and the same comparison against OrcaSlicer's main. They offer to install what is missing, or print the command to do it by hand.
90 lines
3.4 KiB
YAML
90 lines
3.4 KiB
YAML
name: clang-tidy
|
|
|
|
# Runs clang-tidy, with the checks in .clang-tidy, over the C++ lines a pull
|
|
# request changes (scripts/clang_tidy_diff.py). The compile database is
|
|
# configured without the precompiled header, so code that only builds because
|
|
# the PCH supplied an include fails here.
|
|
#
|
|
# No paths filter: the job is a required check, and a workflow skipped by a
|
|
# paths filter leaves a required check pending forever. A PR with no C++
|
|
# changes finishes after the first step.
|
|
on:
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
- release/*
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
clang_tidy:
|
|
# Branch protection requires this check by name. Renaming the job disables
|
|
# that gate.
|
|
name: clang-tidy
|
|
runs-on: ${{ vars.SELF_HOSTED && 'orca-lnx-server' || 'ubuntu-24.04' }}
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v7
|
|
with:
|
|
lfs: 'false'
|
|
# The PR merge commit plus its first parent, the base it is diffed against.
|
|
fetch-depth: 2
|
|
|
|
- name: Look for changed C++ files
|
|
id: changes
|
|
run: |
|
|
if git diff --name-only HEAD^1 -- src tests | grep -qE '\.(cpp|cc|cxx|hpp|h|hxx)$'; then
|
|
echo "cpp=true" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "No C++ changes under src/ or tests/."
|
|
fi
|
|
|
|
# Parsing needs the dependency headers, not a build of this PR's deps/, so
|
|
# a PR that changes deps/ falls back to the newest cache main has.
|
|
- name: Restore cached deps
|
|
if: steps.changes.outputs.cpp == 'true'
|
|
uses: actions/cache/restore@v6
|
|
with:
|
|
path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep
|
|
key: linux-clang-cache-orcaslicer_deps-build-${{ hashFiles('deps/**') }}
|
|
restore-keys: linux-clang-cache-orcaslicer_deps-build-
|
|
fail-on-cache-miss: true
|
|
|
|
- name: Apt-Install Dependencies
|
|
if: steps.changes.outputs.cpp == 'true' && !vars.SELF_HOSTED
|
|
uses: ./.github/actions/apt-install-deps
|
|
|
|
- name: Install clang-tidy
|
|
if: steps.changes.outputs.cpp == 'true'
|
|
run: |
|
|
python3 -m venv "$RUNNER_TEMP/clang-tidy"
|
|
"$RUNNER_TEMP/clang-tidy/bin/pip" install --quiet -r scripts/clang_tidy_requirements.txt
|
|
|
|
# DEP_BUILD_DIR is named outright: CMake would otherwise derive it from the build
|
|
# directory's name and look for the dependencies in deps/build-tidy.
|
|
- name: Configure without the precompiled header
|
|
if: steps.changes.outputs.cpp == 'true'
|
|
run: >
|
|
cmake -S . -B build-tidy -G Ninja
|
|
-DCMAKE_BUILD_TYPE=Release
|
|
-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
|
|
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
|
|
-DSLIC3R_PCH=OFF -DORCA_TOOLS=ON -DBUILD_TESTS=ON
|
|
-DDEP_BUILD_DIR=${{ github.workspace }}/deps/build
|
|
|
|
# The one header the build generates rather than the configure.
|
|
- name: Generate git_commit_hash.h
|
|
if: steps.changes.outputs.cpp == 'true'
|
|
run: cmake --build build-tidy --target git_commit_hash_header
|
|
|
|
- name: Run clang-tidy on the changed lines
|
|
if: steps.changes.outputs.cpp == 'true'
|
|
run: >
|
|
python3 scripts/clang_tidy_diff.py -p build-tidy --base HEAD^1
|
|
--clang-tidy "$RUNNER_TEMP/clang-tidy/bin/clang-tidy" -j "$(nproc)"
|