Enhance CI workflow and packaging process

- Added support for post-build test discovery in the release workflow to improve testing efficiency.
- Updated Windows packaging logic to prefer CMake-generated packages, with fallback to manual packaging if necessary.
- Improved error handling and output messages during the packaging process for better clarity and reliability.
- Conditional test discovery based on the YAZE_BUILD_TESTS flag in CMakeLists.txt to streamline test execution.
This commit is contained in:
scawful
2025-09-28 14:11:02 -04:00
parent 560c8fd4dd
commit a4821a28e1
2 changed files with 63 additions and 15 deletions

View File

@@ -235,6 +235,7 @@ jobs:
-DYAZE_ENABLE_EXPERIMENTAL_TESTS=OFF `
-DYAZE_INSTALL_LIB=OFF `
-DYAZE_MINIMAL_BUILD=OFF `
-DGTEST_DISCOVER_TESTS_DISCOVERY_MODE=POST_BUILD `
-G "${{ matrix.cmake_generator }}" `
-A ${{ matrix.cmake_generator_platform }}
} else {
@@ -248,6 +249,7 @@ jobs:
-DYAZE_ENABLE_EXPERIMENTAL_TESTS=OFF `
-DYAZE_INSTALL_LIB=OFF `
-DYAZE_MINIMAL_BUILD=ON `
-DGTEST_DISCOVER_TESTS_DISCOVERY_MODE=POST_BUILD `
-G "${{ matrix.cmake_generator }}" `
-A ${{ matrix.cmake_generator_platform }}
}
@@ -260,6 +262,13 @@ jobs:
echo "Building YAZE for ${{ matrix.name }}..."
cmake --build build --config ${{ env.BUILD_TYPE }} --parallel
echo "Build completed successfully!"
# For Windows, also create a package using CMake's packaging system
if [[ "${{ runner.os }}" == "Windows" ]]; then
echo "Creating Windows package using CMake..."
cmake --build build --config ${{ env.BUILD_TYPE }} --target package
echo "CMake package created successfully!"
fi
# Test executable functionality
- name: Test executable functionality
@@ -312,17 +321,55 @@ jobs:
echo "Packaging for ${{ matrix.name }}..."
if [[ "${{ runner.os }}" == "Windows" ]]; then
# Windows packaging using PowerShell
# Windows packaging - prefer CMake package if available
echo "Creating Windows package..."
mkdir -p package
cp -r build/bin/${{ env.BUILD_TYPE }}/* package/ 2>/dev/null || echo "No Release binaries found, trying Debug..."
cp -r build/bin/Debug/* package/ 2>/dev/null || echo "No Debug binaries found"
cp -r assets package/ 2>/dev/null || echo "assets directory not found"
cp LICENSE package/ 2>/dev/null || echo "LICENSE not found"
cp README.md package/ 2>/dev/null || echo "README.md not found"
# Use PowerShell Compress-Archive for Windows
powershell -Command "Compress-Archive -Path 'package\*' -DestinationPath '${{ matrix.artifact_name }}.zip' -Force"
# Check if CMake created a package
if [ -f "build/yaze-*.zip" ]; then
echo "Using CMake-generated package..."
cp build/yaze-*.zip ${{ matrix.artifact_name }}.zip
echo "CMake package copied successfully"
else
echo "CMake package not found, creating manual package..."
mkdir -p package
# Copy main executable and DLLs
echo "Copying binaries..."
if [ -d "build/bin/${{ env.BUILD_TYPE }}" ]; then
cp -r build/bin/${{ env.BUILD_TYPE }}/* package/
elif [ -d "build/bin/Debug" ]; then
cp -r build/bin/Debug/* package/
else
echo "ERROR: No binaries found in build/bin/"
exit 1
fi
# Copy assets
echo "Copying assets..."
if [ -d "assets" ]; then
cp -r assets package/
else
echo "WARNING: assets directory not found"
fi
# Copy documentation
echo "Copying documentation..."
cp LICENSE package/ 2>/dev/null || echo "LICENSE not found"
cp README.md package/ 2>/dev/null || echo "README.md not found"
# Copy vcpkg DLLs if available (for Windows builds with vcpkg)
if [ -d "vcpkg/installed/${{ matrix.vcpkg_triplet }}/bin" ]; then
echo "Copying vcpkg DLLs..."
cp vcpkg/installed/${{ matrix.vcpkg_triplet }}/bin/*.dll package/ 2>/dev/null || echo "No vcpkg DLLs found"
fi
# List package contents for verification
echo "Package contents:"
ls -la package/
# Use PowerShell Compress-Archive for Windows
powershell -Command "Compress-Archive -Path 'package\*' -DestinationPath '${{ matrix.artifact_name }}.zip' -Force"
fi
elif [[ "${{ runner.os }}" == "macOS" ]]; then
# macOS packaging using dedicated script

View File

@@ -146,13 +146,14 @@ elseif(WIN32)
target_compile_definitions(yaze_test PRIVATE "WINDOWS")
endif()
include(GoogleTest)
# Configure test discovery with efficient labeling for CI/CD
include(GoogleTest)
# Discover all tests with default properties
gtest_discover_tests(yaze_test)
# Only discover tests if tests are enabled
if(YAZE_BUILD_TESTS)
include(GoogleTest)
# Discover all tests with default properties
gtest_discover_tests(yaze_test)
endif()
# Add test labels using a simpler approach
# Note: Test names might have prefixes, we'll use regex patterns for CI