diff options
| author | Mehmet Samet Duman <yongdohyun@projecttick.org> | 2026-04-02 18:51:45 +0300 |
|---|---|---|
| committer | Mehmet Samet Duman <yongdohyun@projecttick.org> | 2026-04-02 18:51:45 +0300 |
| commit | d3261e64152397db2dca4d691a990c6bc2a6f4dd (patch) | |
| tree | fac2f7be638651181a72453d714f0f96675c2b8b /archived/projt-launcher/ci/eval/default.nix | |
| parent | 31b9a8949ed0a288143e23bf739f2eb64fdc63be (diff) | |
| download | Project-Tick-d3261e64152397db2dca4d691a990c6bc2a6f4dd.tar.gz Project-Tick-d3261e64152397db2dca4d691a990c6bc2a6f4dd.zip | |
NOISSUE add archived projects
Signed-off-by: Mehmet Samet Duman <yongdohyun@projecttick.org>
Diffstat (limited to 'archived/projt-launcher/ci/eval/default.nix')
| -rw-r--r-- | archived/projt-launcher/ci/eval/default.nix | 316 |
1 files changed, 316 insertions, 0 deletions
diff --git a/archived/projt-launcher/ci/eval/default.nix b/archived/projt-launcher/ci/eval/default.nix new file mode 100644 index 0000000000..c01df96c9e --- /dev/null +++ b/archived/projt-launcher/ci/eval/default.nix @@ -0,0 +1,316 @@ +# ============================================================================= +# ProjT Launcher - CI Evaluation Module +# ============================================================================= +# Validates project structure, CMake configuration, and Nix flake. +# This is used by GitHub Actions CI to ensure PRs don't break the build. +# +# Usage: +# nix-build ci/eval -A validate +# nix-build ci/eval -A cmake +# nix-build ci/eval -A vcpkg +# nix-build ci/eval -A full +# ============================================================================= + +{ + lib, + runCommand, + cmake, + nix, + jq, +}: + +{ + # Quick validation mode (skip some checks) + quickTest ? false, +}: + +let + # Project source (filtered to only include relevant files) + projectSrc = + with lib.fileset; + toSource { + root = ../..; + fileset = unions ( + map (lib.path.append ../..) [ + "CMakeLists.txt" + "CMakePresets.json" + "cmake" + "launcher" + "launcherjava" + "javacheck" + "LocalPeer" + "murmur2" + "qdcss" + "rainbow" + "systeminfo" + "buildconfig" + "program_info" + "gamemode" + "flake.nix" + "default.nix" + "shell.nix" + ] + ); + }; + + # ============================================================================= + # CMake Validation + # ============================================================================= + validateCMake = + runCommand "projt-validate-cmake" + { + src = projectSrc; + nativeBuildInputs = [ cmake ]; + } + '' + mkdir -p $out + cd $src + + echo "=== Validating CMakeLists.txt (basic) ===" + + # Check main CMakeLists.txt exists + if [ ! -f CMakeLists.txt ]; then + echo "ERROR: CMakeLists.txt not found" + exit 1 + fi + + # Basic sanity checks (cheap and dependency-free) + if ! grep -Fqi 'cmake_minimum_required(' CMakeLists.txt; then + echo "ERROR: Missing cmake_minimum_required(...)" + exit 1 + fi + + if ! grep -Fqi 'project(' CMakeLists.txt; then + echo "ERROR: Missing project(...)" + exit 1 + fi + + echo "CMake validation passed" > $out/cmake.txt + ''; + + # ============================================================================= + # vcpkg Validation + # ============================================================================= + validateVcpkg = + runCommand "projt-validate-vcpkg" + { + src = projectSrc; + nativeBuildInputs = [ jq ]; + } + '' + mkdir -p $out + cd $src + + echo "=== Validating vcpkg.json ===" + + # Check vcpkg.json exists and is valid JSON + if [ -f vcpkg.json ]; then + jq . vcpkg.json > /dev/null || { + echo "ERROR: vcpkg.json is not valid JSON" + exit 1 + } + + if jq -e '.name' vcpkg.json > /dev/null; then + echo "INFO: vcpkg.json name field present: $(jq -r '.name' vcpkg.json)" + else + echo "WARNING: vcpkg.json missing 'name' field (optional for manifest mode)" + fi + + echo "vcpkg.json validation passed" + else + echo "WARNING: vcpkg.json not found (may not be using vcpkg)" + fi + + # Check vcpkg-configuration.json + if [ -f vcpkg-configuration.json ]; then + jq . vcpkg-configuration.json > /dev/null || { + echo "ERROR: vcpkg-configuration.json is not valid JSON" + exit 1 + } + echo "vcpkg-configuration.json validation passed" + fi + + echo "vcpkg validation passed" > $out/vcpkg.txt + ''; + + # ============================================================================= + # CMake Presets Validation + # ============================================================================= + validatePresets = + runCommand "projt-validate-presets" + { + src = projectSrc; + nativeBuildInputs = [ jq ]; + } + '' + mkdir -p $out + cd $src + + echo "=== Validating CMakePresets.json ===" + + if [ -f CMakePresets.json ]; then + jq . CMakePresets.json > /dev/null || { + echo "ERROR: CMakePresets.json is not valid JSON" + exit 1 + } + + # Check for required presets + for preset in linux windows_mingw windows_msvc macos_universal; do + if ! jq -e ".configurePresets[] | select(.name == \"$preset\")" CMakePresets.json > /dev/null 2>&1; then + echo "WARNING: Preset '$preset' not found in CMakePresets.json" + else + echo "Found preset: $preset" + fi + done + + echo "CMakePresets.json validation passed" + else + echo "WARNING: CMakePresets.json not found" + fi + + echo "presets validation passed" > $out/presets.txt + ''; + + # ============================================================================= + # Nix Flake Validation + # ============================================================================= + validateNix = + runCommand "projt-validate-nix" + { + src = projectSrc; + nativeBuildInputs = [ nix ]; + } + '' + mkdir -p $out + cd $src + + echo "=== Validating Nix files ===" + + check_nix_file() { + local file="$1" + if [ ! -f "$file" ]; then + return 0 + fi + + mkdir -p "$TMPDIR/nix/state" "$TMPDIR/nix/log" "$TMPDIR/nix/etc" + if env -i \ + PATH="$PATH" \ + HOME="$TMPDIR" \ + TMPDIR="$TMPDIR" \ + NIX_REMOTE=local \ + NIX_STATE_DIR="$TMPDIR/nix/state" \ + NIX_LOG_DIR="$TMPDIR/nix/log" \ + NIX_CONF_DIR="$TMPDIR/nix/etc" \ + nix-instantiate --parse "$file" > /dev/null 2>&1; then + echo "$file syntax OK" + else + echo "ERROR: Failed to parse $file" + exit 1 + fi + } + + check_nix_file flake.nix + check_nix_file default.nix + check_nix_file shell.nix + + echo "nix validation passed" > $out/nix.txt + ''; + + # ============================================================================= + # Project Structure Validation + # ============================================================================= + validateStructure = + runCommand "projt-validate-structure" + { + src = projectSrc; + } + '' + mkdir -p $out + cd $src + + echo "=== Validating project structure ===" + + # Check required directories exist + for dir in launcher libraries cmake buildconfig program_info; do + if [ -d "$dir" ]; then + echo "OK: Directory exists: $dir" + else + echo "WARNING: Expected directory not found: $dir" + fi + done + + # Check launcher source files + if [ -f launcher/Application.cpp ] && [ -f launcher/Application.h ]; then + echo "OK: Core launcher files found" + else + echo "WARNING: Core launcher files may be missing" + fi + + echo "structure validation passed" > $out/structure.txt + ''; + + # ============================================================================= + # Full Validation + # ============================================================================= + fullValidation = + runCommand "projt-validate-full" + { + inherit + validateCMake + validateVcpkg + validatePresets + validateNix + validateStructure + ; + } + '' + mkdir -p $out + + echo "=== ProjT Launcher CI Evaluation ===" + echo "" + + echo "CMake: $(cat $validateCMake/cmake.txt)" + echo "vcpkg: $(cat $validateVcpkg/vcpkg.txt)" + echo "Presets: $(cat $validatePresets/presets.txt)" + echo "Nix: $(cat $validateNix/nix.txt)" + echo "Structure: $(cat $validateStructure/structure.txt)" + + echo "" + echo "=== All validations passed ===" + + # Create summary + cat > $out/summary.md << 'EOF' + ## ProjT Launcher CI Evaluation Results + + | Check | Status | + |-------|--------| + | CMake | Passed | + | vcpkg | Passed | + | Presets | Passed | + | Nix | Passed | + | Structure | Passed | + + All validation checks completed successfully. + EOF + + echo "full validation passed" > $out/result.txt + ''; + +in +{ + # Individual validations + cmake = validateCMake; + vcpkg = validateVcpkg; + presets = validatePresets; + nix = validateNix; + structure = validateStructure; + + # Quick validation (subset) + validate = if quickTest then validateCMake else fullValidation; + + # Full validation + full = fullValidation; + + # Alias for CI + baseline = fullValidation; +} |
