Skip to content

Commit b4c632b

Browse files
ColinRitmancursoragentFlatEarthShares
authored
Refactor: Improve CI/CD workflows and dependency management (#10)
Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: clinchmtnmojo <clinchmtnmojo@gmail.com>
1 parent 9415b0a commit b4c632b

8 files changed

Lines changed: 301 additions & 320 deletions

File tree

.github/workflows/build.yml

Lines changed: 71 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -65,56 +65,87 @@ jobs:
6565
run: |
6666
brew update
6767
brew install ninja boost qt@5 miniupnpc qrencode icu4c
68+
69+
# Set environment variables for Boost and ICU
6870
echo "BOOST_ROOT=$(brew --prefix boost)" >> $GITHUB_ENV
69-
echo "ICU_ROOT=$(brew --prefix icu4c@77)" >> $GITHUB_ENV
70-
echo "PATH=$(brew --prefix icu4c@77)/bin:$PATH" >> $GITHUB_ENV
71-
echo "PKG_CONFIG_PATH=$(brew --prefix icu4c@77)/lib/pkgconfig:$PKG_CONFIG_PATH" >> $GITHUB_ENV
72-
echo "LDFLAGS=-L$(brew --prefix icu4c@77)/lib" >> $GITHUB_ENV
73-
echo "CPPFLAGS=-I$(brew --prefix icu4c@77)/include" >> $GITHUB_ENV
71+
72+
# Try different ICU versions
73+
if [ -d "$(brew --prefix)/opt/icu4c" ]; then
74+
ICU_PREFIX="$(brew --prefix)/opt/icu4c"
75+
elif [ -d "$(brew --prefix)/opt/icu4c@77" ]; then
76+
ICU_PREFIX="$(brew --prefix)/opt/icu4c@77"
77+
elif [ -d "$(brew --prefix)/opt/icu4c@76" ]; then
78+
ICU_PREFIX="$(brew --prefix)/opt/icu4c@76"
79+
else
80+
ICU_PREFIX="$(brew --prefix icu4c)"
81+
fi
82+
83+
echo "ICU_ROOT=$ICU_PREFIX" >> $GITHUB_ENV
84+
echo "PATH=$ICU_PREFIX/bin:$PATH" >> $GITHUB_ENV
85+
echo "PKG_CONFIG_PATH=$ICU_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH" >> $GITHUB_ENV
86+
echo "LDFLAGS=-L$ICU_PREFIX/lib" >> $GITHUB_ENV
87+
echo "CPPFLAGS=-I$ICU_PREFIX/include" >> $GITHUB_ENV
7488
7589
- name: Install dependencies (Windows)
7690
if: matrix.os == 'windows-2022'
7791
shell: pwsh
7892
run: |
79-
choco install -y ninja vcpkg miniupnpc qrencode qt5-default
80-
vcpkg install --triplet x64-windows boost-filesystem boost-thread boost-date-time `
81-
boost-chrono boost-regex boost-serialization boost-program-options `
82-
boost-multi-index boost-uuid boost-asio boost-scope-exit boost-format `
83-
icu openssl
93+
# Install basic tools
94+
choco install -y ninja
95+
96+
# Initialize vcpkg if not already done
97+
if (-not (Test-Path "C:/vcpkg/vcpkg.exe")) {
98+
git clone https://github.com/Microsoft/vcpkg.git C:/vcpkg
99+
cd C:/vcpkg
100+
.\bootstrap-vcpkg.bat
101+
.\vcpkg integrate install
102+
}
103+
104+
# Install packages via vcpkg
105+
C:/vcpkg/vcpkg.exe install --triplet x64-windows `
106+
boost-filesystem boost-thread boost-date-time boost-chrono `
107+
boost-regex boost-serialization boost-program-options `
108+
boost-multi-index boost-uuid boost-asio boost-scope-exit `
109+
boost-format icu openssl miniupnpc
84110
85111
# -------------------- Configure & Build --------------------
86112
- name: Configure
87113
shell: bash
88114
run: |
89115
if [ "${{ matrix.os }}" = "macos-14" ]; then
90-
export ICU_ROOT=$(brew --prefix icu4c@77)
116+
# ICU_ROOT should be set from previous step
91117
export PATH="$ICU_ROOT/bin:$PATH"
92118
export PKG_CONFIG_PATH="$ICU_ROOT/lib/pkgconfig:$PKG_CONFIG_PATH"
93119
export LDFLAGS="-L$ICU_ROOT/lib $LDFLAGS"
94120
export CPPFLAGS="-I$ICU_ROOT/include $CPPFLAGS"
95121
122+
echo "Using ICU_ROOT: $ICU_ROOT"
123+
echo "Available ICU libraries:"
124+
ls -la "$ICU_ROOT/lib/" | grep -E "libicu.*\.(dylib|a)$" || echo "No ICU libraries found"
125+
96126
# Check for ICU library files and use versioned names if needed
97127
ICU_DATA_LIB=""
98128
ICU_I18N_LIB=""
99129
ICU_UC_LIB=""
100130
101-
if [ -f "$ICU_ROOT/lib/libicudata.77.dylib" ]; then
102-
ICU_DATA_LIB="$ICU_ROOT/lib/libicudata.77.dylib"
103-
elif [ -f "$ICU_ROOT/lib/libicudata.dylib" ]; then
104-
ICU_DATA_LIB="$ICU_ROOT/lib/libicudata.dylib"
105-
fi
106-
107-
if [ -f "$ICU_ROOT/lib/libicui18n.77.dylib" ]; then
108-
ICU_I18N_LIB="$ICU_ROOT/lib/libicui18n.77.dylib"
109-
elif [ -f "$ICU_ROOT/lib/libicui18n.dylib" ]; then
110-
ICU_I18N_LIB="$ICU_ROOT/lib/libicui18n.dylib"
111-
fi
112-
113-
if [ -f "$ICU_ROOT/lib/libicuuc.77.dylib" ]; then
114-
ICU_UC_LIB="$ICU_ROOT/lib/libicuuc.77.dylib"
115-
elif [ -f "$ICU_ROOT/lib/libicuuc.dylib" ]; then
116-
ICU_UC_LIB="$ICU_ROOT/lib/libicuuc.dylib"
117-
fi
131+
# Try to find ICU libraries with different version patterns
132+
for version in 77 76 75 74 ""; do
133+
if [ -n "$version" ]; then
134+
suffix=".$version.dylib"
135+
else
136+
suffix=".dylib"
137+
fi
138+
139+
if [ -z "$ICU_DATA_LIB" ] && [ -f "$ICU_ROOT/lib/libicudata$suffix" ]; then
140+
ICU_DATA_LIB="$ICU_ROOT/lib/libicudata$suffix"
141+
fi
142+
if [ -z "$ICU_I18N_LIB" ] && [ -f "$ICU_ROOT/lib/libicui18n$suffix" ]; then
143+
ICU_I18N_LIB="$ICU_ROOT/lib/libicui18n$suffix"
144+
fi
145+
if [ -z "$ICU_UC_LIB" ] && [ -f "$ICU_ROOT/lib/libicuuc$suffix" ]; then
146+
ICU_UC_LIB="$ICU_ROOT/lib/libicuuc$suffix"
147+
fi
148+
done
118149
119150
echo "ICU Data Library: $ICU_DATA_LIB"
120151
echo "ICU I18N Library: $ICU_I18N_LIB"
@@ -125,7 +156,7 @@ jobs:
125156
-DCMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE \
126157
-DCMAKE_OSX_ARCHITECTURES=arm64 \
127158
-DBOOST_ROOT="$BOOST_ROOT" \
128-
-DBUILD_TESTS=ON
159+
-DBUILD_TESTS=ON \
129160
-DICU_ROOT="$ICU_ROOT" \
130161
-DICU_INCLUDE_DIR="$ICU_ROOT/include" \
131162
-DICU_DATA_LIBRARY="$ICU_DATA_LIB" \
@@ -148,7 +179,7 @@ jobs:
148179
cmake -S . -B build \
149180
-G Ninja \
150181
-DCMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE \
151-
-DBUILD_TESTS=ON
182+
-DBUILD_TESTS=ON \
152183
-DCMAKE_POLICY_DEFAULT_CMP0167=OLD
153184
fi
154185
@@ -158,11 +189,19 @@ jobs:
158189
# -------------------- Run Tests --------------------
159190
- name: Run tests
160191
if: success()
192+
shell: bash
161193
run: |
162-
if [ -f "build/CTestTestfile.cmake" ]; then
163-
ctest --test-dir build --output-on-failure
194+
cd build
195+
if [ -f "CTestTestfile.cmake" ]; then
196+
echo "Running tests..."
197+
ctest --output-on-failure --verbose
198+
elif [ -f "test/CTestTestfile.cmake" ]; then
199+
echo "Running tests from test directory..."
200+
ctest --test-dir test --output-on-failure --verbose
164201
else
165202
echo "No tests configured, skipping ctest"
203+
echo "Available files in build directory:"
204+
find . -name "CTestTestfile.cmake" -o -name "*test*" -type f | head -10
166205
fi
167206
168207
# -------------------- Upload Artifacts --------------------
Lines changed: 64 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,26 @@ jobs:
3232
uses: microsoft/setup-msbuild@v1.1
3333

3434

35-
- name: Download and Install Boost 1.83
35+
- name: Install dependencies (Windows)
36+
shell: pwsh
3637
run: |
37-
$Url = "https://sourceforge.net/projects/boost/files/boost-binaries/1.83.0/boost_1_83_0-msvc-14.3-64.exe"
38-
$OutputPath = "C:\\Users\\runneradmin\\AppData\\Local\\Temp\\boost-installer.exe"
39-
curl -L $Url -o $OutputPath
40-
Start-Process -Wait -FilePath $OutputPath "/SILENT","/SP-","/SUPPRESSMSGBOXES","/DIR=C:\\thirdparties\\boost-1.83.0"
38+
# Install basic tools
39+
choco install -y ninja
40+
41+
# Initialize vcpkg if not already done
42+
if (-not (Test-Path "C:/vcpkg/vcpkg.exe")) {
43+
git clone https://github.com/Microsoft/vcpkg.git C:/vcpkg
44+
cd C:/vcpkg
45+
.\bootstrap-vcpkg.bat
46+
.\vcpkg integrate install
47+
}
48+
49+
# Install packages via vcpkg
50+
C:/vcpkg/vcpkg.exe install --triplet x64-windows `
51+
boost-filesystem boost-thread boost-date-time boost-chrono `
52+
boost-regex boost-serialization boost-program-options `
53+
boost-multi-index boost-uuid boost-asio boost-scope-exit `
54+
boost-format icu openssl miniupnpc
4155
4256
- name: Build
4357
shell: powershell
@@ -49,19 +63,21 @@ jobs:
4963
$release_name = "fuego-cli-win64-v$xfg_ver"
5064
mkdir "$build_folder"
5165
cd "$build_folder"
52-
cmake -G "Visual Studio 17 2022" -A x64 -DBOOST_ROOT="$env:BOOST_ROOT" -DBOOST_INCLUDE_DIRS="$env:BOOST_ROOT/include" ..
53-
msbuild fuegoX.sln /p:Configuration=Release /m
54-
cd src\Release
66+
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release `
67+
-DCMAKE_TOOLCHAIN_FILE="C:/vcpkg/scripts/buildsystems/vcpkg.cmake" `
68+
-DCMAKE_POLICY_DEFAULT_CMP0167=OLD ..
69+
cmake --build . --parallel
70+
cd src
5571
Compress-Archive -Path *.exe -DestinationPath "$release_name.zip"
5672
$sha256 = (Get-FileHash "$release_name.zip").Hash
57-
$asset_path = "./$build_folder/src/Release/$release_name.zip"
73+
$asset_path = "./$build_folder/src/$release_name.zip"
5874
mkdir "$release_name"
5975
cp *.exe "$release_name/"
6076
echo "sha256=${sha256}" >> $env:GITHUB_OUTPUT
6177
echo "release_name=${release_name}.zip" >> $env:GITHUB_OUTPUT
6278
echo "asset_path=${asset_path}" >> $env:GITHUB_OUTPUT
6379
echo "xfg_version=${xfg_ver}" >> $env:GITHUB_OUTPUT
64-
echo "artifact_path=$build_folder/src/Release/$release_name" >> $env:GITHUB_OUTPUT
80+
echo "artifact_path=$build_folder/src/$release_name" >> $env:GITHUB_OUTPUT
6581
6682
- name: Upload To GH Artifacts
6783
uses: actions/upload-artifact@v4
@@ -81,15 +97,18 @@ jobs:
8197
id: build
8298
run: |
8399
sudo apt-get update
84-
sudo apt-get install -y libboost-all-dev
100+
sudo apt-get install -y build-essential ninja-build pkg-config \
101+
libssl-dev libminiupnpc-dev libqrencode-dev libudev-dev \
102+
libunwind-dev liblzma-dev qtbase5-dev qtbase5-dev-tools \
103+
libicu-dev libboost-all-dev
85104
build_folder="build/debug"
86105
xfg_ver=${GITHUB_SHA::7}
87106
xfg_ver_folder=$(echo $xfg_ver | sed 's/\.//g')
88107
release_name=fuego-cli-ubuntu-2204-dev"$xfg_ver"
89108
mkdir -p "$build_folder"
90109
cd "$build_folder"
91-
cmake ../.. -DCMAKE_BUILD_TYPE=Debug
92-
make -j4
110+
cmake ../.. -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_POLICY_DEFAULT_CMP0167=OLD
111+
ninja -j$(nproc)
93112
mkdir -p "$release_name"
94113
exeFiles=()
95114
for f in src/*; do [[ -x $f && -f $f ]] && exeFiles+=( "$f" ); done
@@ -123,8 +142,8 @@ jobs:
123142
release_name=fuego-cli-ubuntu-2404-dev"$xfg_ver"
124143
mkdir -p "$build_folder"
125144
cd "$build_folder"
126-
cmake ../.. -DCMAKE_BUILD_TYPE=Debug
127-
make -j4
145+
cmake ../.. -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_POLICY_DEFAULT_CMP0167=OLD
146+
ninja -j$(nproc)
128147
mkdir -p "$release_name"
129148
exeFiles=()
130149
for f in src/*; do [[ -x $f && -f $f ]] && exeFiles+=( "$f" ); done
@@ -167,19 +186,45 @@ jobs:
167186
xfg_ver=${GITHUB_SHA::7}
168187
release_name=fuego-cli-macos-${{ matrix.arch }}-dev"$xfg_ver"
169188
170-
brew install gcc boost ccache
189+
brew update
190+
brew install ninja boost qt@5 miniupnpc qrencode icu4c
191+
192+
# Set environment variables for Boost and ICU
193+
export BOOST_ROOT=$(brew --prefix boost)
194+
195+
# Try different ICU versions
196+
if [ -d "$(brew --prefix)/opt/icu4c" ]; then
197+
ICU_PREFIX="$(brew --prefix)/opt/icu4c"
198+
elif [ -d "$(brew --prefix)/opt/icu4c@77" ]; then
199+
ICU_PREFIX="$(brew --prefix)/opt/icu4c@77"
200+
elif [ -d "$(brew --prefix)/opt/icu4c@76" ]; then
201+
ICU_PREFIX="$(brew --prefix)/opt/icu4c@76"
202+
else
203+
ICU_PREFIX="$(brew --prefix icu4c)"
204+
fi
205+
206+
export ICU_ROOT="$ICU_PREFIX"
207+
export PATH="$ICU_PREFIX/bin:$PATH"
208+
export PKG_CONFIG_PATH="$ICU_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH"
209+
export LDFLAGS="-L$ICU_PREFIX/lib"
210+
export CPPFLAGS="-I$ICU_PREFIX/include"
211+
171212
export CC=clang
172213
export CXX=clang++
173-
export PATH="/usr/local/opt/ccache/libexec:$PATH"
174214
175215
mkdir "$build_folder"
176216
cd "$build_folder"
177217
cmake .. \
218+
-G Ninja \
178219
-DCMAKE_BUILD_TYPE=Release \
179220
-DCMAKE_OSX_ARCHITECTURES=${{ matrix.arch_flag }} \
221+
-DBOOST_ROOT="$BOOST_ROOT" \
222+
-DICU_ROOT="$ICU_ROOT" \
223+
-DCMAKE_PREFIX_PATH="$ICU_ROOT" \
180224
-DCMAKE_C_FLAGS="-mmacosx-version-min=10.12" \
181-
-DCMAKE_CXX_FLAGS="-mmacosx-version-min=10.12 -Wno-unknown-warning-option"
182-
make -j2
225+
-DCMAKE_CXX_FLAGS="-mmacosx-version-min=10.12 -Wno-unknown-warning-option" \
226+
-DCMAKE_POLICY_DEFAULT_CMP0167=OLD
227+
ninja -j$(sysctl -n hw.ncpu)
183228
mkdir "$release_name"
184229
exeFiles=()
185230
for f in src/*; do [[ -x $f && -f $f ]] && strip "$f" && exeFiles+=( "$f" ); done

.github/workflows/macOS.yml.disabled

Lines changed: 0 additions & 86 deletions
This file was deleted.

0 commit comments

Comments
 (0)