func_Registry.ps1

# Container Registry API
# https://docs.gitlab.com/ee/api/container_registry.html

# get a list of project registry repositories
function Get-GitlabRegistryRepositories( [Parameter(Mandatory=$true)] [string] $project
                                       , [Parameter(Mandatory=$false)][switch] $tags
                                       , [Parameter(Mandatory=$false)][switch] $tags_count
                                       )
{
  [string] $GAPI_REGISTRY_REPOSITORIES = "$CI_API_V4_URL/projects/$project/registry/repositories?per_page=100"

  if ($tags) {
    $GAPI_REGISTRY_REPOSITORIES += "&tags=true"
  }

  if ($tags_count) {
    $GAPI_REGISTRY_REPOSITORIES += "&tags_count=true"
  }

  return @(Invoke-WebRequestContentToJson -headers $GLPT -uri $GAPI_REGISTRY_REPOSITORIES)
}

# get a single repository by ID
function Get-GitlabRegistryRepository( [Parameter(Mandatory=$true)] [string] $id
                                     , [Parameter(Mandatory=$false)][switch] $tags
                                     , [Parameter(Mandatory=$false)][switch] $tags_count
                                     )
{
  [string] $GAPI_REGISTRY_REPOSITORIES_ID = "$CI_API_V4_URL/registry/repositories/${id}?size=true"

  if ($tags) {
    $GAPI_REGISTRY_REPOSITORIES_ID += "&tags=true"
  }

  if ($tags_count) {
    $GAPI_REGISTRY_REPOSITORIES_ID += "&tags_count=true"
  }

  return (Invoke-RestMethod -headers $GLPT -uri $GAPI_REGISTRY_REPOSITORIES_ID -method GET)
}

# get a single repository by name
function Get-GitlabRegistryRepositoryByName( [Parameter(Mandatory=$true)] [string] $project
                                           , [Parameter(Mandatory=$true)] [string] $name
                                           )
{
  $prcrr = @(Get-GitlabRegistryRepositories -project $project)
  foreach ($crr in $prcrr) {
    if ($crr.name -eq $name) {
      return (Get-GitlabRegistryRepository -id $crr.id -tags -tags_count)
    }
  }

  return @()
}

# delete a registry repository by ID
function Remove-GitlabRegistryRepository( [Parameter(Mandatory=$true)] [string] $project
                                        , [Parameter(Mandatory=$true)] [string] $id
                                        )
{
  [string] $GAPI_REGISTRY_REPOSITORIES_ID = "$CI_API_V4_URL/projects/$project/registry/repositories/$id"
  return (Invoke-RestMethod -headers $GLPT -uri $GAPI_REGISTRY_REPOSITORIES_ID -method DELETE)
}

# delete a registry repository by name
function Remove-GitlabRegistryRepositoryByName( [Parameter(Mandatory=$true)] [string] $project
                                              , [Parameter(Mandatory=$true)] [string] $name
                                              )
{
  $prcrr = @(Get-GitlabRegistryRepositories -project $project)
  foreach ($crr in $prcrr) {
    if ($crr.name -eq $name) {
      return (Invoke-RestMethod -headers $GLPT -uri $crr.delete_api_path -method DELETE)
    }
  }

  return 0
}