function Initialize-EnvironmentSettings { Write-Host "Initializing settings..." # Load and validate .env.template (INI-style key=value list) $parentDir = Split-Path -Parent $PSScriptRoot $templatePath = Join-Path $parentDir '.env.template' if (-not (Test-Path $templatePath)) { Write-Error "Template file '$templatePath' not found." exit 1 } $templateLines = Get-Content -Raw -Path $templatePath -ErrorAction Stop $settingNames = @() foreach ($line in $templateLines -split "`n") { $l = $line.Trim() if ($l -eq '' -or $l.StartsWith('#') -or $l.StartsWith(';')) { continue } if ($l -match '=') { $parts = $l -split '=', 2 $name = $parts[0].Trim() if ($name -ne '') { $settingNames += $name } } } if ($settingNames.Count -eq 0) { Write-Error "No settings found in template file '$templatePath'." exit 1 } # Load existing .env if present $envPath = Join-Path $parentDir '.env' $envValues = @{} if (Test-Path $envPath) { $envLines = Get-Content -Raw -Path $envPath -ErrorAction Stop foreach ($line in $envLines -split "`n") { $l = $line.Trim() if ($l -eq '' -or $l.StartsWith('#') -or $l.StartsWith(';')) { continue } if ($l -match '=') { $parts = $l -split '=', 2 $name = $parts[0].Trim() $value = $parts[1].Trim().Trim("'").Trim('"') $envValues[$name] = $value } } } # Ensure all template settings are present; prompt user for missing/empty foreach ($name in $settingNames) { if (-not $envValues.ContainsKey($name) -or [string]::IsNullOrWhiteSpace($envValues[$name])) { do { Write-Host "$name value is missing!" -ForegroundColor Yellow $settingValue = Read-Host "Enter value for $name" } while ([string]::IsNullOrWhiteSpace($settingValue)) $envValues[$name] = $settingValue } else { Write-Host "$name value already set to '$($envValues[$name])'" -ForegroundColor DarkGray } } # Recreate ../.env with the required settings and values $out = foreach ($name in $settingNames) { "$name='$($envValues[$name])'" } $out | Set-Content -Path $envPath -Encoding UTF8 Write-Host "Settings preparation complete" } function Initialize-NodeTools { Write-Host "Installing Node.js dependencies for the ELX Tools..." $extractElxToolsScriptPath = Join-Path $PSScriptRoot "../tools/extract-elx/" Push-Location -StackName ElxTools $extractElxToolsScriptPath # Install Node.js dependencies for the ELX Tools & npm install if ($LASTEXITCODE -ne 0) { Write-Error "npm install failed with exit code $LASTEXITCODE." exit 1 } Pop-Location -StackName ElxTools Write-Host "Node.js dependencies installed successfully!" } # If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { # #"No Administrative rights, it will display a popup window asking user for Admin rights" # $arguments = "-NoProfile -ExecutionPolicy Bypass -Command & '" + $myinvocation.mycommand.definition + "'" # Start-Process "$psHome\powershell.exe" -Verb runAs -ArgumentList $arguments #-WindowStyle Hidden # break # } # # Set execution policy remotesigned machine wide # try { # Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine -Force -ErrorAction SilentlyContinue -WarningAction SilentlyContinue -InformationAction SilentlyContinue # } # catch { # # Suppress # } # # Load Environment Setup Module # $envSetupModulePath = $(Join-Path $PSScriptRoot "EnvironmentSetup.psm1") # if (-not (Test-Path $envSetupModulePath)) { # Write-Warning "Environment Setup Module file '$($envSetupModulePath)' not found!" # Write-Host # exit 1 # } # Import-Module -Force $envSetupModulePath Write-Host "Preparing environment..." -ForegroundColor Cyan Write-Host Initialize-EnvironmentSettings Write-Host Initialize-NodeTools Write-Host Write-Host "Environment preparation complete!" -ForegroundColor Green # do { # Write-Host "To complete the intallations you need to restart your computer" -ForegroundColor Cyan # Write-Host "do you want to restart? [Y/n]" -ForegroundColor Cyan # $key = ([console]::ReadKey()).Key.ToString().ToUpper() # if ($key -eq 'Y') { # Restart-Computer # } # } while ($key -ne 'N' -and $key -ne 'Y')