Merge pull request #4015 from hzeller/feature-20241112-uhdm-incs #5889
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: 'main' | |
concurrency: | |
group: ${{ github.repository }}-${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
on: | |
push: | |
pull_request: | |
workflow_dispatch: | |
jobs: | |
# Linux build, test, and publish | |
linux-install: | |
name: "Linux | Install | ${{ matrix.compiler }} | ${{ matrix.config }}" | |
runs-on: ubuntu-24.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
compiler: | |
- gcc | |
- clang | |
config: | |
- debug | |
- release | |
env: | |
artifact-name: sl-${{ github.run_number }}-linux-${{ matrix.compiler }}-${{ matrix.config }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
# Fetch tags for CMakeLists version check | |
# https://github.com/actions/checkout/issues/701 | |
- name: Git fetch tags | |
run: git fetch --tags origin | |
- uses: ./.github/linux-setup | |
with: | |
compiler: ${{ matrix.compiler }} | |
ccache-key: linux-install-${{ matrix.compiler }}-${{ matrix.config }} | |
- name: Build, install & test | |
run: | | |
if [ "${{ matrix.config }}" == "debug" ]; then | |
export BUILD_TYPE=Debug | |
export CMAKE_ADDITIONAL_ARGS=-DSURELOG_WITH_TCMALLOC=Off | |
else | |
export BUILD_TYPE=Release | |
export CMAKE_ADDITIONAL_ARGS= | |
fi | |
export INSTALL_DIR=`pwd`/install | |
cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR $CMAKE_ADDITIONAL_ARGS -S . -B build | |
cmake --build build -j $(nproc) | |
cmake --install build | |
cmake --build build --target UnitTests -j $(nproc) | |
pushd build && ctest --output-on-failure && popd | |
rm -rf build # make sure we only see installation artifacts | |
# This shouldn''t be necessary, and can't be reproduced outside CI | |
export CMAKE_PREFIX_PATH=$INSTALL_DIR | |
cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DINSTALL_DIR=$INSTALL_DIR -S tests/TestInstall -B tests/TestInstall/build | |
cmake --build tests/TestInstall/build -j $(nproc) | |
echo "-- pkg-config content --" | |
cat $INSTALL_DIR/lib/pkgconfig/Surelog.pc | |
PREFIX=$INSTALL_DIR make test_install_pkgconfig | |
- name: Prepare build artifacts | |
run: | | |
mkdir artifacts | |
mv install ${{ env.artifact-name }} | |
tar czfp artifacts/${{ env.artifact-name }}.tar.gz ${{ env.artifact-name }} | |
- name: Upload build artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.artifact-name }} | |
path: artifacts/${{ env.artifact-name }}.tar.gz | |
# Linux regression | |
linux-regression: | |
name: "Linux | Regression | ${{ matrix.compiler }} | ${{ matrix.config }} [${{ matrix.shard }}]" | |
runs-on: ubuntu-24.04 | |
needs: linux-install | |
strategy: | |
fail-fast: false | |
matrix: | |
num_shards: [6] | |
shard: [0, 1, 2, 3, 4, 5] | |
compiler: | |
- gcc | |
- clang | |
config: | |
- release | |
env: | |
build-artifact-name: sl-${{ github.run_number }}-linux-${{ matrix.compiler }}-${{ matrix.config }} | |
regression-artifact-name: sl-${{ github.run_number }}-linux-${{ matrix.compiler }}-${{ matrix.config }}-regression-${{ matrix.shard }} | |
steps: | |
- name: Install dependencies | |
run: | | |
sudo apt-get update -qq && | |
sudo apt install -y google-perftools libgoogle-perftools-dev | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: 3.8 | |
architecture: x64 | |
- name: Setup Python Packages | |
run: | | |
pip3 install orderedmultidict | |
pip3 install psutil | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
- name: Download artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: ${{ env.build-artifact-name }} | |
- name: Run regression ${{ matrix.shard }}/${{ matrix.num_shards }} | |
timeout-minutes: 120 | |
run: | | |
tar xzfp ${{ env.build-artifact-name }}.tar.gz | |
mv ${{ env.build-artifact-name }} build | |
rm ${{ env.build-artifact-name }}.tar.gz | |
python3 scripts/regression.py run \ | |
--uhdm-lint-filepath bin/uhdm-lint \ | |
--jobs $(nproc) \ | |
--show-diffs \ | |
--num_shards=${{ matrix.num_shards }} \ | |
--shard=${{ matrix.shard }} | |
git status | |
- name: Prepare regression artifacts | |
if: always() | |
run: | | |
cd build | |
mv regression ${{ env.regression-artifact-name }} | |
find ${{ env.regression-artifact-name }} -name "*.tar.gz" | tar czfp ${{ env.regression-artifact-name }}.tar.gz -T - | |
- name: Upload regression artifacts | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.regression-artifact-name }} | |
path: build/${{ env.regression-artifact-name }}.tar.gz | |
# Various other builds where just one compiler is sufficient to test with. | |
linux-pythonapi: | |
name: "Linux | Python API | ${{ matrix.compiler }} | ${{ matrix.config }}" | |
runs-on: ubuntu-24.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
compiler: | |
- gcc | |
config: | |
- release | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
- uses: ./.github/linux-setup | |
with: | |
compiler: ${{ matrix.compiler }} | |
ccache-key: linux-pythonapi-${{ matrix.compiler }}-${{ matrix.config }} | |
- name: PythonAPI | |
run: make ${{ matrix.config }} ADDITIONAL_CMAKE_OPTIONS="-DSURELOG_WITH_PYTHON=1 -DCMAKE_CXX_FLAGS=-fpermissive" | |
linux-coverage: | |
name: "Linux | Coverage | ${{ matrix.compiler }} | ${{ matrix.config }}" | |
runs-on: ubuntu-20.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
compiler: | |
- gcc | |
config: | |
- debug | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
- uses: ./.github/linux-setup | |
with: | |
compiler: ${{ matrix.compiler }} | |
ccache-key: linux-coverage-${{ matrix.compiler }}-${{ matrix.config }} | |
- name: Coverage | |
run: make coverage-build/surelog.coverage | |
- name: Upload coverage | |
# will show up under https://app.codecov.io/gh/chipsalliance/Surelog | |
uses: codecov/codecov-action@v3 | |
with: | |
files: coverage-build/surelog.coverage | |
fail_ci_if_error: false | |
# Valgrind | |
linux-valgrind: | |
name: "Linux | Valgrind | ${{ matrix.project }} | ${{ matrix.compiler }} | ${{ matrix.config }}" | |
runs-on: ubuntu-24.04 | |
needs: linux-install | |
strategy: | |
fail-fast: false | |
matrix: | |
compiler: | |
- gcc | |
config: | |
- debug | |
project: | |
- TypeParamElab | |
- ArianeElab | |
- ArianeElab2 | |
- BlackParrotMuteErrors | |
env: | |
build-artifact-name: sl-${{ github.run_number }}-linux-${{ matrix.compiler }}-${{ matrix.config }} | |
regression-artifact-name: sl-${{ github.run_number }}-linux-${{ matrix.compiler }}-${{ matrix.config }}-valgrind-${{ matrix.project }} | |
steps: | |
- name: Install dependencies | |
run: | | |
sudo apt-get update -qq && | |
sudo apt install -y google-perftools libgoogle-perftools-dev valgrind | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: 3.8 | |
architecture: x64 | |
- name: Setup Python Packages | |
run: | | |
pip3 install orderedmultidict | |
pip3 install psutil | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
- name: Download artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: ${{ env.build-artifact-name }} | |
- name: Valgrind ${{ matrix.project }} | |
timeout-minutes: 90 | |
run: | | |
tar xzfp ${{ env.build-artifact-name }}.tar.gz | |
mv ${{ env.build-artifact-name }} build | |
rm ${{ env.build-artifact-name }}.tar.gz | |
python3 scripts/regression.py run \ | |
--uhdm-lint-filepath bin/uhdm-lint \ | |
--tool valgrind \ | |
--filters ${{ matrix.project }} | |
- name: Prepare regression artifacts | |
if: always() | |
run: | | |
cd build | |
mv regression ${{ env.regression-artifact-name }} | |
find ${{ env.regression-artifact-name }} -name "*.tar.gz" | tar czfp ${{ env.regression-artifact-name }}.tar.gz -T - | |
- name: Upload regression artifacts | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.regression-artifact-name }} | |
path: build/${{ env.regression-artifact-name }}.tar.gz | |
# MSYS2 build, test, and publish | |
msys2-install: | |
name: "MSYS2 (MSYS) | Install | ${{ matrix.compiler }} | ${{ matrix.config }}" | |
runs-on: windows-2022 | |
defaults: | |
run: | |
shell: msys2 {0} | |
strategy: | |
fail-fast: false | |
matrix: | |
compiler: | |
- gcc | |
config: | |
- release | |
env: | |
artifact-name: sl-${{ github.run_number }}-msys2-${{ matrix.compiler }}-${{ matrix.config }} | |
steps: | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: 3.8 | |
architecture: x64 | |
- name: Setup Python Packages | |
shell: cmd | |
run: | | |
pip3 install orderedmultidict | |
pip3 install psutil | |
- name: Setup Msys2 | |
uses: msys2/setup-msys2@v2 | |
with: | |
msystem: MSYS | |
update: true | |
install: make cmake ninja gcc git diffutils zlib-devel | |
env: | |
MSYS2_PATH_TYPE: inherit | |
- name: Setup Java | |
uses: actions/setup-java@v4 | |
with: | |
distribution: temurin | |
java-version: 11 | |
java-package: jre | |
architecture: x64 | |
- name: Configure Git | |
shell: bash | |
run: git config --global core.autocrlf input | |
- name: Move builds to C:\ drive | |
shell: cmd | |
run: | | |
mkdir C:\Surelog | |
cd /D C:\Surelog | |
rd /S /Q %GITHUB_WORKSPACE% | |
mklink /D %GITHUB_WORKSPACE% C:\Surelog | |
- name: Configure Pagefile | |
uses: al-cheb/[email protected] | |
with: | |
minimum-size: 8GB | |
maximum-size: 16GB | |
disk-root: "D:" | |
- name: Git pull | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
- name: Use ccache | |
uses: hendrikmuhs/[email protected] | |
with: | |
key: msys2-install-${{ matrix.compiler }}-${{ matrix.config }} | |
- name: Configure shell environment variables | |
run: | | |
export CWD=`pwd` | |
export JAVA_HOME=`cygpath -u $JAVA_HOME_11_X64` | |
export Py3_ROOT_DIR=`cygpath -u $pythonLocation` | |
echo "JAVA_HOME=$JAVA_HOME" >> $GITHUB_ENV | |
echo 'CMAKE_GENERATOR=Ninja' >> $GITHUB_ENV | |
echo 'CC=gcc' >> $GITHUB_ENV | |
echo 'CXX=g++' >> $GITHUB_ENV | |
echo "PREFIX=${CWD}/install" >> $GITHUB_ENV | |
echo "Py3_ROOT_DIR=$Py3_ROOT_DIR" >> $GITHUB_ENV | |
echo "ADDITIONAL_CMAKE_OPTIONS=-DPython3_ROOT_DIR=$Py3_ROOT_DIR -DSURELOG_WITH_TCMALLOC=Off" >> $GITHUB_ENV | |
echo "PATH=$JAVA_HOME/bin:$Py3_ROOT_DIR:/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" >> $GITHUB_ENV | |
echo "$JAVA_HOME/bin" >> $GITHUB_PATH | |
echo "$Py3_ROOT_DIR" >> $GITHUB_PATH | |
echo "/usr/lib/ccache" >> $GITHUB_PATH | |
echo "/usr/local/opt/ccache/libexec" >> $GITHUB_PATH | |
- name: Show shell configuration | |
run: | | |
env | |
where git && git --version | |
where cmake && cmake --version | |
where make && make --version | |
where java && java -version | |
where python && python --version | |
where ninja && ninja --version | |
where $CC && $CC --version | |
where $CXX && $CXX --version | |
- name: Build, install & test | |
run: | | |
make ${{ matrix.config }} | |
make install | |
make test/unittest | |
make clean | |
make test_install | |
#make test_install_pkgconfig # not working yet. | |
- name: Prepare build artifacts | |
run: | | |
mkdir artifacts | |
mv install ${{ env.artifact-name }} | |
tar czfp artifacts/${{ env.artifact-name }}.tar.gz ${{ env.artifact-name }} | |
- name: Upload build artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.artifact-name }} | |
path: artifacts/${{ env.artifact-name }}.tar.gz | |
# MSYS2 regression | |
msys2-regression: | |
name: "MSYS2 (MSYS) | Regression | ${{ matrix.compiler }} | ${{ matrix.config }} [${{ matrix.shard }}]" | |
runs-on: windows-2022 | |
needs: msys2-install | |
defaults: | |
run: | |
shell: msys2 {0} | |
strategy: | |
fail-fast: false | |
matrix: | |
num_shards: [6] | |
shard: [0, 1, 2, 3, 4, 5] | |
compiler: | |
- gcc | |
config: | |
- release | |
env: | |
build-artifact-name: sl-${{ github.run_number }}-msys2-${{ matrix.compiler }}-${{ matrix.config }} | |
regression-artifact-name: sl-${{ github.run_number }}-msys2-${{ matrix.compiler }}-${{ matrix.config }}-regression-${{ matrix.shard }} | |
steps: | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: 3.8 | |
architecture: x64 | |
- name: Setup Python Packages | |
shell: cmd | |
run: | | |
pip3 install orderedmultidict | |
pip3 install psutil | |
- name: Setup Msys2 | |
uses: msys2/setup-msys2@v2 | |
with: | |
msystem: MSYS | |
update: true | |
install: make git diffutils | |
env: | |
MSYS2_PATH_TYPE: inherit | |
- name: Configure Git | |
run: git config --global core.autocrlf input | |
shell: bash | |
- name: Move builds to C:\ drive | |
shell: cmd | |
run: | | |
mkdir C:\Surelog | |
cd /D C:\Surelog | |
rd /S /Q %GITHUB_WORKSPACE% | |
mklink /D %GITHUB_WORKSPACE% C:\Surelog | |
- name: Configure Pagefile | |
uses: al-cheb/[email protected] | |
with: | |
minimum-size: 8GB | |
maximum-size: 16GB | |
disk-root: "D:" | |
- name: Git pull | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
- name: Download artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: ${{ env.build-artifact-name }} | |
- name: Configure shell environment variables | |
run: | | |
export Py3_ROOT_DIR=`cygpath -u $pythonLocation` | |
echo "Py3_ROOT_DIR=$Py3_ROOT_DIR" >> $GITHUB_ENV | |
echo "$Py3_ROOT_DIR" >> $GITHUB_PATH | |
- name: Show shell configuration | |
run: | | |
# Not entirely sure why this export statement is required. | |
# But the log shows system's PATH variable and env.PATH are still different. | |
export PATH=$Py3_ROOT_DIR:$PATH | |
env | |
where git && git --version | |
where make && make --version | |
where python3 && python3 --version | |
- name: Run regression ${{ matrix.shard }}/${{ matrix.num_shards }} | |
timeout-minutes: 120 | |
run: | | |
export PATH=$Py3_ROOT_DIR:$PATH | |
tar xzfp ${{ env.build-artifact-name }}.tar.gz | |
mv ${{ env.build-artifact-name }} build | |
rm ${{ env.build-artifact-name }}.tar.gz | |
python3 scripts/regression.py run \ | |
--uhdm-lint-filepath bin/uhdm-lint.exe \ | |
--jobs $(nproc) \ | |
--show-diffs \ | |
--num_shards=${{ matrix.num_shards }} \ | |
--shard=${{ matrix.shard }} | |
git status | |
- name: Prepare regression artifacts | |
if: always() | |
run: | | |
cd build | |
mv regression ${{ env.regression-artifact-name }} | |
find ${{ env.regression-artifact-name }} -name "*.tar.gz" | tar czfp ${{ env.regression-artifact-name }}.tar.gz -T - | |
- name: Upload regression artifacts | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.regression-artifact-name }} | |
path: build/${{ env.regression-artifact-name }}.tar.gz | |
# Windows install | |
windows-install: | |
name: "Windows | Install | ${{ matrix.compiler }} | ${{ matrix.config }}" | |
runs-on: windows-2022 | |
defaults: | |
run: | |
shell: cmd | |
strategy: | |
fail-fast: false | |
matrix: | |
compiler: | |
- cl | |
- clang | |
config: | |
- release | |
env: | |
artifact-name: sl-${{ github.run_number }}-windows-${{ matrix.compiler }}-${{ matrix.config }} | |
steps: | |
- name: Install Core Dependencies | |
run: | | |
choco install -y make | |
choco install -y ninja | |
vcpkg install zlib zlib:x64-windows | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: 3.8 | |
architecture: x64 | |
- name: Setup Python Packages | |
run: | | |
pip3 install orderedmultidict | |
pip3 install psutil | |
- name: Setup Java | |
uses: actions/setup-java@v4 | |
with: | |
distribution: temurin | |
java-version: 11 | |
java-package: jre | |
architecture: x64 | |
- name: Setup Clang | |
if: matrix.compiler == 'clang' | |
uses: egor-tensin/setup-clang@v1 | |
with: | |
version: 13 | |
platform: x64 | |
cygwin: 0 | |
- run: git config --global core.autocrlf input | |
shell: bash | |
- name: Move builds to C:\ drive | |
shell: cmd | |
run: | | |
mkdir C:\Surelog | |
cd /D C:\Surelog | |
rd /S /Q %GITHUB_WORKSPACE% | |
mklink /D %GITHUB_WORKSPACE% C:\Surelog | |
- name: Configure Pagefile | |
uses: al-cheb/[email protected] | |
with: | |
minimum-size: 8GB | |
maximum-size: 16GB | |
disk-root: "D:" | |
- uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
- name: Build & Test (cl compiler) | |
if: matrix.compiler == 'cl' | |
run: | | |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" | |
set CMAKE_GENERATOR=Ninja | |
set CC=cl | |
set CXX=cl | |
set PREFIX=%GITHUB_WORKSPACE%\install | |
set CMAKE_PREFIX_PATH=%GITHUB_WORKSPACE%\install | |
set CPU_CORES=%NUMBER_OF_PROCESSORS% | |
set MAKE_DIR=C:\make\bin | |
set PATH=%pythonLocation%;%JAVA_HOME%\bin;%MAKE_DIR%;%PATH% | |
set ADDITIONAL_CMAKE_OPTIONS=-DPython3_ROOT_DIR=%pythonLocation% -DSURELOG_WITH_TCMALLOC=Off -DCMAKE_TOOLCHAIN_FILE=%VCPKG_INSTALLATION_ROOT%/scripts/buildsystems/vcpkg.cmake. | |
set | |
where cmake && cmake --version | |
where make && make --version | |
where java && java -version | |
where python && python --version | |
where ninja && ninja --version | |
make ${{ matrix.config }} | |
if %errorlevel% neq 0 exit /b %errorlevel% | |
make install | |
if %errorlevel% neq 0 exit /b %errorlevel% | |
make test_install | |
if %errorlevel% neq 0 exit /b %errorlevel% | |
make test/unittest | |
if %errorlevel% neq 0 exit /b %errorlevel% | |
- name: Build & Test (clang compiler) | |
if: matrix.compiler == 'clang' | |
run: | | |
set CMAKE_GENERATOR=Ninja | |
set CC=clang | |
set CXX=clang++ | |
set PREFIX=%GITHUB_WORKSPACE%\install | |
set CMAKE_PREFIX_PATH=%GITHUB_WORKSPACE%\install | |
set CPU_CORES=%NUMBER_OF_PROCESSORS% | |
set MAKE_DIR=C:\make\bin | |
set PATH=%pythonLocation%;%JAVA_HOME%\bin;%MAKE_DIR%;%PATH% | |
set ADDITIONAL_CMAKE_OPTIONS=-DPython3_ROOT_DIR=%pythonLocation% -DSURELOG_WITH_TCMALLOC=Off -DCMAKE_TOOLCHAIN_FILE=%VCPKG_INSTALLATION_ROOT%/scripts/buildsystems/vcpkg.cmake. | |
set | |
where cmake && cmake --version | |
where make && make --version | |
where java && java -version | |
where python && python --version | |
where ninja && ninja --version | |
where clang && clang --version | |
where clang++ && clang++ --version | |
make ${{ matrix.config }} | |
if %errorlevel% neq 0 exit /b %errorlevel% | |
make install | |
if %errorlevel% neq 0 exit /b %errorlevel% | |
make test_install | |
if %errorlevel% neq 0 exit /b %errorlevel% | |
make test/unittest | |
if %errorlevel% neq 0 exit /b %errorlevel% | |
- name: Prepare build artifacts | |
shell: bash | |
run: | | |
mkdir artifacts | |
mv install ${{ env.artifact-name }} | |
tar czfp artifacts/${{ env.artifact-name }}.tar.gz ${{ env.artifact-name }} | |
- name: Upload build artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.artifact-name }} | |
path: artifacts/${{ env.artifact-name }}.tar.gz | |
# Windows regression | |
windows-regression: | |
name: "Windows | Regression | ${{ matrix.compiler }} | ${{ matrix.config }} [${{ matrix.shard }}]" | |
runs-on: windows-2022 | |
needs: windows-install | |
defaults: | |
run: | |
shell: cmd | |
strategy: | |
fail-fast: false | |
matrix: | |
num_shards: [6] | |
shard: [0, 1, 2, 3, 4, 5] | |
compiler: | |
- cl | |
- clang | |
config: | |
- release | |
env: | |
build-artifact-name: sl-${{ github.run_number }}-windows-${{ matrix.compiler }}-${{ matrix.config }} | |
regression-artifact-name: sl-${{ github.run_number }}-windows-${{ matrix.compiler }}-${{ matrix.config }}-regression-${{ matrix.shard }} | |
steps: | |
- name: Install Core Dependencies | |
run: | | |
choco install -y make | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: 3.8 | |
architecture: x64 | |
- name: Setup Python Packages | |
run: | | |
pip3 install orderedmultidict | |
pip3 install psutil | |
- run: git config --global core.autocrlf input | |
shell: bash | |
- name: Move builds to C:\ drive | |
shell: cmd | |
run: | | |
mkdir C:\Surelog | |
cd /D C:\Surelog | |
rd /S /Q %GITHUB_WORKSPACE% | |
mklink /D %GITHUB_WORKSPACE% C:\Surelog | |
- name: Configure Pagefile | |
uses: al-cheb/[email protected] | |
with: | |
minimum-size: 8GB | |
maximum-size: 16GB | |
disk-root: "D:" | |
- uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
- name: Download artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: ${{ env.build-artifact-name }} | |
- name: Extract artifact | |
shell: bash | |
run: | | |
# This has to be a separate step and run under bash since tar on Windows | |
# still doesn't support symlink and the root repository folder is a symlink. | |
tar xzfp ${{ env.build-artifact-name }}.tar.gz | |
mv ${{ env.build-artifact-name }} build | |
rm ${{ env.build-artifact-name }}.tar.gz | |
- name: Run regression ${{ matrix.shard }}/${{ matrix.num_shards }} | |
timeout-minutes: 120 | |
run: | | |
python3 scripts/regression.py run^ | |
--uhdm-lint-filepath bin/uhdm-lint.exe^ | |
--jobs %NUMBER_OF_PROCESSORS%^ | |
--show-diffs^ | |
--num_shards=${{ matrix.num_shards }}^ | |
--shard=${{ matrix.shard }} | |
if %errorlevel% neq 0 exit /b %errorlevel% | |
git status | |
- name: Prepare regression artifacts | |
shell: bash | |
if: always() | |
run: | | |
cd build | |
mv regression ${{ env.regression-artifact-name }} | |
find ${{ env.regression-artifact-name }} -name "*.tar.gz" | tar czfp ${{ env.regression-artifact-name }}.tar.gz -T - | |
- name: Upload regression artifacts | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.regression-artifact-name }} | |
path: build/${{ env.regression-artifact-name }}.tar.gz | |
# Mac build, test, and publish | |
macos-install: | |
name: "Mac OS | Install | ${{ matrix.compiler }} | ${{ matrix.config }}" | |
runs-on: macos-12 | |
strategy: | |
fail-fast: false | |
matrix: | |
compiler: | |
- gcc | |
- clang | |
config: | |
- release | |
env: | |
artifact-name: sl-${{ github.run_number }}-macos-${{ matrix.compiler }}-${{ matrix.config }} | |
steps: | |
- name: Setup Java | |
uses: actions/setup-java@v4 | |
with: | |
distribution: temurin | |
java-version: 11 | |
java-package: jre | |
architecture: x64 | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: 3.8 | |
architecture: x64 | |
- name: Setup Python Packages | |
run: | | |
pip3 install orderedmultidict | |
pip3 install psutil | |
- uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
- name: Use ccache | |
uses: hendrikmuhs/[email protected] | |
with: | |
key: macos-install-${{ matrix.compiler }}-${{ matrix.config }} | |
- name: Configure compiler | |
run: | | |
# Default xcode version 14.0.1 has reported bugs with linker | |
# Current recommended workaround is to downgrade to last known good version. | |
# https://github.com/actions/runner-images/issues/6350 | |
sudo xcode-select -s '/Applications/Xcode_13.4.1.app/Contents/Developer' | |
if [ "${{ matrix.compiler }}" == "clang" ]; then | |
echo 'CC=clang' >> $GITHUB_ENV | |
echo 'CXX=clang++' >> $GITHUB_ENV | |
else | |
echo 'CC=gcc-13' >> $GITHUB_ENV | |
echo 'CXX=g++-13' >> $GITHUB_ENV | |
fi | |
- name: Configure shell | |
run: | | |
echo "PATH=$(brew --prefix)/opt/ccache/libexec:$PATH" >> $GITHUB_ENV | |
echo "PREFIX=${GITHUB_WORKSPACE}/install" >> $GITHUB_ENV | |
echo "CMAKE_PREFIX_PATH=${GITHUB_WORKSPACE}/install" >> $GITHUB_ENV | |
echo 'ADDITIONAL_CMAKE_OPTIONS=-DPython3_ROOT_DIR=${pythonLocation}' >> $GITHUB_ENV | |
- name: Show shell configuration | |
run: | | |
env | |
which cmake && cmake --version | |
which make && make --version | |
which java && java -version | |
which python && python --version | |
which $CC && $CC --version | |
which $CXX && $CXX --version | |
- name: Build, install & test | |
run: | | |
make ${{ matrix.config }} | |
make install | |
make test/unittest | |
make clean # make sure we only see installation artifacts | |
make test_install | |
make test_install_pkgconfig | |
- name: Prepare build artifacts | |
run: | | |
mkdir artifacts | |
mv install ${{ env.artifact-name }} | |
tar czfp artifacts/${{ env.artifact-name }}.tar.gz ${{ env.artifact-name }} | |
- name: Upload build artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.artifact-name }} | |
path: artifacts/${{ env.artifact-name }}.tar.gz | |
# Mac regression | |
macos-regression: | |
name: "Mac OS | Regression | ${{ matrix.compiler }} | ${{ matrix.config }} [${{ matrix.shard }}]" | |
runs-on: macos-12 | |
needs: macos-install | |
strategy: | |
fail-fast: false | |
matrix: | |
num_shards: [6] | |
shard: [0, 1, 2, 3, 4, 5] | |
compiler: | |
- gcc | |
- clang | |
config: | |
- release | |
env: | |
build-artifact-name: sl-${{ github.run_number }}-macos-${{ matrix.compiler }}-${{ matrix.config }} | |
regression-artifact-name: sl-${{ github.run_number }}-macos-${{ matrix.compiler }}-${{ matrix.config }}-regression-${{ matrix.shard }} | |
steps: | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: 3.8 | |
architecture: x64 | |
- name: Setup Python Packages | |
run: | | |
pip3 install orderedmultidict | |
pip3 install psutil | |
- uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
- name: Configure shell | |
run: | | |
echo 'PREFIX=${GITHUB_WORKSPACE}/install' >> $GITHUB_ENV | |
- name: Show shell configuration | |
run: | | |
env | |
which cmake && cmake --version | |
which make && make --version | |
which python && python --version | |
- name: Download artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: ${{ env.build-artifact-name }} | |
- name: Run regression ${{ matrix.shard }}/${{ matrix.num_shards }} | |
timeout-minutes: 120 | |
run: | | |
tar xzfp ${{ env.build-artifact-name }}.tar.gz | |
mv ${{ env.build-artifact-name }} build | |
rm ${{ env.build-artifact-name }}.tar.gz | |
python3 scripts/regression.py run \ | |
--uhdm-lint-filepath bin/uhdm-lint \ | |
--jobs $(sysctl -n hw.physicalcpu) \ | |
--show-diffs \ | |
--num_shards=${{ matrix.num_shards }} \ | |
--shard=${{ matrix.shard }} | |
git status | |
- name: Prepare regression artifacts | |
if: always() | |
run: | | |
cd build | |
mv regression ${{ env.regression-artifact-name }} | |
find ${{ env.regression-artifact-name }} -name "*.tar.gz" | tar czfp ${{ env.regression-artifact-name }}.tar.gz -T - | |
- name: Upload regression artifacts | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.regression-artifact-name }} | |
path: build/${{ env.regression-artifact-name }}.tar.gz | |
release-tagging: | |
name: Version Tagging | |
runs-on: ubuntu-24.04 | |
if: ${{github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master')}} | |
permissions: | |
contents: write | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Tag with CMake version if not already. | |
run: | | |
git config --local user.name "Development bot" | |
git config --local user.email "[email protected]" | |
# We want to tag whenever the cmake version changes. So extract the | |
# hash of when the current version was entered. | |
read TAG_HASH TAG_VERSION <<<$(git annotate -l CMakeLists.txt | sed 's/\(^[0-9A-Fa-f]\+\).*project(SURELOG VERSION \([0-9]\+\.[0-9]\+\).*/\1 \2/p;d') | |
TAG="v${TAG_VERSION}" | |
echo "Surelog Version ${TAG} at hash ${TAG_HASH}" | |
# If this is the first time we see this tag: apply. | |
if [ -z "$(git tag -l "${TAG}")" ]; then | |
git tag -a "${TAG}" ${TAG_HASH} -m "Update to ${TAG}" | |
echo "TAG=$TAG" >> $GITHUB_ENV | |
echo "TAG_SHA=$TAG_HASH" >> $GITHUB_ENV | |
else | |
echo "Tag already applied, nothing to do." | |
fi | |
- name: Publish tag | |
if: ${{ env.TAG != '' }} | |
uses: actions/github-script@v7 | |
env: | |
TAG_NAME: ${{env.TAG}} | |
TAG_SHA: ${{env.TAG_SHA}} | |
with: | |
script: | | |
const { TAG_NAME, TAG_SHA } = process.env; | |
github.rest.git.createRef({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
ref: `refs/tags/${TAG_NAME}`, | |
sha: TAG_SHA}); | |
# Code formatting | |
CodeFormatting: | |
runs-on: ubuntu-24.04 | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Install Dependencies | |
run: | | |
# clang-format 18 seems to still settle and has different | |
# outcome with minor versions. So using stable 17 for now. | |
sudo apt-get install clang-format-17 | |
- name: Run formatting style check | |
run: | | |
export CLANG_FORMAT=clang-format-17 | |
"${CLANG_FORMAT}" --version | |
./.github/bin/run-clang-format.sh | |
# Code Tideness | |
ClangTidy: | |
runs-on: ubuntu-24.04 | |
steps: | |
- name: Install Dependencies | |
run: | | |
sudo apt-get update -qq | |
sudo apt -qq -y install clang-tidy-18 ccache \ | |
g++-9 default-jre cmake \ | |
uuid-dev build-essential | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: 3.8 | |
architecture: x64 | |
- name: Setup Python Packages | |
run: | | |
pip3 install orderedmultidict | |
pip3 install psutil | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
- 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: | | |
/home/runner/.cache/clang-tidy | |
/home/runner/.cache/ccache | |
key: clang-tidy-${{ steps.cache_timestamp.outputs.time }} | |
restore-keys: clang-tidy- | |
- name: Configure shell | |
run: | | |
echo 'PATH=/usr/lib/ccache:'"$PATH" >> $GITHUB_ENV | |
- name: Prepare source | |
run: | | |
make run-cmake-release-with-python | |
make -j2 -C build surelog # creates all relevant artifacts | |
ln -sf build/compile_commands.json . | |
- name: Run clang tidy | |
run: | | |
export CLANG_TIDY=clang-tidy-18 | |
"${CLANG_TIDY}" --version | |
./.github/bin/run-clang-tidy.sh limited \ | |
|| ( cat Surelog_clang-tidy.out ; exit 1) |