diff --git a/.github/workflows/push-release-info-to-aws-s3.yml b/.github/workflows/push-release-info-to-aws-s3.yml index 2059418..6b9b3a6 100644 --- a/.github/workflows/push-release-info-to-aws-s3.yml +++ b/.github/workflows/push-release-info-to-aws-s3.yml @@ -39,35 +39,32 @@ jobs: $product = "${{ inputs.product }}" try { - $response = Invoke-WebRequest -Uri https://api.github.com/repos/${{ github.repository }}/releases/tags/${{ inputs.version }} -UseBasicParsing + $response = Invoke-WebRequest -Uri https://api.github.com/repos/${{ github.repository }}/releases -UseBasicParsing } catch { - Write-Error "Failed to fetch release ${{ inputs.version }}: $($_.Exception.Message)" + Write-Error "Failed to fetch releases: $($_.Exception.Message)" exit 1 } - # Filter and rework the JSON $obj = ConvertFrom-Json $response.Content -ErrorAction Stop - if ($obj.Draft -or $obj.Prerelease) { - Write-Error "Release $($obj.tag_name) is a draft or prerelease, aborting" - exit 1 - } - - $release = $obj | Select-Object -Property @{Name="tag";Expression={$_."tag_name"}}, @{Name="release";Expression={$_."html_url"}}, @{Name="published";Expression={$_."published_at"}}, assets - if (-not ($release.tag -match '^\d+\.\d+\.\d+$')) { - Write-Error "Release $($release.tag) has an invalid tag format, aborting" - exit 1 - } - - $release.assets = @($release.assets | Where-Object name -Like "*.exe" | Select-Object -Property name, size, @{Name="download";Expression={$_."browser_download_url"}}) + $newobj = @($obj | + Where-Object Draft -eq $false | + Where-Object Prerelease -eq $false | + Where-Object tag_name -match '^\d+\.\d+\.\d+$' | + ForEach-Object { + $release = $_ | Select-Object -Property @{Name="tag";Expression={$_."tag_name"}}, @{Name="release";Expression={$_."html_url"}}, @{Name="published";Expression={$_."published_at"}}, assets + $release.assets = @($release.assets | Where-Object name -Like "*.exe" | Select-Object -Property name, size, @{Name="download";Expression={$_."browser_download_url"}}) + $release + } | + Where-Object { $_.assets.Count -gt 0 } | + Sort-Object -Descending { [Version]$_.tag }) - if (-not $release.assets) { - Write-Error "Release $($release.tag) has no exe assets, aborting" + if (-not ($newobj | Where-Object tag -eq "${{ inputs.version }}")) { + Write-Error "Release ${{ inputs.version }} is not a stable release with exe assets, aborting" exit 1 } - $newobj = @($release) $json = ConvertTo-Json $newobj -Depth 100 -ErrorAction Stop # Write JSON to S3 @@ -76,7 +73,7 @@ jobs: $tempFile = New-TemporaryFile Set-Content -Path $tempFile -Value $json -NoNewline - aws s3 cp $tempFile "s3://$bucket/$key" --content-type application/json + aws s3 cp $tempFile "s3://$bucket/$key" --content-type application/json --cache-control max-age=300 --acl public-read if ($LASTEXITCODE -ne 0) { Write-Error "Upload to S3 failed" exit 1