mirror of
https://github.com/isledecomp/isle.git
synced 2025-10-22 16:04:17 +00:00

* Use multiple threads for entropy builds
* Verify builds parameter
* Revert "Verify builds parameter"
This reverts commit 460d3d3b55
.
* Use options instead
* Seed fix
* 256 samples on push
82 lines
2.2 KiB
PowerShell
82 lines
2.2 KiB
PowerShell
if ($args.count -lt 2) {
|
|
Write-Error "Requires 2 args: job matrix number and number of builds for this job."
|
|
exit 1
|
|
}
|
|
|
|
function Get-BaseSeed {
|
|
Param (
|
|
[int]$Matrix
|
|
)
|
|
|
|
# GITHUB_SHA is the commit hash. This means the entropy files will be consistent
|
|
# unless you push a new commit.
|
|
$sha = [System.Convert]::ToUInt32($env:GITHUB_SHA.Substring(0, 8), 16)
|
|
|
|
# Mask off the last 16 bits
|
|
$base_seed = ($sha -band 0xffff0000)
|
|
|
|
# Add the matrix number * 256. We can run 256 unique builds on this job.
|
|
return $base_seed + ($Matrix -shl 8)
|
|
}
|
|
|
|
$MatrixNo = [int]$args[0]
|
|
$BuildCount = [int]$args[1]
|
|
$base_seed = $(Get-BaseSeed -Matrix $MatrixNo)
|
|
|
|
$build_ids = 0..($BuildCount - 1)
|
|
|
|
$build_dirs = foreach($i in $build_ids) { "build$i" }
|
|
$stdout_files = foreach($i in $build_ids) { "stdout$i.txt" }
|
|
$stderr_files = foreach($i in $build_ids) { "stderr$i.txt" }
|
|
|
|
$procs = New-Object System.Collections.Generic.List[System.Diagnostics.Process]
|
|
|
|
foreach($i in $build_ids) {
|
|
# Create the entropy file
|
|
$entropy_file = "entropy$i.h"
|
|
$seed = $base_seed + $i
|
|
|
|
Write-Output "Using seed: $seed (instance $i)"
|
|
python3 tools/entropy.py $seed > $entropy_file
|
|
|
|
# Prepare to build
|
|
$params = @{
|
|
FilePath = "cmake"
|
|
PassThru = $null
|
|
ArgumentList = @(
|
|
"-B", $build_dirs[$i],
|
|
"-DCMAKE_BUILD_TYPE=RelWithDebInfo",
|
|
"-DISLE_INCLUDE_ENTROPY=ON",
|
|
"-DISLE_ENTROPY_FILENAME=$entropy_file",
|
|
"-G", "`"NMake Makefiles`""
|
|
)
|
|
}
|
|
|
|
# For the first job, display stdout and stderr.
|
|
# Else dump to file so we don't see 50 at once.
|
|
if ($i -eq 0) {
|
|
$params.Add("NoNewWindow", $null)
|
|
} else {
|
|
$params.Add("RedirectStandardOutput", $stdout_files[$i])
|
|
$params.Add("RedirectStandardError", $stderr_files[$i])
|
|
}
|
|
|
|
$procs.Add($(Start-Process @params))
|
|
}
|
|
|
|
$failed = $false
|
|
try { Wait-Process -InputObject $procs } catch { $failed = $true }
|
|
|
|
# Check for failure
|
|
foreach($i in $build_ids) {
|
|
if ($procs[$i].ExitCode -ne 0) {
|
|
if ($i -ne 0) {
|
|
Get-Content $stdout_files[$i] -Tail 10
|
|
Get-Content $stderr_files[$i] -Tail 10
|
|
}
|
|
$failed = $true
|
|
}
|
|
}
|
|
|
|
if ($failed) { exit 1 }
|