2323 vixos : linux
2424 arch : aarch64
2525
26- # macOS Intel runner (macos-13 retired)
2726 - os : macos-15-intel
2827 vixos : macos
2928 arch : x86_64
@@ -48,10 +47,10 @@ jobs:
4847 uses : lukka/get-cmake@latest
4948
5049 # -------------------------
51- # Linux deps (native)
50+ # Linux deps (native only )
5251 # -------------------------
5352 - name : Install deps (Linux)
54- if : runner.os == 'Linux'
53+ if : runner.os == 'Linux' && matrix.arch != 'aarch64'
5554 shell : bash
5655 run : |
5756 set -euxo pipefail
@@ -69,25 +68,20 @@ jobs:
6968 run : |
7069 set -euxo pipefail
7170
72- retry() { n=0; until [ $n -ge 3 ]; do "$@" && break; n=$((n+1)); sleep 5; done; [ $n -lt 3 ]; }
73-
74- retry sudo apt-get update
75-
76- # Cross compilers + binutils
77- retry sudo apt-get install -y --no-install-recommends \
78- gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu
79-
80- # Enable multiarch and install ARM64 runtime + dev libs
8171 sudo dpkg --add-architecture arm64
82- retry sudo apt-get update
72+ sudo apt-get update
8373
84- # Runtime libs often required to resolve dependencies cleanly
85- retry sudo apt-get install -y --no-install-recommends \
86- libc6:arm64 libstdc++6:arm64 libgcc-s1:arm64
74+ # Cross compilers
75+ sudo apt-get install -y --no-install-recommends \
76+ gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
8777
88- # Dev libs for find_package() during cross configure
89- retry sudo apt-get install -y --no-install-recommends \
90- libssl-dev:arm64 zlib1g-dev:arm64 libsqlite3-dev:arm64 libbrotli-dev:arm64
78+ # ARM64 dev libs (for find_package on cross builds)
79+ sudo apt-get install -y --no-install-recommends \
80+ pkg-config ninja-build ca-certificates \
81+ libssl-dev:arm64 \
82+ zlib1g-dev:arm64 \
83+ libsqlite3-dev:arm64 \
84+ libbrotli-dev:arm64
9185
9286 cat > toolchain-aarch64.cmake <<'EOF'
9387 set(CMAKE_SYSTEM_NAME Linux)
9690 set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
9791 set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
9892
99- # Prefer arm64 sysroot paths when cross compiling
93+ # Make CMake search target libs/includes first
10094 set(CMAKE_FIND_ROOT_PATH
10195 /usr/aarch64-linux-gnu
10296 /usr/lib/aarch64-linux-gnu
@@ -110,6 +104,17 @@ jobs:
110104 set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
111105 EOF
112106
107+ # -------------------------
108+ # macOS deps (help pkg-config + openssl path)
109+ # -------------------------
110+ - name : Install deps (macOS)
111+ if : runner.os == 'macOS'
112+ shell : bash
113+ run : |
114+ set -euxo pipefail
115+ brew update
116+ brew install pkg-config openssl@3 || true
117+
113118 # -------------------------
114119 # Windows deps
115120 # -------------------------
@@ -125,29 +130,41 @@ jobs:
125130 - name : Configure (Unix)
126131 if : runner.os != 'Windows'
127132 shell : bash
133+ env :
134+ GH_PAGER : cat
135+ PAGER : cat
128136 run : |
129137 set -euxo pipefail
130138
131- COMMON_ARGS =(
132- -G Ninja
139+ CMAKE_ARGS =(
140+ -S . -B build - G Ninja
133141 -DCMAKE_BUILD_TYPE=Release
134142 -DVIX_ENABLE_INSTALL=OFF
135- # Keep release CI portable across platforms:
143+
144+ # Stabilize release CI: disable deps that are not guaranteed everywhere
136145 -DVIX_DB_USE_MYSQL=OFF
137146 -DVIX_CORE_WITH_MYSQL=OFF
138147 -DVIX_ENABLE_HTTP_COMPRESSION=OFF
148+
139149 -DCMAKE_MESSAGE_LOG_LEVEL=VERBOSE
140150 --log-level=VERBOSE
141151 )
142152
143153 if [ "${{ runner.os }}" = "Linux" ] && [ "${{ matrix.arch }}" = "aarch64" ]; then
144- cmake -S . -B build "${COMMON_ARGS[@]}" \
145- -DCMAKE_TOOLCHAIN_FILE="${GITHUB_WORKSPACE}/toolchain-aarch64.cmake" \
146- --debug-find
147- else
148- cmake -S . -B build "${COMMON_ARGS[@]}" --debug-find
154+ CMAKE_ARGS+=(-DCMAKE_TOOLCHAIN_FILE="${GITHUB_WORKSPACE}/toolchain-aarch64.cmake" --debug-find)
149155 fi
150156
157+ if [ "${{ runner.os }}" = "macOS" ]; then
158+ # Help OpenSSL discovery on macOS runners (Homebrew)
159+ if [ -d "/opt/homebrew/opt/openssl@3" ]; then
160+ CMAKE_ARGS+=(-DOPENSSL_ROOT_DIR=/opt/homebrew/opt/openssl@3)
161+ elif [ -d "/usr/local/opt/openssl@3" ]; then
162+ CMAKE_ARGS+=(-DOPENSSL_ROOT_DIR=/usr/local/opt/openssl@3)
163+ fi
164+ fi
165+
166+ cmake "${CMAKE_ARGS[@]}"
167+
151168 - name : Dump CMake logs (Unix)
152169 if : failure() && runner.os != 'Windows'
153170 shell : bash
@@ -178,7 +195,6 @@ jobs:
178195 build/CMakeFiles/CMakeError.log
179196 build/CMakeFiles/CMakeOutput.log
180197 build/CMakeFiles/CMakeConfigureLog.yaml
181- build/CMakeFiles/*.log
182198 if-no-files-found : warn
183199
184200 - name : Build (Unix)
@@ -195,7 +211,11 @@ jobs:
195211 if : runner.os == 'Windows'
196212 shell : pwsh
197213 run : |
198- $openssl = "C:\Program Files\OpenSSL-Win64"
214+ $openssl = (Get-ChildItem "C:\Program Files" -Directory -ErrorAction SilentlyContinue |
215+ Where-Object { $_.Name -like "OpenSSL-*" } | Select-Object -First 1).FullName
216+ if (-not $openssl) { $openssl = "C:\Program Files\OpenSSL-Win64" }
217+ Write-Host "OPENSSL_ROOT_DIR=$openssl"
218+
199219 cmake -S . -B build -A x64 `
200220 -DVIX_ENABLE_INSTALL=OFF `
201221 -DVIX_DB_USE_MYSQL=OFF `
@@ -226,7 +246,7 @@ jobs:
226246 if [ -z "$BIN" ]; then
227247 echo "Expected vix binary not found. Listing build/ ..." >&2
228248 ls -la build || true
229- find build -maxdepth 6 -type f -name vix -print || true
249+ find build -maxdepth 5 -type f -name vix -print || true
230250 exit 1
231251 fi
232252
@@ -267,9 +287,6 @@ jobs:
267287 Compress-Archive -Path dist\vix.exe -DestinationPath "dist\$asset" -Force
268288 Remove-Item dist\vix.exe -Force
269289
270- # -------------------------
271- # Upload dist
272- # -------------------------
273290 - name : Upload dist
274291 uses : actions/upload-artifact@v4
275292 with :
@@ -286,7 +303,7 @@ jobs:
286303 with :
287304 path : dist-all
288305
289- - name : Flatten (best effort)
306+ - name : Flatten
290307 shell : bash
291308 run : |
292309 set -euxo pipefail
0 commit comments