Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
a2f1eff
Etat de reference avant reformatage : refonte parametres, fichiers, l…
Lilidoxgithub Nov 6, 2026
fc9bcb3
Reformatage sans changement de comportement : C# (dotnet format + cou…
Lilidoxgithub Nov 6, 2026
4eee2ef
Tests regroupes (xUnit + pytest), erreurs avalees classees, auto-test…
Lilidoxgithub Nov 6, 2026
81e334d
Backend range par dossiers, frontend.py decoupe, natif sorti de src/f…
Lilidoxgithub Nov 6, 2026
9a681b2
Contrat du Bridge versionne et teste, restauration documentee, CI en …
Lilidoxgithub Nov 6, 2026
ee745b8
Lot 5 : grosses classes decoupees, dispatch du Bridge par table, RunO…
Lilidoxgithub Nov 8, 2026
659cb40
Lot 6 : services Coordinator, dispatch strict, découpages, lignes ≤14…
Lilidoxgithub Nov 8, 2026
065bb14
Lot 7 : Coordinator en services (1082 l.), fichiers ≤500 l., lignes ≤…
Lilidoxgithub Nov 8, 2026
2268bb3
Retire le rapport de couverture commité par erreur ; ignore TestResults/
Lilidoxgithub Nov 8, 2026
14ed838
Lot 8 : pont testable (IBridgeOwner), tests handlers/raccourcis/tick,…
Lilidoxgithub Nov 8, 2026
d8cce48
Lot 9 : nom d'affichage Windows au lieu de dj, raccourci Winlestia, r…
Lilidoxgithub Nov 8, 2026
484df7f
Lot 10 : ports du pont (audio, wifi, bureaux, fond, affichage, shell)…
Lilidoxgithub Nov 8, 2026
20e9758
Fige les cles JSON des vues du pont ; coupe une ligne de 141 colonnes
Lilidoxgithub Nov 8, 2026
af544f3
Restaure l'echantillonneur FolderIcons pour le test Desktop d'icones …
Lilidoxgithub Nov 8, 2026
56d7b2a
README : liens et feuille de route pour la 0.9.2
Lilidoxgithub Nov 8, 2026
ce6c504
Test plein ecran : fenetre vraiment zoomee quand la barre des taches …
Lilidoxgithub Nov 8, 2026
beb10f7
Fusionne main (0.9.1) dans la refonte
Lilidoxgithub Nov 8, 2026
27ceb44
Formate les espaces selon .editorconfig (dotnet format whitespace)
Lilidoxgithub Nov 8, 2026
0768c5a
Tests des ecritures atomiques et de la reprise depuis .bak
Lilidoxgithub Nov 8, 2026
da74987
Plancher de couverture aligne sur la mesure Release de la CI (16,22 %…
Lilidoxgithub Nov 8, 2026
ffac3ca
Test terminal : isole l'etat de sauvegarde au lieu du vrai LOCALAPPDATA
Lilidoxgithub Nov 8, 2026
ba594b3
Styles : repare le XAML casse par le decoupage des lignes (demarrage …
Lilidoxgithub Nov 9, 2026
3a92c0a
Notes 0.9.2 : SHA-256 de l'installateur
Lilidoxgithub Nov 9, 2026
fac0e89
Demarrage : Keys cree avant les fenetres, XAML de Fichiers repare, te…
Lilidoxgithub Nov 9, 2026
6c2f2e2
Couverture : l'application Fichiers hors perimetre ; SHA-256 de l'ins…
Lilidoxgithub Nov 9, 2026
941dc56
Plancher de couverture releve a 17 (mesure CI 17,61 %, backend seul)
Lilidoxgithub Nov 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
9 changes: 0 additions & 9 deletions .csharpierignore

This file was deleted.

1 change: 0 additions & 1 deletion .csharpierrc.json

This file was deleted.

46 changes: 22 additions & 24 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -1,33 +1,31 @@
# EditorConfig: https://editorconfig.org
# Line endings are deliberately not set: the index stores LF, and Windows checkouts may convert (core.autocrlf).
root = true

[*]
charset = utf-8
insert_final_newline = true
trim_trailing_whitespace = true
# Advisory only: many existing files exceed it.
max_line_length = 120

[*.md]
trim_trailing_whitespace = false

[*.{cs,py,ps1,qml,cpp,h}]
end_of_line = lf
indent_style = space
indent_size = 4
max_line_length = 140

[*.{csproj,props,targets,xml,xaml,json,yml,yaml,iss}]
[*.cs]
indent_style = space
indent_size = 2
indent_size = 4
max_line_length = 140
csharp_new_line_before_open_brace = all
csharp_new_line_before_else = true
csharp_new_line_before_catch = true
csharp_new_line_before_finally = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_members_in_anonymous_types = true
csharp_new_line_between_query_expression_clauses = true
csharp_preserve_single_line_statements = false
csharp_preserve_single_line_blocks = false
csharp_space_around_binary_operators = before_and_after
csharp_indent_case_contents = true
csharp_indent_switch_labels = true

# C# analyzers: suggestions only, nothing here may break a build.
[*.cs]
dotnet_analyzer_diagnostic.severity = suggestion
dotnet_style_qualification_for_field = false:suggestion
csharp_style_var_elsewhere = true:suggestion
dotnet_analyzer_diagnostic.category-Reliability.severity = suggestion
dotnet_diagnostic.CA2000.severity = suggestion
dotnet_diagnostic.CA1816.severity = suggestion
dotnet_diagnostic.CA2012.severity = suggestion
dotnet_diagnostic.CA2016.severity = suggestion
dotnet_diagnostic.CA1849.severity = suggestion
[*.{py,pyi}]
indent_size = 4

[*.qml]
indent_size = 4
14 changes: 14 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
* text=auto
*.cs text eol=lf
*.qml text eol=lf
*.py text eol=lf
*.ps1 text eol=lf
*.json text eol=lf
*.md text eol=lf
*.cmd text eol=crlf
*.bat text eol=crlf
*.iss text eol=crlf
*.ico binary
*.png binary
*.dll binary
*.exe binary
38 changes: 0 additions & 38 deletions .github/workflows/build.yml

This file was deleted.

165 changes: 165 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
name: CI

on:
push:
pull_request:

jobs:
# Style : longueur de ligne (.editorconfig, 140) et espaces blancs. Les fins de ligne sont verifiees telles que
# commitees : autocrlf est donc desactive avant le checkout.
lint:
runs-on: windows-latest
steps:
- name: Checkout sans conversion de fins de ligne
shell: pwsh
run: git config --global core.autocrlf false
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
- uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Longueur de ligne (140)
shell: pwsh
run: |
python tools/check_line_length.py
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }

- name: dotnet format whitespace
shell: pwsh
run: |
foreach ($p in 'src/backend/Panneaux.Glass.csproj', 'src/files/Winlestia.Files.csproj', 'src/cli/winlestia.csproj') {
dotnet format whitespace $p --verify-no-changes
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
}

build-and-test:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x

- uses: ilammy/msvc-dev-cmd@v1
with:
arch: x64

# Composants natifs MSVC (ProcessAudio.dll...) compilés AVANT .NET : le csproj copie ProcessAudio.dll dans la sortie.
- name: Composants natifs
shell: pwsh
run: ./tools/build-native.ps1

- name: Build
shell: pwsh
run: |
foreach ($p in 'src/backend/Panneaux.Glass.csproj', 'src/files/Winlestia.Files.csproj', 'src/cli/winlestia.csproj') {
dotnet restore $p --locked-mode
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
dotnet build $p -c Release --no-restore
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
}

# Tests xUnit (tests/Winlestia.Tests). La categorie Desktop (Audio, Explorateur, icones de dossiers, tiling,
# bureaux virtuels, interop native, plein ecran) touche au bureau : elle reste locale.
- name: Tests .NET (avec couverture)
shell: pwsh
run: |
dotnet restore tests/Winlestia.Tests --locked-mode
dotnet test tests/Winlestia.Tests -c Release --no-restore --filter "Category!=Desktop" `
--collect:"XPlat Code Coverage" --settings tests/coverage.runsettings --results-directory TestResults
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }

# Resume de couverture + plancher. Valeur mesuree le 2026-11-09 : 17,61 % des lignes (backend compile dans les tests,
# beaucoup de code WPF/shell non testable sans bureau). Plancher = valeur arrondie a l'entier inferieur ; a relever
# quand la couverture monte.
- name: Resume de couverture
shell: pwsh
run: |
$floor = 17
$file = Get-ChildItem TestResults -Recurse -Filter coverage.cobertura.xml | Select-Object -First 1
if (-not $file) { throw 'coverage.cobertura.xml introuvable.' }
$root = ([xml](Get-Content $file.FullName -Raw)).coverage
$pct = [math]::Round([double]$root.'line-rate' * 100, 2)
$line = "Couverture des lignes : $pct % ($($root.'lines-covered')/$($root.'lines-valid')), plancher $floor %"
Write-Host $line
Add-Content $env:GITHUB_STEP_SUMMARY "### Couverture`n$line"
if ($pct -lt $floor) { throw "Couverture sous le plancher ($pct < $floor)." }

- uses: actions/upload-artifact@v4
with:
name: coverage
path: TestResults/**/coverage.cobertura.xml

# Verifications statiques sans execution : syntaxe des scripts PowerShell (installateur, outils) et compilation Python.
- name: Syntaxe PowerShell (installer, tests)
shell: pwsh
run: |
$bad = 0
foreach ($f in Get-ChildItem installer, tests/FilesHarness -Recurse -Filter *.ps1) {
$errors = $null
[void][System.Management.Automation.Language.Parser]::ParseFile($f.FullName, [ref]$null, [ref]$errors)
foreach ($e in $errors) { Write-Host "$($f.FullName): $($e.Message)"; $bad++ }
}
if ($bad -gt 0) { exit 1 }

- uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Tests Python
shell: pwsh
run: |
python -m pip install -r src/frontend/requirements.txt pytest
pytest -q

- name: Compilation Python (compileall)
shell: pwsh
run: |
python -m compileall -q src/frontend src/terminal tools tests conftest.py
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }

