Skip to content

Disable verbose and debug for tests. #326

Disable verbose and debug for tests.

Disable verbose and debug for tests. #326

Workflow file for this run

name: Build and Test
on:
push:
branches:
- master
- 95-test-tiling-multiquality
tags:
- v*
- exp*
pull_request:
branches:
- master
env:
CWIPC_RELEASE_TAG: nightly
USERNAME: MotionSpell
VCPKG_EXE: ${{ github.workspace }}/vcpkg/vcpkg
FEED_URL: https://nuget.pkg.github.com/MotionSpell/index.json
VCPKG_BINARY_SOURCES: clear;nuget,https://nuget.pkg.github.com/MotionSpell/index.json,readwrite
TESTLATENCY_ARGS: --uncompressed --npoints 4000 --duration 30 --fps 5 --seg_dur 2000 --print-latencies
# The following environment variables can be set to run the tests in verbose or debug mode.
# Only use to find issues that show up in Github Actions but not on developer machines.
TESTLATENCY_VERBOSE:
# TESTLATENCY_VERBOSE: --verbose
# TESTLATENCY_VERBOSE: --verbose --debug
# LLDASH_LOGGING: 1
jobs:
linux-build:
runs-on: ubuntu-latest
env:
VCPKG_DEFAULT_TRIPLET: x64-linux-dynamic
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: 'recursive'
fetch-depth: 0
- name: Set up environment variables
run: |
echo "SIGNALS_REPO=https://github.com/MotionSpell/signals.git" >> $GITHUB_ENV
echo "BUILD_DIR=${{ github.workspace }}" >> $GITHUB_ENV
- name: Bootstrap vcpkg
shell: bash
run: ${{ github.workspace }}/vcpkg/bootstrap-vcpkg.sh
- name: Install mono for vcpkg
shell: bash
run: sudo apt install mono-complete
- name: Add NuGet Sources for vcpkg
shell: bash
run: |
mono `${{ env.VCPKG_EXE }} fetch nuget | tail -n 1` \
sources add \
-Source "${{ env.FEED_URL }}" \
-StorePasswordInClearText \
-Name GitHubPackages \
-UserName "${{ env.USERNAME }}" \
-Password "${{ secrets.GH_PACKAGES_TOKEN }}"
mono `${{ env.VCPKG_EXE }} fetch nuget | tail -n 1` \
setapikey "${{ secrets.GH_PACKAGES_TOKEN }}" \
-Source "${{ env.FEED_URL }}"
- name: Install dependencies with install_debian_prerequisites.sh script
run: scripts/install_debian_prerequisites.sh
- name: Fix for libcrypto build
run: |
sudo apt-get update && \
sudo apt-get autoremove -y libtool && \
sudo apt-get install -y libtool && \
libtoolize --copy --force
- name: Install CMake
uses: lukka/get-cmake@latest
with:
cmakeVersion: "~3.31.1"
- name: Setup vcpkg
uses: lukka/run-vcpkg@v11
- name: CMake configure, build vcpkg packages, build & test
uses: lukka/run-cmake@v10
with:
configurePreset: linux-production
buildPreset: linux-production
testPreset: linux-production
packagePreset: linux-production
- name: Upload vcpkg buildtrees in case of failure
if: ${{ failure() }}
uses: actions/upload-artifact@v4
with:
name: linux-buildtrees
path: ./vcpkg/buildtrees
retention-days: 5
- name: Upload cmake build folder in case of failure
if: ${{ failure() }}
uses: actions/upload-artifact@v4
with:
name: linux-build-folder
path: ./build
retention-days: 5
- name: Upload package
uses: actions/upload-artifact@v4
with:
name: lldash-linux-x86_64
path: build/package/lldash-*.tar.gz
- name: download cwipc
uses: robinraju/release-downloader@v1
with:
repository: cwi-dis/cwipc
tag: ${{ env.CWIPC_RELEASE_TAG }}
fileName: cwipc-ubuntu2404-*-built.tar.gz
out-file-path: cwipc-installed
extract: true
- name: Install cwipc and other pipeline test dependencies
run: |
cmake --install build
source tests/setup_test_environment.sh
cwipc_view --version
- name: Run integration tests
timeout-minutes: 2
run: |
source .venv/bin/activate
python tests/testlatency/testlatency.py ${{ env.TESTLATENCY_VERBOSE }} ${{ env.TESTLATENCY_ARGS }} --logdir logs
- name: Upload all logs
if: always() # for debug purposes
uses: actions/upload-artifact@v4
with:
name: linux-test-logs
path: ${{ env.BUILD_DIR }}/logs/**/*
retention-days: 5
macos-build:
runs-on: macos-latest
env:
VCPKG_DEFAULT_TRIPLET: arm64-osx-dynamic
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: true
fetch-depth: 0
- name: Set up Xcode
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: latest-stable
- name: Set up environment variables
run: |
echo "BUILD_DIR=${{ github.workspace }}" >> $GITHUB_ENV
- name: Bootstrap vcpkg
shell: bash
run: ${{ github.workspace }}/vcpkg/bootstrap-vcpkg.sh
- name: Install nuget and mono for vcpkg
shell: bash
run: brew install mono nuget
- name: Add NuGet Sources for vcpkg
shell: bash
run: |
mono `${{ env.VCPKG_EXE }} fetch nuget | tail -n 1` \
sources add \
-Source "${{ env.FEED_URL }}" \
-StorePasswordInClearText \
-Name GitHubPackages \
-UserName "${{ env.USERNAME }}" \
-Password "${{ secrets.GH_PACKAGES_TOKEN }}"
mono `${{ env.VCPKG_EXE }} fetch nuget | tail -n 1` \
setapikey "${{ secrets.GH_PACKAGES_TOKEN }}" \
-Source "${{ env.FEED_URL }}"
- name: Install dependencies with install_homebrew_prerequisites.sh script
run: scripts/install_homebrew_prerequisites.sh
- name: Install CMake
uses: lukka/get-cmake@latest
with:
cmakeVersion: "~3.31.1"
- name: Setup vcpkg
if: false # Testing if nuget caching works when vcpkg is executed by cmake.
uses: lukka/run-vcpkg@v11
- name: CMake configure, build vcpkg packages, build & test
uses: lukka/run-cmake@v10
with:
configurePreset: mac-production
buildPreset: mac-production
testPreset: mac-production
packagePreset: mac-production
- name: Upload vcpkg buildtrees in case of failure
if: ${{ failure() }}
uses: actions/upload-artifact@v4
with:
name: macos-vcpkg-buildtrees
path: ./vcpkg/buildtrees
retention-days: 5
- name: Upload cmake build folder in case of failure
if: ${{ failure() }}
uses: actions/upload-artifact@v4
with:
name: macos-build-folder
path: ./build
retention-days: 5
- name: Upload package
uses: actions/upload-artifact@v4
with:
name: lldash-mac-arm64
path: build/package/lldash-*.tar.gz
- name: Install cwipc and other pipeline test dependencies
run: |
cmake --install build
brew install [email protected]
source tests/setup_test_environment.sh
cwipc_view --version
- name: Run integration tests
timeout-minutes: 2
run: |
source .venv/bin/activate
python tests/testlatency/testlatency.py ${{ env.TESTLATENCY_VERBOSE }} ${{ env.TESTLATENCY_ARGS }} --logdir logs
- name: Upload all logs
if: always() # Upload logs even if the test fails for debug purposes
uses: actions/upload-artifact@v4
with:
name: mac-test-logs
path: ${{ env.BUILD_DIR }}/logs/**/*
retention-days: 5
macos-intel-build:
runs-on: macos-15-intel
env:
VCPKG_DEFAULT_TRIPLET: x64-osx-dynamic
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: true
fetch-depth: 0
- name: Set up Xcode
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: latest-stable
- name: Set up environment variables
run: |
echo "BUILD_DIR=${{ github.workspace }}" >> $GITHUB_ENV
- name: Install mono for vcpkg
shell: bash
run: brew install mono
- name: Bootstrap vcpkg
shell: bash
run: ${{ github.workspace }}/vcpkg/bootstrap-vcpkg.sh
- name: Add NuGet Sources for vcpkg
shell: bash
run: |
mono `${{ env.VCPKG_EXE }} fetch nuget | tail -n 1` \
sources add \
-Source "${{ env.FEED_URL }}" \
-StorePasswordInClearText \
-Name GitHubPackages \
-UserName "${{ env.USERNAME }}" \
-Password "${{ secrets.GH_PACKAGES_TOKEN }}"
mono `${{ env.VCPKG_EXE }} fetch nuget | tail -n 1` \
setapikey "${{ secrets.GH_PACKAGES_TOKEN }}" \
-Source "${{ env.FEED_URL }}"
- name: Install dependencies with install_homebrew_prerequisites.sh script
run: scripts/install_homebrew_prerequisites.sh
- name: Install CMake
uses: lukka/get-cmake@latest
with:
cmakeVersion: "~3.31.1"
- name: Setup vcpkg
if: false # Testing if nuget caching works when vcpkg is executed by cmake.
uses: lukka/run-vcpkg@v11
- name: CMake configure, build vcpkg packages, build & test
uses: lukka/run-cmake@v10
with:
configurePreset: intelmac-production
buildPreset: intelmac-production
testPreset: intelmac-production
packagePreset: intelmac-production
- name: Upload vcpkg buildtrees in case of failure
if: ${{ failure() }}
uses: actions/upload-artifact@v4
with:
name: macos-intel-vcpkg-buildtrees
path: ./vcpkg/buildtrees
retention-days: 5
- name: Upload cmake build folder in case of failure
if: ${{ failure() }}
uses: actions/upload-artifact@v4
with:
name: macos-intel-build-folder
path: ./build
retention-days: 5
- name: Upload package
uses: actions/upload-artifact@v4
with:
name: lldash-mac-x86_64
path: build/package/lldash-*.tar.gz
- name: Install cwipc and other pipeline test dependencies
run: |
cmake --install build
brew install [email protected] || true
source tests/setup_test_environment.sh
cwipc_view --version
- name: Run integration tests
timeout-minutes: 2
run: |
source .venv/bin/activate
python tests/testlatency/testlatency.py ${{ env.TESTLATENCY_VERBOSE }} ${{ env.TESTLATENCY_ARGS }} --logdir logs
- name: Upload all logs
if: always() # Upload logs even if the test fails for debug purposes
uses: actions/upload-artifact@v4
with:
name: intelmac-test-logs
path: ${{ env.BUILD_DIR }}/logs/**/*
retention-days: 5
macos-universal-build:
runs-on: macos-latest
needs:
- macos-build
- macos-intel-build
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: true
fetch-depth: 0
- name: Get lipomerge
run:
git clone https://github.com/faaxm/lipomerge
- name: Create download directory and upload directory
run: |
mkdir -p ${{ github.workspace }}/Assets
mkdir -p ${{ github.workspace }}/tmp
- name: Download MacOS Arm64 package
uses: actions/download-artifact@v4
with:
name: lldash-mac-arm64
path: ${{ github.workspace }}/tmp
- name: Download MacOS Intel package
uses: actions/download-artifact@v4
with:
name: lldash-mac-x86_64
path: ${{ github.workspace }}/tmp
- name: Create universal binary tree
run: |
set -x
tar xfv ${{ github.workspace }}/tmp/*arm64*.tar.gz
tar xfv ${{ github.workspace }}/tmp/*x86_64*.tar.gz
pwd
ls -l
ls -l lipomerge
dir_arm64=$(echo *arm64*)
dir_x86_64=$(echo *x86_64*)
dir_universal=${dir_arm64/arm64/universal}
python3 lipomerge/lipomerge.py ${dir_arm64} ${dir_x86_64} ${dir_universal}
echo "Universal directory: $dir_universal"
tar cfz ${{ github.workspace }}/Assets/${dir_universal}.tar.gz ${dir_universal}
- name: Upload package
uses: actions/upload-artifact@v4
with:
name: lldash-mac-universal
path: ${{ github.workspace }}/Assets/lldash-*.tar.gz
windows-build:
runs-on: windows-latest
env:
VCPKG_DEFAULT_TRIPLET: x64-mingw-dynamic
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: 'recursive'
fetch-depth: 0
fetch-tags: true
- name: Get all tags
shell: bash
run: |
git show-ref --tags
git log -10
git describe
- name: Install correct Python version
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Set up environment variables
run: |
echo "BUILD_DIR=$env:GITHUB_WORKSPACE" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
shell: pwsh
- name: Bootstrap vcpkg
shell: pwsh
run: ${{ github.workspace }}/vcpkg/bootstrap-vcpkg.bat
- name: Add NuGet sources for vcpkg
shell: pwsh
run: |
.$(${{ env.VCPKG_EXE }} fetch nuget) `
sources add `
-Source "${{ env.FEED_URL }}" `
-StorePasswordInClearText `
-Name GitHubPackages `
-UserName "${{ env.USERNAME }}" `
-Password "${{ secrets.GH_PACKAGES_TOKEN }}"
.$(${{ env.VCPKG_EXE }} fetch nuget) `
setapikey "${{ secrets.GH_PACKAGES_TOKEN }}" `
-Source "${{ env.FEED_URL }}"
- name: Setup MSYS2
uses: msys2/setup-msys2@v2
id: msys2
with:
msystem: MINGW64
path-type: inherit
- name: Update msys2 using our install_mingw64_prerequisites script
shell: msys2 {0}
run: scripts/install_mingw64_prerequisites.sh
- name: Setup vcpkg
uses: lukka/run-vcpkg@v11
- name: manually run CMake configure, build vcpkg packages, build & test
shell: msys2 {0}
env:
MSYS2_PATH_TYPE: inherit
run: |
which cmake
which make
which mingw32-make
cmake --version
make --version
mingw32-make --version
./scripts/buildpackage.sh mingw-production
- name: Upload vcpkg buildtrees in case of failure
if: ${{ failure() }}
uses: actions/upload-artifact@v4
with:
name: windows-vcpkg-buildtrees
path: ./vcpkg/buildtrees
retention-days: 5
- name: Upload cmake build folder in case of failure
if: ${{ failure() }}
uses: actions/upload-artifact@v4
with:
name: windows-build-folder
path: ./build
retention-days: 5
# xxxjack I wonder why this is needed: exactly this same logic should be included in the CMake install process...
# xxxjack unless I am mistaken and forgot to copy it over from cwipc....
# xxxjack anyway, this should be done in cmake.
- name: Analyze library dependencies and fix paths
if: false
shell: pwsh
run: |
Write-Host "===== ANALYZING LIBRARY DEPENDENCIES =====" -ForegroundColor Cyan
# Function to analyze DLL dependencies
function Get-DllDependencies {
param(
[Parameter(Mandatory=$true)]
[string]$FilePath
)
if (-not (Test-Path $FilePath)) {
Write-Host "File not found: $FilePath" -ForegroundColor Red
return
}
Write-Host "Analyzing dependencies for: $FilePath" -ForegroundColor Yellow
# Use objdump from MSYS2/MinGW to list dependencies
$output = & "C:\msys64\mingw64\bin\objdump.exe" -p $FilePath | Select-String "DLL Name"
$missingDeps = @()
Write-Host "Dependencies:" -ForegroundColor Green
$output | ForEach-Object {
$dllName = $_.ToString().Trim() -replace "DLL Name: ", ""
Write-Host " - $dllName"
# Skip Windows system DLLs
if ($dllName -match "^(ntdll|KERNEL32|KERNELBASE|msvcrt|bcrypt|ADVAPI32|RPCRT4|CRYPT32|ucrtbase|WS2_32|USER32|GDI32|ole32|SHELL32|SHLWAPI)\.dll$") {
Write-Host " 🔵 System DLL" -ForegroundColor Blue
return
}
# Try to locate each dependency
$found = $false
$searchPaths = @(
"${{ github.workspace }}\build\bin",
"${{ github.workspace }}\build\vcpkg_installed\x64-mingw-dynamic\bin",
"${{ github.workspace }}\build\vcpkg_installed\x64-mingw-dynamic\lib",
"C:\msys64\mingw64\bin"
)
$foundPath = ""
foreach ($path in $searchPaths) {
$fullPath = Join-Path $path $dllName
if (Test-Path $fullPath) {
$foundPath = $fullPath
$found = $true
Write-Host " ✅ Found at: $fullPath" -ForegroundColor Green
break
}
}
if (-not $found) {
Write-Host " ❌ NOT FOUND in search paths" -ForegroundColor Red
$missingDeps += $dllName
} else {
# Copy dependency to build/bin to ensure it's available
$targetPath = Join-Path "${{ github.workspace }}\build\bin" $dllName
if ((-not (Test-Path $targetPath)) -and $foundPath -ne $targetPath) {
Copy-Item $foundPath $targetPath
Write-Host " 📋 Copied to build/bin directory" -ForegroundColor Cyan
}
}
}
return $missingDeps
}
# Collect all missing dependencies
$missingDependencies = @()
# Check key libraries
$libraries = @(
"${{ github.workspace }}\build\bin\bin2dash.so",
"${{ github.workspace }}\build\bin\signals-unity-bridge.so"
)
foreach ($lib in $libraries) {
$missingDeps = Get-DllDependencies -FilePath $lib
$missingDependencies += $missingDeps
Write-Host ""
}
# Analyze missing dependencies (if any)
if ($missingDependencies.Count -gt 0) {
Write-Host "⚠️ Missing dependencies:" -ForegroundColor Yellow
$missingDependencies | Sort-Object -Unique | ForEach-Object {
Write-Host " - $_" -ForegroundColor Red
}
# Search for missing dependencies in the MSYS2 environment
Write-Host "Searching MSYS2 for missing packages..." -ForegroundColor Cyan
foreach ($dep in ($missingDependencies | Sort-Object -Unique)) {
$output = & "C:\msys64\usr\bin\pacman.exe" -Fy $dep 2>$null
if ($output) {
Write-Host "Found package for $dep in pacman database" -ForegroundColor Green
$output | Out-String | Write-Host
}
}
} else {
Write-Host "✅ All dependencies found!" -ForegroundColor Green
}
# Copy required MSYS2 runtime DLLs to ensure they're available
Write-Host "Copying MSYS2 runtime libraries to build/bin..." -ForegroundColor Cyan
$msys2RuntimeDlls = @(
"libgcc_s_seh-1.dll",
"libwinpthread-1.dll",
"libstdc++-6.dll"
)
foreach ($dll in $msys2RuntimeDlls) {
$sourcePath = "C:\msys64\mingw64\bin\$dll"
$targetPath = "${{ github.workspace }}\build\bin\$dll"
if (Test-Path $sourcePath) {
Copy-Item -Path $sourcePath -Destination $targetPath -Force
Write-Host "Copied $dll to build/bin" -ForegroundColor Green
} else {
Write-Host "⚠️ Could not find $dll in MSYS2" -ForegroundColor Yellow
}
}
# Copy vcpkg dependencies
Write-Host "Copying vcpkg libraries to build/bin..." -ForegroundColor Cyan
$vcpkgBinDir = "${{ github.workspace }}\build\vcpkg_installed\x64-mingw-dynamic\bin"
if (Test-Path $vcpkgBinDir) {
$dllCount = 0
foreach ($dll in (Get-ChildItem -Path $vcpkgBinDir -Filter "*.dll")) {
$targetPath = Join-Path "${{ github.workspace }}\build\bin" $dll.Name
if (-not (Test-Path $targetPath)) {
Copy-Item $dll.FullName $targetPath -Force
$dllCount++
}
}
Write-Host "✅ Copied $dllCount DLLs from vcpkg to build/bin" -ForegroundColor Green
} else {
Write-Host "❌ vcpkg bin directory not found: $vcpkgBinDir" -ForegroundColor Red
}
# Ensure SIGNALS_SMD_PATH is properly set
$env:SIGNALS_SMD_PATH = "${{ github.workspace }}\build\bin"
Write-Host "SIGNALS_SMD_PATH set to: $env:SIGNALS_SMD_PATH" -ForegroundColor Cyan
# List DLLs in build/bin after copying
Write-Host "Contents of build/bin after copying dependencies:" -ForegroundColor Yellow
Get-ChildItem -Path "${{ github.workspace }}\build\bin\*.dll" |
Where-Object { $_.Name -match "^(lib|msys-|libgcc|libwin|libstdc)" } |
Sort-Object Name |
Format-Table Name, Length, LastWriteTime
- name: Create package
run: cpack --preset mingw-production
- name: Upload package
uses: actions/upload-artifact@v4
with:
name: lldash-windows-x86_64
path: build/package/lldash-*.tar.gz
windows-test:
runs-on: windows-latest
needs:
- windows-build
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: 'recursive'
- name: Install correct Python version
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Download Windows package
uses: actions/download-artifact@v4
with:
name: lldash-windows-x86_64
path: ${{ github.workspace }}
- name: Install lldash
shell: bash
run: |
tar xfv lldash-windows-*.tar.gz
mv lldash-windows-*/ installed
ls -l
- name: Install cwipc and other pipeline test dependencies
shell: pwsh
run: |
python --version
& tests\setup_test_environment.ps1
python --version
pip freeze
cwipc_view --version
- name: Run integration tests
timeout-minutes: 2
shell: pwsh
run: |
& .\.venv\Scripts\Activate.ps1
python tests/testlatency/testlatency.py ${{ env.TESTLATENCY_VERBOSE }} ${{ env.TESTLATENCY_ARGS }} --logdir logs
- name: Upload test logs
if: always()
uses: actions/upload-artifact@v4
with:
name: windows-test-logs
path: |
${{ env.BUILD_DIR }}/logs/**/*
${{ env.BUILD_DIR }}/logs/*
retention-days: 5
- name: Upload test venv folder in case of failure
if: ${{ failure() }}
uses: actions/upload-artifact@v4
with:
name: windows-test-venv-folder
path: ${{ env.BUILD_DIR }}/.venv/
include-hidden-files: true
retention-days: 5
- name: Upload test installed folder in case of failure
if: ${{ failure() }}
uses: actions/upload-artifact@v4
with:
name: windows-test-installed-folder
path: ./installed
retention-days: 5
create-release:
if: startsWith(github.ref, 'refs/tags/')
needs:
- linux-build
- macos-build
- macos-intel-build
- macos-universal-build
- windows-build
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: 'recursive'
- name: Create Assets folder
run: mkdir -p ${{ github.workspace }}/Assets
- name: Download Linux package
uses: actions/download-artifact@v4
with:
name: lldash-linux-x86_64
path: ${{ github.workspace }}/Assets
- name: Download MacOS Arm64 package
uses: actions/download-artifact@v4
with:
name: lldash-mac-arm64
path: ${{ github.workspace }}/Assets
- name: Download MacOS Intel package
uses: actions/download-artifact@v4
with:
name: lldash-mac-x86_64
path: ${{ github.workspace }}/Assets
- name: Download MacOS Intel package
uses: actions/download-artifact@v4
with:
name: lldash-mac-universal
path: ${{ github.workspace }}/Assets
- name: Download Windows package
uses: actions/download-artifact@v4
with:
name: lldash-windows-x86_64
path: ${{ github.workspace }}/Assets
- name: Create release
uses: softprops/action-gh-release@v2
with:
files: ${{ github.workspace }}/Assets/*
body: |
Release for ${{ github.ref }}
generate_release_notes: true
draft: true
prerelease: true