https://github.com/jaxxstorm/action-install-gh-release
GitHub Action to install the Github Release binaries
https://github.com/jaxxstorm/action-install-gh-release
github-actions installer release
Last synced: 3 months ago
JSON representation
GitHub Action to install the Github Release binaries
- Host: GitHub
- URL: https://github.com/jaxxstorm/action-install-gh-release
- Owner: jaxxstorm
- License: apache-2.0
- Created: 2020-05-18T18:40:48.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2025-04-10T18:41:25.000Z (3 months ago)
- Last Synced: 2025-04-13T05:07:54.564Z (3 months ago)
- Topics: github-actions, installer, release
- Language: JavaScript
- Homepage:
- Size: 19.9 MB
- Stars: 82
- Watchers: 2
- Forks: 35
- Open Issues: 14
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE-OF-CONDUCT.md
Awesome Lists containing this project
README
# `install-gh-release` GitHub Action
This repository contains an action for use with GitHub Actions, which will install any GitHub release into your action environment:
This is especially useful when installing arbitrary Go binaries. It can lookup the latest version, or download a specific tag.
## Usage
### Grab the Latest Version
```yaml
# ...
steps:
- name: Install go-task
uses: jaxxstorm/[email protected]
with: # Grab the latest version
repo: go-task/task
```### Grab the Latest PreRelease Version
```yaml
# ...
steps:
- name: Install go-task
uses: jaxxstorm/[email protected]
with: # Grab the latest version
repo: go-task/task
prerelease: true
```### Grab Specific Tags
```yaml
# ...
steps:
- name: Install tf2pulumi
uses: jaxxstorm/[email protected]
with: # Grab a specific tag
repo: pulumi/tf2pulumi
tag: v0.7.0
```### Grab a Specific Platform And/Or Architecture
```yaml
steps:
- name: Install tfsec
uses: jaxxstorm/[email protected]
with: # Grab a specific platform and/or architecture
repo: aquasecurity/tfsec
platform: linux
arch: amd64
```### Grab from a private repository
Use a `repo` scoped [Personal Access Token (PAT)](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token) that has been created on a user with access to the private repository.
```yaml
steps:
- name: Install private tool
uses: jaxxstorm/[email protected]
with: # Grab from a private repository
token: ${{ secrets.MY_PAT }}
repo: my-org/my-private-repo
```### Caching
This action can use [actions/cache](https://github.com/actions/cache) under the hood. Caching needs to be enabled explicitly and only works for specific tags.
```yaml
# ...
steps:
- name: Install tf2pulumi
uses: jaxxstorm/[email protected]
with: # Grab a specific tag with caching
repo: pulumi/tf2pulumi
tag: v0.7.0
cache: enable
```Caching helps avoid
[Rate limiting](https://docs.github.com/en/rest/overview/resources-in-the-rest-api#requests-from-github-actions), since this action does not need to scan tags and releases on a cache hit. Caching currently is not expected to speed up installation.### Changing Release File Extensions
As described below this action defaults to assuming that a release is either a `.tar.gz` or a `.zip` archive but this
may not always be true for all releases. For example, a project might release a pure binary, a different archive format, a custom file extension etc.This action can change its extension-matching behavior via the `extension-matching` and `extension` parameters. For
example to match on a `.bz2` extension:```yaml
# ...
jobs:
my_job:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Github token scoped to job
steps:
- name: Install Mozilla grcov
uses: jaxxstorm/[email protected]
with: # Grab a specific file extension
repo: mozilla/grcov
tag: v0.8.12
extension: "\\.bz2"
```Here the `extension` parameter is used to provide a regular expression for the file extension(s) you want to match. If
this is not specified then the action defaults to `\.(tag.gz|zip)`. Since this is a regular expression being embedded into
YAML be aware that you may need to provide an extra level of character escaping, in the above example we have a `\\`
used to escape the backslash and get an actual `\.` (literal match of the period character) in the regular
expression passed into the action.Alternatively, if a project produces pure binary releases with no file extension then you can install them as follows:
```yaml
# ...
jobs:
my_job:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Github token scoped to job
steps:
- name: Install Open Telemetry Collector Builder (ocb)
uses: jaxxstorm/[email protected]
with: # Grab a pure binary
repo: open-telemetry/opentelemetry-collector
tag: v0.62.1
extension-matching: disable
rename-to: ocb
chmod: 0755
```Note the use of the `rename-to` and `chmod` parameters to rename the downloaded binary and make it executable.
### Grab multiple binaries from a specific location
If the archive of the release contains binaries in a specific location, you can
specify it with the `binaries-location` parameter. Note that the path is
relative to the root of the archive. The option `rename-to` has no effect in
this case. The option `chmod` is applied to all binaries.```yaml
- name: Install the latest Wasmer version
uses: jaxxstorm/[email protected]
with:
repo: wasmerio/wasmer
binaries-location: bin
chmod: 0755
```### Grab a single asset whose name differs from the repository
If the repository's release contains multiplie assets (e.g. for many projects),
you can specify the name of the relevant asset with the `asset-name` parameter.
Binary-related options (i.e. `rename-to`, `chmod`, and `extension-matching`)
can be specified to control whether to treat the asset as binary and/or modify it.```yaml
- name: Install the latest wrpc version
uses: jaxxstorm/[email protected]
with:
repo: bytecodealliance/wrpc
asset-name: wit-bindgen-wrpc
rename-to: wit-bindgen-wrpc
chmod: 0755
extension-matching: disable
```## Finding a release
By default, this action will look up the Platform and Architecture of the runner and use those values to interpolate and match a release package. **The release package name is first converted to lowercase**.
Multiple match patterns are used to find a viable asset:
- Machine Architecture (e.g. `x86_64`, `arm64`, `amd64`)
- (optional) Vendor (e.g. `musl`, `glibc`, `gnu`)
- OS (e.g. `linux`, `darwin`)
- Glibc implementation (e.g. `musl`, `glibc`, `gnu`)
- (optional, via `extension-matching`) Extension (e.g. `tar.gz`, `zip`)Natively, the action will only match the following platforms (operating systems): `linux`, `darwin`, `windows`.
Some examples of matches:
- `my_package_linux_x86_64.tar.gz` (or `.zip`)
- `my_package_x86_64_linux.tar.gz` (or `.zip`)
- `my_package.linux.x86_64.tar.gz` (or `.zip`)
- `my_package.x86_64.linux.tar.gz` (or `.zip`)
- `linux_x86_64_my_package.tar.gz` (or `.zip`)
- `x86_64_linux_my_package.tar.gz` (or `.zip`)
- `linux.x86_64.my_package.tar.gz` (or `.zip`)
- `x86_64.linux.my_package.tar.gz` (or `.zip`)
- `linux_x86_64.tar.gz` (or `.zip`)
- `x86_64_linux.tar.gz` (or `.zip`)
- `linux.x86_64.tar.gz` (or `.zip`)
- `x86_64.linux.tar.gz` (or `.zip`)