55 branches :
66 - main
77 - master
8+ - QT6
9+ - qt6
810 tags :
911 - " v*"
1012 pull_request :
3941 - name : Checkout source
4042 uses : actions/checkout@v7
4143 with :
44+ ref : ${{ github.ref }}
4245 fetch-depth : 0
4346 persist-credentials : false
4447
48+ - name : Show selected ref and checked-out revision
49+ shell : pwsh
50+ run : |
51+ Write-Host "event_name = ${{ github.event_name }}"
52+ Write-Host "github.ref = ${{ github.ref }}"
53+ Write-Host "github.ref_name = ${{ github.ref_name }}"
54+ Write-Host "github.sha = ${{ github.sha }}"
55+ Write-Host "workspace = $env:GITHUB_WORKSPACE"
56+ git rev-parse --show-toplevel
57+ git rev-parse HEAD
58+ git branch --show-current
59+ git status --short
60+ Write-Host "Tracked root files:"
61+ git ls-files | Sort-Object
62+
63+ - name : Validate exact repository paths
64+ shell : pwsh
65+ run : |
66+ $requiredFiles = @(
67+ "nfo_editor.py",
68+ "nfo_editor_ui.py",
69+ "nfo_editor_events.py",
70+ "nfo_utils.py",
71+ "cg_crop.py",
72+ "cg_dedupe.py",
73+ "cg_photo_wall.py",
74+ "cg_rename.py",
75+ "nfo_editor.spec",
76+ "requirements.txt",
77+ "requirements-build.txt",
78+ "scripts/check_source_layout.py",
79+ "scripts/qt_source_smoke.py",
80+ "scripts/build_windows.ps1",
81+ "scripts/check_windows_artifact.ps1"
82+ )
83+
84+ $trackedFiles = @(git ls-files | ForEach-Object { $_.Replace("\", "/") })
85+ $wrongCaseOrMissing = @(
86+ $requiredFiles | Where-Object { -not ($trackedFiles -ccontains $_) }
87+ )
88+
89+ if ($wrongCaseOrMissing.Count -gt 0) {
90+ Write-Host "Tracked files with similar spelling:"
91+ foreach ($expected in $wrongCaseOrMissing) {
92+ $leaf = Split-Path -Leaf $expected
93+ $trackedFiles |
94+ Where-Object { (Split-Path -Leaf $_) -ieq $leaf } |
95+ ForEach-Object { Write-Host " actual: $_" }
96+ }
97+
98+ Write-Error (
99+ "Required files are missing or use incorrect filename casing:`n - " +
100+ ($wrongCaseOrMissing -join "`n - ")
101+ )
102+ throw "Run scripts/fix_source_filename_case.ps1, commit, and push."
103+ }
104+
105+ $rootNames = @(Get-ChildItem -Force | ForEach-Object { $_.Name })
106+ if (-not ($rootNames -ccontains "img")) {
107+ $actualImg = $rootNames | Where-Object { $_ -ieq "img" }
108+ Write-Error "Expected directory exactly 'img'; actual match: $actualImg"
109+ throw "Directory filename casing is incorrect."
110+ }
111+
112+ Write-Host "All required paths and filename casing are correct."
113+
45114 - name : Set up Python
46115 uses : actions/setup-python@v6
47116 with :
@@ -52,6 +121,11 @@ jobs:
52121 requirements.txt
53122 requirements-build.txt
54123
124+ - name : Run repository layout validator
125+ shell : pwsh
126+ run : |
127+ python scripts/check_source_layout.py
128+
55129 - name : Install runtime and build dependencies
56130 shell : pwsh
57131 run : |
0 commit comments