Build compilation DB in a different way. #4770
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: "[email protected]" | |
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: | |
container: ubuntu:jammy | |
runs-on: [self-hosted, Linux, X64, gcp-custom-runners] | |
env: | |
GHA_MACHINE_TYPE: "n2-standard-4" | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Get latest clang-tidy | |
run: | | |
apt -qq -y update | |
apt -qq -y install wget software-properties-common gpg lsb-release | |
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 15CF4D18AF4F7421 | |
wget https://apt.llvm.org/llvm.sh | |
chmod +x ./llvm.sh | |
./llvm.sh 17 | |
- name: Install other Dependencies | |
run: | | |
apt -qq -y install clang-tidy-11 clang-tidy-17 build-essential git wget | |
source ./.github/settings.sh | |
./.github/bin/install-bazel.sh | |
- name: Get Bant | |
run: | | |
# TODO: provide this as action where we simply say with version=... | |
VERSION="v0.1.9" | |
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: Create Cache Timestamp | |
id: cache_timestamp | |
uses: nanzm/[email protected] | |
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-bant-${{ steps.cache_timestamp.outputs.time }} | |
restore-keys: clang-tidy-bant | |
- name: Build Project genrules | |
run: | | |
# Fetch all dependencies and run genrules for bant to see every file | |
# that makes it into the compile to build comile DB.f | |
bazel fetch ... | |
bazel build \ | |
//verible/common/analysis:command-file-lexer \ | |
//verible/verilog/parser:verilog-lex \ | |
//verible/verilog/parser:verilog-y \ | |
//verible/verilog/parser:verilog-y-final \ | |
//verible/common/analysis:command-file-lexer_test | |
bazel build $(bin/bant -q genrule-outputs | awk '{print $2}') \ | |
$(bin/bant list-targets | grep cc_proto_library | awk '{print $3}') | |
- name: Run clang tidy | |
run: | | |
echo "::group::Make Compilation DB" | |
BANT=bin/bant .github/bin/make-compilation-db.sh | |
cat compile_flags.txt | |
echo "::endgroup::" | |
# For runtime references, use clang-tidy 11 that still has it, everything else: latest. | |
CLANG_TIDY=clang-tidy-11 ./.github/bin/run-clang-tidy-cached.cc --checks="-*,google-runtime-references" \ | |
|| ( cat verible_clang-tidy.out ; exit 1) | |
CLANG_TIDY=clang-tidy-17 ./.github/bin/run-clang-tidy-cached.cc \ | |
|| ( cat verible_clang-tidy.out ; exit 1) | |
- 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.9" | |
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}') \ | |
//verible/common/analysis:command-file-lexer \ | |
//verible/verilog/parser:verilog-lex \ | |
//verible/verilog/parser:verilog-y \ | |
//verible/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/[email protected] | |
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 build -c fastbuild :install-binaries | |
.github/bin/simple-install.sh $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 | |
MacOsBuild: | |
runs-on: macos-latest | |
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/[email protected] | |
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 | |
# MacOS has a broken patch utility: | |
# //verible/verilog/tools/lint:lint-tool_test trips over a no-newline-at-end-of-file | |
run: bazel test -c opt --noshow_progress --test_output=errors --cxxopt=-Wno-range-loop-analysis -- //... -//verible/verilog/tools/lint:lint-tool_test | |
- 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/[email protected] | |
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* | |
bash .github/bin/simple-install.sh "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/[email protected] | |
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 verible/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/[email protected] | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
BRANCH: gh-pages | |
FOLDER: /tmp/pages | |
CLEAN: true |