1394 строки
43 KiB
PowerShell
1394 строки
43 KiB
PowerShell
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
# Licensed under the MIT License.
|
|
|
|
@{
|
|
GitHubLabelTypeName = 'GitHub.Label'
|
|
}.GetEnumerator() | ForEach-Object {
|
|
Set-Variable -Scope Script -Option ReadOnly -Name $_.Key -Value $_.Value
|
|
}
|
|
|
|
filter Get-GitHubLabel
|
|
{
|
|
<#
|
|
.SYNOPSIS
|
|
Retrieve label(s) of a given GitHub repository.
|
|
|
|
.DESCRIPTION
|
|
Retrieve label(s) of a given GitHub repository.
|
|
|
|
The Git repo for this module can be found here: http://aka.ms/PowerShellForGitHub
|
|
|
|
.PARAMETER OwnerName
|
|
Owner of the repository.
|
|
If not supplied here, the DefaultOwnerName configuration property value will be used.
|
|
|
|
.PARAMETER RepositoryName
|
|
Name of the repository.
|
|
If not supplied here, the DefaultRepositoryName configuration property value will be used.
|
|
|
|
.PARAMETER Uri
|
|
Uri for the repository.
|
|
The OwnerName and RepositoryName will be extracted from here instead of needing to provide
|
|
them individually.
|
|
|
|
.PARAMETER Label
|
|
Name of the specific label to be retrieved. If not supplied, all labels will be retrieved.
|
|
Emoji and codes are supported. For more information, see here: https://www.webpagefx.com/tools/emoji-cheat-sheet/
|
|
|
|
.PARAMETER Issue
|
|
If provided, will return all of the labels for this particular issue.
|
|
|
|
.PARAMETER MilestoneNumber
|
|
If provided, will return all of the labels assigned to issues for this particular milestone.
|
|
|
|
.PARAMETER AccessToken
|
|
If provided, this will be used as the AccessToken for authentication with the
|
|
REST Api. Otherwise, will attempt to use the configured value or will run unauthenticated.
|
|
|
|
.INPUTS
|
|
GitHub.Branch
|
|
GitHub.Content
|
|
GitHub.Event
|
|
GitHub.Issue
|
|
GitHub.IssueComment
|
|
GitHub.Label
|
|
GitHub.Milestone
|
|
GitHub.PullRequest
|
|
GitHub.Project
|
|
GitHub.ProjectCard
|
|
GitHub.ProjectColumn
|
|
GitHub.Reaction
|
|
GitHub.Release
|
|
GitHub.ReleaseAsset
|
|
GitHub.Repository
|
|
|
|
.OUTPUTS
|
|
GitHub.Label
|
|
|
|
.EXAMPLE
|
|
Get-GitHubLabel -OwnerName microsoft -RepositoryName PowerShellForGitHub
|
|
|
|
Gets the information for every label from the microsoft\PowerShellForGitHub project.
|
|
|
|
.EXAMPLE
|
|
Get-GitHubLabel -OwnerName microsoft -RepositoryName PowerShellForGitHub -Label TestLabel
|
|
|
|
Gets the information for the label named "TestLabel" from the microsoft\PowerShellForGitHub
|
|
project.
|
|
|
|
.NOTES
|
|
There were a lot of complications with the ParameterSets with this function due to pipeline
|
|
input. For the time being, the ParameterSets have been simplified and the validation of
|
|
parameter combinations is happening within the function itself.
|
|
#>
|
|
[CmdletBinding(DefaultParameterSetName = 'NameUri')]
|
|
[OutputType({$script:GitHubLabelTypeName})]
|
|
param(
|
|
[Parameter(
|
|
Mandatory,
|
|
ParameterSetName='Elements')]
|
|
[string] $OwnerName,
|
|
|
|
[Parameter(
|
|
Mandatory,
|
|
ParameterSetName='Elements')]
|
|
[string] $RepositoryName,
|
|
|
|
[Parameter(
|
|
Mandatory,
|
|
ValueFromPipelineByPropertyName,
|
|
ParameterSetName='Uri')]
|
|
[Alias('RepositoryUrl')]
|
|
[string] $Uri,
|
|
|
|
[Parameter(ValueFromPipelineByPropertyName)]
|
|
[ValidateNotNullOrEmpty()]
|
|
[Alias('LabelName')]
|
|
[string] $Label,
|
|
|
|
[Parameter(ValueFromPipelineByPropertyName)]
|
|
[Alias('IssueNumber')]
|
|
[int64] $Issue,
|
|
|
|
[Parameter(ValueFromPipelineByPropertyName)]
|
|
[int64] $MilestoneNumber,
|
|
|
|
[string] $AccessToken
|
|
)
|
|
|
|
Write-InvocationLog
|
|
|
|
$elements = Resolve-RepositoryElements
|
|
$OwnerName = $elements.ownerName
|
|
$RepositoryName = $elements.repositoryName
|
|
|
|
$telemetryProperties = @{
|
|
'OwnerName' = (Get-PiiSafeString -PlainText $OwnerName)
|
|
'RepositoryName' = (Get-PiiSafeString -PlainText $RepositoryName)
|
|
}
|
|
|
|
# There were a lot of complications trying to get pipelining working right when using all of
|
|
# the necessary ParameterSets, so we'll do internal parameter validation instead until someone
|
|
# can figure out the right way to do the parameter sets here _with_ pipeline support.
|
|
if ($PSBoundParameters.ContainsKey('Label') -or
|
|
$PSBoundParameters.ContainsKey('Issue') -or
|
|
$PSBoundParameters.ContainsKey('MilestoneNumber'))
|
|
{
|
|
if (-not ($PSBoundParameters.ContainsKey('Label') -xor
|
|
$PSBoundParameters.ContainsKey('Issue') -xor
|
|
$PSBoundParameters.ContainsKey('MilestoneNumber')))
|
|
{
|
|
$message = 'Label, Issue and Milestone are mutually exclusive. Only one can be specified in a single command.'
|
|
Write-Log -Message $message -Level Error
|
|
throw $message
|
|
}
|
|
}
|
|
|
|
$uriFragment = [String]::Empty
|
|
$description = [String]::Empty
|
|
|
|
if ($PSBoundParameters.ContainsKey('Issue'))
|
|
{
|
|
$uriFragment = "/repos/$OwnerName/$RepositoryName/issues/$Issue/labels"
|
|
$description = "Getting labels for Issue $Issue in $RepositoryName"
|
|
}
|
|
elseif ($PSBoundParameters.ContainsKey('MilestoneNumber'))
|
|
{
|
|
$uriFragment = "/repos/$OwnerName/$RepositoryName/milestones/$MilestoneNumber/labels"
|
|
$description = "Getting labels for issues in Milestone $MilestoneNumber in $RepositoryName"
|
|
}
|
|
else
|
|
{
|
|
$uriFragment = "repos/$OwnerName/$RepositoryName/labels/$Label"
|
|
|
|
if ($PSBoundParameters.ContainsKey('Name'))
|
|
{
|
|
$description = "Getting label $Label for $RepositoryName"
|
|
}
|
|
else
|
|
{
|
|
$description = "Getting labels for $RepositoryName"
|
|
}
|
|
}
|
|
|
|
$params = @{
|
|
'UriFragment' = $uriFragment
|
|
'Description' = $description
|
|
'AcceptHeader' = $script:symmetraAcceptHeader
|
|
'AccessToken' = $AccessToken
|
|
'TelemetryEventName' = $MyInvocation.MyCommand.Name
|
|
'TelemetryProperties' = $telemetryProperties
|
|
}
|
|
|
|
return (Invoke-GHRestMethodMultipleResult @params | Add-GitHubLabelAdditionalProperties)
|
|
}
|
|
|
|
filter New-GitHubLabel
|
|
{
|
|
<#
|
|
.SYNOPSIS
|
|
Create a new label on a given GitHub repository.
|
|
|
|
.DESCRIPTION
|
|
Create a new label on a given GitHub repository.
|
|
|
|
The Git repo for this module can be found here: http://aka.ms/PowerShellForGitHub
|
|
|
|
.PARAMETER OwnerName
|
|
Owner of the repository.
|
|
If not supplied here, the DefaultOwnerName configuration property value will be used.
|
|
|
|
.PARAMETER RepositoryName
|
|
Name of the repository.
|
|
If not supplied here, the DefaultRepositoryName configuration property value will be used.
|
|
|
|
.PARAMETER Uri
|
|
Uri for the repository.
|
|
The OwnerName and RepositoryName will be extracted from here instead of needing to provide
|
|
them individually.
|
|
|
|
.PARAMETER Label
|
|
Name of the label to be created.
|
|
Emoji and codes are supported.
|
|
For more information, see here: https://www.webpagefx.com/tools/emoji-cheat-sheet/
|
|
|
|
.PARAMETER Color
|
|
Color (in HEX) for the new label.
|
|
|
|
.PARAMETER Description
|
|
A short description of the label.
|
|
|
|
.PARAMETER AccessToken
|
|
If provided, this will be used as the AccessToken for authentication with the
|
|
REST Api. Otherwise, will attempt to use the configured value or will run unauthenticated.
|
|
|
|
.INPUTS
|
|
GitHub.Branch
|
|
GitHub.Content
|
|
GitHub.Event
|
|
GitHub.Issue
|
|
GitHub.IssueComment
|
|
GitHub.Label
|
|
GitHub.Milestone
|
|
GitHub.PullRequest
|
|
GitHub.Project
|
|
GitHub.ProjectCard
|
|
GitHub.ProjectColumn
|
|
GitHub.Reaction
|
|
GitHub.Release
|
|
GitHub.ReleaseAsset
|
|
GitHub.Repository
|
|
|
|
.OUTPUTS
|
|
GitHub.Label
|
|
|
|
.EXAMPLE
|
|
New-GitHubLabel -OwnerName microsoft -RepositoryName PowerShellForGitHub -Label TestLabel -Color BBBBBB
|
|
|
|
Creates a new, grey-colored label called "TestLabel" in the PowerShellForGitHub project.
|
|
#>
|
|
[CmdletBinding(
|
|
SupportsShouldProcess,
|
|
DefaultParameterSetName='Elements')]
|
|
[OutputType({$script:GitHubLabelTypeName})]
|
|
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSReviewUnusedParameter", "", Justification="The Uri parameter is only referenced by Resolve-RepositoryElements which get access to it from the stack via Get-Variable -Scope 1.")]
|
|
param(
|
|
[Parameter(ParameterSetName='Elements')]
|
|
[string] $OwnerName,
|
|
|
|
[Parameter(ParameterSetName='Elements')]
|
|
[string] $RepositoryName,
|
|
|
|
[Parameter(
|
|
Mandatory,
|
|
ValueFromPipelineByPropertyName,
|
|
ParameterSetName='Uri')]
|
|
[Alias('RepositoryUrl')]
|
|
[string] $Uri,
|
|
|
|
[Parameter(
|
|
Mandatory,
|
|
ValueFromPipeline)]
|
|
[Alias('LabelName')]
|
|
[string] $Label,
|
|
|
|
[Parameter(Mandatory)]
|
|
[ValidateScript({if ($_ -match '^#?[ABCDEF0-9]{6}$') { $true } else { throw "Color must be provided in hex." }})]
|
|
[Alias('LabelColor')]
|
|
[string] $Color = "EEEEEE",
|
|
|
|
[string] $Description,
|
|
|
|
[string] $AccessToken
|
|
)
|
|
|
|
Write-InvocationLog
|
|
|
|
$elements = Resolve-RepositoryElements
|
|
$OwnerName = $elements.ownerName
|
|
$RepositoryName = $elements.repositoryName
|
|
|
|
$telemetryProperties = @{
|
|
'OwnerName' = (Get-PiiSafeString -PlainText $OwnerName)
|
|
'RepositoryName' = (Get-PiiSafeString -PlainText $RepositoryName)
|
|
}
|
|
|
|
# Be robust to users who choose to provide a color in hex by specifying the leading # sign
|
|
# (by just stripping it out).
|
|
if ($Color.StartsWith('#'))
|
|
{
|
|
$Color = $Color.Substring(1)
|
|
}
|
|
|
|
$hashBody = @{
|
|
'name' = $Label
|
|
'color' = $Color
|
|
'description' = $Description
|
|
}
|
|
|
|
if (-not $PSCmdlet.ShouldProcess($Label, 'Create GitHub Label'))
|
|
{
|
|
return
|
|
}
|
|
|
|
$params = @{
|
|
'UriFragment' = "repos/$OwnerName/$RepositoryName/labels"
|
|
'Body' = (ConvertTo-Json -InputObject $hashBody)
|
|
'Method' = 'Post'
|
|
'Description' = "Creating label $Label in $RepositoryName"
|
|
'AcceptHeader' = $script:symmetraAcceptHeader
|
|
'AccessToken' = $AccessToken
|
|
'TelemetryEventName' = $MyInvocation.MyCommand.Name
|
|
'TelemetryProperties' = $telemetryProperties
|
|
}
|
|
|
|
return (Invoke-GHRestMethod @params | Add-GitHubLabelAdditionalProperties)
|
|
}
|
|
|
|
filter Remove-GitHubLabel
|
|
{
|
|
<#
|
|
.SYNOPSIS
|
|
Deletes a label from a given GitHub repository.
|
|
|
|
.DESCRIPTION
|
|
Deletes a label from a given GitHub repository.
|
|
|
|
The Git repo for this module can be found here: http://aka.ms/PowerShellForGitHub
|
|
|
|
.PARAMETER OwnerName
|
|
Owner of the repository.
|
|
If not supplied here, the DefaultOwnerName configuration property value will be used.
|
|
|
|
.PARAMETER RepositoryName
|
|
Name of the repository.
|
|
If not supplied here, the DefaultRepositoryName configuration property value will be used.
|
|
|
|
.PARAMETER Uri
|
|
Uri for the repository.
|
|
The OwnerName and RepositoryName will be extracted from here instead of needing to provide
|
|
them individually.
|
|
|
|
.PARAMETER Label
|
|
Name of the label to be deleted.
|
|
Emoji and codes are supported. For more information, see here: https://www.webpagefx.com/tools/emoji-cheat-sheet/
|
|
|
|
.PARAMETER Force
|
|
If this switch is specified, you will not be prompted for confirmation of command execution.
|
|
|
|
.PARAMETER AccessToken
|
|
If provided, this will be used as the AccessToken for authentication with the
|
|
REST Api. Otherwise, will attempt to use the configured value or will run unauthenticated.
|
|
|
|
.INPUTS
|
|
GitHub.Branch
|
|
GitHub.Content
|
|
GitHub.Event
|
|
GitHub.Issue
|
|
GitHub.IssueComment
|
|
GitHub.Label
|
|
GitHub.Milestone
|
|
GitHub.PullRequest
|
|
GitHub.Project
|
|
GitHub.ProjectCard
|
|
GitHub.ProjectColumn
|
|
GitHub.Reaction
|
|
GitHub.Release
|
|
GitHub.ReleaseAsset
|
|
GitHub.Repository
|
|
|
|
.EXAMPLE
|
|
Remove-GitHubLabel -OwnerName microsoft -RepositoryName PowerShellForGitHub -Label TestLabel
|
|
|
|
Removes the label called "TestLabel" from the PowerShellForGitHub project.
|
|
|
|
.EXAMPLE
|
|
$label = $repo | Get-GitHubLabel -Label 'Test Label' -Color '#AAAAAA'
|
|
$label | Remove-GitHubLabel
|
|
|
|
Removes the label we just created using the pipeline, but will prompt for confirmation
|
|
because neither -Confirm:$false nor -Force was specified.
|
|
|
|
.EXAMPLE
|
|
Remove-GitHubLabel -OwnerName microsoft -RepositoryName PowerShellForGitHub -Label TestLabel -Confirm:$false
|
|
|
|
Removes the label called "TestLabel" from the PowerShellForGitHub project.
|
|
Will not prompt for confirmation, as -Confirm:$false was specified.
|
|
|
|
.EXAMPLE
|
|
Remove-GitHubLabel -OwnerName microsoft -RepositoryName PowerShellForGitHub -Label TestLabel -Force
|
|
|
|
Removes the label called "TestLabel" from the PowerShellForGitHub project.
|
|
Will not prompt for confirmation, as -Force was specified.
|
|
#>
|
|
[CmdletBinding(
|
|
SupportsShouldProcess,
|
|
DefaultParameterSetName='Elements',
|
|
ConfirmImpact="High")]
|
|
[Alias('Delete-GitHubLabel')]
|
|
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSReviewUnusedParameter", "", Justification="The Uri parameter is only referenced by Resolve-RepositoryElements which get access to it from the stack via Get-Variable -Scope 1.")]
|
|
param(
|
|
[Parameter(ParameterSetName='Elements')]
|
|
[string] $OwnerName,
|
|
|
|
[Parameter(ParameterSetName='Elements')]
|
|
[string] $RepositoryName,
|
|
|
|
[Parameter(
|
|
Mandatory,
|
|
ValueFromPipelineByPropertyName,
|
|
ParameterSetName='Uri')]
|
|
[Alias('RepositoryUrl')]
|
|
[string] $Uri,
|
|
|
|
[Parameter(
|
|
Mandatory,
|
|
ValueFromPipeline,
|
|
ValueFromPipelineByPropertyName)]
|
|
[ValidateNotNullOrEmpty()]
|
|
[Alias('LabelName')]
|
|
[string] $Label,
|
|
|
|
[switch] $Force,
|
|
|
|
[string] $AccessToken
|
|
)
|
|
|
|
Write-InvocationLog
|
|
|
|
$elements = Resolve-RepositoryElements
|
|
$OwnerName = $elements.ownerName
|
|
$RepositoryName = $elements.repositoryName
|
|
|
|
$telemetryProperties = @{
|
|
'OwnerName' = (Get-PiiSafeString -PlainText $OwnerName)
|
|
'RepositoryName' = (Get-PiiSafeString -PlainText $RepositoryName)
|
|
}
|
|
|
|
if ($Force -and (-not $Confirm))
|
|
{
|
|
$ConfirmPreference = 'None'
|
|
}
|
|
|
|
if (-not $PSCmdlet.ShouldProcess($Label, 'Remove GitHub label'))
|
|
{
|
|
return
|
|
}
|
|
|
|
$params = @{
|
|
'UriFragment' = "repos/$OwnerName/$RepositoryName/labels/$Label"
|
|
'Method' = 'Delete'
|
|
'Description' = "Deleting label $Label from $RepositoryName"
|
|
'AcceptHeader' = $script:symmetraAcceptHeader
|
|
'AccessToken' = $AccessToken
|
|
'TelemetryEventName' = $MyInvocation.MyCommand.Name
|
|
'TelemetryProperties' = $telemetryProperties
|
|
}
|
|
|
|
return Invoke-GHRestMethod @params
|
|
}
|
|
|
|
filter Set-GitHubLabel
|
|
{
|
|
<#
|
|
.SYNOPSIS
|
|
Updates an existing label on a given GitHub repository.
|
|
|
|
.DESCRIPTION
|
|
Updates an existing label on a given GitHub repository.
|
|
|
|
The Git repo for this module can be found here: http://aka.ms/PowerShellForGitHub
|
|
|
|
.PARAMETER OwnerName
|
|
Owner of the repository.
|
|
If not supplied here, the DefaultOwnerName configuration property value will be used.
|
|
|
|
.PARAMETER RepositoryName
|
|
Name of the repository.
|
|
If not supplied here, the DefaultRepositoryName configuration property value will be used.
|
|
|
|
.PARAMETER Uri
|
|
Uri for the repository.
|
|
The OwnerName and RepositoryName will be extracted from here instead of needing to provide
|
|
them individually.
|
|
|
|
.PARAMETER Label
|
|
Current name of the label to be updated.
|
|
Emoji and codes are supported.
|
|
For more information, see here: https://www.webpagefx.com/tools/emoji-cheat-sheet/
|
|
|
|
.PARAMETER NewName
|
|
New name for the label being updated.
|
|
Emoji and codes are supported.
|
|
For more information, see here: https://www.webpagefx.com/tools/emoji-cheat-sheet/
|
|
|
|
.PARAMETER Color
|
|
Color (in HEX) for the new label.
|
|
|
|
.PARAMETER Description
|
|
A short description of the label.
|
|
|
|
.PARAMETER AccessToken
|
|
If provided, this will be used as the AccessToken for authentication with the
|
|
REST Api. Otherwise, will attempt to use the configured value or will run unauthenticated.
|
|
|
|
.INPUTS
|
|
GitHub.Branch
|
|
GitHub.Content
|
|
GitHub.Event
|
|
GitHub.Issue
|
|
GitHub.IssueComment
|
|
GitHub.Label
|
|
GitHub.Milestone
|
|
GitHub.PullRequest
|
|
GitHub.Project
|
|
GitHub.ProjectCard
|
|
GitHub.ProjectColumn
|
|
GitHub.Reaction
|
|
GitHub.Release
|
|
GitHub.ReleaseAsset
|
|
GitHub.Repository
|
|
|
|
.OUTPUTS
|
|
GitHub.Label
|
|
|
|
.EXAMPLE
|
|
Set-GitHubLabel -OwnerName microsoft -RepositoryName PowerShellForGitHub -Label TestLabel -NewName NewTestLabel -Color BBBB00
|
|
|
|
Updates the existing label called TestLabel in the PowerShellForGitHub project to be called
|
|
'NewTestLabel' and be colored yellow.
|
|
#>
|
|
[CmdletBinding(
|
|
SupportsShouldProcess,
|
|
DefaultParameterSetName='Elements')]
|
|
[OutputType({$script:GitHubLabelTypeName})]
|
|
[Alias('Update-GitHubLabel')] # Non-standard usage of the Update verb, but done to avoid a breaking change post 0.14.0
|
|
param(
|
|
[Parameter(ParameterSetName='Elements')]
|
|
[string] $OwnerName,
|
|
|
|
[Parameter(ParameterSetName='Elements')]
|
|
[string] $RepositoryName,
|
|
|
|
[Parameter(
|
|
Mandatory,
|
|
ValueFromPipelineByPropertyName,
|
|
ParameterSetName='Uri')]
|
|
[Alias('RepositoryUrl')]
|
|
[string] $Uri,
|
|
|
|
[Parameter(
|
|
Mandatory,
|
|
ValueFromPipelineByPropertyName)]
|
|
[Alias('LabelName')]
|
|
[string] $Label,
|
|
|
|
[Alias('NewLabelName')]
|
|
[string] $NewName,
|
|
|
|
[Alias('LabelColor')]
|
|
[ValidateScript({if ($_ -match '^#?[ABCDEF0-9]{6}$') { $true } else { throw "Color must be provided in hex." }})]
|
|
[string] $Color = "EEEEEE",
|
|
|
|
[string] $Description,
|
|
|
|
[string] $AccessToken
|
|
)
|
|
|
|
Write-InvocationLog
|
|
|
|
$elements = Resolve-RepositoryElements
|
|
$OwnerName = $elements.ownerName
|
|
$RepositoryName = $elements.repositoryName
|
|
|
|
$telemetryProperties = @{
|
|
'OwnerName' = (Get-PiiSafeString -PlainText $OwnerName)
|
|
'RepositoryName' = (Get-PiiSafeString -PlainText $RepositoryName)
|
|
}
|
|
|
|
# Be robust to users who choose to provide a color in hex by specifying the leading # sign
|
|
# (by just stripping it out).
|
|
if ($Color.StartsWith('#'))
|
|
{
|
|
$Color = $Color.Substring(1)
|
|
}
|
|
|
|
$hashBody = @{}
|
|
if ($PSBoundParameters.ContainsKey('NewName')) { $hashBody['name'] = $NewName }
|
|
if ($PSBoundParameters.ContainsKey('Description')) { $hashBody['description'] = $Description }
|
|
if ($PSBoundParameters.ContainsKey('Color')) { $hashBody['color'] = $Color }
|
|
|
|
if (-not $PSCmdlet.ShouldProcess($Label, 'Update GitHub Label'))
|
|
{
|
|
return
|
|
}
|
|
|
|
$params = @{
|
|
'UriFragment' = "repos/$OwnerName/$RepositoryName/labels/$Label"
|
|
'Body' = (ConvertTo-Json -InputObject $hashBody)
|
|
'Method' = 'Patch'
|
|
'Description' = "Updating label $Label"
|
|
'AcceptHeader' = $script:symmetraAcceptHeader
|
|
'AccessToken' = $AccessToken
|
|
'TelemetryEventName' = $MyInvocation.MyCommand.Name
|
|
'TelemetryProperties' = $telemetryProperties
|
|
}
|
|
|
|
return (Invoke-GHRestMethod @params | Add-GitHubLabelAdditionalProperties)
|
|
}
|
|
|
|
filter Initialize-GitHubLabel
|
|
{
|
|
<#
|
|
.SYNOPSIS
|
|
Replaces the entire set of Labels on the given GitHub repository to match the provided list
|
|
of Labels.
|
|
|
|
.DESCRIPTION
|
|
Replaces the entire set of Labels on the given GitHub repository to match the provided list
|
|
of Labels.
|
|
|
|
Will update the color/description for any Labels already in the repository that match the
|
|
name of a Label in the provided list. All other existing Labels will be removed, and then
|
|
new Labels will be created to match the others in the Label list.
|
|
|
|
The Git repo for this module can be found here: http://aka.ms/PowerShellForGitHub
|
|
|
|
.PARAMETER OwnerName
|
|
Owner of the repository.
|
|
If not supplied here, the DefaultOwnerName configuration property value will be used.
|
|
|
|
.PARAMETER RepositoryName
|
|
Name of the repository.
|
|
If not supplied here, the DefaultRepositoryName configuration property value will be used.
|
|
|
|
.PARAMETER Uri
|
|
Uri for the repository.
|
|
The OwnerName and RepositoryName will be extracted from here instead of needing to provide
|
|
them individually.
|
|
|
|
.PARAMETER Label
|
|
The array of Labels (name, color, description) that the repository should be aligning to.
|
|
A default list of labels will be used if no Labels are provided.
|
|
|
|
.PARAMETER AccessToken
|
|
If provided, this will be used as the AccessToken for authentication with the
|
|
REST Api. Otherwise, will attempt to use the configured value or will run unauthenticated.
|
|
|
|
.INPUTS
|
|
GitHub.Branch
|
|
GitHub.Content
|
|
GitHub.Event
|
|
GitHub.Issue
|
|
GitHub.IssueComment
|
|
GitHub.Label
|
|
GitHub.Milestone
|
|
GitHub.PullRequest
|
|
GitHub.Project
|
|
GitHub.ProjectCard
|
|
GitHub.ProjectColumn
|
|
GitHub.Reaction
|
|
GitHub.Release
|
|
GitHub.ReleaseAsset
|
|
GitHub.Repository
|
|
|
|
.EXAMPLE
|
|
Initialize-GitHubLabel -OwnerName microsoft -RepositoryName PowerShellForGitHub -Label @(@{'name' = 'TestLabel'; 'color' = 'EEEEEE'}, @{'name' = 'critical'; 'color' = 'FF000000'; 'description' = 'Needs immediate attention'})
|
|
|
|
Removes any labels not in this Label array, ensure the current assigned color and descriptions
|
|
match what's in the array for the labels that do already exist, and then creates new labels
|
|
for any remaining ones in the Label list.
|
|
|
|
.NOTES
|
|
This method does not rename any existing labels, as it doesn't have any context regarding
|
|
which Label the new name is for. Therefore, it is possible that by running this function
|
|
on a repository with Issues that have already been assigned Labels, you may experience data
|
|
loss as a minor correction to you (maybe fixing a typo) will result in the old Label being
|
|
removed (and thus unassigned from existing Issues) and then the new one created.
|
|
#>
|
|
[CmdletBinding(
|
|
SupportsShouldProcess,
|
|
DefaultParameterSetName='Elements')]
|
|
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSReviewUnusedParameter", "", Justification="The Uri parameter is only referenced by Resolve-RepositoryElements which get access to it from the stack via Get-Variable -Scope 1.")]
|
|
param(
|
|
[Parameter(ParameterSetName='Elements')]
|
|
[string] $OwnerName,
|
|
|
|
[Parameter(ParameterSetName='Elements')]
|
|
[string] $RepositoryName,
|
|
|
|
[Parameter(
|
|
Mandatory,
|
|
ValueFromPipelineByPropertyName,
|
|
ParameterSetName='Uri')]
|
|
[Alias('RepositoryUrl')]
|
|
[string] $Uri,
|
|
|
|
[Parameter(ValueFromPipelineByPropertyName)]
|
|
[object[]] $Label,
|
|
|
|
[string] $AccessToken
|
|
)
|
|
|
|
Write-InvocationLog
|
|
|
|
if (($null -eq $Label) -or ($Label.Count -eq 0))
|
|
{
|
|
$Label = $script:defaultGitHubLabels
|
|
}
|
|
|
|
$elements = Resolve-RepositoryElements
|
|
$OwnerName = $elements.ownerName
|
|
$RepositoryName = $elements.repositoryName
|
|
|
|
$commonParams = @{
|
|
'OwnerName' = $OwnerName
|
|
'RepositoryName' = $RepositoryName
|
|
'AccessToken' = $AccessToken
|
|
}
|
|
|
|
$labelNames = $Label.name
|
|
$existingLabels = Get-GitHubLabel @commonParams
|
|
$existingLabelNames = $existingLabels.name
|
|
|
|
if (-not $PSCmdlet.ShouldProcess(($Label -join ', '), 'Set GitHub Label'))
|
|
{
|
|
return
|
|
}
|
|
|
|
foreach ($labelToConfigure in $Label)
|
|
{
|
|
if ($labelToConfigure.name -notin $existingLabelNames)
|
|
{
|
|
# Create label if it doesn't exist
|
|
$newGitHubLabelParms = @{
|
|
Label = $labelToConfigure.name
|
|
Color = $labelToConfigure.color
|
|
Confirm = $false
|
|
WhatIf = $false
|
|
}
|
|
|
|
$null = New-GitHubLabel @newGitHubLabelParms @commonParams
|
|
}
|
|
else
|
|
{
|
|
# Update label's color if it already exists
|
|
$setGitHubLabelParms = @{
|
|
Label = $labelToConfigure.name
|
|
NewName = $labelToConfigure.name
|
|
Color = $labelToConfigure.color
|
|
Confirm = $false
|
|
WhatIf = $false
|
|
}
|
|
|
|
$null = Set-GitHubLabel @setGitHubLabelParms @commonParams
|
|
}
|
|
}
|
|
|
|
foreach ($labelName in $existingLabelNames)
|
|
{
|
|
if ($labelName -notin $labelNames)
|
|
{
|
|
# Remove label if it exists but is not in desired label list
|
|
$removeGitHubLabelParms = @{
|
|
Label = $labelName
|
|
Confirm = $false
|
|
WhatIf = $false
|
|
}
|
|
|
|
$null = Remove-GitHubLabel @removeGitHubLabelParms @commonParams
|
|
}
|
|
}
|
|
}
|
|
|
|
function Add-GitHubIssueLabel
|
|
{
|
|
<#
|
|
.DESCRIPTION
|
|
Adds a label to an issue in the given GitHub repository.
|
|
|
|
The Git repo for this module can be found here: http://aka.ms/PowerShellForGitHub
|
|
|
|
.PARAMETER OwnerName
|
|
Owner of the repository.
|
|
If not supplied here, the DefaultOwnerName configuration property value will be used.
|
|
|
|
.PARAMETER RepositoryName
|
|
Name of the repository.
|
|
If not supplied here, the DefaultRepositoryName configuration property value will be used.
|
|
|
|
.PARAMETER Uri
|
|
Uri for the repository.
|
|
The OwnerName and RepositoryName will be extracted from here instead of needing to provide
|
|
them individually.
|
|
|
|
.PARAMETER Issue
|
|
Issue number to add the label to.
|
|
|
|
.PARAMETER Label
|
|
Array of label names to add to the issue
|
|
|
|
.PARAMETER AccessToken
|
|
If provided, this will be used as the AccessToken for authentication with the
|
|
REST Api. Otherwise, will attempt to use the configured value or will run unauthenticated.
|
|
|
|
.INPUTS
|
|
GitHub.Branch
|
|
GitHub.Content
|
|
GitHub.Event
|
|
GitHub.Issue
|
|
GitHub.IssueComment
|
|
GitHub.Label
|
|
GitHub.Milestone
|
|
GitHub.PullRequest
|
|
GitHub.Project
|
|
GitHub.ProjectCard
|
|
GitHub.ProjectColumn
|
|
GitHub.Reaction
|
|
GitHub.Release
|
|
GitHub.ReleaseAsset
|
|
GitHub.Repository
|
|
|
|
.OUTPUTS
|
|
GitHub.Label
|
|
|
|
.EXAMPLE
|
|
Add-GitHubIssueLabel -OwnerName microsoft -RepositoryName PowerShellForGitHub -Issue 1 -Label $labels
|
|
|
|
Adds labels to an issue in the PowerShellForGitHub project.
|
|
|
|
.NOTES
|
|
This is implemented as a function rather than a filter because the ValueFromPipeline
|
|
parameter (Name) is itself an array which we want to ensure is processed only a single time.
|
|
This API endpoint doesn't add labels to a repository, it replaces the existing labels with
|
|
the new set provided, so we need to make sure that we have all the requested labels available
|
|
to us at the time that the API endpoint is called.
|
|
#>
|
|
[CmdletBinding(
|
|
SupportsShouldProcess,
|
|
DefaultParameterSetName='Elements')]
|
|
[OutputType({$script:GitHubLabelTypeName})]
|
|
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSReviewUnusedParameter", "", Justification="The Uri parameter is only referenced by Resolve-RepositoryElements which get access to it from the stack via Get-Variable -Scope 1.")]
|
|
param(
|
|
[Parameter(
|
|
Mandatory,
|
|
ParameterSetName='Elements')]
|
|
[string] $OwnerName,
|
|
|
|
[Parameter(
|
|
Mandatory,
|
|
ParameterSetName='Elements')]
|
|
[string] $RepositoryName,
|
|
|
|
[Parameter(
|
|
Mandatory,
|
|
ValueFromPipelineByPropertyName,
|
|
ParameterSetName='Uri')]
|
|
[Alias('RepositoryUrl')]
|
|
[string] $Uri,
|
|
|
|
[Parameter(
|
|
Mandatory,
|
|
ValueFromPipelineByPropertyName)]
|
|
[Alias('IssueNumber')]
|
|
[int64] $Issue,
|
|
|
|
[Parameter(
|
|
Mandatory,
|
|
ValueFromPipeline,
|
|
ValueFromPipelineByPropertyName)]
|
|
[Alias('LabelName')]
|
|
[ValidateNotNullOrEmpty()]
|
|
[string[]] $Label,
|
|
|
|
[string] $AccessToken
|
|
)
|
|
|
|
begin
|
|
{
|
|
$labelNames = @()
|
|
}
|
|
|
|
process
|
|
{
|
|
foreach ($name in $Label)
|
|
{
|
|
$labelNames += $name
|
|
}
|
|
}
|
|
|
|
end
|
|
{
|
|
Write-InvocationLog
|
|
|
|
$elements = Resolve-RepositoryElements
|
|
$OwnerName = $elements.ownerName
|
|
$RepositoryName = $elements.repositoryName
|
|
|
|
$telemetryProperties = @{
|
|
'OwnerName' = (Get-PiiSafeString -PlainText $OwnerName)
|
|
'RepositoryName' = (Get-PiiSafeString -PlainText $RepositoryName)
|
|
'LabelCount' = $Label.Count
|
|
}
|
|
|
|
$hashBody = @{
|
|
'labels' = $labelNames
|
|
}
|
|
|
|
if (-not $PSCmdlet.ShouldProcess(($Label -join ', '), 'Add GitHub Issue Label'))
|
|
{
|
|
return
|
|
}
|
|
|
|
$params = @{
|
|
'UriFragment' = "repos/$OwnerName/$RepositoryName/issues/$Issue/labels"
|
|
'Body' = (ConvertTo-Json -InputObject $hashBody)
|
|
'Method' = 'Post'
|
|
'Description' = "Adding labels to issue $Issue in $RepositoryName"
|
|
'AcceptHeader' = $script:symmetraAcceptHeader
|
|
'AccessToken' = $AccessToken
|
|
'TelemetryEventName' = $MyInvocation.MyCommand.Name
|
|
'TelemetryProperties' = $telemetryProperties
|
|
}
|
|
|
|
return (Invoke-GHRestMethod @params | Add-GitHubLabelAdditionalProperties)
|
|
}
|
|
}
|
|
|
|
function Set-GitHubIssueLabel
|
|
{
|
|
<#
|
|
.DESCRIPTION
|
|
Replaces labels on an issue in the given GitHub repository.
|
|
|
|
The Git repo for this module can be found here: http://aka.ms/PowerShellForGitHub
|
|
|
|
.PARAMETER OwnerName
|
|
Owner of the repository.
|
|
If not supplied here, the DefaultOwnerName configuration property value will be used.
|
|
|
|
.PARAMETER RepositoryName
|
|
Name of the repository.
|
|
If not supplied here, the DefaultRepositoryName configuration property value will be used.
|
|
|
|
.PARAMETER Uri
|
|
Uri for the repository.
|
|
The OwnerName and RepositoryName will be extracted from here instead of needing to provide
|
|
them individually.
|
|
|
|
.PARAMETER Issue
|
|
Issue number to replace the labels.
|
|
|
|
.PARAMETER Label
|
|
Array of label names that will be set on the issue.
|
|
|
|
.PARAMETER Force
|
|
If this switch is specified, you will not be prompted for confirmation of command execution.
|
|
|
|
.PARAMETER AccessToken
|
|
If provided, this will be used as the AccessToken for authentication with the
|
|
REST Api. Otherwise, will attempt to use the configured value or will run unauthenticated.
|
|
|
|
.INPUTS
|
|
GitHub.Branch
|
|
GitHub.Content
|
|
GitHub.Event
|
|
GitHub.Issue
|
|
GitHub.IssueComment
|
|
GitHub.Label
|
|
GitHub.Milestone
|
|
GitHub.PullRequest
|
|
GitHub.Project
|
|
GitHub.ProjectCard
|
|
GitHub.ProjectColumn
|
|
GitHub.Reaction
|
|
GitHub.Release
|
|
GitHub.ReleaseAsset
|
|
GitHub.Repository
|
|
|
|
.OUTPUTS
|
|
GitHub.Label
|
|
|
|
.EXAMPLE
|
|
Set-GitHubIssueLabel -OwnerName microsoft -RepositoryName PowerShellForGitHub -Issue 1 -Label $labels
|
|
|
|
Replaces labels on an issue in the PowerShellForGitHub project.
|
|
|
|
.EXAMPLE
|
|
('help wanted', 'good first issue') | Set-GitHubIssueLabel -OwnerName microsoft -RepositoryName PowerShellForGitHub -Issue 1
|
|
|
|
Replaces labels on an issue in the PowerShellForGitHub project
|
|
with 'help wanted' and 'good first issue'.
|
|
|
|
.EXAMPLE
|
|
Set-GitHubIssueLabel -OwnerName microsoft -RepositoryName PowerShellForGitHub -Issue 1 -Confirm:$false
|
|
|
|
Removes all labels from issue 1 in the PowerShellForGitHub project.
|
|
Will not prompt for confirmation, as -Confirm:$false was specified.
|
|
|
|
This is the same result as having called
|
|
Remove-GitHubIssueLabel -OwnerName microsoft -RepositoryName PowerShellForGitHub -Issue 1 -Confirm:$false
|
|
|
|
.EXAMPLE
|
|
Set-GitHubIssueLabel -OwnerName microsoft -RepositoryName PowerShellForGitHub -Issue 1 -Force
|
|
|
|
Removes all labels from issue 1 in the PowerShellForGitHub project.
|
|
Will not prompt for confirmation, as -Force was specified.
|
|
|
|
This is the same result as having called
|
|
Remove-GitHubIssueLabel -OwnerName microsoft -RepositoryName PowerShellForGitHub -Issue 1 -Force
|
|
|
|
.NOTES
|
|
This is implemented as a function rather than a filter because the ValueFromPipeline
|
|
parameter (Name) is itself an array which we want to ensure is processed only a single time.
|
|
This API endpoint doesn't add labels to a repository, it replaces the existing labels with
|
|
the new set provided, so we need to make sure that we have all the requested labels available
|
|
to us at the time that the API endpoint is called.
|
|
#>
|
|
[CmdletBinding(
|
|
SupportsShouldProcess,
|
|
DefaultParameterSetName = 'Elements')]
|
|
[OutputType({$script:GitHubLabelTypeName})]
|
|
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSReviewUnusedParameter", "", Justification="The Uri parameter is only referenced by Resolve-RepositoryElements which get access to it from the stack via Get-Variable -Scope 1.")]
|
|
param(
|
|
[Parameter(ParameterSetName='Elements')]
|
|
[string] $OwnerName,
|
|
|
|
[Parameter(ParameterSetName='Elements')]
|
|
[string] $RepositoryName,
|
|
|
|
[Parameter(
|
|
Mandatory,
|
|
ValueFromPipelineByPropertyName,
|
|
ParameterSetName='Uri')]
|
|
[Alias('RepositoryUrl')]
|
|
[string] $Uri,
|
|
|
|
[Parameter(
|
|
Mandatory,
|
|
ValueFromPipelineByPropertyName)]
|
|
[Alias('IssueNumber')]
|
|
[int64] $Issue,
|
|
|
|
[Parameter(ValueFromPipelineByPropertyName)]
|
|
[Alias('LabelName')]
|
|
[string[]] $Label,
|
|
|
|
[switch] $Force,
|
|
|
|
[string] $AccessToken
|
|
)
|
|
|
|
begin
|
|
{
|
|
$labelNames = @()
|
|
}
|
|
|
|
process
|
|
{
|
|
foreach ($name in $Label)
|
|
{
|
|
$labelNames += $name
|
|
}
|
|
}
|
|
|
|
end
|
|
{
|
|
Write-InvocationLog
|
|
|
|
$elements = Resolve-RepositoryElements
|
|
$OwnerName = $elements.ownerName
|
|
$RepositoryName = $elements.repositoryName
|
|
|
|
$telemetryProperties = @{
|
|
'OwnerName' = (Get-PiiSafeString -PlainText $OwnerName)
|
|
'RepositoryName' = (Get-PiiSafeString -PlainText $RepositoryName)
|
|
'LabelCount' = $Label.Count
|
|
}
|
|
|
|
$hashBody = @{
|
|
'labels' = $labelNames
|
|
}
|
|
|
|
$shouldProcessMessage = "Set GitHub Issue Label(s) $($Label -join ', ')"
|
|
|
|
if ([System.String]::IsNullOrEmpty($Label))
|
|
{
|
|
$ConfirmPreference = 'Low'
|
|
$shouldProcessMessage = 'Remove all GitHub Issue Labels'
|
|
}
|
|
|
|
if ($Force -and (-not $Confirm))
|
|
{
|
|
$ConfirmPreference = 'None'
|
|
}
|
|
|
|
if (-not $PSCmdlet.ShouldProcess("Issue #$Issue", $shouldProcessMessage))
|
|
{
|
|
return
|
|
}
|
|
|
|
$params = @{
|
|
'UriFragment' = "repos/$OwnerName/$RepositoryName/issues/$Issue/labels"
|
|
'Body' = (ConvertTo-Json -InputObject $hashBody)
|
|
'Method' = 'Put'
|
|
'Description' = "Replacing labels to issue $Issue in $RepositoryName"
|
|
'AcceptHeader' = $script:symmetraAcceptHeader
|
|
'AccessToken' = $AccessToken
|
|
'TelemetryEventName' = $MyInvocation.MyCommand.Name
|
|
'TelemetryProperties' = $telemetryProperties
|
|
}
|
|
|
|
return (Invoke-GHRestMethod @params | Add-GitHubLabelAdditionalProperties)
|
|
}
|
|
}
|
|
|
|
filter Remove-GitHubIssueLabel
|
|
{
|
|
<#
|
|
.DESCRIPTION
|
|
Deletes a label from an issue in the given GitHub repository.
|
|
|
|
The Git repo for this module can be found here: http://aka.ms/PowerShellForGitHub
|
|
|
|
.PARAMETER OwnerName
|
|
Owner of the repository.
|
|
If not supplied here, the DefaultOwnerName configuration property value will be used.
|
|
|
|
.PARAMETER RepositoryName
|
|
Name of the repository.
|
|
If not supplied here, the DefaultRepositoryName configuration property value will be used.
|
|
|
|
.PARAMETER Uri
|
|
Uri for the repository.
|
|
The OwnerName and RepositoryName will be extracted from here instead of needing to provide
|
|
them individually.
|
|
|
|
.PARAMETER Issue
|
|
Issue number to remove the label from.
|
|
|
|
.PARAMETER Label
|
|
Name of the label to be deleted. If not provided, will delete all labels on the issue.
|
|
Emoji and codes are supported.
|
|
For more information, see here: https://www.webpagefx.com/tools/emoji-cheat-sheet/
|
|
|
|
.PARAMETER Force
|
|
If this switch is specified, you will not be prompted for confirmation of command execution.
|
|
|
|
.PARAMETER AccessToken
|
|
If provided, this will be used as the AccessToken for authentication with the
|
|
REST Api. Otherwise, will attempt to use the configured value or will run unauthenticated.
|
|
|
|
.INPUTS
|
|
GitHub.Branch
|
|
GitHub.Content
|
|
GitHub.Event
|
|
GitHub.Issue
|
|
GitHub.IssueComment
|
|
GitHub.Label
|
|
GitHub.Milestone
|
|
GitHub.PullRequest
|
|
GitHub.Project
|
|
GitHub.ProjectCard
|
|
GitHub.ProjectColumn
|
|
GitHub.Reaction
|
|
GitHub.Release
|
|
GitHub.ReleaseAsset
|
|
GitHub.Repository
|
|
|
|
.EXAMPLE
|
|
Remove-GitHubIssueLabel -OwnerName microsoft -RepositoryName PowerShellForGitHub -Label TestLabel -Issue 1
|
|
|
|
Removes the label called "TestLabel" from issue 1 in the PowerShellForGitHub project.
|
|
|
|
.EXAMPLE
|
|
Remove-GitHubIssueLabel -OwnerName microsoft -RepositoryName PowerShellForGitHub -Label TestLabel -Issue 1 -Confirm:$false
|
|
|
|
Removes the label called "TestLabel" from issue 1 in the PowerShellForGitHub project.
|
|
Will not prompt for confirmation, as -Confirm:$false was specified.
|
|
|
|
.EXAMPLE
|
|
Remove-GitHubIssueLabel -OwnerName microsoft -RepositoryName PowerShellForGitHub -Label TestLabel -Issue 1 -Force
|
|
|
|
Removes the label called "TestLabel" from issue 1 in the PowerShellForGitHub project.
|
|
Will not prompt for confirmation, as -Force was specified.
|
|
#>
|
|
[CmdletBinding(
|
|
SupportsShouldProcess,
|
|
DefaultParameterSetName='Elements',
|
|
ConfirmImpact="High")]
|
|
[Alias('Delete-GitHubLabel')]
|
|
param(
|
|
[Parameter(
|
|
Mandatory,
|
|
ParameterSetName='Elements')]
|
|
[string] $OwnerName,
|
|
|
|
[Parameter(
|
|
Mandatory,
|
|
ParameterSetName='Elements')]
|
|
[string] $RepositoryName,
|
|
|
|
[Parameter(
|
|
Mandatory,
|
|
ValueFromPipelineByPropertyName,
|
|
ParameterSetName='Uri')]
|
|
[Alias('RepositoryUrl')]
|
|
[string] $Uri,
|
|
|
|
[Parameter(
|
|
Mandatory,
|
|
ValueFromPipelineByPropertyName)]
|
|
[Alias('IssueNumber')]
|
|
[int64] $Issue,
|
|
|
|
[Parameter(ValueFromPipelineByPropertyName)]
|
|
[ValidateNotNullOrEmpty()]
|
|
[Alias('LabelName')]
|
|
[string] $Label,
|
|
|
|
[switch] $Force,
|
|
|
|
[string] $AccessToken
|
|
)
|
|
|
|
Write-InvocationLog
|
|
|
|
$elements = Resolve-RepositoryElements
|
|
$OwnerName = $elements.ownerName
|
|
$RepositoryName = $elements.repositoryName
|
|
|
|
$telemetryProperties = @{
|
|
'OwnerName' = (Get-PiiSafeString -PlainText $OwnerName)
|
|
'RepositoryName' = (Get-PiiSafeString -PlainText $RepositoryName)
|
|
}
|
|
|
|
$description = [String]::Empty
|
|
if ($PSBoundParameters.ContainsKey('Label'))
|
|
{
|
|
$description = "Deleting label $Label from issue $Issue in $RepositoryName"
|
|
}
|
|
else
|
|
{
|
|
$description = "Deleting all labels from issue $Issue in $RepositoryName"
|
|
}
|
|
|
|
if ($Force -and (-not $Confirm))
|
|
{
|
|
$ConfirmPreference = 'None'
|
|
}
|
|
|
|
if (-not $PSCmdlet.ShouldProcess($Label, 'Remove GitHub Issue label'))
|
|
{
|
|
return
|
|
}
|
|
|
|
$params = @{
|
|
'UriFragment' = "/repos/$OwnerName/$RepositoryName/issues/$Issue/labels/$Label"
|
|
'Method' = 'Delete'
|
|
'Description' = $description
|
|
'AcceptHeader' = $script:symmetraAcceptHeader
|
|
'AccessToken' = $AccessToken
|
|
'TelemetryEventName' = $MyInvocation.MyCommand.Name
|
|
'TelemetryProperties' = $telemetryProperties
|
|
}
|
|
|
|
return Invoke-GHRestMethod @params
|
|
}
|
|
|
|
filter Add-GitHubLabelAdditionalProperties
|
|
{
|
|
<#
|
|
.SYNOPSIS
|
|
Adds type name and additional properties to ease pipelining to GitHub Label objects.
|
|
|
|
.PARAMETER InputObject
|
|
The GitHub object to add additional properties to.
|
|
|
|
.PARAMETER TypeName
|
|
The type that should be assigned to the object.
|
|
|
|
.INPUTS
|
|
[PSCustomObject]
|
|
|
|
.OUTPUTS
|
|
GitHub.Label
|
|
#>
|
|
[CmdletBinding()]
|
|
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseSingularNouns", "", Justification="Internal helper that is definitely adding more than one property.")]
|
|
param(
|
|
[Parameter(
|
|
Mandatory,
|
|
ValueFromPipeline)]
|
|
[AllowNull()]
|
|
[AllowEmptyCollection()]
|
|
[PSCustomObject[]] $InputObject,
|
|
|
|
[ValidateNotNullOrEmpty()]
|
|
[string] $TypeName = $script:GitHubLabelTypeName
|
|
)
|
|
|
|
foreach ($item in $InputObject)
|
|
{
|
|
$item.PSObject.TypeNames.Insert(0, $TypeName)
|
|
|
|
if (-not (Get-GitHubConfiguration -Name DisablePipelineSupport))
|
|
{
|
|
$elements = Split-GitHubUri -Uri $item.url
|
|
$repositoryUrl = Join-GitHubUri @elements
|
|
Add-Member -InputObject $item -Name 'RepositoryUrl' -Value $repositoryUrl -MemberType NoteProperty -Force
|
|
|
|
if ($null -ne $item.id)
|
|
{
|
|
Add-Member -InputObject $item -Name 'LabelId' -Value $item.id -MemberType NoteProperty -Force
|
|
}
|
|
|
|
Add-Member -InputObject $item -Name 'LabelName' -Value $item.name -MemberType NoteProperty -Force
|
|
}
|
|
|
|
Write-Output $item
|
|
}
|
|
}
|
|
|
|
# A set of labels that a project might want to initially populate their repository with
|
|
# Used by Set-GitHubLabel when no Label list is provided by the user.
|
|
# This list exists to support v0.1.0 users.
|
|
$script:defaultGitHubLabels = @(
|
|
@{
|
|
'name' = 'pri:lowest'
|
|
'color' = '4285F4'
|
|
},
|
|
@{
|
|
'name' = 'pri:low'
|
|
'color' = '4285F4'
|
|
},
|
|
@{
|
|
'name' = 'pri:medium'
|
|
'color' = '4285F4'
|
|
},
|
|
@{
|
|
'name' = 'pri:high'
|
|
'color' = '4285F4'
|
|
},
|
|
@{
|
|
'name' = 'pri:highest'
|
|
'color' = '4285F4'
|
|
},
|
|
@{
|
|
'name' = 'bug'
|
|
'color' = 'fc2929'
|
|
},
|
|
@{
|
|
'name' = 'duplicate'
|
|
'color' = 'cccccc'
|
|
},
|
|
@{
|
|
'name' = 'enhancement'
|
|
'color' = '121459'
|
|
},
|
|
@{
|
|
'name' = 'up for grabs'
|
|
'color' = '159818'
|
|
},
|
|
@{
|
|
'name' = 'question'
|
|
'color' = 'cc317c'
|
|
},
|
|
@{
|
|
'name' = 'discussion'
|
|
'color' = 'fe9a3d'
|
|
},
|
|
@{
|
|
'name' = 'wontfix'
|
|
'color' = 'dcb39c'
|
|
},
|
|
@{
|
|
'name' = 'in progress'
|
|
'color' = 'f0d218'
|
|
},
|
|
@{
|
|
'name' = 'ready'
|
|
'color' = '145912'
|
|
}
|
|
)
|