🤖Save up to $132K/month in CI costs!Try Free→
Skip to main content
← Back to workflows

How to Upload Files to a GitHub Release with GitHub Actions

svenstaro-upload-release-action -
GitHub Action
2.9.0
614
Contributors
Contributor - svenstaroContributor - ggreif
Categories
Usage
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 logo

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.