diff --git a/.github/workflows/build-daw-plugin.yml b/.github/workflows/build-daw-plugin.yml new file mode 100644 index 0000000..83db0f4 --- /dev/null +++ b/.github/workflows/build-daw-plugin.yml @@ -0,0 +1,43 @@ +name: Build DAW Plugin +on: + push: + branches: + - main + - towards-juce-and-rack + - 'releases/**' + tags: + - 'v**' + pull_request: + workflow_dispatch: + workflow_run: + workflows: ["Update"] + types: + - completed + +defaults: + run: + shell: bash + +jobs: + build_plugin: + name: ${{ matrix.name }} Build + runs-on: ${{ matrix.os }} + strategy: + matrix: + include: + - os: windows-latest + - os: macos-latest + - os: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v2 + with: + submodules: recursive + + # TODO: a linux apt-get stage here + + - name: Build project + run: | + cmake -S . -B ./build -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" -DBUILD_JUCE_PLUGIN=TRUE + cmake --build ./build --config Release --target awcons-installer + diff --git a/.github/workflows/build-plugin.yml b/.github/workflows/build-plugin.yml index 902c8e1..33d2c43 100644 --- a/.github/workflows/build-plugin.yml +++ b/.github/workflows/build-plugin.yml @@ -3,7 +3,6 @@ on: push: branches: - main - - towards-juce-and-rack - 'releases/**' tags: - 'v**' @@ -14,30 +13,168 @@ on: types: - completed +env: + rack-sdk-version: 2.4.0 + rack-plugin-toolchain-dir: /home/build/rack-plugin-toolchain + defaults: run: shell: bash jobs: - build_plugin: - name: ${{ matrix.name }} Build - runs-on: ${{ matrix.os }} + + modify-plugin-version: + name: Modify plugin version + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/cache@v3 + id: plugin-version-cache + with: + path: plugin.json + key: ${{ github.sha }}-${{ github.run_id }} + - run: | + gitrev=`git rev-parse --short HEAD` + pluginversion=`jq -r '.version' plugin.json` + echo "Set plugin version from $pluginversion to $pluginversion-$gitrev" + cat <<< `jq --arg VERSION "$pluginversion-nightly-$gitrev" '.version=$VERSION' plugin.json` > plugin.json + # only modify plugin version if no tag was created + if: "! startsWith(github.ref, 'refs/tags/v')" + + build: + name: ${{ matrix.platform }} + needs: modify-plugin-version + runs-on: ubuntu-latest + container: + image: ghcr.io/qno/rack-plugin-toolchain-win-linux + options: --user root strategy: + fail-fast: false matrix: - include: - - os: windows-latest - - os: macos-latest - - os: ubuntu-latest + platform: [win, lin] steps: - - name: Checkout code - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: submodules: recursive + - uses: actions/cache@v3 + id: plugin-version-cache + with: + path: plugin.json + key: ${{ github.sha }}-${{ github.run_id }} + - name: Build plugin + run: | + export PLUGIN_DIR=$GITHUB_WORKSPACE + pushd ${{ env.rack-plugin-toolchain-dir }} + make plugin-build-${{ matrix.platform }}-x64 + - name: Upload artifact + uses: actions/upload-artifact@v3 + with: + path: ${{ env.rack-plugin-toolchain-dir }}/plugin-build + name: ${{ matrix.platform }} - # TODO: a linux apt-get stage here + build-mac: + name: mac + needs: modify-plugin-version + runs-on: macos-12 + strategy: + fail-fast: false + matrix: + platform: [x64, arm64] + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + - uses: actions/cache@v3 + id: plugin-version-cache + with: + path: plugin.json + key: ${{ github.sha }}-${{ github.run_id }} + - name: Get Rack-SDK + run: | + pushd $HOME + curl -o Rack-SDK.zip https://vcvrack.com/downloads/Rack-SDK-${{ env.rack-sdk-version }}-mac-${{ matrix.platform }}.zip + unzip Rack-SDK.zip + - name: Build plugin + run: | + export RACK_DIR=$HOME/Rack-SDK + CROSS_COMPILE_TARGET_x64=x86_64-apple-darwin + CROSS_COMPILE_TARGET_arm64=arm64-apple-darwin + export RACK_DIR=$HOME/Rack-SDK + export CROSS_COMPILE=$CROSS_COMPILE_TARGET_${{ matrix.platform }} + make -j 4 dep + make -j 4 dist + echo "Plugin architecture '$(lipo -archs plugin.dylib)'" + - name: Upload artifact + uses: actions/upload-artifact@v3 + with: + path: dist + name: mac-${{ matrix.platform }} - - name: Build project + publish: + name: Publish Release + # only create a release if a tag was created that is called e.g. v1.2.3 + # see also https://vcvrack.com/manual/Manifest#version + if: startsWith(github.ref, 'refs/tags/v') && github.repository_owner == 'baconpaul' + runs-on: ubuntu-latest + needs: [build, build-mac] + steps: + - uses: actions/checkout@v3 + - uses: FranzDiebold/github-env-vars-action@v2 + - name: Check if plugin version matches tag run: | - cmake -S . -B ./build -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" -DBUILD_JUCE_PLUGIN=TRUE - cmake --build ./build --config Release --target awcons-installer + pluginversion=`jq -r '.version' plugin.json` + if [ "v$pluginversion" != "${{ env.CI_REF_NAME }}" ]; then + echo "Plugin version from plugin.json 'v$pluginversion' doesn't match with tag version '${{ env.CI_REF_NAME }}'" + exit 1 + fi + - name: Create Release + uses: softprops/action-gh-release@v1 + with: + tag_name: ${{ github.ref }} + name: Release ${{ env.CI_REF_NAME }} + body: | + ${{ env.GITHUB_REPOSITORY_NAME }} VCV Rack Plugin ${{ env.CI_REF_NAME }} + draft: false + prerelease: false + - uses: actions/download-artifact@v3 + with: + path: _artifacts + - name: Upload release assets + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: _artifacts/**/*.vcvplugin + tag: ${{ github.ref }} + file_glob: true + + publish-nightly: + name: Publish Nightly + # only create a release if a tag was created that is called e.g. v1.2.3 + # see also https://vcvrack.com/manual/Manifest#version + if: ${{ github.ref == 'refs/heads/main' && github.repository_owner == 'baconpaul' }} + runs-on: ubuntu-latest + needs: [build, build-mac] + steps: + - uses: actions/download-artifact@v3 + with: + path: _artifacts + - name: Delete old release assets + uses: mknejp/delete-release-assets@v1 + with: + token: ${{ github.token }} + tag: Nightly # This may also be of the form 'refs/tags/staging' + assets: '*' + - name: Upload release assets + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: _artifacts/**/*.vcvplugin + tag: Nightly + file_glob: true + - name: Tag Repo + uses: richardsimko/update-tag@v1.0.7 + with: + tag_name: Nightly + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}