foreman 1.7.0

Toolchain manager for simple binary tools
function write_foreman_toml($protocol, $tool, $source, $version) {
    Write-Output "writing foreman.toml"
    Write-Output "[tools]" | Out-File -FilePath foreman.toml -Encoding utf8
    Write-Output "$tool = { $protocol = `"$source`", version = `"=$version`" }" | Out-File -FilePath foreman.toml -append -Encoding utf8
}

function create_rojo_files() {
    Write-Output "writing default.project.json"
    Write-Output "{ 
        `"name`": `"test`", 
        `"tree`": { 
            `"`$path`": `"src`"
        } 
    }" | Out-File -FilePath default.project.json -Encoding utf8
}

function setup_rojo() {
    write_foreman_toml github rojo "rojo-rbx/rojo" "7.3.0"
    foreman install
    create_rojo_files
}

function kill_process_and_check_delayed() {
    Write-Output "waiting 15 seconds before killing rojo"
    Start-Sleep 15
    Get-Process | Where-Object { $_.Name -eq "rojo" } | Select-Object -First 1 | Stop-Process
    Write-Output "waiting 5 seconds to stop rojo"
    Start-Sleep 5
    check_killed_subprocess
}

function run_rojo_serve_and_kill_process() {
    setup_rojo
    Start-job -ScriptBlock { rojo serve default.project.json }
    kill_process_and_check_delayed
}

function check_killed_subprocess() {
    Write-Output "Checking if process was killed properly"
    $rojo = Get-Process -name "rojo-rbx__rojo-7.3.0" -ErrorAction SilentlyContinue
    if ($rojo) {
        Write-Output "rojo subprocess was not killed properly"
        remove-item foreman.toml
        remove-item default.project.json
        exit 1
    }
    else {
        Write-Output "rojo subprocess was killed properly"
        remove-item foreman.toml
        remove-item default.project.json
        exit 0
    }
}

run_rojo_serve_and_kill_process