name: Build & Release Binaries on: release: types: [published] workflow_dispatch: inputs: release_tag: description: 'Release tag to attach binaries to (e.g. v0.1.0)' required: true type: string skip_linux: description: 'Skip Linux build' required: false type: boolean default: false skip_mac: description: 'Skip macOS build' required: false type: boolean default: false skip_windows: description: 'Skip Windows build' required: false type: boolean default: false permissions: contents: write jobs: build-linux: name: Build · linux-x64 runs-on: ubuntu-22.04 if: github.event_name != 'workflow_dispatch' || !inputs.skip_linux steps: - name: Checkout uses: actions/checkout@v4 with: submodules: recursive - name: Install build tools run: | sudo apt-get update -qq sudo apt-get install -y -qq cmake build-essential pkg-config libopenblas-dev - name: ccache uses: hendrikmuhs/ccache-action@v1.2 with: create-symlink: true key: build-linux-ubuntu-22.04 - name: Install CUDA toolkit uses: Jimver/cuda-toolkit@v0.2.30 with: log-file-suffix: 'ubuntu-22.04.txt' - name: Install Vulkan SDK uses: humbletim/install-vulkan-sdk@v1.2 with: version: 1.4.309.0 cache: true - name: Configure & Build run: | ./buildall.sh - name: Smoke test continue-on-error: true shell: bash run: | BIN="build" "$BIN/ace-lm" 2>&1 | head -5 "$BIN/ace-synth" 2>&1 | head -5 "$BIN/ace-understand" 2>&1 | head -5 "$BIN/neural-codec" 2>&1 | head -5 "$BIN/quantize" 2>&1 | head -3 "$BIN/mp3-codec" 2>&1 | head -3 - name: Resolve release tag id: tag shell: bash run: | if [ "${{ github.event_name }}" = "release" ]; then echo "value=${{ github.event.release.tag_name }}" >> $GITHUB_OUTPUT else echo "value=${{ inputs.release_tag }}" >> $GITHUB_OUTPUT fi - name: Package binaries run: | mkdir -p dist cp build/ace-* \ build/quantize build/neural-codec build/mp3-codec build/*.so dist/ tar -C dist -czf "acestep-linux-x64.tar.gz" . - name: Upload to release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | gh release upload "${{ steps.tag.outputs.value }}" \ "acestep-linux-x64.tar.gz" \ --clobber build-mac: name: Build · macos-arm64-metal runs-on: macos-latest if: github.event_name != 'workflow_dispatch' || !inputs.skip_mac steps: - name: Checkout uses: actions/checkout@v4 with: submodules: recursive - name: ccache uses: hendrikmuhs/ccache-action@v1.2 with: create-symlink: true key: build-mac-macos-latest - name: Configure & Build run: | mkdir build cd build cmake .. cmake --build . --config Release -j "$(nproc)" - name: Smoke test continue-on-error: true shell: bash run: | BIN="build" "$BIN/ace-lm" 2>&1 | head -5 "$BIN/ace-synth" 2>&1 | head -5 "$BIN/ace-understand" 2>&1 | head -5 "$BIN/neural-codec" 2>&1 | head -5 "$BIN/quantize" 2>&1 | head -3 "$BIN/mp3-codec" 2>&1 | head -3 - name: Resolve release tag id: tag shell: bash run: | if [ "${{ github.event_name }}" = "release" ]; then echo "value=${{ github.event.release.tag_name }}" >> $GITHUB_OUTPUT else echo "value=${{ inputs.release_tag }}" >> $GITHUB_OUTPUT fi - name: Package binaries run: | mkdir -p dist cd build for bin in ace-* quantize neural-codec mp3-codec; do install_name_tool -add_rpath @executable_path "$bin" done cp -P ace-* quantize neural-codec mp3-codec libacestep*.a libggml*.dylib ../dist/ cd .. tar -C dist -czf "acestep-macos-arm64-metal.tar.gz" . - name: Upload to release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | gh release upload "${{ steps.tag.outputs.value }}" \ "acestep-macos-arm64-metal.tar.gz" \ --clobber build-windows: name: Build · windows-x64 runs-on: windows-latest if: github.event_name != 'workflow_dispatch' || !inputs.skip_windows steps: - name: Checkout uses: actions/checkout@v4 with: submodules: recursive - name: Cache CUDA toolkit id: cache-cuda uses: actions/cache@v4 with: path: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA key: cuda-12-windows-latest - name: Install CUDA toolkit if: steps.cache-cuda.outputs.cache-hit != 'true' uses: Jimver/cuda-toolkit@v0.2.30 with: log-file-suffix: 'windows-latest.txt' - name: Install Vulkan SDK uses: humbletim/install-vulkan-sdk@v1.2 with: version: 1.4.309.0 cache: true - name: Cache build directory uses: actions/cache@v4 with: path: build-msvc key: build-msvc-${{ github.sha }} restore-keys: | build-msvc- - name: Configure & Build shell: pwsh run: | # Configure — only print errors cmake -S . -B build-msvc ` -DGGML_CPU_ALL_VARIANTS=ON ` -DGGML_CUDA=ON ` -DGGML_VULKAN=ON ` -DGGML_BACKEND_DL=ON ` --log-level=ERROR 2>&1 | Where-Object { $_ -notmatch '^--' } # Build — suppress per-file progress, only show warnings/errors cmake --build build-msvc --config Release -j $env:NUMBER_OF_PROCESSORS ` -- /v:minimal /consoleloggerparameters:ErrorsOnly 2>&1 ` | Where-Object { $_ -match '(error|warning|FAILED|fatal)' -or $_ -eq '' } ` | Select-Object -Last 50 - name: Smoke test continue-on-error: true shell: bash run: | BIN="build-msvc/Release" "$BIN/ace-lm.exe" 2>&1 | head -5 "$BIN/ace-synth.exe" 2>&1 | head -5 "$BIN/ace-understand.exe" 2>&1 | head -5 "$BIN/neural-codec.exe" 2>&1 | head -5 "$BIN/quantize.exe" 2>&1 | head -3 "$BIN/mp3-codec.exe" 2>&1 | head -3 - name: Resolve release tag id: tag shell: bash run: | if [ "${{ github.event_name }}" = "release" ]; then echo "value=${{ github.event.release.tag_name }}" >> $GITHUB_OUTPUT else echo "value=${{ inputs.release_tag }}" >> $GITHUB_OUTPUT fi - name: Package binaries shell: pwsh run: | New-Item -ItemType Directory -Path dist | Out-Null Copy-Item "build-msvc\Release\*.exe" dist\ -ErrorAction SilentlyContinue Copy-Item "build-msvc\Release\*.dll" dist\ -ErrorAction SilentlyContinue Compress-Archive -Path dist\* -DestinationPath "acestep-windows-x64.zip" - name: Upload to release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} shell: pwsh run: | gh release upload "${{ steps.tag.outputs.value }}" ` "acestep-windows-x64.zip" ` --clobber