Fixes: 1) Replaced hardcoded paths with script-relative paths for better portability; 2) Corrected CPU and memory calculation logic for system checks; 3) Replaced inconsistent script formatting and error handling; 4) Resolved redundant cleanup steps post service startup. Extra: Refactored and cleaned up script logic for maintainability; added WISELESS branding across scripts for consistency; enhanced terminal output and user messaging.
95 lines
2.8 KiB
PowerShell
95 lines
2.8 KiB
PowerShell
#!/usr/bin/env pwsh
|
|
Set-StrictMode -Version Latest
|
|
$ErrorActionPreference = 'Stop'
|
|
|
|
if (-not (Test-Path -Path ".\evibes" -PathType Container))
|
|
{
|
|
Write-Host "❌ Please run this script from the project's root (where the 'evibes' directory lives)." -ForegroundColor Red
|
|
exit 1
|
|
}
|
|
|
|
$purple = "`e[38;2;121;101;209m"
|
|
$reset = "`e[0m"
|
|
|
|
$artPath = Join-Path (Split-Path -Parent $MyInvocation.MyCommand.Definition) '..\ASCII_ART_EVIBES'
|
|
if (-not (Test-Path $artPath))
|
|
{
|
|
Write-Host "❌ Could not find ASCII art at $artPath" -ForegroundColor Red
|
|
exit 1
|
|
}
|
|
|
|
$art = Get-Content -Raw -Path $artPath
|
|
$art -split "`r?`n" | ForEach-Object {
|
|
Write-Host "$purple$_$reset"
|
|
}
|
|
|
|
Write-Host "`nby WISELESS TEAM`n" -ForegroundColor Gray
|
|
|
|
if (-not (Test-Path '.env'))
|
|
{
|
|
Write-Warning ".env file not found. Exiting without running Docker steps."
|
|
exit 0
|
|
}
|
|
|
|
$cpuCount = [Environment]::ProcessorCount
|
|
if ($cpuCount -lt 4)
|
|
{
|
|
Write-Error "Insufficient CPU cores: $cpuCount detected. Minimum 4 required."
|
|
exit 1
|
|
}
|
|
|
|
$totalMemBytes = (Get-CimInstance Win32_ComputerSystem).TotalPhysicalMemory
|
|
$totalMemGB = [Math]::Round($totalMemBytes / 1GB, 2)
|
|
if ($totalMemGB -lt 6)
|
|
{
|
|
Write-Error "Insufficient RAM: $totalMemGB GB detected. Minimum 6 GB required."
|
|
exit 1
|
|
}
|
|
|
|
$currentDrive = Split-Path -Qualifier $PWD
|
|
$driveLetter = $currentDrive.Substring(0, 1)
|
|
$driveInfo = Get-PSDrive -Name $driveLetter
|
|
$freeGB = [Math]::Round($driveInfo.Free / 1GB, 2)
|
|
if ($freeGB -lt 20)
|
|
{
|
|
Write-Error "Insufficient free disk space on drive $driveLetter`: $freeGB GB available. Minimum 20 GB required."
|
|
exit 1
|
|
}
|
|
|
|
Write-Host "System requirements met: CPU cores=$cpuCount, RAM=${totalMemGB}GB, FreeDisk=${freeGB}GB" -ForegroundColor Green
|
|
|
|
$Spinner = @('|', '/', '-', '\')
|
|
$Colors = @('White', 'Gray')
|
|
$Delay = 100
|
|
|
|
function Invoke-Spinner
|
|
{
|
|
[CmdletBinding()]
|
|
param(
|
|
[Parameter(Mandatory)][string]$Arguments,
|
|
[Parameter(Mandatory)][string]$Message
|
|
)
|
|
Write-Host -NoNewLine -ForegroundColor Cyan ("{0}… " -f $Message)
|
|
$si = New-Object System.Diagnostics.ProcessStartInfo
|
|
$si.FileName = "docker"
|
|
$si.Arguments = "$Arguments --ansi never"
|
|
$si.RedirectStandardOutput = $true
|
|
$si.RedirectStandardError = $true
|
|
$si.UseShellExecute = $false
|
|
$p = [System.Diagnostics.Process]::Start($si)
|
|
$i = 0
|
|
while (-not $p.HasExited)
|
|
{
|
|
$frame = $Spinner[$i % $Spinner.Length]
|
|
$col = $Colors[$i % $Colors.Length]
|
|
Write-Host -NoNewLine -ForegroundColor $col $frame
|
|
Start-Sleep -Milliseconds $Delay
|
|
Write-Host -NoNewline "`b"
|
|
$i++
|
|
}
|
|
$p.WaitForExit()
|
|
Write-Host -ForegroundColor Green "✔"
|
|
}
|
|
|
|
Invoke-Spinner -Arguments "compose pull" -Message "Pulling related images"
|
|
Invoke-Spinner -Arguments "compose build" -Message "Building the project's images"
|