Functions/Public/Get-GitHubMilestone.ps1
function Get-GitHubMilestone { <# .Synopsis Creates a new GitHub issue. .Parameter Owner The GitHub username of the account or organization that owns the GitHub repository specified in the -Repository parameter. .Parameter Repository Required. The name of the GitHub repository that is owned by the -Owner parameter, where the new GitHub issue will be created. .Parameter Milestone The number of the milestone that you want to retrieve. .Example ### Get a specific milestone, based on the milestone's number. Get-GitHubMilestone -Milestone 1; .Example ### Get a list of milestone for the specified repository Get-GitHubMilestone -Owner pcgeek86 -Repository PSGitHub; .Link https://trevorsullivan.net https://developer.github.com/v3/issues #> [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [Alias('User')] [string] $Owner , [Parameter(Mandatory = $true)] [string] $Repository , [Parameter(ParameterSetName = 'SpecificMilestone', Mandatory = $true)] [string] $Milestone , [Parameter(ParameterSetName = 'FindMilestones', Mandatory = $false)] [ValidateSet('Open', 'Closed', 'All')] [string] $State , [Parameter(ParameterSetName = 'FindMilestones', Mandatory = $false)] [ValidateSet('DueDate', 'Completeness')] [string] $Sort , [Parameter(ParameterSetName = 'FindMilestones', Mandatory = $false)] [ValidateSet('Ascending', 'Descending')] [string] $Direction ) ### Build the core message body -- we'll add more properties soon $ApiBody = @{ }; ### Add the milestone property if ($Milestone) { $ApiBody.Add('milestone', $Milestone); } ### Normalize the "sort" JSON property if ($Sort) { switch ($Sort) { 'DueDate' { $Sort = 'due_on'; break; } 'Completeness' { $Sort = 'completeness'; break; } default { break; } } $ApiBody.Add('sort', $Sort); } ### Normalize the "state" JSON property if ($State) { switch ($State) { 'Open' { $State = 'open'; break; } 'Closed' { $State = 'closed'; break; } 'All' { $State = 'all'; break; } default { break; } } $ApiBody.Add('state', $State); } ### Normalize the "direction" JSON property if ($Direction) { switch ($Direction) { 'Ascending' { $Direction = 'asc'; break; } 'Descending' { $Direction = 'desc'; break; } default { break; } } $ApiBody.Add('direction', $Direction); } ### Determine the appropriate REST method to use if ($Milestone) { $RestMethod = '/repos/{0}/{1}/milestones/{2}' -f $Owner, $Repository, $Milestone; } else { $RestMethod = '/repos/{0}/{1}/milestones' -f $Owner, $Repository; } ### Set up the API call $ApiCall = @{ Body = $ApiBody | ConvertTo-Json RestMethod = $RestMethod; Method = 'Get'; } ### Invoke the GitHub REST method Invoke-GitHubApi @ApiBody; } |