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
GitHub Org's stars
Contributors
Categories
CICube banner
The GitHub Actions dashboard helps you spot bottlenecks and optimize your CI pipeline with actionable insights.
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.

Monitoring GitHub Actions Workflows

CICube is a GitHub Actions monitoring tool that provides you with detailed insights into your workflows to further optimize your CI/CD pipeline. With CICube, you will be able to track your workflow runs, understand where the bottlenecks are, and tease out the best from your build times. Go to cicube.io now and create a free account to better optimize your GitHub Actions workflows!

CICube GitHub Actions Workflow Duration Monitoring