DevOps engineer & ultra runner

Automated GitHub releases for Rust projects using Actions

I've been using GitHub Actions more and more across the projects I maintain. It's a great offering and integrates well into GitHub.

There are a few Rust projects I have where I wanted to automate the publishing of prebuilt binaries to the GitHub releases page. I've seen others do it by using Travis but the setup seemed overly complex.

In order to trigger a release, I just create a tag:

$ git tag v0.1.1

and then push the tag to GitHub:

$ git push --tags

The build begins and the assets are uploaded to the repository. The workflow I used to achieve this is below. Be sure to change the <name> sections to something suitable. I placed the file in .github/workflows/publish.yml.

name: Publish

on:
  push:
    tags:
      - '*'

jobs:
  publish:
    name: Publish for ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        name: [
            linux,
            windows,
            macos
        ]

        include:
          - name: linux
            os: ubuntu-latest
            artifact_name: target/release/<name>
            asset_name: <name>-linux
          - name: windows
            os: windows-latest
            artifact_name: target/release/<name>.exe
            asset_name: <name>-windows
          - name: macos
            os: macos-latest
            artifact_name: target/release/<name>
            asset_name: <name>-macos

    steps:
    - uses: actions/checkout@v1

    - uses: actions-rs/toolchain@v1
      with:
        profile: minimal
        toolchain: stable

    - name: Build
      run: cargo build --release --locked

    - name: Upload binaries to release
      uses: actions/upload-artifact@v2
      with:
        name: ${{ matrix.asset_name }}
        path: ${{ matrix.artifact_name }}

Subscribe to Daniel Lockyer

Sign up now to get access to the library of members-only issues.
Jamie Larson
Subscribe