See https://github.com/Integralist/actions-testing for working examples.
DOCS: Syntax and Expressions.
The following example demonstrates a few things...
- Events using
on
. - Generating multiple jobs using
strategy.matrix
. - Overriding specific variables using
include
. - Setting environment variables using
env
. - Defining a multiline script (for readability) using yaml
|
operator.
# .github/workflows/release.yaml
name: Main
on:
push:
tags:
- 'v*.*.*'
jobs:
build:
strategy:
matrix:
rust-toolchain: [stable]
os: [ubuntu-latest, macos-latest, windows-latest]
arch: [amd64, arm64]
include:
- os: ubuntu-latest
name: linux
- os: macos-latest
name: darwin
rust-target: x86_64-apple-darwin
- os: windows-latest
name: windows
extension: .exe
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v2
with:
submodules: true
- name: Install latest Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ matrix.rust-toolchain }}
target: ${{ matrix.rust-target }}
default: true
override: true
- name: Extract tag name
uses: olegtarasov/get-tag@v2.1
id: tagName
- name: Test
run: make test
shell: bash
env:
TEST_COMPUTE_INIT: true
TEST_COMPUTE_BUILD: true
TEST_COMPUTE_DEPLOY: true
- name: Build
run: |
cargo build --all --release --locked
cd target/release
- name: Package
run: |
strip viceroy${{ matrix.extension }}
tar czf viceroy_${{ steps.tagName.outputs.tag }}_${{ matrix.name }}-${{ martrix.arch }}.tar.gz viceroy${{ matrix.extension }}
- name: Release
uses: softprops/action-gh-release@v1
with:
files: |
target/release/viceroy_${{ steps.tagName.outputs.tag }}_${{ matrix.name }}-${{ martrix.arch }}.tar.gz
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}