public/issues/New-ProjectIssue.ps1


Set-MyInvokeCommandAlias -Alias CreateIssue -Command 'Invoke-CreateIssue -RepositoryId {repoid} -Title "{title}" -Body "{body}"'

function New-ProjectIssueDirect {
    [CmdletBinding()]
    [Alias("New-Issue")]
    param (
        [Parameter(Mandatory, Position = 1)][string]$RepoOwner,
        [Parameter(Mandatory, Position = 2)][string]$RepoName,
        [Parameter(Mandatory, Position = 3)][string]$Title,
        [Parameter(Position = 4)][string]$Body,
        [Parameter()][switch]$OpenOnCreation
    )

    $repo = Get-Repository -Owner $RepoOwner -Name $RepoName

    if( ! $repo ) {
        "Repository $RepoOwner/$RepoName not found" | Write-MyError
        return $null
    }

    $params = @{
        repoid = $repo.id
        title        = $Title | ConvertTo-InvokeParameterString
        body         = $Body | ConvertTo-InvokeParameterString
    }

    $response = Invoke-MyCommand -Command CreateIssue -Parameters $params

    $issue = $response.data.createIssue.issue

    if ( ! $issue ) {
        throw "Issue not created properly"
    }

    $ret = $issue.url

    if( $OpenOnCreation ) {
        Open-Url $ret
    }

    return $ret

} Export-ModuleMember -Function New-ProjectIssueDirect -Alias New-Issue

function New-ProjectIssue {
    [CmdletBinding()]
    [Alias("npi")]
    param(
        #ProjectOwner
        [Parameter()][string]$ProjectOwner,
        [Parameter()][string]$ProjectNumber,
        [Parameter(Mandatory, Position = 1)][string]$RepoOwner,
        [Parameter(Mandatory, Position = 2)][string]$RepoName,
        [Parameter(Mandatory, Position = 3)][string]$Title,
        [Parameter(Position = 4)][string]$Body
    )

    try{

        # Create Issue
        $url = New-ProjectIssueDirect -RepoOwner $RepoOwner -RepoName $RepoName -Title $Title -Body $Body
        
        if(! $url ){
            "Issue could not be created" | Write-MyError
            return $null
        }
        
        # Add issue to project
        $ProjectOwner,$ProjectNumber = Get-OwnerAndProjectNumber -Owner $ProjectOwner -ProjectNumber $ProjectNumber
        
        $itemId = Add-ProjectItem -Owner $ProjectOwner -ProjectNumber $ProjectNumber -Url $url
        
        return $itemId
    }
    catch{
        throw "Error creating issue and adding to project: $_"
    }

} Export-ModuleMember -Function New-ProjectIssue -Alias npi