name: Automated builds on: push: branches: - '**' tags: # Run when pushing version tags, since otherwise it's impossible to # restart a successful build after pushing a tag - '*.*.*' pull_request: branches: - master defaults: run: # This otherwise gets run under dash which does not support brace expansion shell: bash jobs: build-bionic: name: Build on Ubuntu 18.04 runs-on: ubuntu-latest # This container contains everything needed to build yabridge container: robbert/docker-yabridge:bionic outputs: artifact-name: ${{ env.ARCHIVE_NAME }} # GitHub actions does not allow you to share steps between jobs and their # yaml parser does not support anchors, so we'll have to duplicate all of # these steps # https://github.community/t5/GitHub-Actions/reusing-sharing-inheriting-steps-between-jobs-declarations/td-p/37849 steps: - uses: actions/checkout@v3 # Needed for git-describe to do anything useful, the safe directory # workaround is needed for https://github.com/actions/runner/issues/2033 - name: Fetch all git history run: | git config --global --add safe.directory /__w/yabridge/yabridge git fetch --force --prune --tags --unshallow - name: Determine build archive name run: | echo "ARCHIVE_NAME=yabridge-$(git describe --always)-ubuntu-18.04.tar.gz" >> "$GITHUB_ENV" - name: Build the binaries run: | # Wine won't create a Wine prefix in ~/.wine because /github/home is # not owned by the user that's executing this job mkdir -p /tmp/prefix export WINEPREFIX=/tmp/prefix # Statically link to libstdc++ on Ubuntu 18.04 as we're compiling # with a newer version of g++ than what's in the default repos meson setup build --buildtype=release --cross-file=cross-wine.conf --unity=on --unity-size=10000 -Dbitbridge=true -Dcpp_link_args='-mwindows -static-libstdc++' -Dbuild.cpp_link_args='-static-libstdc++' ninja -C build - name: Strip remaining debug symbols run: strip build/libyabridge{,-chainloader}-{clap,vst2,vst3}.so build/yabridge-host{,-32}.exe.so - name: Create an archive for the binaries run: | mkdir yabridge cp build/libyabridge{,-chainloader}-{clap,vst2,vst3}.so build/yabridge-host{,-32}.exe{,.so} yabridge cp CHANGELOG.md README.md yabridge tar -caf "$ARCHIVE_NAME" yabridge rm -rf yabridge - uses: actions/upload-artifact@v3 with: name: ${{ env.ARCHIVE_NAME }} path: ${{ env.ARCHIVE_NAME }} build-focal: name: Build on Ubuntu 20.04 runs-on: ubuntu-latest container: robbert/docker-yabridge:focal outputs: artifact-name: ${{ env.ARCHIVE_NAME }} steps: - uses: actions/checkout@v3 # Needed for git-describe to do anything useful, the safe directory # workaround is needed for https://github.com/actions/runner/issues/2033 - name: Fetch all git history run: | git config --global --add safe.directory /__w/yabridge/yabridge git fetch --force --prune --tags --unshallow - name: Determine build archive name run: | echo "ARCHIVE_NAME=yabridge-$(git describe --always).tar.gz" >> "$GITHUB_ENV" - name: Build the binaries run: | mkdir -p /tmp/prefix export WINEPREFIX=/tmp/prefix # In this version we don't need to statically link libstdc++ since # Ubuntu 20.04 and similar distros will ship with a version that's # compatible with GCC 10, even if that's not the default GCC version meson setup build --buildtype=release --cross-file=cross-wine.conf --unity=on --unity-size=10000 -Dbitbridge=true ninja -C build - name: Strip remaining debug symbols run: strip build/libyabridge{,-chainloader}-{clap,vst2,vst3}.so build/yabridge-host{,-32}.exe.so - name: Create an archive for the binaries run: | mkdir yabridge cp build/libyabridge{,-chainloader}-{clap,vst2,vst3}.so build/yabridge-host{,-32}.exe{,.so} yabridge cp CHANGELOG.md README.md yabridge tar -caf "$ARCHIVE_NAME" yabridge rm -rf yabridge - uses: actions/upload-artifact@v3 with: name: ${{ env.ARCHIVE_NAME }} path: ${{ env.ARCHIVE_NAME }} # The same as `build-bionic`, but for a 32-bit only version of yabridge. We # don't plan on distributing this, but we'll just have this available for AV # Linux. We currently don't do 32-bit builds of yabridgectl though. build-32-bit: name: Build on Ubuntu 18.04 (32-bit build) runs-on: ubuntu-latest container: robbert/docker-yabridge:bionic outputs: artifact-name: ${{ env.ARCHIVE_NAME }} steps: - uses: actions/checkout@v3 # Needed for git-describe to do anything useful, the safe directory # workaround is needed for https://github.com/actions/runner/issues/2033 - name: Fetch all git history run: | git config --global --add safe.directory /__w/yabridge/yabridge git fetch --force --prune --tags --unshallow - name: Determine build archive name run: | echo "ARCHIVE_NAME=yabridge-$(git describe --always)-ubuntu-18.04-32bit.tar.gz" >> "$GITHUB_ENV" - name: Build the binaries run: | mkdir -p /tmp/prefix export WINEPREFIX=/tmp/prefix # Statically link to libstdc++ on Ubuntu 18.04, and also target a # 32-bit OS. CLAP support is disabled here because it won't work with # 64-bit plugins. meson setup build --buildtype=release --cross-file=cross-wine.conf --unity=on --unity-size=10000 -Dbitbridge=true -Dclap=false -Dcpp_link_args='-mwindows -static-libstdc++' -Dbuild.cpp_args='-m32' -Dbuild.cpp_link_args='-m32 -static-libstdc++' ninja -C build - name: Strip remaining debug symbols run: strip build/libyabridge{,-chainloader}-{vst2,vst3}.so build/yabridge-host{,-32}.exe.so - name: Create an archive for the binaries run: | mkdir yabridge cp build/libyabridge{,-chainloader}-{vst2,vst3}.so build/yabridge-host{,-32}.exe{,.so} yabridge cp CHANGELOG.md README.md yabridge tar -caf "$ARCHIVE_NAME" yabridge rm -rf yabridge - uses: actions/upload-artifact@v3 with: name: ${{ env.ARCHIVE_NAME }} path: ${{ env.ARCHIVE_NAME }} build-yabridgectl: name: Build yabridgectl runs-on: ubuntu-18.04 outputs: artifact-name: ${{ env.ARCHIVE_NAME }} defaults: run: working-directory: tools/yabridgectl steps: - uses: actions/checkout@v3 # Needed for git-describe to do anything useful, the safe directory # workaround is needed for https://github.com/actions/runner/issues/2033 - name: Fetch all git history run: | git config --global --add safe.directory /__w/yabridge/yabridge git fetch --force --prune --tags --unshallow - name: Determine build archive name run: | echo "ARCHIVE_NAME=yabridgectl-$(git describe --always).tar.gz" >> "$GITHUB_ENV" - name: Set up Rust toolchain uses: dtolnay/rust-toolchain@stable - name: Build the binaries run: cargo build --release - name: Strip remaining debug symbols run: strip target/release/yabridgectl - name: Create an archive for the binaries run: | mkdir yabridgectl cp target/release/yabridgectl README.md yabridgectl tar -caf "$ARCHIVE_NAME" yabridgectl rm -rf yabridgectl - uses: actions/upload-artifact@v3 with: name: ${{ env.ARCHIVE_NAME }} # For some reason there's no way to tell GitHub actions to run actions # in a subdirectory path: tools/yabridgectl/${{ env.ARCHIVE_NAME }}