55 branches :
66 - master
77 pull_request :
8- branches :
9- - master
108 workflow_dispatch :
119
1210jobs :
2018 - Debug
2119
2220 os :
21+ - macos-15-intel
2322 - macos-latest
24- - windows-latest
2523
2624 include :
2725 - os : ubuntu-latest
@@ -30,12 +28,14 @@ jobs:
3028 - os : ubuntu-latest
3129 config : Debug
3230 container : ghcr.io/viennatools/vienna-builder:suite
31+ - os : windows-latest
32+ config : Release+Debug
3333
3434 runs-on : ${{ matrix.os }}
3535 container : ${{ matrix.container }}
3636
3737 env :
38- VCPKG_COMMIT : c3867e714dd3a51c272826eea77267876517ed99
38+ VCPKG_COMMIT : 72d876b20f06129a1b1e0db80c7075fe3e419d7c
3939 VCPKG_DEFAULT_BINARY_CACHE : ${{ github.workspace }}/.vcpkg-bincache
4040
4141 name : " 🧪 Test on ${{ matrix.os }} (⚙️: ${{ matrix.config }}, 💿: ${{ matrix.container || matrix.os }})"
4949 with :
5050 os : ${{ matrix.os }}
5151
52+ - name : 🔗 Prepare ViennaLS source
53+ if : ${{ matrix.os != 'windows-latest' }}
54+ run : |
55+ VIENNALS_TAG=$(awk '/NAME ViennaLS/{f=1} f && /GIT_TAG/{print $2; exit}' CMakeLists.txt)
56+ if ! git ls-remote --tags --exit-code https://github.com/ViennaTools/ViennaLS.git "$VIENNALS_TAG" > /dev/null 2>&1; then
57+ echo "[CI] Tag $VIENNALS_TAG not found; cloning master as fallback"
58+ rm -rf _viennals
59+ git clone --depth 1 --branch master https://github.com/ViennaTools/ViennaLS.git _viennals
60+ echo "CPM_ViennaLS_SOURCE=$(pwd)/_viennals" >> "$GITHUB_ENV"
61+ fi
62+
63+ - name : 🔗 Prepare ViennaLS source (Windows)
64+ if : ${{ matrix.os == 'windows-latest' }}
65+ shell : pwsh
66+ run : |
67+ $content = Get-Content CMakeLists.txt -Raw
68+ $viennalsTag = [regex]::Match($content, 'NAME\s+ViennaLS.*?GIT_TAG\s+(\S+)', [System.Text.RegularExpressions.RegexOptions]::Singleline).Groups[1].Value
69+ git ls-remote --tags --exit-code https://github.com/ViennaTools/ViennaLS.git $viennalsTag | Out-Null
70+ if ($LASTEXITCODE -ne 0) {
71+ Write-Host "[CI] Tag $viennalsTag not found; cloning master as fallback"
72+ Remove-Item -Recurse -Force _viennals -ErrorAction SilentlyContinue
73+ git clone --depth 1 --branch master https://github.com/ViennaTools/ViennaLS.git _viennals
74+ if ($LASTEXITCODE -ne 0) { exit 1 }
75+ "CPM_ViennaLS_SOURCE=$((Get-Location).Path)/_viennals" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
76+ }
5277 - name : 🖥️ Setup vcpkg (Windows)
5378 shell : pwsh
5479 if : ${{ matrix.os == 'windows-latest' }}
@@ -64,34 +89,64 @@ jobs:
6489 New-Item -ItemType Directory -Force -Path "${{ env.VCPKG_DEFAULT_BINARY_CACHE }}"
6590
6691 - name : 📋 Install MacOS Dependencies
67- if : ${{ matrix.os == 'macos-latest' }}
92+ if : ${{ startsWith( matrix.os, 'macos-') }}
6893 run : brew install vtk embree tbb
6994
70- - name : 🦥 Cache vcpkg binary (Windows)
95+ - name : 🔑 Prepare vcpkg cache key (Windows)
96+ if : ${{ matrix.os == 'windows-latest' }}
97+ shell : pwsh
98+ run : |
99+ $manifest = Get-Content vcpkg.json -Raw | ConvertFrom-Json
100+ $cacheKey = [ordered]@{
101+ dependencies = $manifest.dependencies
102+ features = $manifest.features
103+ defaultFeatures = $manifest.'default-features'
104+ overrides = $manifest.overrides
105+ builtinBaseline = $manifest.'builtin-baseline'
106+ }
107+ $cacheKey | ConvertTo-Json -Depth 20 | Out-File -FilePath vcpkg-cache-key.json -Encoding utf8
108+ Get-Content vcpkg-cache-key.json
109+
110+ - name : 🦥 Cache vcpkg installed (Windows)
71111 if : ${{ matrix.os == 'windows-latest' }}
112+ id : vcpkg-installed-cache
72113 uses : actions/cache@v5
73114 with :
74- path : ${{ env.VCPKG_DEFAULT_BINARY_CACHE }}
75- key : vcpkg-${{ matrix.os }}-${{ matrix.config }}-${{ env.VCPKG_COMMIT }}
115+ path : ${{ github.workspace }}/vcpkg_installed
116+ key : vcpkg-installed-${{ matrix.os }}-${{ env.VCPKG_COMMIT }}-${{ hashFiles('vcpkg-cache-key.json') }}
117+ restore-keys : |
118+ vcpkg-installed-${{ matrix.os }}-${{ env.VCPKG_COMMIT }}-
76119
77120 - name : 🛠️ Build Dependencies (Windows)
78- if : ${{ matrix.os == 'windows-latest' }}
121+ if : ${{ matrix.os == 'windows-latest' && steps.vcpkg-installed-cache.outputs.cache-hit != 'true' }}
79122 shell : pwsh
80123 run : |
81124 ./vcpkg/vcpkg install --triplet x64-windows
82125
83126 - name : 🏗️ Compile (Windows)
84127 if : ${{ matrix.os == 'windows-latest' }}
128+ shell : pwsh
85129 run : |
86- cmake -DVIENNAPS_BUILD_TESTS=ON -DCMAKE_TOOLCHAIN_FILE=${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows -B build
87- cmake --build build --config ${{ matrix.config }}
130+ $cpmArgs = @()
131+ if ($env:CPM_ViennaLS_SOURCE) { $cpmArgs += "-DCPM_ViennaLS_SOURCE=$env:CPM_ViennaLS_SOURCE" }
132+ cmake -DVIENNAPS_BUILD_TESTS=ON -DCMAKE_TOOLCHAIN_FILE=${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows -DVCPKG_INSTALLED_DIR=${{ github.workspace }}/vcpkg_installed -DVCPKG_MANIFEST_INSTALL=OFF @cpmArgs -B build
133+ cmake --build build --config Release --parallel
134+ cmake --build build --config Debug --parallel
88135
89136 - name : 🏗️ Compile (other)
90137 if : ${{ matrix.os != 'windows-latest' }}
91138 run : |
92- cmake -DVIENNAPS_BUILD_TESTS=ON -DVIENNAPS_ENABLE_SANITIZER=ON -B build
139+ cmake -DVIENNAPS_BUILD_TESTS=ON -DVIENNAPS_ENABLE_SANITIZER=ON ${CPM_ViennaLS_SOURCE:+-DCPM_ViennaLS_SOURCE="$CPM_ViennaLS_SOURCE"} -B build
93140 cmake --build build --config ${{ matrix.config }}
94141
95142 - name : 🧪 Test
143+ if : ${{ matrix.os != 'windows-latest' }}
96144 run : |
97145 ctest --output-on-failure -E "Benchmark|Performance" -C ${{ matrix.config }} --test-dir build
146+
147+ - name : 🧪 Test (Windows)
148+ if : ${{ matrix.os == 'windows-latest' }}
149+ shell : pwsh
150+ run : |
151+ ctest --output-on-failure -E "Benchmark|Performance" -C Release --test-dir build
152+ ctest --output-on-failure -E "Benchmark|Performance" -C Debug --test-dir build
0 commit comments