ghr creates GitHub Release and uploads artifacts in parallel.
This demo creates GitHub Release page with
v1.0.0 tag and uploads cross-compiled golang binaries.
You can see release page here.
ghr is simple. After setting GitHub API token (see more on GitHub API Token section), change into your repository root directory and run the following command:
$ ghr [option] TAG [PATH]
You must provide
TAG (git tag) and optionally a
PATH to artifacts you want to upload. You can specify a file or a directory. If you provide a directory, all files in that directory will be uploaded.
ghr assumes that you are in a git repository when executed. This is because normally the artifacts you want to upload to a GitHub Release page are in that repository or generated there. With this assumption,
ghr implicitly reads repository URL from
.git/config file. But you can change this kind of information, see Options section.
GitHub API Token
ghr, you need to get a GitHub token with an account which has enough permissions to create releases. To get a token, visit GitHub account settings page, then go to Applications for the user. Here you can create a token in the Personal access tokens section. For a private repository you need
repo scope and for a public repository you need
ghr, you can set it via
GITHUB_TOKEN env var,
-token command line option or
github.token property in
For instance, to set it via environment variable:
$ export GITHUB_TOKEN="....."
Or set it in
github.token in gitconfig:
$ git config --global github.token "....."
Note that environment variable take precedence over gitconfig value.
You can use
ghr for GitHub Enterprise. Change API endpoint via the environment variable.
$ export GITHUB_API=http://github.company.com/api/v3/
To upload all files in
pkg/ directory with tag
$ ghr v0.1.0 pkg/ --> Uploading: pkg/0.1.0_SHASUMS --> Uploading: pkg/ghr_0.1.0_darwin_386.zip --> Uploading: pkg/ghr_0.1.0_darwin_amd64.zip --> Uploading: pkg/ghr_0.1.0_linux_386.zip --> Uploading: pkg/ghr_0.1.0_linux_amd64.zip --> Uploading: pkg/ghr_0.1.0_windows_386.zip --> Uploading: pkg/ghr_0.1.0_windows_amd64.zip
You can set some options:
$ ghr \ -t TOKEN \ # Set Github API Token -u USERNAME \ # Set Github username -r REPO \ # Set repository name -c COMMIT \ # Set target commitish, branch or commit SHA -n TITLE \ # Set release title -b BODY \ # Set text describing the contents of the release -p NUM \ # Set amount of parallelism (Default is number of CPU) -delete \ # Delete release and its git tag in advance if it exists (same as -recreate) -replace # Replace artifacts if it is already uploaded -draft \ # Release as draft (Unpublish) -soft \ # Stop uploading if the same tag already exists -prerelease \ # Create prerelease TAG PATH
If you are OSX user, you can use Homebrew:
$ brew install ghr
If you are on another platform, you can download a binary from our release page and place it in
Or you can use
go get (you need to use go1.7 or later),
$ go get -u github.com/tcnksm/ghr
- aktau/github-release -
github-releasecan also create and edit releases and upload artifacts. It has many options.
ghris a simple alternative. And
ghrwill parallelize upload artifacts.
- Fork (https://github.com/tcnksm/ghr/fork)
- Create a feature branch
- Commit your changes
- Rebase your local changes against the master branch
- Run test suite with the
make testcommand and confirm that it passes
gofmt -s -w .
- Create new Pull Request