Skip to content

Demucs Runtime Assets #7

Demucs Runtime Assets

Demucs Runtime Assets #7

name: Demucs Runtime Assets
on:
workflow_dispatch:
inputs:
release_tag:
description: GitHub Release tag used to host runtime assets
required: true
default: demucs-runtime-assets
win_profiles:
description: Windows runtime profiles
required: true
default: cpu,cuda,directml,xpu
mac_arm64_profiles:
description: macOS arm64 runtime profiles
required: true
default: cpu,mps
mac_x64_profiles:
description: macOS x64 runtime profiles
required: true
default: cpu
asset_version:
description: Optional runtime asset version suffix
required: false
default: ''
permissions:
contents: write
jobs:
build_runtime_assets_win:
runs-on: windows-latest
timeout-minutes: 180
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Setup PNPM
uses: pnpm/action-setup@v4
with:
version: 9
- name: Setup Node
uses: actions/setup-node@v6
with:
node-version: 20
cache: pnpm
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.11'
- name: Ensure setuptools available
run: python -m pip install --upgrade pip setuptools wheel
- name: Restore Demucs runtime cache (Windows)
uses: actions/cache@v5
with:
path: |
vendor/demucs/models
vendor/demucs/win32-x64/runtime
vendor/demucs/win32-x64/runtime-cpu
vendor/demucs/win32-x64/runtime-cuda
vendor/demucs/win32-x64/runtime-directml
vendor/demucs/win32-x64/runtime-xpu
vendor/demucs/bootstrap
key: demucs-runtime-assets-${{ runner.os }}-${{ hashFiles('scripts/demucs-runtime-profiles.json', 'scripts/demucs-model-manifest.json', 'scripts/ensure-demucs-runtime.mjs', 'scripts/prepare-demucs-runtimes.mjs', 'scripts/package-demucs-runtime-assets.mjs', 'scripts/merge-demucs-runtime-manifests.mjs', 'scripts/lib/*.mjs') }}
restore-keys: |
demucs-runtime-assets-${{ runner.os }}-
- name: Install dependencies
run: pnpm install --frozen-lockfile=false
- name: Ensure selected Demucs runtimes (Windows)
run: pnpm run demucs:runtime:ensure -- --ci --profiles "${{ inputs.win_profiles }}"
- name: Package runtime assets (Windows)
shell: pwsh
run: |
$args = @(
"scripts/package-demucs-runtime-assets.mjs",
"--platform", "win32-x64",
"--profiles", "${{ inputs.win_profiles }}",
"--output-root", "dist/demucs-runtime-assets-win32-x64",
"--release-tag", "${{ inputs.release_tag }}"
)
if ("${{ inputs.asset_version }}".Trim()) {
$args += @("--asset-version", "${{ inputs.asset_version }}")
}
node @args
- name: Upload workflow artifact (Windows)
uses: actions/upload-artifact@v7
with:
name: demucs-runtime-assets-win32-x64
path: |
dist/demucs-runtime-assets-win32-x64
build_runtime_assets_mac_arm64:
runs-on: macos-latest
timeout-minutes: 180
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Setup PNPM
uses: pnpm/action-setup@v4
with:
version: 9
- name: Setup Node
uses: actions/setup-node@v6
with:
node-version: 20
cache: pnpm
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.11'
- name: Ensure setuptools available
run: python -m pip install --upgrade pip setuptools wheel
- name: Restore Demucs runtime cache (macOS arm64)
uses: actions/cache@v5
with:
path: |
vendor/demucs/models
vendor/demucs/darwin-arm64/runtime
vendor/demucs/darwin-arm64/runtime-cpu
vendor/demucs/darwin-arm64/runtime-mps
vendor/demucs/bootstrap
key: demucs-runtime-assets-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('scripts/demucs-runtime-profiles.json', 'scripts/demucs-model-manifest.json', 'scripts/ensure-demucs-runtime.mjs', 'scripts/prepare-demucs-runtimes.mjs', 'scripts/package-demucs-runtime-assets.mjs', 'scripts/merge-demucs-runtime-manifests.mjs', 'scripts/lib/*.mjs') }}
restore-keys: |
demucs-runtime-assets-${{ runner.os }}-${{ runner.arch }}-
- name: Install dependencies
run: pnpm install --frozen-lockfile=false
- name: Ensure selected Demucs runtimes (macOS arm64)
run: node scripts/ensure-demucs-runtime.mjs --ci --platform darwin-arm64 --profiles "${{ inputs.mac_arm64_profiles }}"
- name: Package runtime assets (macOS arm64)
run: |
args=(
"scripts/package-demucs-runtime-assets.mjs"
"--platform" "darwin-arm64"
"--profiles" "${{ inputs.mac_arm64_profiles }}"
"--output-root" "dist/demucs-runtime-assets-darwin-arm64"
"--release-tag" "${{ inputs.release_tag }}"
)
if [ -n "${{ inputs.asset_version }}" ]; then
args+=("--asset-version" "${{ inputs.asset_version }}")
fi
node "${args[@]}"
- name: Upload workflow artifact (macOS arm64)
uses: actions/upload-artifact@v7
with:
name: demucs-runtime-assets-darwin-arm64
path: |
dist/demucs-runtime-assets-darwin-arm64
build_runtime_assets_mac_x64:
runs-on: macos-15-intel
timeout-minutes: 180
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Setup PNPM
uses: pnpm/action-setup@v4
with:
version: 9
- name: Setup Node
uses: actions/setup-node@v6
with:
node-version: 20
cache: pnpm
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.11'
- name: Ensure setuptools available
run: python -m pip install --upgrade pip setuptools wheel
- name: Restore Demucs runtime cache (macOS x64)
uses: actions/cache@v5
with:
path: |
vendor/demucs/models
vendor/demucs/darwin-x64/runtime
vendor/demucs/darwin-x64/runtime-cpu
vendor/demucs/bootstrap
key: demucs-runtime-assets-${{ runner.os }}-${{ runner.arch }}-darwin-x64-${{ hashFiles('scripts/demucs-runtime-profiles.json', 'scripts/demucs-model-manifest.json', 'scripts/ensure-demucs-runtime.mjs', 'scripts/prepare-demucs-runtimes.mjs', 'scripts/package-demucs-runtime-assets.mjs', 'scripts/merge-demucs-runtime-manifests.mjs', 'scripts/lib/*.mjs') }}
restore-keys: |
demucs-runtime-assets-${{ runner.os }}-${{ runner.arch }}-darwin-x64-
- name: Install dependencies
run: pnpm install --frozen-lockfile=false
- name: Ensure selected Demucs runtimes (macOS x64)
run: node scripts/ensure-demucs-runtime.mjs --ci --platform darwin-x64 --profiles "${{ inputs.mac_x64_profiles }}"
- name: Package runtime assets (macOS x64)
run: |
args=(
"scripts/package-demucs-runtime-assets.mjs"
"--platform" "darwin-x64"
"--profiles" "${{ inputs.mac_x64_profiles }}"
"--output-root" "dist/demucs-runtime-assets-darwin-x64"
"--release-tag" "${{ inputs.release_tag }}"
)
if [ -n "${{ inputs.asset_version }}" ]; then
args+=("--asset-version" "${{ inputs.asset_version }}")
fi
node "${args[@]}"
- name: Upload workflow artifact (macOS x64)
uses: actions/upload-artifact@v7
with:
name: demucs-runtime-assets-darwin-x64
path: |
dist/demucs-runtime-assets-darwin-x64
publish_runtime_assets:
needs:
- build_runtime_assets_win
- build_runtime_assets_mac_arm64
- build_runtime_assets_mac_x64
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Download runtime assets (Windows)
uses: actions/download-artifact@v8
with:
name: demucs-runtime-assets-win32-x64
path: artifacts/demucs-runtime-assets-win32-x64
- name: Download runtime assets (macOS arm64)
uses: actions/download-artifact@v8
with:
name: demucs-runtime-assets-darwin-arm64
path: artifacts/demucs-runtime-assets-darwin-arm64
- name: Download runtime assets (macOS x64)
uses: actions/download-artifact@v8
with:
name: demucs-runtime-assets-darwin-x64
path: artifacts/demucs-runtime-assets-darwin-x64
- name: Merge runtime manifests
run: |
node scripts/merge-demucs-runtime-manifests.mjs \
--input-roots artifacts/demucs-runtime-assets-win32-x64,artifacts/demucs-runtime-assets-darwin-arm64,artifacts/demucs-runtime-assets-darwin-x64 \
--output-root dist/demucs-runtime-assets \
--release-tag "${{ inputs.release_tag }}"
- name: Show packaged runtime assets
run: find dist/demucs-runtime-assets -maxdepth 1 -type f | sort
- name: Create or update GitHub release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_REPO: ${{ github.repository }}
TAG_NAME: ${{ inputs.release_tag }}
run: |
set -euo pipefail
shopt -s nullglob
assets=(dist/demucs-runtime-assets/*)
if [ ${#assets[@]} -eq 0 ]; then
echo "No runtime assets found."
exit 1
fi
if gh release view "$TAG_NAME" >/dev/null 2>&1; then
gh release upload "$TAG_NAME" "${assets[@]}" --clobber
gh release edit "$TAG_NAME" --title "$TAG_NAME"
else
gh release create "$TAG_NAME" "${assets[@]}" --title "$TAG_NAME" --verify-tag
fi