name: Publish to GitHub Release
on:
push:
tags:
- '*'
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build
run: cargo build --release
- name: Upload binaries to release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: target/release/mything
asset_name: mything
tag: ${{ github.ref }}
overwrite: true
body: "This is my release text"
Upload Release Action
This action allows you to upload selected files to a GitHub release upon tagging.
What is upload-release-action?
upload-release-action
will upload selected files as assets of a GitHub release in case a new tag is created. The action also features multiple operating system support and options for tuning the release settings.
How to Use file
The file
input is required to specify which file to upload. Here's how to configure it:
with:
file: target/release/mything
You can also use glob patterns by setting file_glob
to true
:
with:
file: target/release/my*
file_glob: true
How to Customize the Release
You can modify release settings such as prerelease
, draft
, or release_name
. For example, to mark a release as a draft:
with:
draft: true
To explicitly set the release name:
with:
release_name: 'My Custom Release Name'
How to Set Overwrite Mode
If you want to overwrite an existing asset with the same name, set the overwrite
input to true
:
with:
overwrite: true
How to Promote a Pre-Release to a Release
You can promote an existing pre-release to a release by enabling the promote
option:
with:
promote: true
Example: Creating a Release in a Foreign Repository
To create a release in a different GitHub repository, set the repo_name
input and provide a personal access token:
with:
repo_name: owner/repository-name
repo_token: ${{ secrets.YOUR_PERSONAL_ACCESS_TOKEN }}
file: target/release/mything
tag: ${{ github.ref }}
How to Use a File for the Release Body
To dynamically populate the release body from a file in your repository, use the following example:
- name: Read release.md and use it as a body of new release
id: read_release
shell: bash
run: |
r=$(cat path/to/release.md)
r="${r//'%'/'%25'}"
r="${r//$'\n'/'%0A'}"
r="${r//$'\r'/'%0D'}"
echo "RELEASE_BODY=$r" >> $GITHUB_OUTPUT
- name: Upload Binaries to Release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
tag: ${{ github.ref }}
body: |
${{ steps.read_release.outputs.RELEASE_BODY }}
Outputs
The upload-release-action
provides an output variable, browser_download_url
, which contains the public download URL of the uploaded asset.
steps:
- name: Upload binaries to release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: target/release/mything
- run: echo "Download URL: ${{ steps.upload.outputs.browser_download_url }}"
This action ensures that your tagged releases are always up-to-date with the correct binaries or assets, supporting both simple and complex workflows.