private/Get-LibsBuildDeps.ps1
|
function Get-LibsBuildDeps { <# .SYNOPSIS Download dependencies from GitHub Actions workflow runs. .PARAMETER Arch Target architecture: x86 or x64. .PARAMETER Destination Destination directory to extract the downloaded deps into. .OUTPUTS Array of library names that were downloaded. #> [CmdletBinding()] [OutputType([string[]])] param( [Parameter(Mandatory=$true)] [ValidateSet('x86','x64')] [string] $Arch, [Parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()] [string] $Destination ) $downloadedLibs = @() $runIds = @($env:LIBS_BUILD_RUNS -split ',' | ForEach-Object { $_.Trim() } | Where-Object { $_ -ne '' }) if ($runIds.Count -eq 0) { Write-Host 'No run IDs provided in LIBS_BUILD_RUNS' return $downloadedLibs } $headers = @{ 'Accept' = 'application/vnd.github+json' 'X-GitHub-Api-Version' = '2022-11-28' 'User-Agent' = 'php-windows-builder' } if ($env:GITHUB_TOKEN) { $headers['Authorization'] = 'Bearer ' + $env:GITHUB_TOKEN } else { Write-Warning 'GITHUB_TOKEN not set. API rate limits may apply.' } foreach ($runId in $runIds) { Write-Host "Processing workflow run: $runId" $url = "https://api.github.com/repos/winlibs/winlib-builder/actions/runs/$runId/artifacts" $response = Invoke-RestMethod -Uri $url -Headers $headers -Method Get if ($response.total_count -eq 0) { Write-Warning "No artifacts for run $runId" continue } foreach ($artifact in $response.artifacts) { # Filter by architecture if ($artifact.name -notmatch $Arch) { continue } Write-Host "Downloading artifact: $($artifact.name)" $libName = $artifact.name -replace '-\d.*$', '' $downloadedLibs += $libName $tempZip = Join-Path $env:TEMP ([System.Guid]::NewGuid().ToString() + '.zip') try { Write-Host "Downloading from: $($artifact.archive_download_url)" Invoke-WebRequest -Uri $artifact.archive_download_url -Headers $headers -OutFile $tempZip Write-Host "Downloaded to: $tempZip (Size: $((Get-Item $tempZip).Length) bytes)" Write-Host "Extracting to: $Destination" Expand-Archive -LiteralPath $tempZip -DestinationPath $Destination -Force Write-Host "Extracted $($artifact.name) successfully" } catch { Write-Error "Failed to process artifact $($artifact.name): $_" throw } finally { Remove-Item -Path $tempZip -Force -ErrorAction SilentlyContinue } } } Write-Host "Downloaded libraries from workflow runs: $($downloadedLibs -join ', ')" return $downloadedLibs } |