Skip to content

Minor cleanup after website stuff merge. #817

Minor cleanup after website stuff merge.

Minor cleanup after website stuff merge. #817

Workflow file for this run

# borrowed from pamplejuce: https://github.com/sudara/pamplejuce
# MIT License
# Copyright (c) 2022 Sudara Williams
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
# follow this: https://melatonin.dev/blog/how-to-code-sign-and-notarize-macos-audio-plugins-in-ci/
name: HARP
on:
workflow_dispatch: # lets you run a build from the UI
push:
# When pushing new commits, cancel any running builds on that branch
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
env:
PROJECT_NAME: HARP
BUILD_TYPE: Release
BUILD_DIR: Builds
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DISPLAY: :0 # Linux pluginval needs this
CMAKE_BUILD_PARALLEL_LEVEL: 3 # Use up to 3 cpus to build juceaide, etc
HOMEBREW_NO_INSTALL_CLEANUP: 1
# jobs are run in paralell on different machines
# all steps run in series
jobs:
build_and_test:
name: ${{ matrix.name }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false # show all errors for each platform (vs. cancel jobs on error)
matrix:
include:
- name: Linux
os: ubuntu-22.04
pluginval-binary: ./pluginval
ccache: ccache
- name: Windows
os: windows-latest
pluginval-binary: ./pluginval.exe
ccache: sccache
- name: macOS
os: macos-14
pluginval-binary: pluginval.app/Contents/MacOS/pluginval
ccache: ccache
steps:
# This is just easier than debugging different compilers on different platforms
- name: Set up Clang
if: ${{ matrix.name != 'macOS' }}
uses: egor-tensin/setup-clang@v1
# This also starts up our "fake" display Xvfb, needed for pluginval
- name: Install JUCE's Linux Deps
if: runner.os == 'Linux'
# Thanks to McMartin & co https://forum.juce.com/t/list-of-juce-dependencies-under-linux/15121/44
run: |
sudo apt-get update && sudo apt install libasound2-dev libx11-dev libxinerama-dev libxext-dev libfreetype6-dev libwebkit2gtk-4.0-dev libglu1-mesa-dev xvfb ninja-build libcurl4-openssl-dev
sudo /usr/bin/Xvfb $DISPLAY &
- name: Cache IPP (Windows)
if: runner.os == 'Windows'
id: cache-ipp
uses: actions/cache@v4
with:
key: ipp-v1
path: C:\Program Files (x86)\Intel\oneAPI\ipp
- name: Install IPP (Windows)
if: (runner.os == 'Windows') && (steps.cache-ipp.outputs.cache-hit != 'true')
shell: bash
run: |
curl --output oneapi.exe https://registrationcenter-download.intel.com/akdlm/irc_nas/19078/w_BaseKit_p_2023.0.0.25940_offline.exe
./oneapi.exe -s -x -f oneapi
./oneapi/bootstrapper.exe -s -c --action install --components=intel.oneapi.win.ipp.devel --eula=accept -p=NEED_VS2022_INTEGRATION=1 --log-dir=.
- name: Save IPP cache even on job fail
if: runner.os == 'Windows' && (steps.cache-ipp.outputs.cache-hit != 'true')
uses: actions/cache/save@v3
with:
path: C:\Program Files (x86)\Intel\oneAPI\ipp
key: ipp-v1
# This lets us use sscache on Windows
# We need to install ccache here for Windows to grab the right version
- name: Install Ninja (Windows)
if: runner.os == 'Windows'
shell: bash
run: choco install ninja ccache
- name: Install macOS Deps
if: ${{ matrix.name == 'macOS' }}
run: brew install ninja osxutils
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: recursive # Get JUCE populated
- name: Setup Common Environment Variables
shell: bash
run: |
VERSION=$(cat VERSION)
echo "ARTIFACTS_PATH=${{ env.BUILD_DIR }}/${{ env.PROJECT_NAME }}_artefacts/${{ env.BUILD_TYPE }}" >> $GITHUB_ENV
echo "PRODUCT_NAME=${{ env.PROJECT_NAME }}-$VERSION-${{ matrix.name }}" >> $GITHUB_ENV
- name: Setup Environment Variables for macOS
if: matrix.name == 'macOS'
shell: bash
run: |
echo "STANDALONE_PATH=${{ env.PROJECT_NAME }}_artefacts/${{ env.BUILD_TYPE }}/${{ env.PROJECT_NAME }}.app" >> $GITHUB_ENV
- name: Setup Environment Variables for Windows
if: matrix.name == 'Windows'
shell: bash
run: |
echo "STANDALONE_PATH=${{ env.PROJECT_NAME }}_artefacts/${{ env.BUILD_TYPE }}/${{ env.PROJECT_NAME }}.exe" >> $GITHUB_ENV
- name: Setup Environment Variables for Linux
if: matrix.name == 'Linux'
shell: bash
run: |
echo "STANDALONE_PATH=${{ env.PROJECT_NAME }}_artefacts/${{ env.BUILD_TYPE }}/${{ env.PROJECT_NAME }}" >> $GITHUB_ENV
- name: ccache
uses: hendrikmuhs/ccache-action@main
with:
key: v3-${{ matrix.os }}-${{ matrix.type }}
variant: ${{ matrix.ccache }}
- name: Import Certificates (macOS)
uses: apple-actions/import-codesign-certs@v1
if: ${{ matrix.name == 'macOS' }}
with:
p12-file-base64: ${{ secrets.DEV_ID_APP_CERT }}
p12-password: ${{ secrets.DEV_ID_APP_PASSWORD }}
# - name: Set up Python ${{ matrix.python-version }} (Windows)
# if: matrix.name == 'Windows'
# uses: actions/setup-python@v5
# with:
# python-version: '3.10'
- name: Configure
shell: bash
run: cmake -B ${{ env.BUILD_DIR }} -G Ninja -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE}} -DCMAKE_C_COMPILER_LAUNCHER=${{ matrix.ccache }} -DCMAKE_CXX_COMPILER_LAUNCHER=${{ matrix.ccache }} -DCMAKE_OSX_ARCHITECTURES="arm64" .
# dummy configure
# run: mkdir -p ${{ env.BUILD_DIR }}
- name: Build
shell: bash
run: cmake --build ${{ env.BUILD_DIR }} --config ${{ env.BUILD_TYPE }} --parallel 4
# dummy build
# run: touch dummy
# why the python3 -m pip install packaging? see this issue: https://github.com/nodejs/node-gyp/issues/2869
- name: Install Python dependencies for MACOS dmg
if: ${{ matrix.name == 'macOS' }}
run: python3 -m pip install --upgrade packaging pip setuptools --break-system-packages --user
- name: Create DMG, Notarize and Staple (macOS)
if: ${{ matrix.name == 'macOS' }}
run: |
/usr/local/bin/python3 -m pip install packaging
chmod +x ./packaging/package.sh
./packaging/package.sh "${{ secrets.DEVELOPER_ID_APPLICATION}}" "${{ env.ARTIFACTS_PATH }}" "${{ env.PROJECT_NAME }}" "${{ env.PRODUCT_NAME }}" "${{ secrets.NOTARIZATION_USERNAME }}" "${{ secrets.NOTARIZATION_PASSWORD }}" "${{ secrets.TEAM_ID }}"
- name: Upload Zip (Windows)
if: ${{ matrix.name == 'Windows' }}
uses: actions/upload-artifact@v4
with:
name: ${{ env.PRODUCT_NAME }}
path: ${{ env.ARTIFACTS_PATH }}
- name: Upload Zip (Linux)
if: ${{ matrix.name == 'Linux' }}
uses: actions/upload-artifact@v4
with:
name: ${{ env.PRODUCT_NAME }}
path: ${{ env.ARTIFACTS_PATH }}
- name: Upload DMG (macOS)
if: ${{ matrix.name == 'macOS' }}
uses: actions/upload-artifact@v4
with:
name: ${{ env.PRODUCT_NAME }}
path: packaging/${{ env.PRODUCT_NAME }}.dmg
release:
if: contains(github.ref, 'tags/v')
runs-on: ubuntu-latest
needs: build_and_test
steps:
# Needed to access the RELEASE.md file
- name: Checkout code
uses: actions/checkout@v4
with:
ref: ${{ github.ref }}
fetch-depth: 1
- name: Download Artifacts
uses: actions/download-artifact@v4
with:
name: ${{ env.PRODUCT_NAME }}
path: ./artifacts
# - name: Breakpoint if tests failed
# # if: failure()
# uses: namespacelabs/breakpoint-action@v0
# with:
# duration: 30m
# authorized-users: xribene
# zip each of the folders in the artifacts folder
- name: Zip Artifacts
run: |
for d in ./artifacts/*; do
if [ -d "$d" ]; then
echo $d
pushd "$d" > /dev/null
echo $PWD
zip -r ../$(basename "$PWD").zip *
cd ..
rm -rf $(basename "$d")
popd > /dev/null
fi
done
# - name: Display structure of downloaded and zipped files
# run: ls -R
- name: Create Release
id: create_release
uses: ncipollo/release-action@v1
with:
tag: ${{ github.ref_name }}
name: ${{ github.event.repository.name}} ${{ github.ref_name }}
# body: |
# ## Changes
# - Description of changes
bodyFile: ./RELEASE.md
artifacts: ./artifacts/*
token: ${{ secrets.GITHUB_TOKEN }}
allowUpdates: true
replacesArtifacts: true