Functions/New-ProGetFeed.ps1


function New-ProGetFeed
{
    <#
    .SYNOPSIS
    Creates a new ProGet package feed
 
    .DESCRIPTION
    The `New-ProGetFeed` function creates a new ProGet feed. Use the `FeedType` parameter to specify the feed type (valid values are 'VSIX', 'RubyGems', 'Docker', 'ProGet', 'Maven', 'Bower', 'npm', 'Deployment', 'Chocolatey', 'NuGet', 'PowerShell'). The `ProGetSession` parameter controls the instance of ProGet to connect to. This function uses ProGet's Native API, so an API key is required. Use `New-ProGetSession` to create a session with your API key.
 
    .EXAMPLE
    New-ProGetFeed -ProGetSession $ProGetSession -FeedName 'Apps' -FeedType 'ProGet'
 
    Demonstrates how to call `New-ProGetFeed`. In this case, a new Universal package feed named 'Apps' will be created for the specified ProGet Uri
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$true)]
        [pscustomobject]
        # The session includes ProGet's URI and the API key. Use `New-ProGetSession` to create session objects
        $ProGetSession,

        [Parameter(Mandatory=$true)]
        [string]
        # The feed name indicates the name of the package feed that will be created.
        $FeedName,

        [Parameter(Mandatory=$true)]
        [string]
        # The feed type indicates the type of package feed to create.
        # Valid feed types are ('VSIX', 'RubyGems', 'Docker', 'ProGet', 'Maven', 'Bower', 'npm', 'Deployment', 'Chocolatey', 'NuGet', 'PowerShell') - check here for a latest list - https://inedo.com/support/documentation/proget/feed-types/universal
        $FeedType
    )

    Set-StrictMode -Version 'Latest'

    $proGetPackageUri = [String]$ProGetSession.Uri
    if (!$ProGetSession.ApiKey)
    {
        Write-Error -Message ('We are unable to create new package feed ''{0}/{1}'' because your ProGet session is missing an API key. This function uses ProGet''s Native API, which requires an API key. Use `New-ProGetSession` to create a session object that uses an API key.' -f $FeedType, $FeedName)
        return
    }
    $proGetApiKey = $ProGetSession.ApiKey

    $Parameters = @{}
    $Parameters['FeedType_Name'] = $FeedType
    $Parameters['Feed_Name'] = $FeedName

    $feedExists = Test-ProGetFeed -ProGetSession $ProGetSession -FeedName $FeedName -FeedType $FeedType
    if($feedExists)
    {
        Write-Error -Message ('Unable to create feed ''{0}/{1}''. A feed with that name already exists.' -f $FeedType, $FeedName) -ErrorAction $ErrorActionPreference
        return
    }
    $null = Invoke-ProGetNativeApiMethod -Session $ProGetSession -Name 'Feeds_CreateFeed' -Parameter $Parameters

    Write-Verbose -Message ('Successfully created new package feed ''{0}/{1}'' in ProGet instance ''{2}' -f $FeedType, $FeedName, $proGetPackageUri)
}