# Test de fumee de l'installateur : fabrique le setup avec installer/build.ps1 -CI (composants natifs MSVC compiles
# par tools/build-native.ps1). L'artefact prouve que la chaine payload + Inno Setup passe ;
# il n'est jamais une release.
installer-smoke:
needs: build-and-test
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
- uses: actions/setup-python@v5
with:
python-version: '3.12'

- uses: ilammy/msvc-dev-cmd@v1
with:
arch: x64

- name: Composants natifs
shell: pwsh
run: ./tools/build-native.ps1

- name: Inno Setup 6
shell: pwsh
run: |
$iscc = "${env:ProgramFiles(x86)}\Inno Setup 6\ISCC.exe"
if (-not (Test-Path $iscc)) {
choco install innosetup --no-progress -y
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
}
if (-not (Test-Path $iscc)) { throw 'ISCC.exe introuvable apres installation.' }

- name: Fabrication du setup
shell: pwsh
run: ./installer/build.ps1 -CI

- uses: actions/upload-artifact@v4
with:
name: winlestia-setup-smoke
path: build/out/Winlestia-Setup-*.exe
if-no-files-found: error
14 changes: 3 additions & 11 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,6 @@ catalog-workspace*
# Sorties de build de vérification
buildverify-*/
clink_errorlevel_*.txt

# Artefacts generated by the verification/benchmark switches and by dotnet build (outputs, never inputs)
src/backend/performance-*.json
src/backend/verification*.json
src/backend/audio-mixer-verification.json
src/backend/motion-*.json
src/backend/preuve-secours.json
src/backend/taskbar-state.json
src/backend/taskbar-session.json
src/backend/Panneaux.Glass.deps.json
src/backend/Panneaux.Glass.runtimeconfig.json
.freebuff/
buildverify-fullscreen/
TestResults/
Loading
Loading