Skip to content

v0.15.0 Release of PowerShellForGitHub

Latest
Compare
Choose a tag to compare
@HowardWolosky HowardWolosky released this 18 Aug 17:31
· 51 commits to master since this release
db5d33e

v0.15.0 - (2020/08/16)

Overview:

This is a significant update that has a number of breaking changes amongst its payload that
existing users need to be made aware of.

Highlights:

  • Complete pipeline support has been added to the module. You can now pipe the output of almost
    any command as input to almost any command. Every command output now has a specific GitHub.*
    type that is queryable as well.

  • Major performance increase. It turns out that showing animated status would make an operation
    take 3 seconds that would otherwise take 1/4 second due to performance issues with ProgressBar.
    We no longer show status except for commands that 10+ pages of results which we must query for,
    and that minimum can be changed with a new configuration property: multiRequestProgressThreshold
    (set it to 0 to never see any progress).

  • Lots of new functionality added:

    • Full support for gists: Get-GitHubGist, Remove-GitHubGist,
      Copy-GitHubGist (aka Fork-GitHubGist), Add-GitHubGistStar, Remove-GitHubGistStar,
      Set-GitHubGistStar, Test-GitHubGistStar, New-GitHubGist, Set-GitHubGist,
      Rename-GitHubGistFile, Remove-GitHubGistFile, Set-GitHubGistFile (akaAdd-GitHubGistFile),
      Get-GitHubGistComment, Set-GitHubGistComment, New-GitHubGistComment,
      Remove-GitHubGistComment

    • Full support for Releases:
      New-GitHubRelease, Set-GitHubRelease, Remove-GitHubRelease, Get-GitHubReleaseAsset,
      New-GitHubReleaseAsset, Set-GitHubReleaseAsset, Remove-GitHubReleaseAsset

    • Improved support for Teams:
      New-GitHubTeam, Set-GitHubTeam, Remove-GitHubTeam, Rename-GitHubTeam

    • Dependabot support: Test-GitHubRepositoryVulnerabilityAlert,
      Enable-GitHubRepositoryVulnerabilityAlert, Disable-GitHubRepositoryVulnerabilityAlert,
      Enable-GitHubRepositorySecurityFix, Disable-GitHubRepositorySecurityFix

    • New Repository-related commands:
      New-GitHubRepositoryFromTemplate, Set-GitHubContent, New-GitHubRepositoryBranch,
      Remove-GitHubRepositoryBranch, Get-GitHubRepositoryBranchProtectionRule,
      New-GitHubRepositoryBranchProtectionRule, Remove-GitHubRepositoryBranchProtectionRule

    • New Reaction support added for issues and pull requests:
      Get-GitHubReaction, Set-GitHubReaction, Remove-GitHubReaction

  • Default formatters have been added for many (but not yet all) of the types introduced by this
    module. Formatter support will be increased over the coming releases.

  • No longer has any external dependencies. Previously had to download .NET
    assemblies in order to send telemetry, which made the initial commands
    take up much more time than needed. With no eternal dependencies involved
    anymore, telemetry is lightning-fast with negligible impact to normal
    command execution.

Breaking Changes

