Skip to content

Only run clang-tidy on changed files and create a review. #4712

Only run clang-tidy on changed files and create a review.

Only run clang-tidy on changed files and create a review. #4712

Workflow file for this run

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
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
# 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