Skip to content

Commit

Permalink
(maint) Adds Get-GitHubRepositoryFileContent script
Browse files Browse the repository at this point in the history
This can be used to improve performance of any update that requires you to grab the content of a file from a repository, e.g. a changelog.
  • Loading branch information
JPRuskin committed Jul 4, 2024
1 parent c0bb342 commit df0f259
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 1 deletion.
2 changes: 1 addition & 1 deletion scripts/Get-GitHubRelease.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
[Parameter(Mandatory, Position = 1)]
[string]$Name,

# The Name of the tag to get the relase for. Will default to the latest release.
# The Name of the tag to get the release for. Will default to the latest release.
[string]$TagName,

# GitHub token, used to reduce rate-limiting or access private repositories (needs repo scope)
Expand Down
65 changes: 65 additions & 0 deletions scripts/Get-GitHubRepositoryFileContent.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
function Get-GitHubRepositoryFileContent {
<#
.Synopsis
Returns the content of a given file in a repository via the REST API
.Link
https://docs.github.com/en/rest/repos/contents?apiVersion=2022-11-28
.Example
Get-GitHubRepositoryFileContent Kubernetes Kubernetes CHANGELOG/README.md
.Notes
Seems to be a lot faster than IWRing raw files.
#>
[CmdletBinding()]
param(
# The owner of the repository
[Parameter(Mandatory)]
[string]$Owner,

# The repository containing the file
[Parameter(Mandatory)]
[string]$Repository,

# The path to the file within the repository
[Parameter(ValueFromPipeline)]
[string]$Path,

# The branch, tag, or reference to get the content from. Defaults to the repository's default branch.
[Alias('ref', 'Tag')]
[string]$Branch,

# Returns the raw response
[switch]$Raw
)
process {
$restArgs = @{
Uri = "https://api.github.com/repos/$($Owner)/$($Repository)/contents/$($Path.TrimStart('/'))"
Headers = @{
'Accept' = 'application/vnd.github+json'
'X-GitHub-Api-Version' = '2022-11-28'
}
}
if ($Branch) {
$restArgs.Body = @{ref = $Branch}
}
if ($env:github_api_key) {
$restArgs.Headers.Authorization = "Bearer $($env:github_api_key)"
}

$Result = Invoke-RestMethod @restArgs -UseBasicParsing

if ($Raw) {
$Result
} elseif ($Result.encoding -eq 'base64') {
# Assumption made about the file being UTF8, here
[System.Text.Encoding]::UTF8.GetString(
[System.Convert]::FromBase64String($Result.content)
)
} else {
Write-Warning "$($Path) encoded as '$($Result.encoding)'"
$Result.content
}
}
}
1 change: 1 addition & 0 deletions scripts/au_extensions.psm1
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ $funcs = @(
'Clear-DependenciesList'
'Get-AllGitHubReleases'
'Get-GitHubRelease'
'Get-GitHubRepositoryFileContent'
'Set-DescriptionFromReadme'
'Update-ChangelogVersion'
'Update-OnETagChanged'
Expand Down

0 comments on commit df0f259

Please sign in to comment.