Repository navigation
Demucs Runtime Assets #7
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |