summaryrefslogtreecommitdiff
path: root/archived/projt-launcher/ci/eval/default.nix
diff options
context:
space:
mode:
authorMehmet Samet Duman <yongdohyun@projecttick.org>2026-04-02 18:51:45 +0300
committerMehmet Samet Duman <yongdohyun@projecttick.org>2026-04-02 18:51:45 +0300
commitd3261e64152397db2dca4d691a990c6bc2a6f4dd (patch)
treefac2f7be638651181a72453d714f0f96675c2b8b /archived/projt-launcher/ci/eval/default.nix
parent31b9a8949ed0a288143e23bf739f2eb64fdc63be (diff)
downloadProject-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.nix316
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;
+}