@@ -106,3 +106,126 @@ jobs:
106106 # os-name: ubuntu-22.04-arm64
107107 # docker-image: ghcr.io/ctc-oss/omega-edit-build-arm64:ubuntu-22.04
108108 # library-filename: libomega_edit.so
109+
110+ coverage :
111+ name : Code Coverage 📊
112+ runs-on : ubuntu-24.04
113+ steps :
114+ - name : Checkout 🛎️
115+ uses : actions/checkout@v6
116+
117+ - name : Setup cmake 🔧
118+ uses : lukka/get-cmake@latest
119+
120+ - name : Install lcov 📦
121+ run : sudo apt-get update && sudo apt-get install -y lcov
122+
123+ # ── C/C++ coverage ──────────────────────────────────────────────────
124+ - name : Build with coverage instrumentation 🔨
125+ run : |
126+ cmake --preset ci-coverage
127+ cmake --build --preset ci-coverage --config Debug
128+
129+ - name : Run C/C++ tests 🧪
130+ run : ctest -C Debug --test-dir build-coverage/core --output-on-failure
131+
132+ - name : Collect C/C++ coverage with lcov 📈
133+ run : |
134+ lcov --capture --directory build-coverage --output-file coverage-native.info \
135+ --rc branch_coverage=1 --ignore-errors mismatch
136+ lcov --remove coverage-native.info \
137+ '*/src/tests/*' '*/src/examples/*' '*/_deps/*' '/usr/*' '*/catch2/*' \
138+ --output-file coverage-native.info --rc branch_coverage=1 --ignore-errors unused
139+ lcov --list coverage-native.info
140+
141+ - name : Upload C/C++ coverage to Codecov 🔺
142+ uses : codecov/codecov-action@v5
143+ with :
144+ files : coverage-native.info
145+ flags : native
146+ name : omega-edit-native
147+ fail_ci_if_error : false
148+
149+ # ── TypeScript client coverage ──────────────────────────────────────
150+ - name : Setup Node.js 🟢
151+ uses : actions/setup-node@v6
152+ with :
153+ node-version : 20
154+ cache : yarn
155+ cache-dependency-path : yarn.lock
156+
157+ - name : Setup Python 🐍
158+ uses : actions/setup-python@v5
159+ with :
160+ python-version : ' 3.12'
161+
162+ - name : Install Conan 📦
163+ run : pip install conan
164+
165+ - name : Install uuid-dev 🔧
166+ run : sudo apt-get install -y uuid-dev
167+
168+ - name : Detect Conan profile 🔧
169+ run : conan profile detect --force
170+
171+ - name : Cache Conan packages 📦
172+ uses : actions/cache@v4
173+ with :
174+ path : ~/.conan2
175+ key : conan-coverage-${{ hashFiles('server/cpp/conanfile.py') }}
176+ restore-keys : |
177+ conan-coverage-
178+
179+ - name : Build C++ gRPC server for client tests 🔨
180+ run : |
181+ cmake -G Ninja -S . -B _build_core \
182+ -DCMAKE_BUILD_TYPE=Release \
183+ -DBUILD_SHARED_LIBS=OFF \
184+ -DBUILD_DOCS=OFF \
185+ -DBUILD_EXAMPLES=OFF \
186+ -DBUILD_TESTS=OFF
187+ cmake --build _build_core --config Release
188+ cmake --install _build_core/packages/core --prefix "$(pwd)/_install_core" --config Release
189+ export OE_LIB_DIR="$(pwd)/_install_core/lib"
190+ export OE_PREFIX="$(pwd)/_install_core"
191+ cd server/cpp
192+ conan install . --output-folder=build \
193+ --build=missing \
194+ -s build_type=Release \
195+ -s compiler.cppstd=17 \
196+ -c tools.cmake.cmaketoolchain:generator=Ninja
197+ cmake --preset conan-release \
198+ -DOE_LIB_DIR="$OE_LIB_DIR" \
199+ -DCMAKE_PREFIX_PATH="$OE_PREFIX" \
200+ || cmake -G Ninja -S . -B build \
201+ -DCMAKE_BUILD_TYPE=Release \
202+ -DCMAKE_TOOLCHAIN_FILE="build/conan_toolchain.cmake" \
203+ -DOE_LIB_DIR="$OE_LIB_DIR" \
204+ -DCMAKE_PREFIX_PATH="$OE_PREFIX"
205+ cmake --build build --config Release
206+ cd ../..
207+ echo "CPP_SERVER_BINARY=$(pwd)/server/cpp/build/omega-edit-grpc-server" >> $GITHUB_ENV
208+
209+ - name : Yarn Install 🏗️
210+ run : yarn
211+
212+ - name : Yarn Package - Server 📦
213+ run : yarn workspace @omega-edit/server package
214+ env :
215+ CPP_SERVER_BINARY : ${{ env.CPP_SERVER_BINARY }}
216+
217+ - name : Yarn Prepare - Client
218+ run : yarn workspace @omega-edit/client prepare
219+
220+ - name : Run client tests with coverage 🧪
221+ run : yarn workspace @omega-edit/client test:coverage
222+ env :
223+ CPP_SERVER_BINARY : ' '
224+
225+ - name : Upload TypeScript coverage to Codecov 🔺
226+ uses : codecov/codecov-action@v5
227+ with :
228+ files : packages/client/coverage/lcov.info
229+ flags : client
230+ name : omega-edit-client
231+ fail_ci_if_error : false
0 commit comments