Merge pull request #2029 from hzeller/20231019-multi-parent #4073
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: | |
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: | |
container: ubuntu:jammy | |
runs-on: [self-hosted, Linux, X64, gcp-custom-runners] | |
steps: | |
- name: Cancel previous | |
uses: styfle/[email protected] | |
with: | |
access_token: ${{ github.token }} | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Install Dependencies | |
run: | | |
apt -qqy update | |
apt -qq -y install clang-format git | |
clang-format --version | |
- name: Run formatting style check | |
run: | | |
./.github/bin/run-clang-format.sh | |
./.github/bin/check-potential-problems.sh | |
- name: 📤 Upload performance graphs | |
uses: actions/upload-artifact@v2 | |
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: Cancel previous | |
uses: styfle/[email protected] | |
with: | |
access_token: ${{ github.token }} | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Install Dependencies | |
run: | | |
apt -qqy update | |
apt -qq -y install clang-tidy-11 clang-tidy-14 build-essential git wget | |
source ./.github/settings.sh | |
./.github/bin/install-bazel.sh | |
- 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-${{ steps.cache_timestamp.outputs.time }} | |
restore-keys: clang-tidy- | |
- name: Run clang tidy | |
run: | | |
echo "::group::Make Compilation DB" | |
.github/bin/make-compilation-db.sh | |
wc -l compile_commands.json | |
echo "::endgroup::" | |
# For runtime references, use clang-tidy 11, 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-14 ./.github/bin/run-clang-tidy-cached.cc \ | |
|| ( cat verible_clang-tidy.out ; exit 1) | |
- name: 📤 Upload performance graphs | |
uses: actions/upload-artifact@v2 | |
if: success() || failure() | |
with: | |
name: "diag" | |
path: "**/plot_*.svg" | |
Check: | |
container: ubuntu:jammy | |
runs-on: [self-hosted, Linux, X64, gcp-custom-runners] | |
strategy: | |
fail-fast: false | |
matrix: | |
mode: | |
- test | |
- test-nortti | |
- test-c++20 | |
- test-c++23 | |
- smoke-test | |
- smoke-test-analyzer | |
- 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: Cancel previous | |
uses: styfle/[email protected] | |
with: | |
access_token: ${{ github.token }} | |
- 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 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@v2 | |
with: | |
name: verible-bin | |
path: verible-bin.tar | |
- name: 📤 Upload performance graphs | |
uses: actions/upload-artifact@v2 | |
if: success() || failure() | |
with: | |
name: "diag" | |
path: "**/plot_*.svg" | |
KytheVerification: | |
runs-on: ubuntu-20.04 | |
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@v2 | |
with: | |
path: kythe_output/*.kzip | |
Matrix: | |
runs-on: ubuntu-latest | |
name: Generate Build matrix | |
outputs: | |
matrix: ${{ steps.generate.outputs.matrix }} | |
steps: | |
- uses: actions/checkout@v3 | |
- id: generate | |
run: ./.github/bin/generate-matrix.py | |
Build: | |
needs: Matrix | |
container: ubuntu:jammy | |
runs-on: [self-hosted, Linux, X64, gcp-custom-runners] | |
# Github actions resources are limited; don't build artifacts for all | |
# platforms on every pull request, only on push. | |
if: ${{github.event_name == 'push'}} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: ${{ fromJson(needs.Matrix.outputs.matrix) }} | |
env: | |
MATRIX_OS: '${{ matrix.os }}:${{ matrix.ver }}' | |
LINK_TYPE: '${{ matrix.link }}' | |
ARCH: '${{ matrix.arch }}' | |
DOCKER_DATA_ROOT: "/root/.docker" | |
GHA_MACHINE_TYPE: "${{ matrix.arch == 'arm64' && 't2a-standard-8' || 'n2-highcpu-8' }}" | |
name: "Build ·${{ matrix.arch }}:${{ matrix.os }}:${{ matrix.ver }}${{ matrix.link == 'static' && ':static' || '' }}" | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
# Download complete repository + tags | |
fetch-depth: 0 | |
- name: Install and setup Docker | |
run: "apt -qqy update && apt -qqy --no-install-recommends install docker.io cgroupfs-mount crun fuse-overlayfs pigz ca-certificates git && cgroupfs-mount" | |
- name: Main script | |
run: | | |
set -x | |
mkdir -p "$DOCKER_DATA_ROOT" | |
dockerd \ | |
-s fuse-overlayfs \ | |
--add-runtime=crun=/usr/bin/crun \ | |
--default-runtime=crun \ | |
--config-file="" \ | |
--data-root=$DOCKER_DATA_ROOT > /dev/null 2>&1 & | |
while ! test -S /var/run/docker.sock; do echo "Waiting for Docker..." && sleep 1; done; docker info | |
trap "kill $(cat /var/run/docker.pid)" EXIT | |
docker pull $MATRIX_OS | |
source ./.github/settings.sh | |
ARCH="$ARCH" LINK_TYPE="$LINK_TYPE" ./releasing/docker-run.sh $MATRIX_OS | |
- name: 📤 Upload artifact | |
uses: actions/upload-artifact@v2 | |
with: | |
path: releasing/out/verible-*.tar.gz | |
- name: 📤 Upload performance graphs | |
uses: actions/upload-artifact@v2 | |
if: success() || failure() | |
with: | |
name: "diag" | |
path: "**/plot_*.svg" | |
MacOsBuildDevTools: | |
runs-on: macos-latest | |
steps: | |
- name: Cancel previous | |
uses: styfle/[email protected] | |
with: | |
access_token: ${{ github.token }} | |
- name: Install Dependencies | |
run: | | |
brew install llvm | |
echo "CLANG_TIDY=$(brew --prefix llvm)/bin/clang-tidy" >> $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 | |
/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: | |
runs-on: macos-latest | |
steps: | |
- name: Cancel previous | |
uses: styfle/[email protected] | |
with: | |
access_token: ${{ github.token }} | |
- 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 | |
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@v2 | |
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_windows2_${{ steps.cache_timestamp.outputs.time }} | |
restore-keys: bazelcache_windows2_ | |
- name: Install dependencies | |
# Bazel breaks on Windows with LLVM 16. Will be fixed in bazel 6.4 | |
run: choco install llvm --force --version=15.0.7 | |
- name: Debug bazel directory settings | |
run: bazel info | |
- name: Run Tests | |
run: bazel test --keep_going --noshow_progress --test_output=errors //... | |
- name: Build Verible Binaries | |
run: bazel build --keep_going --noshow_progress -c opt :install-binaries | |
- name: Prepare release | |
run: | | |
$VERSION = git describe --match=v* | |
bazel 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@v2 | |
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: | | |
bazel 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: | |
needs: [ Check, Build, MacOsBuild, WindowsBuild, PrepareVSPlugin ] | |
runs-on: ubuntu-20.04 | |
name: 📦 Release | |
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@v2 | |
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 | |
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: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
BRANCH: gh-pages | |
FOLDER: /tmp/pages | |
CLEAN: true |