Add Get-GiteaReleases function to retrieve releases from a Gitea repository

This commit is contained in:
2025-04-29 17:18:00 -04:00
parent 135af8dfb8
commit 172922ba61

View File

@@ -872,4 +872,142 @@ Function Get-GiteaChildItem {
}
}
Export-ModuleMember -Function Set-GiteaConfiguration, Get-GiteaConfiguration, Get-GiteaFileContent, Invoke-GiteaFileDownload, Get-GiteaChildItem, Get-GiteaLFSFile
function Get-GiteaReleases {
<#
.SYNOPSIS
Retrieves the releases for a Gitea repository.
.DESCRIPTION
This function retrieves the releases for a Gitea repository using the Gitea API. The function requires the URL of the Gitea server, the owner of the repository, the name of the repository, and a personal access token.
#>
[cmdletbinding()]
param(
[Parameter(ValueFromPipelineByPropertyName)]
[string]$giteaURL = "https://gitea.norwichct.tech",
[Parameter(ValueFromPipelineByPropertyName)]
[string]$repoOwner,
[Parameter(ValueFromPipelineByPropertyName)]
[string]$repoName,
[int]$page,
[int]$limit,
[switch]$includeDrafts,
[switch]$includePreReleases,
[string]$token
)
begin {
# Use configuration if parameters aren't provided
if (-not $PSBoundParameters.ContainsKey('giteaURL') -or
-not $PSBoundParameters.ContainsKey('repoOwner') -or
-not $PSBoundParameters.ContainsKey('token')) {
$config = Get-GiteaConfiguration
if ($config) {
if (-not $PSBoundParameters.ContainsKey('giteaURL')) { $giteaURL = $config.giteaURL }
if (-not $PSBoundParameters.ContainsKey('repoOwner')) { $repoOwner = $config.defaultOwner }
if (-not $PSBoundParameters.ContainsKey('token')) { $token = $config.token }
}
}
# Validate that we have all required parameters
$missingParams = @()
if (-not $giteaURL) { $missingParams += "giteaURL" }
if (-not $repoOwner) { $missingParams += "repoOwner" }
if (-not $token) { $missingParams += "token" }
if ($missingParams.Count -gt 0) {
throw "Missing required parameters: $($missingParams -join ', '). Either provide them directly or set them with Set-GiteaConfiguration."
}
$headers = @{
"Authorization" = "token $token"
"Accept" = "application/json"
}
}
process {
Write-Verbose "Parameters:"
Write-Verbose "giteaURL: $giteaURL"
Write-Verbose "repoOwner: $repoOwner"
Write-Verbose "repoName: $repoName"
Write-Verbose "page: $page"
Write-Verbose "limit: $limit"
Write-Verbose "includeDrafts: $includeDrafts"
Write-Verbose "includePreReleases: $includePreReleases"
Write-Debug "Token: $token"
Write-Verbose "Processing releases for repository: $repoName"
$url = "$giteaURL"
$url += "/api/v1/repos"
$url += "/$repoOwner"
$url += "/$repoName"
$url += "/releases"
if ($includeDrafts -eq $true) {
$url += "?draft=true"
}
else {
$url += "?draft=false"
}
if ($includePreReleases -eq $true) {
$url += "&pre-release=true"
}
if ($page -gt 1) {
$url += "&page=$page"
}
if ($limit -gt 0) {
$url += "&limit=$limit"
}
Write-Verbose "URL: $url"
try {
$result = Invoke-RestMethod -Uri $url -Method Get -Headers $headers
$releases = foreach ($release in $result) {
# Process each asset into its own object
$assets = foreach ($asset in $release.assets) {
[PSCustomObject]@{
Id = $asset.id
Name = $asset.name
Size = $asset.size
DownloadCount = $asset.download_count
CreatedAt = [DateTime]$asset.created_at
UUID = $asset.uuid
DownloadURL = $asset.browser_download_url
}
}
# Create the release object with nested author and assets
[PSCustomObject]@{
Id = $release.id
TagName = $release.tag_name
TargetCommit = $release.target_commitish
Name = $release.name
Description = $release.body
URL = $release.url
HTMLURL = $release.html_url
TarballURL = $release.tarball_url
ZipballURL = $release.zipball_url
UploadURL = $release.upload_url
IsDraft = $release.draft
IsPrerelease = $release.prerelease
CreatedAt = [DateTime]$release.created_at
PublishedAt = [DateTime]$release.published_at
Author = [PSCustomObject]@{
Id = $release.author.id
Username = $release.author.username
Email = $release.author.email
AvatarURL = $release.author.avatar_url
HTMLURL = $release.author.html_url
}
Assets = $assets
}
}
return $releases
}
catch {
Write-Error "Failed to retrieve file '$file' from Gitea: $_"
}
}
}
Export-ModuleMember -Function Set-GiteaConfiguration, Get-GiteaConfiguration, Get-GiteaFileContent, Invoke-GiteaFileDownload, Get-GiteaChildItem, Get-GiteaLFSFile, Get-GiteaReleases