GitHubReleaseManager is a PowerShell module that wraps up GitHub’s Releases API. It allows users to automate releases of their software by via the command line or by integrating the module in to build tools such as PSake.
The idea came about while working on another community project. Every release consisted of a number of manual tasks, one of which was publishing the release. While not complicated, it was always slightly tense for me as I wanted to ensure that all releases were consistent. The obvious solution was to automate this step and luckily, GitHub provide a really comprehensive API for managing releases. The module provides a way to create new releases and manage/update existing releases and assets.
In the future I will post more articles covering how to use each of the additional functions in the module.
Install-Module -Name GitHubReleaseManager -Scope CurrentUser
Supported PowerShell editions
- Desktop: 5.x
- Core: 6.0.0-Alpha
Release 1.1.1 contains 13 functions. 11 of those cover the endpoints exposed by GitHub’s Releases API.
Now that the introduction is out-of-the-way lets look at how we can use the module to create a release.
Before you start you’ll need to create a Personal Access Token with the following scopes:
Note: Keep the token safe as you wont be able to view it again!
Once you have generated the token use Set-GitHubSessionInformation to set up your session:
Set-GitHubSessionInformation -Username user -APIKey xxxxxxxxxxxxxxxxxxx
You can view the current session configuration at any time with Get-GitHubSessionInformation.
Now that you have your session set up let’s create a release against the Master branch of a repository:
New-GitHubRelease -Repository TestRepository -Name TestRelease -Description "Test v1.0 release" -Target master -Tag v1.0
It’s also possible to create a release and add one or more assets by using the Asset parameter. In GitHubReleaseManager an Asset is a hash table that contains two properties. The path to your binary and it’s content type.
In the example below we add a single Zip archive:
"Path" = ".\Release\MyRepositoryAsset.zip"
"Content-Type" = "application/zip"
New-GitHubRelease -Repository TestRepository -Name TestRelease -Description "Test v1.0 release" -Target master -Tag v1.0 -Asset $Asset
Further usage information and documentation for each function provided by the module can be found on the GitHubReleaseManager ReadTheDocs site.
- Make the Repository parameter optional and allow the user to set the current repository with
Set-GitHubCurrentRepository. This may set a property called CurrentRepository in the session object that is created with
- Improve pipeline support. Currently each function requires the Repository parameter which makes it impossible to have a clean pipeline experience. Hopefully the change above will fix this
- Research different authentication options
- Improve CI/CD pipeline