Skip to content

Compile, Test, and Deploy #511

Compile, Test, and Deploy

Compile, Test, and Deploy #511

Workflow file for this run

name: Compile, Test, and Deploy
on:
pull_request: {}
# push:
# branches:
# - main
release:
types: [published]
jobs:
build-ubuntu:
runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix:
include:
# - { python-version: "3.8", pythonLibPath: "/opt/python/cp39-cp38/lib", pythonInclude: "/opt/python/cp38-cp38/include/python3.8", cibwbuild: "cp38-manylinux_x86_64"}
# - { python-version: "3.9", pythonLibPath: "/opt/python/cp39-cp39/lib", pythonInclude: "/opt/python/cp39-cp39/include/python3.9", cibwbuild: "cp39-manylinux_x86_64"}
- { python-version: "3.10", pythonLibPath: "/opt/python/cp310-cp310/lib", pythonInclude: "/opt/python/cp310-cp310/include/python3.10", cibwbuild: "cp310-manylinux_x86_64"}
- { python-version: "3.11", pythonLibPath: "/opt/python/cp311-cp311/lib", pythonInclude: "/opt/python/cp311-cp311/include/python3.11", cibwbuild: "cp311-manylinux_x86_64"}
- { python-version: "3.12", pythonLibPath: "/opt/python/cp312-cp312/lib", pythonInclude: "/opt/python/cp312-cp312/include/python3.12", cibwbuild: "cp312-manylinux_x86_64"}
# - { python-version: "3.8", pythonLibPath: "/opt/python/cp39-cp38/lib", pythonInclude: "/opt/python/cp38-cp38/include/python3.8", cibwbuild: "cp38-manylinux_aarch64"}
# - { python-version: "3.9", pythonLibPath: "/opt/python/cp39-cp39/lib", pythonInclude: "/opt/python/cp39-cp39/include/python3.9", cibwbuild: "cp39-manylinux_aarch64"}
# - { python-version: "3.10", pythonLibPath: "/opt/python/cp310-cp310/lib", pythonInclude: "/opt/python/cp310-cp310/include/python3.10", cibwbuild: "cp310-manylinux_aarch64"}
# - { python-version: "3.11", pythonLibPath: "/opt/python/cp311-cp311/lib", pythonInclude: "/opt/python/cp311-cp311/include/python3.11", cibwbuild: "cp311-manylinux_aarch64"}
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Set up QEMU for aarch64 on Linux
# if: endsWith(${{matrix.cibwbuild}}, "aarch64")
if: runner.os == 'Linux'
uses: docker/setup-qemu-action@v3
with:
platforms: all
- name: clean faust libraries
run: |
rm -rf dawdreamer/faustlibraries/.git
rm thirdparty/faust/architecture/android/app/lib/libsndfile/lib/armeabi-v7a/libsndfile.so
rm thirdparty/faust/architecture/android/app/lib/libsndfile/lib/arm64-v8a/libsndfile.so
- name: Download libfaust
run: |
cd thirdparty/libfaust
python download_libfaust.py
- name: Build wheels
uses: pypa/[email protected]
env:
CIBW_PLATFORM: linux
CIBW_BUILD: ${{ matrix.cibwbuild }}
CIBW_BUILD_VERBOSITY: 3
CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014
CIBW_MANYLINUX_AARCH64_IMAGE: manylinux2014
CIBW_BEFORE_BUILD_LINUX:
export PYTHONLIBPATH=${{ matrix.pythonLibPath }} && export PYTHONINCLUDEPATH=${{ matrix.pythonInclude }} && sh -v build_linux.sh
CIBW_REPAIR_WHEEL_COMMAND_LINUX: >
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/dawdreamer:$PWD/thirdparty/libfaust/ubuntu-x86_64/Release/lib && pip install auditwheel-symbols && (auditwheel repair -w {dest_dir} {wheel} || auditwheel-symbols --manylinux 2014 {wheel})
CIBW_TEST_REQUIRES: -r test-requirements.txt soundfile jax[cpu] flax
CIBW_TEST_COMMAND: "rm -rf dawdreamer/*.so* && cd {project}/tests && python -m pytest -v ."
CIBW_ARCHS: auto64
CIBW_ARCHS_LINUX: auto64 aarch64 # On an Linux Intel runner with qemu installed, build Intel and ARM wheels
CIBW_TEST_SKIP: "*38* *39* *311* *312*" # Only care about 310 (current Google Colab version)
- uses: actions/upload-artifact@v4
with:
name: ${{ matrix.cibwbuild}}
path: ./wheelhouse/*.whl
build-ubuntu-docker:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Build Docker image
run: docker build -t dawdreamer .
build-windows:
runs-on: ${{ matrix.os }}
strategy:
# fail-fast: false
matrix:
include:
# - { os: windows-2022, python-version: "3.8", CIBW-BUILD: "cp38*"}
# - { os: windows-2022, python-version: "3.9", CIBW-BUILD: "cp39*"}
- { os: windows-2022, python-version: "3.10", CIBW-BUILD: "cp310*"}
- { os: windows-2022, python-version: "3.11", CIBW-BUILD: "cp311*"}
- { os: windows-2022, python-version: "3.12", CIBW-BUILD: "cp312*"}
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Setup Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v2
- name: Get CMake
uses: lukka/get-cmake@latest
- name: clean faust libraries
run: |
Remove-Item -Recurse -Force "dawdreamer/faustlibraries/.git"
- name: Download libfaust
shell: cmd
run: |
cd thirdparty/libfaust
python download_libfaust.py
- name: Build libsamplerate
run: |
cd thirdparty/libsamplerate
cmake -DCMAKE_BUILD_TYPE=Release -Bbuild_release
cd build_release
msbuild libsamplerate.sln /property:Configuration=Release
- name: Build Windows (Release)
run: |
msbuild Builds/VisualStudio2022/DawDreamer.sln /property:Configuration=Release
- name: Install cibuildwheel
run: python -m pip install cibuildwheel
- name: Build Wheels
run: |
python -m cibuildwheel --output-dir wheelhouse
env:
PYTHONMAJOR: ${{ matrix.python-version }}
CIBW_BUILD_VERBOSITY: 1
CIBW_TEST_REQUIRES: -r test-requirements.txt
CIBW_TEST_COMMAND: "cd /D {project}\\tests && python -m pytest -v ."
CIBW_ARCHS: auto64
CIBW_BUILD: ${{matrix.CIBW-BUILD}}
CIBW_TEST_SKIP: "*312*"
- uses: actions/upload-artifact@v4
with:
name: windows-${{ matrix.python-version}}
path: ./wheelhouse/*.whl
- name: "Build docs for GitHub pages"
if: ${{ matrix.python-version == '3.10' && github.event_name == 'release' && github.event.action == 'published' }}
shell: cmd
run: |
pip install -U sphinx
cd docs && make.bat html
- name: Deploy docs
uses: peaceiris/actions-gh-pages@v4
# todo: make condition for being on main branch
if: ${{ matrix.python-version == '3.10' && github.event_name == 'release' && github.event.action == 'published' }}
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./docs/_build/html
build-macos:
runs-on: ${{ matrix.os }}
strategy:
# fail-fast: false
matrix:
include:
# - { os: macos-12, build: cp39-macosx_x86_64, python-version: "3.9", ARCHS: "x86_64" }
- { os: macos-12, build: cp310-macosx_x86_64, python-version: "3.10", ARCHS: "x86_64" }
- { os: macos-12, build: cp311-macosx_x86_64, python-version: "3.11", ARCHS: "x86_64" }
- { os: macos-12, build: cp312-macosx_x86_64, python-version: "3.12", ARCHS: "x86_64" }
# - { os: macos-12, build: cp39-macosx_arm64, python-version: "3.9", ARCHS: "arm64" }
- { os: macos-12, build: cp310-macosx_arm64, python-version: "3.10", ARCHS: "arm64" }
- { os: macos-12, build: cp311-macosx_arm64, python-version: "3.11", ARCHS: "arm64" }
- { os: macos-12, build: cp312-macosx_arm64, python-version: "3.12", ARCHS: "arm64" }
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Get CMake
uses: lukka/get-cmake@latest
- name: Build libsamplerate
run: |
cd thirdparty/libsamplerate
cmake -DCMAKE_BUILD_TYPE=Release -Bbuild_release -DCMAKE_OSX_ARCHITECTURES="${{matrix.ARCHS}}" -DLIBSAMPLERATE_EXAMPLES=off -DCMAKE_OSX_DEPLOYMENT_TARGET=11.0
make --directory=build_release
cd ../..
- name: clean faust libraries
run: |
rm -rf dawdreamer/faustlibraries/.git
- name: Download libfaust
run: |
cd thirdparty/libfaust
python download_libfaust.py
- name: Build wheels ${{ matrix.python-version }}
uses: pypa/[email protected]
env:
# note that the Projucer project refers to PYTHONMAJOR and pythonLocation, so they must be set here
PYTHONMAJOR: ${{ matrix.python-version }}
MACOSX_DEPLOYMENT_TARGET: 12.0
CIBW_BUILD_VERBOSITY: 1
CIBW_BEFORE_BUILD: |
export pythonLocation=$(python${{matrix.python-version}}-config --prefix)
otool -L $pythonLocation/bin/python3
xcodebuild ARCHS="${{matrix.ARCHS}}" ONLY_ACTIVE_ARCH=NO -configuration Release-${{matrix.ARCHS}} -project Builds/MacOSX/DawDreamer.xcodeproj/ CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED="NO" CODE_SIGN_ENTITLEMENTS="" CODE_SIGNING_ALLOWED="NO"
cd Builds/MacOSX/build/Release-${{matrix.ARCHS}}
mv dawdreamer.so.dylib dawdreamer.so
CIBW_TEST_REQUIRES: -r test-requirements.txt jax[cpu] flax
CIBW_TEST_COMMAND: "cd {project}/tests; python -m pytest -v ."
CIBW_BUILD: ${{matrix.build}}
CIBW_ARCHS: auto64
CIBW_ARCHS_MACOS: ${{matrix.ARCHS}}
CIBW_ENVIRONMENT_MACOS: ARCHS="${{matrix.ARCHS}}"
CIBW_TEST_SKIP: "*arm64* *312*"
- uses: actions/upload-artifact@v4
with:
name: macos-${{ matrix.build}}
path: ./wheelhouse/*.whl
upload-pypi:
needs: [build-windows, build-ubuntu, build-macos]
runs-on: ubuntu-latest
name: "Upload wheels to PyPI"
if: github.event_name == 'release' && github.event.action == 'published'
steps:
- uses: actions/download-artifact@v4
with:
path: dist
- uses: pypa/gh-action-pypi-publish@release/v1
with:
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}