added additional workflow docs #2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# build.yaml lifted and modified from https://github.com/robbert-vdh/nih-plug/blob/master/.github/workflows/build.yml | |
name: Automated Builds | |
on: | |
push: | |
branches: | |
- '**' | |
tags: | |
- '*' | |
pull_request: | |
branches: | |
- main | |
defaults: | |
run: | |
# This otherwise gets run under dash which does not support brace expansion | |
shell: bash | |
jobs: | |
# We'll only package the plugins with an entry in bundler.toml | |
package: | |
strategy: | |
matrix: | |
include: | |
- { name: ubuntu-20.04, os: ubuntu-latest, cross-target: '' } | |
- { name: macos-universal, os: macos-latest, cross-target: aarch64-apple-darwin } | |
- { name: windows, os: windows-latest, cross-target: '' } | |
name: Package plugin binaries | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Fetch all git history | |
run: git fetch --force --prune --tags --unshallow | |
- name: Install dependencies | |
if: startsWith(matrix.os, 'ubuntu') | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y libasound2-dev libgl-dev libjack-dev libx11-xcb-dev libxcb1-dev libxcb-dri2-0-dev libxcb-icccm4-dev libxcursor-dev libxkbcommon-dev libxcb-shape0-dev libxcb-xfixes0-dev zip | |
- uses: actions/cache@v4 | |
# FIXME: Caching `target/` causes the Windows runner to blow up after some time | |
if: startsWith(matrix.os, 'windows') | |
with: | |
path: | | |
~/.cargo/registry/index/ | |
~/.cargo/registry/cache/ | |
~/.cargo/git/db/ | |
key: ${{ matrix.name }}-${{ matrix.cross-target }} | |
- uses: actions/cache@v4 | |
if: ${{ ! startsWith(matrix.os, 'windows') }} | |
with: | |
path: | | |
~/.cargo/registry/index/ | |
~/.cargo/registry/cache/ | |
~/.cargo/git/db/ | |
target/ | |
key: ${{ matrix.name }}-${{ matrix.cross-target }} | |
- name: Set up Rust toolchain | |
# Needed for SIMD | |
uses: dtolnay/rust-toolchain@nightly | |
with: | |
# The macOS AArch64 build is done from an x86_64 macOS CI runner, so | |
# it needs to be cross compiled | |
targets: ${{ matrix.cross-target }} | |
- name: Package all targets from bundler.toml | |
# Instead of hardcoding which targets to build and package, we'll | |
# package everything that's got en entry in the `bundler.toml` file | |
run: | | |
# Building can be sped up by specifying all packages in one go | |
package_args=() | |
for package in $(cargo xtask known-packages); do | |
package_args+=("-p" "$package") | |
done | |
runner_name=${{ matrix.name }} | |
if [[ $runner_name = 'macos-universal' ]]; then | |
# export MACOSX_DEPLOYMENT_TARGET=10.13 | |
rustup target add x86_64-apple-darwin | |
cargo xtask bundle-universal "${package_args[@]}" --release | |
else | |
cross_target=${{ matrix.cross-target }} | |
if [[ -n $cross_target ]]; then | |
package_args+=("--target" "$cross_target") | |
fi | |
cargo xtask bundle "${package_args[@]}" --release | |
fi | |
- name: Determine build archive name | |
run: | | |
echo "ARCHIVE_NAME=lashverb-$(date -u +"%Y-%m-%d-%H%m%S")-${{ matrix.name }}" >> "$GITHUB_ENV" | |
- name: Move all packaged plugin into a directory | |
run: | | |
# GitHub Action strips the top level directory, great, have another one | |
mkdir -p "$ARCHIVE_NAME/$ARCHIVE_NAME" | |
mv target/bundled/* "$ARCHIVE_NAME/$ARCHIVE_NAME" | |
- name: Check content of path | |
run: ls -l | |
- name: Add an OS-specific readme file with installation instructions | |
run: cp ".github/workflows/readme-${{ runner.os }}.txt" "$ARCHIVE_NAME/$ARCHIVE_NAME/README.txt" | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.ARCHIVE_NAME }} | |
path: ${{ env.ARCHIVE_NAME }} | |
publish: | |
name: Publish | |
runs-on: ubuntu-latest | |
needs: [package] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Fetch all git history | |
run: git fetch --force --prune --tags --unshallow | |
- uses: actions/download-artifact@v4 | |
with: | |
path: artifacts | |
- name: Check content of path | |
run: | | |
cd artifacts | |
ls -l --block-size=K ** | |
- name: Zip up the artifact directories | |
run: | | |
cd artifacts | |
# Loop through each subdirectory | |
for directory in */ ; do | |
# Remove the trailing slash from the directory name | |
dir_name="${directory%/}" | |
# Create a zip archive with the directory name | |
zip -r "${dir_name}.zip" "$dir_name" | |
done | |
- name: Check content after zipping | |
run: | | |
cd artifacts | |
ls -l --block-size=K ** | |
- name: Delete old release assets | |
uses: mknejp/delete-release-assets@v1 | |
with: | |
fail-if-no-assets: false | |
fail-if-no-release: false | |
token: ${{ github.token }} | |
tag: alpha # This may also be of the form 'refs/tags/staging' | |
assets: '*' | |
- name: Upload release assets | |
uses: softprops/action-gh-release@v2 | |
if: startsWith(github.ref, 'refs/heads/main') | |
with: | |
tag_name: alpha | |
token: ${{ secrets.GITHUB_TOKEN }} | |
prerelease: true | |
files: | | |
artifacts/*.zip |