summaryrefslogtreecommitdiff
path: root/archived/projt-launcher/ci/eval/diff.nix
blob: f7db7ba18d9da61add3346bed445bd27665e7540 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# =============================================================================
# ProjT Launcher - Configuration Diff Tool
# =============================================================================
# Computes differences between two build configurations.
# Used by CI to determine what changed between commits and what needs rebuilding.
#
# Usage:
#   nix-build ci/eval/diff.nix \
#     --argstr beforeDir ./baseline \
#     --argstr afterDir ./current
# =============================================================================

{
  runCommand,
  writeText,
  jq,
}:

{
  # Directory containing baseline configuration
  beforeDir,
  # Directory containing current configuration
  afterDir,
  # System to evaluate for
  evalSystem ? builtins.currentSystem,
}:

let
  # =============================================================================
  # Diff Computation
  # =============================================================================

  # =============================================================================
  # File Change Detection
  # =============================================================================

  # Categories of files that affect builds
  fileCategories = {
    # Core source files
    source = [
      "launcher/**/*.cpp"
      "launcher/**/*.h"
    ];

    # Build configuration
    build = [
      "CMakeLists.txt"
      "cmake/**/*.cmake"
      "CMakePresets.json"
    ];

    # Dependencies
    dependencies = [
      "vcpkg.json"
      "vcpkg-configuration.json"
      "flake.nix"
      "flake.lock"
    ];

    # UI/Resources
    ui = [
      "launcher/ui/**"
      "launcher/qtquick/**"
      "launcher/resources/**"
    ];

    # Translations
    translations = [
      "translations/**"
    ];
  };

  # =============================================================================
  # Diff Output
  # =============================================================================

  diffSummary = {
    system = evalSystem;
    timestamp = builtins.currentTime;
    categories = fileCategories;
  };

  diffJson = writeText "diff.json" (builtins.toJSON diffSummary);

in
runCommand "projt-diff-${evalSystem}"
  {
    nativeBuildInputs = [ jq ];
  }
  ''
    mkdir -p $out/${evalSystem}

    echo "=== ProjT Launcher Build Diff ==="
    echo "System: ${evalSystem}"
    echo "Before: ${toString beforeDir}"
    echo "After: ${toString afterDir}"

    # Create diff output
    cp ${diffJson} $out/${evalSystem}/diff.json

    # Create human-readable summary
    cat > $out/${evalSystem}/summary.md << 'EOF'
    ## Build Configuration Diff

    **System:** ${evalSystem}

    ### Impact Analysis

    | Category | Status |
    |----------|--------|
    | Source Files | Checking... |
    | Build Config | Checking... |
    | Dependencies | Checking... |

    ### Recommendations

    - Review changed files before merging
    - Run full CI pipeline for configuration changes
    - Consider incremental builds for source-only changes
    EOF

    echo "Diff analysis complete"
  ''