Only run clang-tidy on changed files and create a review. #4715
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: ci | |
on: | |
push: | |
branches: | |
- master | |
- main | |
pull_request: | |
branches: | |
- master | |
- main | |
workflow_dispatch: | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
env: | |
BOT_USER: "Deployment Bot" | |
BOT_EMAIL: "verible-dev@googlegroups.com" | |
GHA_MACHINE_TYPE: "n2-standard-8" | |
DEBIAN_FRONTEND: "noninteractive" | |
VERIBLE_BINDIR: "/tmp/verible-bin" | |
jobs: | |
VerifyFormatting: | |
runs-on: ubuntu-24.04 | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Install Dependencies | |
run: | | |
go install github.com/bazelbuild/buildtools/buildifier@latest | |
echo "PATH=$PATH:$(go env GOPATH)/bin/" >> $GITHUB_ENV | |
- name: Run formatting style check | |
run: | | |
CLANG_FORMAT=clang-format-17 ./.github/bin/run-clang-format.sh | |
./.github/bin/check-potential-problems.sh | |
- name: 📤 Upload performance graphs | |
uses: actions/upload-artifact@v3 | |
if: success() || failure() | |
with: | |
name: "diag" | |
path: "**/plot_*.svg" | |
ClangTidy: | |
runs-on: ubuntu-24.04 | |
if: github.event_name == 'pull_request' | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Create Cache Timestamp | |
id: cache_timestamp | |
uses: nanzm/get-time-action@v2.0 | |
with: | |
format: 'YYYY-MM-DD-HH-mm-ss' | |
- name: Retrieve cached results | |
uses: actions/cache@v3 | |
with: | |
path: | | |
/root/.cache/clang-tidy | |
/root/.cache/bazel | |
key: clang-tidy-${{ steps.cache_timestamp.outputs.time }} | |
restore-keys: clang-tidy- | |
- name: Make compilation DB | |
run: | | |
export USE_BAZEL_VERSION=6.5.0 | |
.github/bin/make-compilation-db.sh | |
ls -l compile_commands.json | |
- name: Create clang-tidy review | |
id: review | |
uses: ZedThree/clang-tidy-review@v0.19.0 | |
with: | |
clang_tidy_version: 17 | |
config_file: .clang_tidy | |
token: ${{ secrets.GITHUB_TOKEN }} | |
# clang_fixes.json artifact | |
- name: Finish review | |
uses: ZedThree/clang-tidy-review/upload@v0.19.0 | |
id: upload-review | |
- name: 📤 Upload performance graphs | |
uses: actions/upload-artifact@v3 | |
if: success() || failure() | |
with: | |
name: "diag" | |
path: "**/plot_*.svg" | |
RunBantBuildCleaner: | |
# Running http://bant.build/ to check all dependencies in BUILD files. | |
runs-on: ubuntu-24.04 | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Get Bant | |
run: | | |
# TODO: provide this as action where we simply say with version=... | |
VERSION="v0.1.7" | |
STATIC_VERSION="bant-${VERSION}-linux-static-x86_64" | |
wget "https://github.com/hzeller/bant/releases/download/${VERSION}/${STATIC_VERSION}.tar.gz" | |
tar xvzf "${STATIC_VERSION}.tar.gz" | |
mkdir -p bin | |
ln -sf ../"${STATIC_VERSION}/bin/bant" bin/ | |
bin/bant -V | |
- name: Build Project genrules | |
run: | | |
# Fetch all dependencies and run genrules for bant to see every file | |
# that makes it into the compile. Use bant itself to find genrules. | |
bazel fetch ... | |
bazel build $(bin/bant -q genrule-outputs | awk '{print $2}') \ | |
//common/analysis:command-file-lexer \ | |
//verilog/parser:verilog-lex \ | |
//verilog/parser:verilog-y \ | |
//verilog/parser:verilog-y-final | |
- name: Run bant build-cleaner | |
run: | | |
bin/bant dwyu ... | |
Check: | |
container: ubuntu:jammy | |
runs-on: [self-hosted, Linux, X64, gcp-custom-runners] | |
strategy: | |
fail-fast: false | |
matrix: | |
mode: | |
- test | |
- test-clang | |
- test-nortti | |
- test-c++20 | |
- test-c++23 | |
- smoke-test | |
#- smoke-test-analyzer #issue: #2046 | |
- asan | |
- asan-clang | |
- compile | |
- compile-clang | |
- compile-static | |
- compile-static-clang | |
- coverage | |
- clean | |
arch: | |
- x86_64 | |
- arm64 | |
exclude: | |
- mode: test-nortti | |
arch: arm64 | |
- mode: test-c++20 | |
arch: arm64 | |
- mode: test-c++23 | |
arch: arm64 | |
- mode: asan | |
arch: arm64 | |
- mode: asan-clang | |
arch: arm64 | |
- mode: coverage | |
arch: arm64 | |
env: | |
MODE: ${{ matrix.mode }} | |
ARCH: ${{ matrix.arch }} | |
GHA_MACHINE_TYPE: "${{ matrix.arch == 'arm64' && 't2a-standard-8' || 'n2-standard-8' }}" | |
name: ${{ matrix.arch }} ${{ matrix.mode }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
# Download complete repository + tags | |
fetch-depth: 0 | |
- name: Create Cache Timestamp | |
id: cache_timestamp | |
uses: nanzm/get-time-action@v2.0 | |
with: | |
format: 'YYYY-MM-DD-HH-mm-ss' | |
- name: Mount bazel cache | |
uses: actions/cache@v3 | |
if: matrix.mode != 'clean' && matrix.mode != 'coverage' | |
with: | |
path: "/root/.cache/bazel" | |
key: bazelcache3_${{ matrix.arch }}_${{ matrix.mode }}_${{ steps.cache_timestamp.outputs.time }} | |
restore-keys: bazelcache3_${{ matrix.arch }}_${{ matrix.mode }}_ | |
- name: Install Dependencies | |
run: | | |
set -x | |
apt -qqy update | |
apt -qq -y install build-essential wget git python3 python-is-python3 default-jdk cmake python3-pip ripgrep | |
apt -qq -y install gcc-10 g++-10 | |
apt -qq -y install gcc-12 g++-12 | |
apt -qq -y install clang-12 # clang always a particular version. | |
source ./.github/settings.sh | |
# Use newer compiler for c++2x compilation. Also slang needs c++20 | |
./.github/bin/set-compiler.sh $([[ "$MODE" == test-c++2* || "$MODE" == "smoke-test-analyzer" ]] && echo 12 || echo 10) | |
ARCH="$ARCH" ./.github/bin/install-bazel.sh | |
- name: Build Slang | |
if: matrix.mode == 'smoke-test-analyzer' | |
run: | | |
pushd . | |
git clone https://github.com/MikePopoloski/slang.git /tmp/slang | |
cd /tmp/slang | |
git checkout v3.0 # Pin version; current head cmake files in flux | |
cmake -B build | |
cmake --build build -j $(nproc) | |
cmake --install build --strip | |
popd | |
- name: Install Python dependencies | |
if: matrix.mode == 'smoke-test-analyzer' | |
run: | | |
pip3 install mdutils | |
- name: ${{ matrix.mode }} Verible | |
run: ./.github/bin/build-and-test.sh | |
- name: Upload coverage | |
# will show up under https://app.codecov.io/gh/chipsalliance/verible | |
if: matrix.mode == 'coverage' | |
uses: codecov/codecov-action@v2 | |
with: | |
files: bazel-out/_coverage/_coverage_report.dat | |
verbose: true | |
continue-on-error: true | |
- name: Gather and pack binaries | |
if: matrix.mode == 'compile' && matrix.arch == 'x86_64' | |
run: bazel run :install -c fastbuild -- $VERIBLE_BINDIR && tar cfv verible-bin.tar -C $VERIBLE_BINDIR . | |
- name: Upload bazel-bin | |
if: matrix.mode == 'compile' && matrix.arch == 'x86_64' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: verible-bin | |
path: verible-bin.tar | |
- name: Pack up static results | |
if: matrix.mode == 'compile-static' | |
# Note: generic builds were removed in #2058, so here we pack the | |
# CI results for static binaries. | |
run: | | |
VERSION=$(git describe --match=v*) | |
.github/bin/simple-install.sh verible-${VERSION}/bin | |
tar cvzf verible-${VERSION}-linux-static-${{matrix.arch}}.tar.gz verible-${VERSION} | |
- name: 📤 Upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
path: verible-*.tar.gz | |
- name: 📤 Upload performance graphs | |
uses: actions/upload-artifact@v3 | |
if: success() || failure() | |
with: | |
name: "diag" | |
path: "**/plot_*.svg" | |
KytheVerification: | |
runs-on: ubuntu-20.04 | |
if: false # Currently disabled, need to investigate further | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
# Download complete repository + tags | |
fetch-depth: 0 | |
- name: Install Dependencies | |
run: | | |
source ./.github/settings.sh | |
./.github/bin/set-compiler.sh 10 | |
./.github/bin/install-bazel.sh | |
./.github/bin/install-kythe-tools.sh | |
- name: Run Kythe Verification tests | |
run: | | |
source ./.github/settings.sh | |
./.github/bin/verify-kythe-extraction.sh | |
KytheXrefs: | |
runs-on: ubuntu-20.04 | |
if: false # Currently disabled, need to investigate failure. | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
# Download complete repository + tags | |
fetch-depth: 0 | |
- name: Install Dependencies | |
run: | | |
source ./.github/settings.sh | |
./.github/bin/set-compiler.sh 10 | |
./.github/bin/install-bazel.sh | |
./.github/bin/install-kythe.sh | |
- name: Extract Verible Kythe xRefs | |
run: | | |
source ./.github/settings.sh | |
./.github/bin/run-kythe.sh | |
- name: 📤 Upload Kythe xRefs to the action artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
path: kythe_output/*.kzip | |
MacOsBuildDevTools: | |
runs-on: macos-latest | |
steps: | |
- name: Install Dependencies | |
run: | | |
brew install llvm | |
echo "CLANG_TIDY=$(brew --prefix llvm)/bin/clang-tidy" >> $GITHUB_ENV | |
echo "USE_BAZEL_VERSION=6.5.0" >> $GITHUB_ENV | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Create Cache Timestamp | |
id: cache_timestamp | |
uses: nanzm/get-time-action@v2.0 | |
with: | |
format: 'YYYY-MM-DD-HH-mm-ss' | |
- name: Mount bazel cache | |
uses: actions/cache@v3 | |
with: | |
path: | | |
/private/var/tmp/_bazel_runner | |
/Users/runner/.cache/clang-tidy | |
key: clangtidy_macos_${{ steps.cache_timestamp.outputs.time }} | |
restore-keys: clangtidy_macos_ | |
- name: Test Developer tooling scripts | |
run: | | |
# Just a smoke test to make sure developer scripts run on Mac | |
echo "::group::Make Compilation DB" | |
.github/bin/make-compilation-db.sh | |
echo "::endgroup::" | |
# Quick with no checks to be fast (full tidy run in ClangTidy action) | |
.github/bin/run-clang-tidy-cached.cc --checks="-*" | |
MacOsBuild: | |
# New MacOS has a broken patch utility: | |
# //verilog/tools/lint:lint-tool_test trips over a no-newline-at-end-of-file | |
runs-on: macos-12 | |
steps: | |
- name: Install Dependencies | |
run: | | |
echo "USE_BAZEL_VERSION=6.5.0" >> $GITHUB_ENV | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Create Cache Timestamp | |
id: cache_timestamp | |
uses: nanzm/get-time-action@v2.0 | |
with: | |
format: 'YYYY-MM-DD-HH-mm-ss' | |
- name: Mount bazel cache | |
uses: actions/cache@v3 | |
with: | |
path: | | |
/private/var/tmp/_bazel_runner | |
key: bazelcache_macos_${{ steps.cache_timestamp.outputs.time }} | |
restore-keys: bazelcache_macos_ | |
- name: Tests | |
run: bazel test -c opt --noshow_progress --test_output=errors --cxxopt=-Wno-range-loop-analysis //... | |
- name: Build | |
run: bazel build -c opt --noshow_progress --test_output=errors --cxxopt=-Wno-range-loop-analysis :install-binaries | |
- name: Pack up | |
run: | | |
VERSION=$(git describe --match=v*) | |
.github/bin/simple-install.sh verible-${VERSION}-macOS/bin | |
tar cvzf verible-${VERSION}-macOS.tar.gz verible-${VERSION}-macOS | |
- name: 📤 Upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
path: verible-*.tar.gz | |
PrepareVSPlugin: | |
container: ubuntu:jammy | |
runs-on: [self-hosted, Linux, X64, gcp-custom-runners] | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Install Dependencies | |
run: | | |
apt -qqy update | |
apt -qq -y install npm nodejs | |
WindowsBuild: | |
runs-on: windows-2019 | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Create Cache Timestamp | |
id: cache_timestamp | |
uses: nanzm/get-time-action@v2.0 | |
with: | |
format: 'YYYY-MM-DD-HH-mm-ss' | |
- name: Mount bazel cache | |
uses: actions/cache@v3 | |
with: | |
path: "c:/users/runneradmin/_bazel_runneradmin" | |
key: bazelcache_windows_${{ steps.cache_timestamp.outputs.time }} | |
restore-keys: bazelcache_windows_ | |
- name: Install dependencies | |
run: | | |
choco install bazel --force --version=6.4.0 | |
choco install winflexbison3 | |
choco install llvm --allow-downgrade --version=16.0.6 | |
- name: Debug bazel directory settings | |
# We need to explicitly call the bazel binary from choco, otherwise | |
# the default Windows runner seems to run bazelisk(?) and downloads the | |
# latest bazel, which is incompatible. Should be in variable. | |
run: C:/ProgramData/chocolatey/lib/bazel/bazel.exe info | |
- name: Run Tests | |
run: C:/ProgramData/chocolatey/lib/bazel/bazel.exe test --keep_going --noshow_progress --test_output=errors //... | |
- name: Build Verible Binaries | |
run: C:/ProgramData/chocolatey/lib/bazel/bazel.exe build --keep_going --noshow_progress -c opt :install-binaries | |
- name: Prepare release | |
run: | | |
$VERSION = git describe --match=v* | |
C:/ProgramData/chocolatey/lib/bazel/bazel.exe run -c opt :install -- "c:/verible-${VERSION}-win64" | |
7z a "verible-${VERSION}-win64.zip" "c:/verible-${VERSION}-win64" | |
- name: 📤 Upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
path: verible-*.zip | |
# We need to shut down bazel to let go of the filedescriptors in the | |
# cache directory. Because of strange filesystem semantics on Windows, this | |
# prevents packaging up the cache. | |
- name: Stop Bazel | |
run: | | |
C:/ProgramData/chocolatey/lib/bazel/bazel.exe shutdown | |
# The cache pack/restore has issues with these symbolic links | |
rm c:/users/runneradmin/_bazel_runneradmin/*/install | |
rm c:/users/runneradmin/_bazel_runneradmin/*/java.log | |
Release: | |
name: 📦 Release | |
needs: [ Check, MacOsBuild, WindowsBuild, PrepareVSPlugin ] | |
runs-on: ubuntu-20.04 | |
permissions: | |
contents: write | |
if: ${{github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master')}} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
# Download complete repository + tags | |
fetch-depth: 0 | |
- name: 📥 Download artifacts | |
uses: actions/download-artifact@v3 | |
- name: Generate and apply TAG | |
run: | | |
git config --local user.name "$BOT_USER" | |
git config --local user.email "$BOT_EMAIL" | |
# Create a tag of form v0.0-183-gdf2b162-20191112132344 | |
TAG="${TAG:-$(git describe --match=v*)}" | |
git tag "$TAG" || true | |
echo "TAG=$TAG" >> $GITHUB_ENV | |
ls -lah artifact | |
- name: Deploy release and assets | |
uses: svenstaro/upload-release-action@2.9.0 | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
file: artifact/verible*.{tar.gz,zip} | |
tag: ${{ env.TAG }} | |
overwrite: true | |
file_glob: true | |
- name: Publish VSCode extension | |
env: | |
VSC_MARKETPLACE_TOKEN: ${{ secrets.VSC_MARKETPLACE_TOKEN }} | |
run: | | |
cd verilog/tools/ls/vscode | |
npm install | |
# install vsce globally | |
npm install -g @vscode/vsce | |
# Patch the JSON file to contain our current git tag+commit | |
VERSION=$(git describe | sed 's|v\([^-]\+\)-\([[:digit:]]\+\).*|\1.\2|') | |
sed -i 's|\(.*version.*\): "\([^"]\+\)"|\1: "'${VERSION}'"|g' package.json | |
sed -i 's|\(.*tag.*\): "\([^"]\+\)"|\1: "'${TAG}'"|g' package.json | |
vsce publish -p ${VSC_MARKETPLACE_TOKEN} | |
GhPages: | |
name: Build and deploy GitHub pages | |
needs: [Check] | |
runs-on: ubuntu-22.04 | |
permissions: | |
contents: write | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/download-artifact@v3 | |
with: | |
name: verible-bin | |
- name: Extract Verible binaries | |
run: mkdir -p $VERIBLE_BINDIR && tar xvf verible-bin.tar -C $VERIBLE_BINDIR | |
- name: Set up things for GitHub Pages deployment | |
run: ./.github/bin/github-pages-setup.sh $VERIBLE_BINDIR | |
- name: Deployment | |
if: github.ref == 'refs/heads/master' && github.event_name != 'pull_request' | |
uses: JamesIves/github-pages-deploy-action@v4.6.3 | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
BRANCH: gh-pages | |
FOLDER: /tmp/pages | |
CLEAN: true |