Premiere commit - Omika
This commit is contained in:
@@ -0,0 +1,204 @@
|
||||
<#
|
||||
OMIKA - Demarrage complet en mode test local
|
||||
============================================
|
||||
Compile puis lance les 3 composants du projet :
|
||||
1. Omika.Api (API) -> http://localhost:5097
|
||||
2. Omika.Worker (sync) -> service d'arriere-plan
|
||||
3. Omika.App.Desktop (application) -> fenetre Avalonia
|
||||
|
||||
Mode test = environnement "Development" :
|
||||
- charge config/hfsql-test.local.json (connexions HFSQL locales de test) ;
|
||||
- l'application de bureau utilise la licence de developpement locale
|
||||
(%LOCALAPPDATA%\Omika\development-license.json, dont le champ ApiUrl
|
||||
pointe vers http://localhost:5097).
|
||||
|
||||
Utilisation :
|
||||
powershell -NoProfile -ExecutionPolicy Bypass -File .\docs\start_omika_test.ps1
|
||||
.\docs\start_omika_test.ps1 -NoBuild # sans recompiler
|
||||
.\docs\start_omika_test.ps1 -SkipDesktop # sans l'application de bureau
|
||||
.\docs\start_omika_test.ps1 -SkipWorker # sans le Worker
|
||||
.\docs\start_omika_test.ps1 -Clean # purge la SQLite locale avant lancement
|
||||
|
||||
Pour arreter : .\docs\stop_omika_test.ps1
|
||||
#>
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[switch]$NoBuild,
|
||||
[switch]$SkipDesktop,
|
||||
[switch]$SkipWorker,
|
||||
[switch]$Clean
|
||||
)
|
||||
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
# Racine du depot = parent du dossier docs/ contenant ce script.
|
||||
$root = Split-Path -Parent $PSScriptRoot
|
||||
|
||||
# Fichiers de logs (racine du depot).
|
||||
$logApiOut = Join-Path $root 'omika-test-api.out.log'
|
||||
$logApiErr = Join-Path $root 'omika-test-api.err.log'
|
||||
$logWorkerOut = Join-Path $root 'omika-test-worker.out.log'
|
||||
$logWorkerErr = Join-Path $root 'omika-test-worker.err.log'
|
||||
$logDesktopOut = Join-Path $root 'omika-test-desktop.out.log'
|
||||
$logDesktopErr = Join-Path $root 'omika-test-desktop.err.log'
|
||||
|
||||
function Reset-Log([string]$Path) {
|
||||
if (Test-Path $Path) { Remove-Item $Path -Force -ErrorAction SilentlyContinue }
|
||||
}
|
||||
|
||||
function Banner([string]$Text) {
|
||||
Write-Host ''
|
||||
Write-Host '============================================================' -ForegroundColor Cyan
|
||||
Write-Host " $Text" -ForegroundColor Cyan
|
||||
Write-Host '============================================================' -ForegroundColor Cyan
|
||||
}
|
||||
|
||||
Banner 'OMIKA - Demarrage en mode test local'
|
||||
|
||||
# ---------- Preparation de la config locale de l'application de bureau ----------
|
||||
$appData = Join-Path $env:LOCALAPPDATA 'Omika'
|
||||
if (-not (Test-Path $appData)) { New-Item -ItemType Directory -Path $appData | Out-Null }
|
||||
|
||||
# ---------- Nettoyage optionnel de la base SQLite locale (-Clean) ----------
|
||||
# Uniquement lors d'un changement d'environnement (ex. Batik -> Omika) : repartir
|
||||
# avec une base locale vierge pour ne pas melanger les snapshots de deux bases.
|
||||
# Ne supprime JAMAIS development-license.json, ni documents/, ni logs/.
|
||||
if ($Clean) {
|
||||
Write-Host ''
|
||||
Write-Host 'Nettoyage de la base SQLite locale (-Clean)...' -ForegroundColor Yellow
|
||||
foreach ($db in @('omika.db', 'omika-diagnostics.db')) {
|
||||
$dbPath = Join-Path $appData $db
|
||||
if (Test-Path $dbPath) {
|
||||
Remove-Item -Path $dbPath -Force -ErrorAction SilentlyContinue
|
||||
if (Test-Path $dbPath) {
|
||||
Write-Warning " Impossible de supprimer (fichier verrouille ?) : $dbPath"
|
||||
}
|
||||
else {
|
||||
Write-Host " Supprime : $dbPath" -ForegroundColor Green
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$devLicenseConfig = Join-Path $appData 'development-license.json'
|
||||
$devLicenseApiUrl = 'http://localhost:5097'
|
||||
if (-not (Test-Path $devLicenseConfig)) {
|
||||
[ordered]@{
|
||||
Enabled = $true
|
||||
ClientCode = 'LOCAL-DEV'
|
||||
UserDisplayName = 'Alexandre SALVADOR (ASA)'
|
||||
ExpirationDays = 365
|
||||
ApiUrl = $devLicenseApiUrl
|
||||
} | ConvertTo-Json | Set-Content -Path $devLicenseConfig -Encoding UTF8
|
||||
Write-Host " Config creee : $devLicenseConfig" -ForegroundColor Yellow
|
||||
}
|
||||
else {
|
||||
# Le fichier existe : si le champ ApiUrl est absent ou vide, on l'ajoute
|
||||
# proprement (sans ecraser les autres champs). Necessaire au flux
|
||||
# DevelopmentLicense, qui lit ApiUrl pour joindre l'API locale.
|
||||
try {
|
||||
$license = Get-Content -Raw -Path $devLicenseConfig | ConvertFrom-Json
|
||||
if ($null -eq $license.PSObject.Properties['ApiUrl'] -or [string]::IsNullOrWhiteSpace($license.ApiUrl)) {
|
||||
$license | Add-Member -NotePropertyName 'ApiUrl' -NotePropertyValue $devLicenseApiUrl -Force
|
||||
$license | ConvertTo-Json | Set-Content -Path $devLicenseConfig -Encoding UTF8
|
||||
Write-Host " ApiUrl ajoute a : $devLicenseConfig" -ForegroundColor Yellow
|
||||
}
|
||||
}
|
||||
catch {
|
||||
Write-Warning " $devLicenseConfig illisible : laisse tel quel."
|
||||
}
|
||||
}
|
||||
|
||||
$hfsqlConfig = Join-Path $root 'config\hfsql-test.local.json'
|
||||
if (-not (Test-Path $hfsqlConfig)) {
|
||||
Write-Warning "config/hfsql-test.local.json introuvable : l'API et le Worker n'utiliseront pas la configuration HFSQL de test."
|
||||
}
|
||||
|
||||
# ---------- 1. Compilation ----------
|
||||
if ($NoBuild) {
|
||||
Write-Host ''
|
||||
Write-Host 'Compilation ignoree (-NoBuild).' -ForegroundColor DarkGray
|
||||
}
|
||||
else {
|
||||
Banner '1/4 - Compilation des projets (Debug)'
|
||||
$projects = @(
|
||||
(Join-Path $root 'src\Omika.Api\Omika.Api.csproj'),
|
||||
(Join-Path $root 'src\Omika.Worker\Omika.Worker.csproj'),
|
||||
(Join-Path $root 'src\Omika.App.Desktop\Omika.App.Desktop.csproj')
|
||||
)
|
||||
foreach ($project in $projects) {
|
||||
Write-Host " > $project" -ForegroundColor Yellow
|
||||
# CONTOURNEMENT TEMPORAIRE : --no-restore -m:1 evite l'echec MSB4276 lie au
|
||||
# workload Android/iOS corrompu de cette machine (resolution SDK parallele).
|
||||
# A retirer apres 'dotnet workload repair'.
|
||||
dotnet build $project -c Debug --nologo --no-restore -m:1
|
||||
if ($LASTEXITCODE -ne 0) { throw "Echec de compilation : $project" }
|
||||
}
|
||||
}
|
||||
|
||||
# Environnement de test : Development (charge config/hfsql-test.local.json).
|
||||
$env:ASPNETCORE_ENVIRONMENT = 'Development'
|
||||
$env:DOTNET_ENVIRONMENT = 'Development'
|
||||
|
||||
# ---------- 2. API ----------
|
||||
Banner "2/4 - Demarrage de l'API (http://localhost:5097)"
|
||||
Reset-Log $logApiOut; Reset-Log $logApiErr
|
||||
$env:ASPNETCORE_URLS = 'http://localhost:5097'
|
||||
$api = Start-Process -FilePath 'dotnet' `
|
||||
-ArgumentList (Join-Path $root 'src\Omika.Api\bin\Debug\net10.0\Omika.Api.dll') `
|
||||
-WorkingDirectory (Join-Path $root 'src\Omika.Api\bin\Debug\net10.0') `
|
||||
-RedirectStandardOutput $logApiOut `
|
||||
-RedirectStandardError $logApiErr `
|
||||
-NoNewWindow -PassThru
|
||||
Write-Host " API demarree (PID $($api.Id))." -ForegroundColor Green
|
||||
|
||||
# ---------- 3. Worker ----------
|
||||
if ($SkipWorker) {
|
||||
Write-Host 'Worker ignore (-SkipWorker).' -ForegroundColor DarkGray
|
||||
}
|
||||
else {
|
||||
Banner '3/4 - Demarrage du Worker de synchronisation'
|
||||
Reset-Log $logWorkerOut; Reset-Log $logWorkerErr
|
||||
$worker = Start-Process -FilePath 'dotnet' `
|
||||
-ArgumentList (Join-Path $root 'src\Omika.Worker\bin\Debug\net10.0\Omika.Worker.dll') `
|
||||
-WorkingDirectory (Join-Path $root 'src\Omika.Worker\bin\Debug\net10.0') `
|
||||
-RedirectStandardOutput $logWorkerOut `
|
||||
-RedirectStandardError $logWorkerErr `
|
||||
-NoNewWindow -PassThru
|
||||
Write-Host " Worker demarre (PID $($worker.Id))." -ForegroundColor Green
|
||||
}
|
||||
|
||||
# ---------- 4. Application desktop ----------
|
||||
if ($SkipDesktop) {
|
||||
Write-Host 'Application desktop ignoree (-SkipDesktop).' -ForegroundColor DarkGray
|
||||
}
|
||||
else {
|
||||
Banner "4/4 - Demarrage de l'application de bureau"
|
||||
Reset-Log $logDesktopOut; Reset-Log $logDesktopErr
|
||||
$desktop = Start-Process -FilePath (Join-Path $root 'src\Omika.App.Desktop\bin\Debug\net10.0\Omika.App.Desktop.exe') `
|
||||
-WorkingDirectory (Join-Path $root 'src\Omika.App.Desktop\bin\Debug\net10.0') `
|
||||
-RedirectStandardOutput $logDesktopOut `
|
||||
-RedirectStandardError $logDesktopErr `
|
||||
-PassThru
|
||||
Write-Host " Application de bureau demarree (PID $($desktop.Id))." -ForegroundColor Green
|
||||
}
|
||||
|
||||
# ---------- Verification ----------
|
||||
Banner 'Verification'
|
||||
Write-Host " Attente de quelques secondes avant le controle de sante de l'API..." -ForegroundColor Yellow
|
||||
Start-Sleep -Seconds 6
|
||||
try {
|
||||
$health = Invoke-RestMethod -Uri 'http://localhost:5097/health' -TimeoutSec 10
|
||||
Write-Host " /health => $($health | ConvertTo-Json -Compress)" -ForegroundColor Green
|
||||
}
|
||||
catch {
|
||||
Write-Warning " Impossible de joindre http://localhost:5097/health : $($_.Exception.Message)"
|
||||
Write-Host " Consultez les logs : $logApiOut / $logApiErr" -ForegroundColor DarkGray
|
||||
}
|
||||
|
||||
Banner 'Termine'
|
||||
Write-Host ' Logs :' -ForegroundColor Cyan
|
||||
Write-Host " API : $logApiOut" -ForegroundColor Cyan
|
||||
Write-Host " Worker : $logWorkerOut" -ForegroundColor Cyan
|
||||
Write-Host " Desktop : $logDesktopOut" -ForegroundColor Cyan
|
||||
Write-Host ' Pour arreter : .\docs\stop_omika_test.ps1' -ForegroundColor Cyan
|
||||
Reference in New Issue
Block a user