name: Build UIs on: push: branches: - 'develop' - 'master' tags: - '[0-9]*' pull_request: branches: - '*' # Manual builds in all branches workflow_dispatch: branches: - '*' env: build_type: Release # defaults: # shell: pwsh on windows, bash all the rest # working-directory: ${{ github.workspace }} jobs: clang_tidy: if: ${{ github.ref_type == 'branch' }} name: Clang Tidy runs-on: ubuntu-20.04 steps: - name: Checkout uses: actions/checkout@v3 with: submodules: recursive - name: Install dependencies run: sudo apt-get update && sudo apt-get install clang-tidy - name: Run run: ./scripts/run_clang_tidy.sh build_for_linux: name: Linux Ubuntu 22.04 runs-on: ubuntu-22.04 # abseil (libabsl) is not available in 20.04 repository steps: - name: Checkout uses: actions/checkout@v3 with: submodules: recursive - name: Checkout lv2lint uses: actions/checkout@v3 with: repository: sfztools/lv2lint path: lv2lint ref: '0.16.2' - name: Python Setup # lv2lint uses: actions/setup-python@v4 with: python-version: 3.9 - name: Install dependencies run: | lv2lint_packages=( libcurl4-openssl-dev libelf-dev liblilv-dev lv2-dev ) packages=( libcairo2-dev libfontconfig1-dev libjack-jackd2-dev libpango1.0-dev libx11-xcb-dev libxcb-cursor-dev libxcb-keysyms1-dev libxcb-util-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev ninja-build ) sudo apt-get update && sudo apt-get install ${packages[@]} ${lv2lint_packages[@]} pip3 install meson - name: Install abseil if: ${{ github.ref_type == 'branch' }} run: | sudo apt-get install \ libabsl-dev \ libabsl20210324 - name: Configure CMake run: | options=( -G Ninja -B build -S . -D CMAKE_BUILD_TYPE=${{ env.build_type }} -D SFIZZ_JACK=OFF -D SFIZZ_RENDER=OFF -D SFIZZ_SHARED=OFF -D PLUGIN_LV2=ON -D PLUGIN_LV2_UI=ON -D PLUGIN_PUREDATA=ON -D PLUGIN_VST3=ON ) if [[ ${{ github.ref_type }} == 'branch' ]]; then options=( ${options[@]} -D SFIZZ_USE_SYSTEM_ABSEIL=ON ) fi cmake "${options[@]}" echo "-- github.workspace: ${{ github.workspace }}" echo "-- runner.workspace: ${{ runner.workspace }}" - name: Build run: | options=( --build build --config ${{ env.build_type }} --parallel 2 --verbose ) cmake "${options[@]}" - name: Build and install lv2lint working-directory: ${{ github.workspace }}/lv2lint run: | meson setup -Donline-tests=enabled -Delf-tests=enabled buildl2l cd buildl2l ninja sudo ninja install - name: Run lv2lint run: lv2lint -I build/sfizz.lv2 "http://sfztools.github.io/sfizz" # No custom Linux packages, build from sources or provided in distro build_for_macos: name: macOS 11 runs-on: macos-11 env: install_name: "sfizz-${{ github.ref_name }}-macos" steps: - name: Checkout uses: actions/checkout@v3 with: submodules: recursive - name: Install dependencies if: ${{ github.ref_type == 'branch' }} run: brew install abseil - name: Configure CMake run: | options=( -B build -S . -D CMAKE_BUILD_TYPE=${{ env.build_type }} -D SFIZZ_SHARED=OFF -D PLUGIN_AU=ON -D PLUGIN_LV2=ON -D PLUGIN_LV2_UI=ON -D PLUGIN_VST3=ON ) if [[ ${{ github.ref_type }} == 'branch' ]]; then options=( ${options[@]} -D SFIZZ_USE_SYSTEM_ABSEIL=ON ) else options=( ${options[@]} -D CMAKE_OSX_ARCHITECTURES="arm64;x86_64" ) fi cmake "${options[@]}" echo "-- runner.workspace: ${{ runner.workspace }}" echo "-- github.workspace: ${{ github.workspace }}" - name: Build run: | options=( --build build --config ${{ env.build_type }} --parallel 2 --verbose ) cmake "${options[@]}" lipo -i ./build/sfizz.component/Contents/MacOS/sfizz - name: Validate AU working-directory: ${{ github.workspace }}/build # Force a rescan after copy (thank you @PythonBlue), see # https://gist.github.com/olilarkin/8f378d212b0a59944d84f9f47061d70f#v2-audiounits run: | sudo cp -r ./sfizz.component /Library/Audio/Plug-Ins/Components/ sudo killall -9 AudioComponentRegistrar auval -v aumu samp Sfzt - name: Package bundles if: github.ref_type == 'tag' || github.event_name == 'pull_request' run: ./scripts/package-osx-bundles.sh - name: Create installer if: github.ref_type == 'tag' || github.event_name == 'pull_request' working-directory: ${{ github.workspace }}/build run: | options=( --distribution ${{ github.workspace }}/scripts/plugin.pkg/package.xml --identifier "sfz.tools.sfizz" --package-path "${{ github.workspace }}/build" --version 0 ${{ env.install_name }}.pkg ) productbuild "${options[@]}" - name: Upload if: github.ref_type == 'tag' || github.event_name == 'pull_request' uses: actions/upload-artifact@v3 with: name: macOS package path: "${{ github.workspace }}/build/${{ env.install_name }}.pkg" build_for_windows: name: Windows 2019 runs-on: windows-2019 strategy: matrix: include: - platform: x86 pkg_platform: Win32 release_arch: Win32 bits: 32 - platform: x64 pkg_platform: Win64 release_arch: x64 bits: 64 env: install_name: sfizz-${{ github.ref_name }}-win${{ matrix.bits }} steps: - name: Checkout uses: actions/checkout@v3 with: submodules: recursive - name: Configure CMake run: | cmake ` -G "Visual Studio 16 2019" ` -A "${{ matrix.release_arch }}" ` -B build ` -S . ` -D CMAKE_BUILD_TYPE=${{ env.build_type }} ` -D PLUGIN_LV2=ON ` -D PLUGIN_PUREDATA=ON ` -D PLUGIN_VST3=ON echo "-- runner.workspace: ${{ runner.workspace }}" echo "-- github.workspace: ${{ github.workspace }}" - name: Build run: | cmake ` --build build ` --config ${{ env.build_type }} ` --parallel 2 ` --verbose ` - name: Install pluginval if: ${{ matrix.platform == 'x64' }} run: | Invoke-WebRequest ` https://github.com/Tracktion/pluginval/releases/download/latest_release/pluginval_Windows.zip ` -OutFile pluginval.zip Expand-Archive pluginval.zip -DestinationPath pluginval echo "$(Get-Location)\pluginval" | Out-File ` -FilePath ${Env:GITHUB_PATH} ` -Encoding utf8 ` -Append pluginval\pluginval --version - name: Validate VST3 if: ${{ matrix.platform == 'x64' }} working-directory: ${{ github.workspace }}/build run: pluginval --validate-in-process --validate sfizz.vst3 - name: Create installer if: github.ref_type == 'tag' || github.event_name == 'pull_request' working-directory: ${{ github.workspace }}/build run: iscc /O"." /F"${{ env.install_name }}" /dARCH="${{ matrix.platform }}" innosetup.iss - name: Upload if: github.ref_type == 'tag' || github.event_name == 'pull_request' uses: actions/upload-artifact@v3 with: name: ${{ matrix.pkg_platform }} installer path: "${{ github.workspace }}/build/${{ env.install_name }}.exe" archive_source_code: if: ${{ github.ref_type == 'tag' }} name: Source code archive runs-on: ubuntu-20.04 env: install_name: sfizz-${{ github.ref_name }} steps: - name: Checkout uses: actions/checkout@v3 with: submodules: recursive - name: Install dependencies run: | sudo apt-get update && sudo apt-get install python3-pip sudo pip install git-archive-all - name: Archive source code run: | git-archive-all \ --prefix="${{ env.install_name }}/" \ -9 "${{ github.workspace }}/${{ env.install_name }}.tar.gz" - name: Upload uses: actions/upload-artifact@v3 with: name: Source code tarball path: "${{ github.workspace }}/${{ env.install_name }}.tar.gz" build_for_mod: if: ${{ false }} # DISABLED: Old image which doesn't work with CMake > 3.5 name: MOD runs-on: ubuntu-20.04 container: image: jpcima/mod-plugin-builder options: --user 0 env: install_name: sfizz-${{ github.ref_name }}-moddevices steps: - name: Checkout uses: actions/checkout@v3 with: submodules: recursive - name: Fix up MOD environment shell: bash run: ln -sf /home/builder/mod-workdir ~/mod-workdir - name: Configure CMake shell: bash working-directory: ${{ runner.workspace }} run: | mod-plugin-builder /usr/local/bin/cmake \ -B build \ -S "$GITHUB_WORKSPACE" \ -D PROJECT_SYSTEM_PROCESSOR=armv7-a \ -D CMAKE_BUILD_TYPE=Release \ -D SFIZZ_JACK=OFF \ -D PLUGIN_VST3=OFF \ -D PLUGIN_LV2_UI=OFF - name: Build shell: bash working-directory: ${{ runner.workspace }} run: | mod-plugin-builder /usr/local/bin/cmake \ --build build --config ${{ env.build_type }} -- -j 2 - name: Install working-directory: ${{ runner.workspace }} shell: bash run: | DESTDIR="$(pwd)/${{ env.install_name }}" mod-plugin-builder \ /usr/local/bin/cmake --build build --config ${{ env.build_type }} --target install tar czvf "${{ env.install_name }}".tar.gz "${{ env.install_name }}" - name: Upload uses: actions/upload-artifact@v3 with: name: MOD devices tarball path: "${{ runner.workspace }}/${{ env.install_name }}.tar.gz" deploy: if: ${{ github.ref_type == 'tag' }} runs-on: ubuntu-20.04 needs: - build_for_macos # - build_for_mod - build_for_windows - archive_source_code steps: - name: macOS download uses: actions/download-artifact@v3 with: name: macOS package - name: Windows 32 download uses: actions/download-artifact@v3 with: name: Win32 installer - name: Windows 64 download uses: actions/download-artifact@v3 with: name: Win64 installer - name: Source code download uses: actions/download-artifact@v3 with: name: Source code tarball - name: MOD download if: ${{ false }} # DISABLED: See comment above uses: actions/download-artifact@v3 with: name: MOD devices tarball - name: Display file information run: ls -lR - name: Release uses: softprops/action-gh-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ github.ref_name }} name: Release ${{ github.ref_name }} draft: false prerelease: false files: | sfizz-${{ github.ref_name }}-* sfizz-${{ github.ref_name }}.*