106 lines
2.7 KiB
PowerShell
106 lines
2.7 KiB
PowerShell
$ErrorActionPreference = 'Stop';
|
|
|
|
# Path of the root of the repository
|
|
$REPO_ROOT_PATH = Join-Path $PSScriptRoot '..\..\..' -Resolve
|
|
# Python search path for modules
|
|
$VENV_DIR = Join-Path $PSScriptRoot '.venv'
|
|
$SCRIPT_DIR = Join-Path $VENV_DIR 'Scripts'
|
|
|
|
$dirExcludes = '.venv', '.pytest_cache', 'install-test', '.pypy-venv', 'build', 'dist'
|
|
$filesToFormat = @(get-childitem -Exclude $dirExcludes -Directory | ForEach-Object { get-childitem -path $_ -Recurse -Include '*.py' })
|
|
$filesToFormat += @(get-childitem -Name '*.py')
|
|
|
|
$PACKAGES = 'cffi', 'ipython', 'pytest', 'hypothesis', 'flake8', 'isort', 'black'
|
|
|
|
task default -depends isort, Blacken, Flake8, Extension, Test
|
|
|
|
function executeScript($script, $params) {
|
|
$scriptPath = Join-Path $SCRIPT_DIR -ChildPath $script
|
|
try {
|
|
get-item $scriptPath -ErrorAction Stop > $null
|
|
}
|
|
catch {
|
|
Invoke-Task Packages
|
|
}
|
|
& "$scriptPath" @($params)
|
|
if ($LASTEXITCODE -ne 0 ) {
|
|
throw "$script failed";
|
|
}
|
|
|
|
}
|
|
|
|
task isort {
|
|
executeScript 'isort.exe' $filesToFormat
|
|
}
|
|
|
|
task Blacken {
|
|
executeScript 'black.exe' $filesToFormat
|
|
}
|
|
|
|
task Flake8 {
|
|
executeScript 'flake8.exe' ('gtemu.py', 'gtemu_extension_build.py', 'tests')
|
|
}
|
|
|
|
|
|
task Virtualenv {
|
|
try {
|
|
get-item "$VENV_DIR" -ErrorAction Stop > $null
|
|
}
|
|
catch {
|
|
python3 -m venv "$VENV_DIR"
|
|
& "$SCRIPT_DIR\python" @('-m', 'pip', 'install', '--upgrade', 'pip')
|
|
}
|
|
}
|
|
|
|
task Upgrade-Packages {
|
|
executeScript 'pip.exe' (('install', '--upgrade') + $PACKAGES)
|
|
}
|
|
|
|
task Packages -depends VirtualEnv {
|
|
executeScript 'pip.exe' (@(, 'install') + $PACKAGES)
|
|
}
|
|
|
|
task Extension {
|
|
executeScript python.exe .\gtemu_extension_build.py
|
|
if ($LASTEXITCODE -ne 0 ) {
|
|
throw "Extension failed"
|
|
}
|
|
}
|
|
|
|
|
|
task RomFiles {
|
|
$testScripts = @(Get-ChildItem -Path 'test-scripts' -Filter '*.gcl' -Recurse )
|
|
try {
|
|
Push-Location 'roms'
|
|
Remove-Item '*.rom', '*.lst'
|
|
}
|
|
catch {
|
|
New-Item 'roms' -Type Directory | Push-Location
|
|
}
|
|
Copy-Item (Join-Path $REPO_ROOT_PATH 'interface.json')
|
|
try {
|
|
$testScripts | ForEach-Object {
|
|
executeScript python.exe ((Join-Path (Join-Path $REPO_ROOT_PATH 'Core') 'ROMv4.asm.py'), "Reset=$($_.FullName)")
|
|
if ($LASTEXITCODE -ne 0 ) {
|
|
throw "Failed to generate ROM from $($_.FullName)";
|
|
}
|
|
Rename-Item ROMv4.rom "$($_.Basename).rom"
|
|
Rename-Item ROMv4.lst "$($_.Basename).lst"
|
|
}
|
|
}
|
|
finally {
|
|
Pop-Location
|
|
}
|
|
}
|
|
|
|
task Test -depends RomFiles {
|
|
$oldPythonPath = $env:PYTHONPATH
|
|
$env:PYTHONPATH = Join-Path $REPO_ROOT_PATH 'Core'
|
|
try {
|
|
executeScript 'pytest'
|
|
}
|
|
finally {
|
|
$env:PYTHONPATH = $oldPythonPath
|
|
}
|
|
}
|