Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

error: Failed to create temp folder. #102

Open
Saborknight opened this issue Feb 15, 2019 · 3 comments
Open

error: Failed to create temp folder. #102

Saborknight opened this issue Feb 15, 2019 · 3 comments

Comments

@Saborknight
Copy link

Saborknight commented Feb 15, 2019

This issue has already been highlighted in #16 and #76 where @KoffeinFlummi said, in both cases, that the issue was fixed... and yet I am getting this error on a new computer with the latest armake version on Windows.

The full error:

  [14:28:48] Creating PBO core
error: Failed to create temp folder.
Build-Directory : [14:28:48] Failed to build core.
At D:\[...]\tools\make.ps1:152 char:17
+                 Build-Directory $component
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Build-Directory

I get this error on two separate projects using the same build script. In both cases absolutely all addons fail to build because of this error. I'm running the script on an elevated powershell prompt.

The build script I'm using:

$projectRoot    = Split-Path -Parent $PSScriptRoot
$buildPath      = "$projectRoot\.build\@2BNB Framework"
$releasePage    = "https://github.com/KoffeinFlummi/armake/releases"
$downloadPage   = "https://github.com/KoffeinFlummi/armake/releases/download/v{0}/armake_v{0}.zip"
$armake         = "$projectRoot\tools\armake.exe"
$tag            = git describe --tag | %{$_ -replace "-.*-", "-"}
$privateKeyFile = "$buildPath\keys\bnb_f_$tag.biprivatekey"
$timestamp      = Get-Date -UFormat "%T"
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12


function Compare-VersionNewerThan {
    param(
        [Parameter(Mandatory=$True)]
        $version1,

        [Parameter(Mandatory=$True)]
        $version2
    )

    $version1 = $version1.Split(".") | % {[int] $_}
    $version2 = $version2.Split(".") | % {[int] $_}

    $newer = $False
    for ($i = 0; $i -lt $version1.Length; $i++) {
        if ($version1[$i] -gt $version2[$i]) {
            $newer = $True
            break
        }
    }

    $newer
}


function Get-InstalledArmakeVersion {
    if (Test-Path $armake) {
        $version = & $armake --version
        $version = $version.Substring(1)
    } else {
        $version = "0.0.0"
    }

    $version
}


function Get-LatestArmakeVersion {
    $client = New-Object Net.WebClient
    $content = $client.DownloadString($releasePage)
    $client.dispose()

    $match = $content -match "<a href="".*?/releases/download/v(.*?)/.*?.zip"".*?>"
    if (!$match) {
        Write-Error "[$timestamp] Failed to find valid armake download link."
        $version = "0.0.0"
    } else {
        $version = $matches[1]
    }

    $version
}


function Update-Armake {
    param(
        [Parameter(Mandatory=$True)]
        $url
    )

    New-Item "$PSScriptRoot\temp" -ItemType "directory" -Force | Out-Null

    Write-Output "Downloading armake..."
    $client = New-Object Net.WebClient
    $client.DownloadFile($url, "$PSScriptRoot\temp\armake.zip")
    $client.dispose()

    Write-Output "Download complete, unpacking..."
    Expand-Archive "$PSScriptRoot\temp\armake.zip" "$PSScriptRoot\temp\armake"
    Remove-Item "$PSScriptRoot\temp\armake.zip"

    if ([Environment]::Is64BitProcess) {
        $binary = Get-ChildItem -Path "$PSScriptRoot\temp\armake" -Include "*.exe" -Recurse | Where-Object {$_.Name -match ".*w64.exe"}
    } else {
        $binary = Get-ChildItem -Path "$PSScriptRoot\temp\armake" -Include "*.exe" -Recurse | Where-Object {$_.Name -match ".*w64.exe"}
    }
    Move-Item $binary.FullName $armake -Force

    Remove-Item "$PSScriptRoot\temp" -Recurse -Force
}


function Create-Private-Key {
    Write-Output "  [$timestamp] Creating key pairs for $tag"
    & $armake keygen -f "keys\bnb_f_$tag"

    if (!(Test-Path -Path $privateKeyFile)) {
        Write-Error "[$timestamp] Failed to generate key pairs $privateKeyFile"
        return $False
    }

    return $True
}


function Build-Directory {
    param(
        [Parameter(Mandatory=$True)]
        $directory
    )

    $component = $directory.Name
    $fullPath  = $directory.FullName
    $parent    = $directory.Parent
    $binPath   = "$buildPath\$parent\bnb_f_$component.pbo"
    $prefix    = Get-Content $fullPath'\$PREFIX$'

    if (Test-Path -Path $binPath) {
        Remove-Item $binPath
        Write-Output "  [$timestamp] Updating PBO $component"
        & $armake build --force -k $privateKeyFile -e prefix=$prefix $fullPath $binPath
    } else {
        Write-Output "  [$timestamp] Creating PBO $component"
        & $armake build --force -k $privateKeyFile -e prefix=$prefix $fullPath $binPath
    }

    if ($LastExitCode -ne 0) {
        Write-Error "[$timestamp] Failed to build $component."
    }
}


function Main {
    $installed = Get-InstalledArmakeVersion
    $latest    = Get-LatestArmakeVersion

    if (Compare-VersionNewerThan $latest $installed) {
        Write-Output "Found newer version of armake:" "  Installed: $installed" "  Latest: $latest"
        Update-Armake ($downloadPage -f $latest)
        Write-Output "Update complete, armake up-to-date."
    }

    $origLocation = Get-Location
    New-Item "$buildPath" -ItemType "directory" -Force | Out-Null
    New-Item "$buildPath\keys" -ItemType "directory" -Force | Out-Null
    Set-Location -Path $buildPath

    if (Create-Private-Key) {
        foreach ($folder in "addons") {
            New-Item "$buildPath\$folder" -ItemType "directory" -Force | Out-Null
            foreach ($component in Get-ChildItem -Directory "$PSScriptRoot\..\$folder") {
                Build-Directory $component
            }
        }
    }

    Set-Location $origLocation
}
Main
@Saborknight
Copy link
Author

Saborknight commented Feb 15, 2019

The same happens when I try and manually run armake:

.\armake.exe build --force -k "D:\[...]\.build\@2BNB Framework\keys\bnb_f_v0.0.1-gd55a5e7.biprivatekey" -e prefix=x\bnb_f\addons\core "D:\[...]\addons\core" "D:\[...]\2bnb_framework\.build\@2BNB Framework\addons\bnb_f_core.pbo"

The error message:

error: Failed to create temp folder.

@Saborknight
Copy link
Author

I've found that omitting the -e prefix=... header allows the command to work seamlessly... I don't understand what I'm doing wrong with the prefix header then?

My problem is solved, per-se

@Saborknight
Copy link
Author

Saborknight commented Feb 17, 2019

Turns out I need that header, otherwise the mod isn't using the correct prefixes. So, what is it I'm doing wrong?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant