05/23 update codes, add build scripts
LottoSight CI / Syntax Check & Tests (push) Has been cancelled
LottoSight CI / Syntax Check & Tests (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
# build.ps1
|
||||
# ---------
|
||||
# Builds LottoSight into a standalone Windows executable.
|
||||
# Output: dist\LottoSight\LottoSight.exe
|
||||
#
|
||||
# Usage:
|
||||
# .\build.ps1 # install deps + build
|
||||
# .\build.ps1 -SkipDeps # skip pip install (faster when deps are current)
|
||||
# .\build.ps1 -Clean # wipe dist\ and build\ before building
|
||||
|
||||
param(
|
||||
[switch]$Clean,
|
||||
[switch]$SkipDeps
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
Set-Location $PSScriptRoot
|
||||
|
||||
# --- Helpers ------------------------------------------------------------------
|
||||
|
||||
function Write-Step {
|
||||
param([string]$Msg)
|
||||
Write-Host ""
|
||||
Write-Host (" " + $Msg) -ForegroundColor Cyan
|
||||
Write-Host (" " + ("-" * $Msg.Length)) -ForegroundColor DarkGray
|
||||
}
|
||||
|
||||
function Fail {
|
||||
param([string]$Msg)
|
||||
Write-Host ""
|
||||
Write-Host " ERROR: $Msg" -ForegroundColor Red
|
||||
Write-Host ""
|
||||
exit 1
|
||||
}
|
||||
|
||||
# --- Python check -------------------------------------------------------------
|
||||
Write-Step "Checking Python"
|
||||
|
||||
$pyCmd = Get-Command python -ErrorAction SilentlyContinue
|
||||
if (-not $pyCmd) {
|
||||
Fail "Python not found. Install Python 3.12+ and add it to PATH."
|
||||
}
|
||||
|
||||
# Use exit code to verify version - avoids string parsing
|
||||
python -c "import sys; sys.exit(0 if sys.version_info >= (3,12) else 1)" 2>$null
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
$found = python -c "import sys; print(sys.version)"
|
||||
Fail "Python 3.12 or higher required. Found: $found"
|
||||
}
|
||||
|
||||
$pyVersion = python -c "import sys; print(sys.version.split()[0])"
|
||||
Write-Host " Python $pyVersion OK" -ForegroundColor Green
|
||||
|
||||
# --- Dependencies -------------------------------------------------------------
|
||||
if (-not $SkipDeps) {
|
||||
Write-Step "Installing dependencies"
|
||||
|
||||
python -m pip install --upgrade pip --quiet
|
||||
if ($LASTEXITCODE -ne 0) { Fail "pip upgrade failed." }
|
||||
|
||||
python -m pip install -r requirements.txt pyinstaller --quiet
|
||||
if ($LASTEXITCODE -ne 0) { Fail "pip install failed." }
|
||||
|
||||
Write-Host " All packages up to date OK" -ForegroundColor Green
|
||||
} else {
|
||||
Write-Host ""
|
||||
Write-Host " -SkipDeps: skipping pip install" -ForegroundColor DarkGray
|
||||
}
|
||||
|
||||
# --- Assets -------------------------------------------------------------------
|
||||
Write-Step "Checking assets"
|
||||
|
||||
if (-not (Test-Path "assets\icon.png")) {
|
||||
Write-Host " icon.png missing - generating..." -ForegroundColor Yellow
|
||||
New-Item -ItemType Directory -Force "assets" | Out-Null
|
||||
python -c "from core.exporter import create_icon_png; create_icon_png('assets/icon.png')"
|
||||
if ($LASTEXITCODE -ne 0) { Fail "Could not generate icon.png." }
|
||||
Write-Host " icon.png created OK" -ForegroundColor Green
|
||||
} else {
|
||||
Write-Host " assets\icon.png OK" -ForegroundColor Green
|
||||
}
|
||||
|
||||
# --- Clean --------------------------------------------------------------------
|
||||
if ($Clean) {
|
||||
Write-Step "Cleaning previous build"
|
||||
Remove-Item -Recurse -Force "dist", "build" -ErrorAction SilentlyContinue
|
||||
Write-Host " dist\ and build\ removed OK" -ForegroundColor Green
|
||||
}
|
||||
|
||||
# --- Build --------------------------------------------------------------------
|
||||
Write-Step "Running PyInstaller"
|
||||
|
||||
python -m PyInstaller lottosight.spec --clean --noconfirm
|
||||
if ($LASTEXITCODE -ne 0) { Fail "PyInstaller build failed." }
|
||||
|
||||
# --- Verify and report --------------------------------------------------------
|
||||
Write-Step "Build result"
|
||||
|
||||
$exePath = "dist\LottoSight\LottoSight.exe"
|
||||
$distDir = "dist\LottoSight"
|
||||
|
||||
if (-not (Test-Path $exePath)) {
|
||||
Fail "Expected exe not found at: $exePath"
|
||||
}
|
||||
|
||||
$exeSizeMB = [math]::Round((Get-Item $exePath).Length / 1MB, 1)
|
||||
$allFiles = Get-ChildItem $distDir -Recurse
|
||||
$dirSizeMB = [math]::Round(($allFiles | Measure-Object -Property Length -Sum).Sum / 1MB, 0)
|
||||
$absDir = (Resolve-Path $distDir).Path
|
||||
|
||||
Write-Host ""
|
||||
Write-Host " Build successful!" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
Write-Host " Executable : $exePath ($exeSizeMB MB)"
|
||||
Write-Host " Folder : $absDir"
|
||||
Write-Host " Total size : ~$dirSizeMB MB"
|
||||
Write-Host ""
|
||||
Write-Host " To run the app:" -ForegroundColor Yellow
|
||||
Write-Host " .\dist\LottoSight\LottoSight.exe" -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
Reference in New Issue
Block a user