-
Notifications
You must be signed in to change notification settings - Fork 1
151 lines (135 loc) · 6.02 KB
/
build.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
name: Automated Builds
# slightly adapted from:
# https://github.com/robbert-vdh/nih-plug/blob/master/.github/workflows/build.yml
permissions:
contents: write
actions: read
on:
push:
branches:
- '**'
tags:
- '*'
pull_request:
branches:
- master
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-24.04, os: ubuntu-24.04, cross-target: '' }
- { name: macos-universal, os: macos-14, cross-target: aarch64-apple-darwin }
- { name: windows, os: windows-latest, cross-target: '' }
name: Package plugin binaries
runs-on: ${{ matrix.os }}
steps:
- uses: actions/[email protected]
- 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 libwayland-egl++1 libwayland-dev libegl-dev libgles-dev libfontconfig-dev
- uses: actions/[email protected]
# 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/[email protected]
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
rustup target add x86_64-apple-darwin
export MACOSX_DEPLOYMENT_TARGET=10.14
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: Install pluginval
run: |
runner_name=${{ matrix.name }}
if [[ $runner_name = 'macos-universal' ]]; then
curl -L "https://github.com/Tracktion/pluginval/releases/latest/download/pluginval_macOS.zip" -o pluginval.zip; unzip pluginval
elif [[ $runner_name = 'ubuntu-24.04' ]]; then
curl -L "https://github.com/Tracktion/pluginval/releases/latest/download/pluginval_Linux.zip" -o pluginval.zip; unzip pluginval
elif [[ $runner_name = 'windows' ]]; then
powershell -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest https://github.com/Tracktion/pluginval/releases/latest/download/pluginval_Windows.zip -OutFile pluginval.zip"
powershell -Command "Expand-Archive pluginval.zip -DestinationPath ."
fi
- name: Validate VST3 plugin
run: |
runner_name=${{ matrix.name }}
if [[ $runner_name = 'macos-universal' ]]; then
pluginval.app/Contents/MacOS/pluginval --verbose --strictness-level 1 target/bundled/DEL2.vst3 || exit 1
elif [[ $runner_name = 'ubuntu-24.04' ]]; then
./pluginval --verbose --strictness-level 1 target/bundled/DEL2.vst3 || exit 1
elif [[ $runner_name = 'windows' ]]; then
powershell -Command "& { .\pluginval.exe --verbose --strictness-level 10 target/bundled/DEL2.vst3; if ($LASTEXITCODE -ne 0) { exit 1 } }"
fi
- name: Determine build archive name
run: |
# Windows (usually) doesn't like colons in file names
echo "ARCHIVE_NAME=DEL2-$(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: Add an OS-specific readme file with installation instructions
run: cp ".github/workflows/readme-${{ runner.os }}.txt" "$ARCHIVE_NAME/$ARCHIVE_NAME/README.txt"
- name: Upload artifacts
uses: actions/[email protected]
with:
name: ${{ env.ARCHIVE_NAME }}
path: ${{ env.ARCHIVE_NAME }}
- name: Zip Release
uses: thedoctor0/[email protected]
if: startsWith(github.ref, 'refs/tags/')
with:
type: 'zip'
directory: ${{ env.ARCHIVE_NAME }}/${{ env.ARCHIVE_NAME }}
filename: DEL2-${{ github.ref_name }}-${{ matrix.name }}.zip
- name: Release
uses: softprops/[email protected]
if: startsWith(github.ref, 'refs/tags/')
with:
files: |
${{ env.ARCHIVE_NAME }}/${{ env.ARCHIVE_NAME }}/*.zip