Standardized naming (and verb usage) throughout the module

  • A number of commands have been renamed to follow the pattern that we're standardizing on:
    Get / Set / New / Remove
    (but we will continue to alias Remove-* as Delete-*).

    • That resulted in the following command renames:
      • Get-GitHubComment -> Get-GitHubIssueComment [Alias('Get-GitHubComment)]
      • New-GitHubAssignee -> Add-GitHubAssignee [Alias('New-GitHubAssignee')]
      • New-GitHubComment -> New-GitHubIssueComment [Alias('New-GitHubComment)]
      • Remove-GitHubComment -> Remove-GitHubIssueComment [Alias('Remove-GitHubComment)]
      • Set-GitHubLabel -> Initialize-GitHubLabel [breaking behavior due to the Update-GitHubLabel change below]`
      • Update-GitHubCurrentUser -> Set-GitHubProfile [Alias('Update-GitHubCurrentUser')]
      • Update-GitHubIssue -> Set-GitHubIssue [Alias('Update-GitHubIssue')]
      • Update-GitHubLabel -> Set-GitHubLabel [Alias('Update-GitHubLabel')]
        [breaking behavior since Set-GitHubLabel used to do something else]
      • Update-GitHubRepository -> Set-GitHubRepository [Alias('Update-GitHubRepository')]
  • The following parameter renames occurred as well:

    • Add-GitHubIssueLabel: Name -> Label
    • Get-GitHubCodeOfConduct: Name -> Key
    • Get-GitHubProjectCard: ArchivedState -> State (although we kept an alias for ArchivedState)
    • Get-GitHubLabel: Name -> Label, Milestone -> MilestoneNumber
    • Get-GitHubLicense: Name -> Key
    • Get-GitHubRelease: ReleaseId -> Release (although we kept an alias for ReleaseId)
    • Get-GitHubRepositoryBranch: Name -> BranchName
    • Get-GitHubUser: User -> UserName (although we kept an alias for User)
    • Get-GitHubUserContextualInformation: There is no longer SubjectId and Subject.
      Instead you either specify OrganizationId, RepositoryId, IssueId or PullRequestId.
    • Move-GitHubProjectCard: ColumnId -> Column (although we kept an alias for ColumnId)
    • New-GitHubLabel: Name -> Label
    • New-GitHubProject: Name -> ProjectName (although we kept an alias for Name)
    • New-GitHubProjectCard: There is no longer ContentId and ContentType.
      Instead you either specify IssueId or PullRequestId.
    • New-GitHubProjectColumn: Name -> ColumnName (although we kept an alias for Name)
    • Remove-GitHubIssueLabel: Name -> Label
    • Remove-GitHubLabel: Name -> Label
    • Rename-GitHubRepository: html_url alias for Uri has been removed
    • Set-GitHubIssueLabel: Name -> Label
    • Set-GitHubLabel (formerly Update-GitHubLabel): Name -> Label
    • Set-GitHubProjectColumn: Name -> ColumnName (although we kept an alias for Name)
    • Set-GitHubRepositoryTopic: Name -> Topic (although we kept an alias for Name)

Other breaking changes

  • All Remove-* functions (and some Rename-*/Set-* functions) now prompt for confirmation before
    performing the requested action. This can be silently bypassed by passing-in -Confirm:$false
    or -Force.

    • Affected commands that existed in previous releases:
      • Remove-GitHubAssignee
      • Remove-GitHubIssueComment (formerly named Remove-GitHubComment)
      • Remove-GitHubIssueLabel
      • Remove-GitHubLabel
      • Remove-GitHubMilestone
      • Remove-GitHubProject
      • Remove-GitHubProjectCard
      • Remove-GitHubProjectColumn
      • Remove-GitHubRepository
      • Rename-GitHubRepository
      • Set-GitHubLabel (formerly named Update-GitHubLabel)
      • Set-GitHubRepository (only affected when being used to rename the repository)
  • Some parameters have had their type updated:

    • Comment: [string] -> [int64]
    • Issue/IssueNumber: [string]/[int] -> [int64]
    • Milestone/MilestoneNumber: [string] -> [int64]
    • PullRequest/PullRequestNumber: [string]/[int] -> [int64]
    • Release/ReleaseId: [string] -> [int64]
  • WhatIf support changes:

    • Only GitHub state-changing commands now support -WhatIf (which means Get-GitHub* and
      Test-GitHub* no longer support -WhatIf).
    • All other -WhatIf-supporting commands will only have a single -WhatIf output.
  • The NoStatus parameter has been removed from all functions due to the change in status behavior
    as descried above. The DefaultNoStatus configuration value has also been removed for the same
    reason.

  • All state-changing functions are now silent by default (no resulting output). If you want them
    to return the result, you can pass in -PassThru, which is a PowerShell standard design pattern.
    To truly get back to previous module behavior, you can set the new configuration property:
    DefaultPassThru.

  • Get-GitHubTeam and Get-GitHubTeamMember no longer support the TeamId parameter, as that
    functionality has been deprecated by GitHub. You can use TeamSlug instead.

Features:

  • Complete pipeline support has been added to the module. You can now pipe the output of almost
    any command as input to almost any command. Every command output now has a specific GitHub.*
    type that is queryable as well.
    [pr] | [cl]

  • All removal functions (and some rename functions) now prompt for confirmation. This can be silently
    disabled with -Confirm:$false. A later change will add support for using -Force as well.
    [pr] | [cl]

  • All commands that require confirmation now accept -Force in addition to -Confirm:$false.
    [pr] | [cl]

  • Telemetry no longer has any external dependencies. We used to have to download .NET assemblies
    in order to send telemetry, and the downloading of those binaries took up time. Telemetry
    reporting has now been completely implemented within PowerShell, removing all external dependencies.
    [pr] | [cl]

  • Added additional options to Update-GitHubRepository (later renamed to Set-GitHubRepository):
    DeleteBranchOnMerge and IsTemplate
    [pr] | [cl]

  • Added Dependabot service functions: Test-GitHubRepositoryVulnerabilityAlert,
    Enable-GitHubRepositoryVulnerabilityAlert, Disable-GitHubRepositoryVulnerabilityAlert,
    Enable-GitHubRepositorySecurityFix, Disable-GitHubRepositorySecurityFix
    [pr] | [cl]

  • Added New-GitHubRepositoryFromTemplate which can create a new GitHub repository from a specified
    template repository.
    [pr] | [cl]

  • Added Set-GitHubContent and added a BranchName parameter to Get-GitHubContent.
    [pr] | [cl]

  • Added default "views" for all types exposed in GitHubRepositories.ps1: GitHub.Repository,
    GitHub.RepositoryTopic, GitHub.RepositoryContributor, GitHub.RepositoryContributorStatistics,
    GitHub.RepositoryCollaborator, GitHub.RepositoryTag
    [pr] | [cl]

  • Standardized verb usage and parameter naming throughout the module. This is great for long-term
    maintainability of the module, but it does introduced breaking changes from 0.14.0. The breaking
    changes are covered more completely, above.
    [pr] | [cl]

  • Overhauled how status works for the module. No longer shows an animation while invoking a web
    request. This has the side effect of simplifying the code and significantly speeding-up the
    module. This deprecates NoStatus and DefaultNoStatus. This adds
    MultiRequestProgressThreshold to control how many pages of results are needed before a command
    will show status of completion across the full number of pages being retrieved. This defaults to
    10.
    [pr] | [cl]

  • Added New-GitHubRepositoryBranch and Remove-GitHubRepositoryBranch
    [pr] | [cl]

  • Updated New-GitHubRepositoryBranch to better support pipeline input, and added Sha as an
    optional parameter to allow for arbitrary commit branch creation. Also added Sha as a top-level
    property to a GitHub.Branch object.
    [pr] | [cl]

  • Added GitHub Reactions support for Issues and Pull Requests: Get-GitHubReaction,
    Set-GitHubReaction, Remove-GitHubReaction
    [pr] | [cl]

  • Added complete support for the GitHub Releases API surface: New-GitHubRelease,
    Set-GitHubRelease, Remove-GitHubRelease, Get-GitHubReleaseAsset, New-GitHubReleaseAsset,
    Set-GitHubReleaseAsset, Remove-GitHubReleaseAsset
    [pr] | [cl]

  • Added complete support for the GitHub gists API surface: Get-GitHubGist, Remove-GitHubGist,
    Copy-GitHubGist (aka Fork-GitHubGist), Add-GitHubGistStar, Remove-GitHubGistStar,
    Set-GitHubGistStar, Test-GitHubGistStar, New-GitHubGist, Set-GitHubGist,
    Rename-GitHubGistFile, Remove-GitHubGistFile, Set-GitHubGistFile (akaAdd-GitHubGistFile),
    Get-GitHubGistComment, Set-GitHubGistComment, New-GitHubGistComment,
    Remove-GitHubGistComment
    [pr] | [cl]

  • Added branch protection rule commands: Get-GitHubRepositoryBranchProtectionRule,
    New-GitHubRepositoryBranchProtectionRule, Remove-GitHubRepositoryBranchProtectionRule
    [pr] | [cl]

  • Standardized and improved the WhatIf support throughout the entire module.
    [pr] | [cl]

  • Added additional support for Teams: New-GitHubTeam, Set-GitHubTeam, Remove-GitHubTeam, and
    adds TeamName as an additional way to call into Get-GitHubTeam.
    [pr] | [cl]

  • Minor improvements to the new Teams commands to better support pipeline input and to provide
    alternative calling patterns (which can specify a team's slug or parent team's TeamId in order
    to minimize additional queries that would have to be done internally to complete your request).
    Added Rename-GitHubTeam as well.
    This also removes TeamId as a way to call Get-GitHubTeam or Get-GitHubTeamMember, as
    those API's have been deprecated by GitHub. You can now speficy a TeamSlug instead.
    [pr] | [cl]

  • All state-changing functions are now silent by default (no resulting output). If you want them
    to return the result, you can pass in -PassThru, which is a PowerShell standard design pattern.
    To truly get back to previous module behavior, you can set the new configuration property:
    DefaultPassThru.
    [pr] | [cl]

Fixes:

  • Example description
    [pr] | [cl]

  • Module update check needs to be able to handle when the module in use is newer than the published
    version (since publication to PowerShellGallery happens a few hours after the version is updated
    in GitHub).
    [pr] | [cl]

  • Simplified -WhatIf handling within Invoke-GHRestMethod to only have a single ShouldProcess
    statement. This was the first attempt at simplifying how -WhatIf should work. There was a
    successive change that took things further (see below).
    [pr] | [cl]

  • Fixed exception that occurred when calling Set-GitHubRepositoryTopic with -Clear.
    [pr] | [cl]

  • Disabled the progress bar for Invoke-WebRequest which greatly improves its performance in
    PowerShell 5.1.
    [pr] | [cl]

  • Significantly increased the performance of Get-GitHubContent with some internal changes.
    [pr] | [cl]

  • Removed positional binding support on Set-GitHubConfiguration to solve a common misconfiguration
    problem introduced by accidentally setting the wrong configuration value state.
    [pr] | [cl]

  • The module will now restore the previous state of [Net.ServicePointManager]::SecurityProtocol
    after performing its operation.
    [pr] | [cl]

  • Some commands were not properly validating the OwnerName/RepositoryName input due to a
    misconfiguration. That has now been fixed.
    [pr] | [cl]

  • Added a ValidateSet to the Affiiliation parameter in Get-GitHubRepository to limit input to
    the set of permitted options. Comment-based help was updated for Get-GitHubRepositoryCollaborator
    and Move-GitHubRepositoryOwnership. Removed an unreachable codepath in Get-GitHubRepository.
    [pr] | [cl]

  • Fixes to module version update checking: Fixed regression introduced by the
    pipeline work, and suppressed
    its usage of the progress bar to speed it up further.
    [pr] | [cl]

  • Fixed pipeline support for the newly added
    New-GitHubRepositoryFromTemplate.
    [pr] | [cl]

  • Fixed how numerical configuration values are handled to accommodate behavior differences in
    PowerShell 5 and PowerShell 7 Core.
    [pr] | [cl]

  • Fixed pipeline input handling for the newly added Dependabot functions.
    [pr] | [cl]

  • Removed NoStatus completely from the module to complete the transitional work done for how
    status is handled in the module.
    [pr] | [cl]

Authors: