microsoft / PowerShellForGitHub

Microsoft PowerShell wrapper for GitHub API
Other
588 stars 186 forks source link

Get-GitHubReleaseAsset only returns first 30 assets #372

Open pauby opened 1 year ago

pauby commented 1 year ago

Issue Details

Using Get-GitHubReleaseAsset on a release with more than 30 assets, only returns the first 30. Note that I'm using a GitHub token. I have tried this on Windows PowerShell 5.1 and PowerShell 7.2.6 on Windows.

Steps to reproduce the issue

# note that the latest as of this date is 1.22.0 which has 39 release assets (https://github.com/syncthing/syncthing/releases/tag/v1.22.0)
$> $release = Get-GitHubRelease -OwnerName syncthing -RepositoryName syncthing -Latest
$> $asset = Get-GitHubReleaseAsset -OwnerName syncthing -RepositoryName syncthing -Release $release.id
$> $asset.count
30

Verbose logs showing the problem

$>  $repoOwner = 'syncthing'
$>  $repoNamer = 'syncthing'
$>  $release = Get-GitHubRelease -OwnerName $repoOwner -RepositoryName $repoName -Latest -Verbose
VERBOSE: [0.16.1] Executing: Get-GitHubRelease -OwnerName "syncthing" -RepositoryName "syncthing" -Latest:$true -Verbose:$true
VERBOSE: Getting latest release from syncthing/syncthing
VERBOSE: Accessing [Get] https://api.github.com/repos/syncthing/syncthing/releases/latest [Timeout = 0)]
VERBOSE: GET https://api.github.com/repos/syncthing/syncthing/releases/latest with 0-byte payload
VERBOSE: received -1-byte response of content type application/json; charset=utf-8
VERBOSE: Telemetry has been disabled via configuration. Skipping reporting event [Get-GitHubRelease].

$> $asset = Get-GitHubReleaseAsset -OwnerName $repoOwner -RepositoryName $repoName -Release $release.id -Verbose
VERBOSE: [0.16.1] Executing: Get-GitHubReleaseAsset -OwnerName "syncthing" -RepositoryName "syncthing" -Release 78911291 -Verbose:$true
VERBOSE: Getting list of assets for release 78911291
VERBOSE: Accessing [Get] https://api.github.com/repos/syncthing/syncthing/releases/78911291/assets [Timeout = 0)]
VERBOSE: GET https://api.github.com/repos/syncthing/syncthing/releases/78911291/assets with 0-byte payload
VERBOSE: received -1-byte response of content type application/json; charset=utf-8
VERBOSE: Telemetry has been disabled via configuration. Skipping reporting event [Get-GitHubReleaseAsset].

Suggested solution to the issue

Is paging at play here? If so, how do I get the second page? No suggested solution.

Requested Assignment

I'm just reporting this problem, but don't want to fix it.

Operating System

OsName               : Microsoft Windows 10 Pro
OsOperatingSystemSKU : 48
OsArchitecture       : 64-bit
WindowsVersion       : 2009
WindowsBuildLabEx    : 19041.1.amd64fre.vb_release.191206-1406
OsLanguage           : en-US
OsMuiLanguages       : {en-US, en-GB}

PowerShell Version

Name                           Value
----                           -----
PSVersion                      5.1.19041.1682
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.19041.1682
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

Module Version

Running: 0.16.1
Installed: 0.16.1
HowardWolosky commented 1 year ago

Thanks for the report.

I just drafted up a fix that I've locally verified works, but I need to update some tests as well.

Get-GitHubReleaseAsset combines three different API's into a single command: returning the full list of assets, returning a single asset and downloading an asset. In order to support downloading, it uses the single-call API (Invoke-GHRestMethod):

https://github.com/microsoft/PowerShellForGitHub/blob/9aac69728fb6221179cd876afb4923859d8442b1/GitHubReleases.ps1#L872-L883

However, for the "full list of assets" scenario, it really needs to be using Invoke-GHRestMethodMultipleResult which will automatically take care of paging.

Draft change is here: https://github.com/microsoft/PowerShellForGitHub/compare/master...HowardWolosky:PowerShellForGitHub:releaseAssetPaging

pauby commented 1 year ago

Awesome. Thanks for picking that up and troubleshooting it so quickly.

Xander-Rudolph commented 1 year ago

Can we get a PR on this one? It's been a while and appears to have a fix: https://github.com/microsoft/PowerShellForGitHub/compare/master...HowardWolosky:PowerShellForGitHub:releaseAssetPaging

pauby commented 1 year ago

@Xander-Rudolph are you asking for me to submit a PR?

HanwhaARudolph commented 1 year ago

@Xander-Rudolph are you asking for me to submit a PR?

Anyone who can 😁. I had to do a really janky workaround because I'm using this PowerShell module on ephemeral images.

pauby commented 1 year ago

👍 I worked around it by creating my own function that does the work I need. It's not as complete as this as I don't need all the functionality so nothing I can PR in.

AlexYurov commented 9 months ago

@HowardWolosky Could you please create a pull request for your draft? I'd really like to have this fix released so that my CI works correctly