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:
65
.github/workflows/release.yml
vendored
65
.github/workflows/release.yml
vendored
@@ -235,6 +235,7 @@ jobs:
|
|||||||
-DYAZE_ENABLE_EXPERIMENTAL_TESTS=OFF `
|
-DYAZE_ENABLE_EXPERIMENTAL_TESTS=OFF `
|
||||||
-DYAZE_INSTALL_LIB=OFF `
|
-DYAZE_INSTALL_LIB=OFF `
|
||||||
-DYAZE_MINIMAL_BUILD=OFF `
|
-DYAZE_MINIMAL_BUILD=OFF `
|
||||||
|
-DGTEST_DISCOVER_TESTS_DISCOVERY_MODE=POST_BUILD `
|
||||||
-G "${{ matrix.cmake_generator }}" `
|
-G "${{ matrix.cmake_generator }}" `
|
||||||
-A ${{ matrix.cmake_generator_platform }}
|
-A ${{ matrix.cmake_generator_platform }}
|
||||||
} else {
|
} else {
|
||||||
@@ -248,6 +249,7 @@ jobs:
|
|||||||
-DYAZE_ENABLE_EXPERIMENTAL_TESTS=OFF `
|
-DYAZE_ENABLE_EXPERIMENTAL_TESTS=OFF `
|
||||||
-DYAZE_INSTALL_LIB=OFF `
|
-DYAZE_INSTALL_LIB=OFF `
|
||||||
-DYAZE_MINIMAL_BUILD=ON `
|
-DYAZE_MINIMAL_BUILD=ON `
|
||||||
|
-DGTEST_DISCOVER_TESTS_DISCOVERY_MODE=POST_BUILD `
|
||||||
-G "${{ matrix.cmake_generator }}" `
|
-G "${{ matrix.cmake_generator }}" `
|
||||||
-A ${{ matrix.cmake_generator_platform }}
|
-A ${{ matrix.cmake_generator_platform }}
|
||||||
}
|
}
|
||||||
@@ -261,6 +263,13 @@ jobs:
|
|||||||
cmake --build build --config ${{ env.BUILD_TYPE }} --parallel
|
cmake --build build --config ${{ env.BUILD_TYPE }} --parallel
|
||||||
echo "Build completed successfully!"
|
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
|
# Test executable functionality
|
||||||
- name: Test executable functionality
|
- name: Test executable functionality
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -312,17 +321,55 @@ jobs:
|
|||||||
echo "Packaging for ${{ matrix.name }}..."
|
echo "Packaging for ${{ matrix.name }}..."
|
||||||
|
|
||||||
if [[ "${{ runner.os }}" == "Windows" ]]; then
|
if [[ "${{ runner.os }}" == "Windows" ]]; then
|
||||||
# Windows packaging using PowerShell
|
# Windows packaging - prefer CMake package if available
|
||||||
echo "Creating Windows package..."
|
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
|
# Check if CMake created a package
|
||||||
powershell -Command "Compress-Archive -Path 'package\*' -DestinationPath '${{ matrix.artifact_name }}.zip' -Force"
|
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
|
elif [[ "${{ runner.os }}" == "macOS" ]]; then
|
||||||
# macOS packaging using dedicated script
|
# macOS packaging using dedicated script
|
||||||
|
|||||||
@@ -146,13 +146,14 @@ elseif(WIN32)
|
|||||||
target_compile_definitions(yaze_test PRIVATE "WINDOWS")
|
target_compile_definitions(yaze_test PRIVATE "WINDOWS")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(GoogleTest)
|
|
||||||
|
|
||||||
# Configure test discovery with efficient labeling for CI/CD
|
# Configure test discovery with efficient labeling for CI/CD
|
||||||
include(GoogleTest)
|
# Only discover tests if tests are enabled
|
||||||
|
if(YAZE_BUILD_TESTS)
|
||||||
|
include(GoogleTest)
|
||||||
|
|
||||||
# Discover all tests with default properties
|
# Discover all tests with default properties
|
||||||
gtest_discover_tests(yaze_test)
|
gtest_discover_tests(yaze_test)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Add test labels using a simpler approach
|
# Add test labels using a simpler approach
|
||||||
# Note: Test names might have prefixes, we'll use regex patterns for CI
|
# Note: Test names might have prefixes, we'll use regex patterns for CI
|
||||||
Reference in New Issue
Block a user