mirror of
https://github.com/ggml-org/whisper.cpp.git
synced 2026-07-23 11:10:57 -05:00
* ci : only trigger release jobs for tags This commit removes the building of the release jobs on pushed to master. The motivation for this is that it can be confusing at the momement when releasing that the push to master also triggers the release jobs but the actual release will be skipped. With this change the release job is only run when a tag is pushed which should result in a single Release github actions job and make it easier to follow. * ci : add GGML_NATIVE=OFF for ubuntu-22-gcc
647 lines
26 KiB
YAML
647 lines
26 KiB
YAML
name: Release
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
create_release:
|
|
description: 'Create new release'
|
|
required: true
|
|
type: boolean
|
|
pre_release_tag:
|
|
description: 'Pre-release tag name'
|
|
required: false
|
|
type: string
|
|
|
|
push:
|
|
tags:
|
|
- 'v*'
|
|
|
|
env:
|
|
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
|
|
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }}
|
|
cancel-in-progress: true
|
|
|
|
permissions:
|
|
contents: write # for creating release
|
|
|
|
jobs:
|
|
determine-tag:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
tag_name: ${{ steps.tag.outputs.name }}
|
|
should_release: ${{ steps.tag.outputs.should_release }}
|
|
|
|
steps:
|
|
- name: Checkout with full history
|
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Determine tag name
|
|
id: tag
|
|
shell: bash
|
|
run: |
|
|
BUILD_NUMBER=$(git rev-list --count HEAD)
|
|
SHORT_HASH=$(git rev-parse --short=7 HEAD)
|
|
CUSTOM_TAG="${{ github.event.inputs.pre_release_tag }}"
|
|
SHOULD_RELEASE="false"
|
|
|
|
echo "Raw values:"
|
|
echo "BUILD_NUMBER: $BUILD_NUMBER"
|
|
echo "SHORT_HASH: $SHORT_HASH"
|
|
echo "BRANCH_NAME: ${{ env.BRANCH_NAME }}"
|
|
echo "CUSTOM_TAG: $CUSTOM_TAG"
|
|
|
|
if [[ "${{ github.ref_type }}" == "tag" ]]; then
|
|
echo "Using pushed tag name"
|
|
TAG_NAME="${{ github.ref_name }}"
|
|
SHOULD_RELEASE="true"
|
|
elif [[ -n "$CUSTOM_TAG" ]]; then
|
|
echo "Using custom tag"
|
|
TAG_NAME="${CUSTOM_TAG}"
|
|
SHOULD_RELEASE="true"
|
|
elif [[ "${{ github.event.inputs.create_release }}" == "true" ]]; then
|
|
echo "Manual release requested"
|
|
SHOULD_RELEASE="true"
|
|
TAG_NAME="b${BUILD_NUMBER}"
|
|
elif [[ "${{ env.BRANCH_NAME }}" == "master" ]]; then
|
|
echo "Using master branch format"
|
|
TAG_NAME="b${BUILD_NUMBER}"
|
|
SHOULD_RELEASE="false"
|
|
else
|
|
echo "Using non-master branch format"
|
|
SAFE_NAME=$(echo "${{ env.BRANCH_NAME }}" | tr '/' '-')
|
|
TAG_NAME="${SAFE_NAME}-b${BUILD_NUMBER}-${SHORT_HASH}"
|
|
SHOULD_RELEASE="false"
|
|
fi
|
|
|
|
echo "Final tag name: $TAG_NAME"
|
|
echo "Should release: $SHOULD_RELEASE"
|
|
echo "name=$TAG_NAME" >> $GITHUB_OUTPUT
|
|
echo "should_release=$SHOULD_RELEASE" >> $GITHUB_OUTPUT
|
|
|
|
ubuntu-cpu:
|
|
runs-on: ${{ matrix.os }}
|
|
needs: determine-tag
|
|
if: ${{ needs.determine-tag.outputs.should_release == 'true' }}
|
|
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- build: x64
|
|
os: ubuntu-22.04
|
|
- build: arm64
|
|
os: ubuntu-22.04-arm
|
|
|
|
steps:
|
|
- name: Clone
|
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
|
|
- name: ccache
|
|
uses: ggml-org/ccache-action@v1.2.21
|
|
with:
|
|
key: release-${{ matrix.os }}-cpu
|
|
evict-old-files: 1d
|
|
|
|
- name: Dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y build-essential cmake
|
|
|
|
- name: Build
|
|
run: |
|
|
cmake -B build \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DBUILD_SHARED_LIBS=OFF \
|
|
-DGGML_NATIVE=OFF \
|
|
${{ matrix.build == 'arm64' && '-DGGML_CPU_ARM_ARCH=armv8-a' || '' }}
|
|
cmake --build build --config Release -j $(nproc)
|
|
|
|
- name: Pack artifacts
|
|
run: |
|
|
cp LICENSE ./build/bin/
|
|
tar -czvf whisper-bin-ubuntu-${{ matrix.build }}.tar.gz \
|
|
--transform "s,^\.,whisper-bin-ubuntu-${{ matrix.build }}," \
|
|
-C ./build/bin .
|
|
|
|
- name: Upload artifacts
|
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
with:
|
|
path: whisper-bin-ubuntu-${{ matrix.build }}.tar.gz
|
|
name: whisper-bin-ubuntu-${{ matrix.build }}.tar.gz
|
|
|
|
windows:
|
|
runs-on: windows-latest
|
|
needs: determine-tag
|
|
|
|
strategy:
|
|
matrix:
|
|
build: [Release]
|
|
arch: [Win32, x64]
|
|
sdl2: [ON]
|
|
include:
|
|
- arch: Win32
|
|
s2arc: x86
|
|
jnaPath: win32-x86
|
|
- arch: x64
|
|
s2arc: x64
|
|
jnaPath: win32-x86-64
|
|
- sdl2: ON
|
|
s2ver: 2.28.5
|
|
|
|
steps:
|
|
- name: Clone
|
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
|
|
- name: Add msbuild to PATH
|
|
uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce # v2
|
|
|
|
- name: Fetch SDL2 and set SDL2_DIR
|
|
if: matrix.sdl2 == 'ON'
|
|
run: |
|
|
C:/msys64/usr/bin/wget.exe -qO sdl2.zip https://github.com/libsdl-org/SDL/releases/download/release-${{ matrix.s2ver }}/SDL2-devel-${{ matrix.s2ver }}-VC.zip
|
|
7z x sdl2.zip
|
|
echo "SDL2_DIR=$env:GITHUB_WORKSPACE/SDL2-${{ matrix.s2ver }}/cmake" >> $env:GITHUB_ENV
|
|
|
|
- name: Configure
|
|
run: >
|
|
cmake -S . -B ./build -A ${{ matrix.arch }}
|
|
-DCMAKE_BUILD_TYPE=${{ matrix.build }}
|
|
-DBUILD_SHARED_LIBS=ON
|
|
-DWHISPER_SDL2=${{ matrix.sdl2 }}
|
|
-DGGML_NATIVE=OFF
|
|
-DGGML_BMI2=OFF
|
|
|
|
- name: Build
|
|
run: |
|
|
cd ./build
|
|
msbuild ALL_BUILD.vcxproj -t:build -p:configuration=${{ matrix.build }} -p:platform=${{ matrix.arch }}
|
|
|
|
- name: Copy SDL2.dll
|
|
if: matrix.sdl2 == 'ON'
|
|
run: copy "$env:SDL2_DIR/../lib/${{ matrix.s2arc }}/SDL2.dll" build/bin/${{ matrix.build }}
|
|
|
|
- name: Upload SDL2.dll
|
|
if: matrix.sdl2 == 'ON'
|
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
with:
|
|
name: ${{ matrix.s2arc }}_SDL2.dll
|
|
path: build/bin/${{ matrix.build }}/SDL2.dll
|
|
|
|
- name: Upload whisper dll
|
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
with:
|
|
name: whisper_${{ matrix.arch }}.dll
|
|
path: build/bin/${{ matrix.build }}/whisper.dll
|
|
|
|
- name: Upload ggml dll
|
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
with:
|
|
name: ggml_${{ matrix.arch }}.dll
|
|
path: build/bin/${{ matrix.build }}/ggml.dll
|
|
overwrite: true
|
|
|
|
- name: Upload ggml base dll
|
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
with:
|
|
name: ggml_base_${{ matrix.arch }}.dll
|
|
path: build/bin/${{ matrix.build }}/ggml-base.dll
|
|
|
|
- name: Upload ggml cpu dll
|
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
with:
|
|
name: ggml_cpu_${{ matrix.arch }}.dll
|
|
path: build/bin/${{ matrix.build }}/ggml-cpu.dll
|
|
|
|
- name: Pack bin artifacts
|
|
shell: pwsh
|
|
run: |
|
|
Compress-Archive -Path "build/bin/${{ matrix.build }}" -DestinationPath "whisper-bin-${{ matrix.arch }}.zip"
|
|
|
|
- name: Upload binaries
|
|
if: matrix.sdl2 == 'ON' && ${{ needs.determine-tag.outputs.should_release }}
|
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
with:
|
|
name: whisper-bin-${{ matrix.arch }}.zip
|
|
path: whisper-bin-${{ matrix.arch }}.zip
|
|
|
|
windows-blas:
|
|
runs-on: windows-latest
|
|
needs: determine-tag
|
|
|
|
strategy:
|
|
matrix:
|
|
build: [Release]
|
|
arch: [Win32, x64]
|
|
blas: [ON]
|
|
sdl2: [ON]
|
|
blasver: [0.3.29]
|
|
include:
|
|
- arch: Win32
|
|
s2arc: x86
|
|
blasfile: x86
|
|
- arch: x64
|
|
s2arc: x64
|
|
blasfile: x64_64
|
|
- sdl2: ON
|
|
s2ver: 2.28.5
|
|
|
|
steps:
|
|
- name: Clone
|
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
|
|
- name: Export GitHub Actions cache environment variables
|
|
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
|
|
with:
|
|
script: |
|
|
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
|
|
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
|
|
|
|
- name: Add msbuild to PATH
|
|
uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce # v2
|
|
|
|
- name: Install OpenBLAS and pkgconfiglite
|
|
if: matrix.blas == 'ON'
|
|
run: |
|
|
Invoke-WebRequest "https://github.com/OpenMathLib/OpenBLAS/releases/download/v${{matrix.blasver}}/OpenBLAS-${{matrix.blasver}}_${{matrix.blasfile}}.zip" -OutFile "OpenBLAS-${{matrix.blasver}}.zip"
|
|
Expand-Archive "OpenBLAS-${{matrix.blasver}}.zip" -DestinationPath "OpenBLAS-${{matrix.blasver}}"
|
|
choco install pkgconfiglite
|
|
|
|
- name: Fetch SDL2 and set SDL2_DIR
|
|
if: matrix.sdl2 == 'ON'
|
|
run: |
|
|
C:/msys64/usr/bin/wget.exe -qO sdl2.zip https://github.com/libsdl-org/SDL/releases/download/release-${{ matrix.s2ver }}/SDL2-devel-${{ matrix.s2ver }}-VC.zip
|
|
7z x sdl2.zip
|
|
echo "SDL2_DIR=$env:GITHUB_WORKSPACE/SDL2-${{ matrix.s2ver }}/cmake" >> $env:GITHUB_ENV
|
|
|
|
- name: Configure
|
|
run: >
|
|
cmake -S . -B ./build -A ${{ matrix.arch }}
|
|
-DCMAKE_TOOLCHAIN_FILE="$env:VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake"
|
|
-DCMAKE_BUILD_TYPE=${{ matrix.build }}
|
|
-DGGML_BLAS=${{ matrix.blas }}
|
|
-DGGML_BLAS_VENDOR=OpenBLAS
|
|
-DBLAS_LIBRARIES="$env:GITHUB_WORKSPACE/OpenBLAS-${{matrix.blasver}}/lib/libopenblas.lib"
|
|
-DBLAS_INCLUDE_DIRS="$env:GITHUB_WORKSPACE/OpenBLAS-${{matrix.blasver}}/include"
|
|
-DWHISPER_SDL2=${{ matrix.sdl2 }}
|
|
|
|
- name: Build
|
|
run: |
|
|
cd ./build
|
|
msbuild ALL_BUILD.vcxproj -t:build -p:configuration=${{ matrix.build }} -p:platform=${{ matrix.arch }}
|
|
|
|
- name: Copy openblas.dll
|
|
if: matrix.blas == 'ON'
|
|
run: copy "$env:GITHUB_WORKSPACE/OpenBLAS-${{matrix.blasver}}/bin/libopenblas.dll" build/bin/${{ matrix.build }}
|
|
|
|
- name: Copy SDL2.dll
|
|
if: matrix.sdl2 == 'ON'
|
|
run: copy "$env:SDL2_DIR/../lib/${{ matrix.s2arc }}/SDL2.dll" build/bin/${{ matrix.build }}
|
|
|
|
- name: Pack bin artifacts
|
|
shell: pwsh
|
|
run: |
|
|
Compress-Archive -Path "build/bin/${{ matrix.build }}" -DestinationPath "whisper-blas-bin-${{ matrix.arch }}.zip"
|
|
|
|
- name: Upload binaries
|
|
if: matrix.blas == 'ON' && matrix.sdl2 == 'ON' && ${{ needs.determine-tag.outputs.should_release }}
|
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
with:
|
|
name: whisper-blas-bin-${{ matrix.arch }}.zip
|
|
path: whisper-blas-bin-${{ matrix.arch }}.zip
|
|
|
|
windows-cublas:
|
|
runs-on: windows-2022
|
|
needs: determine-tag
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
build: [Release]
|
|
arch: [x64]
|
|
cublas: [ON]
|
|
sdl2: [ON]
|
|
cuda-toolkit: [12.4.0, 11.8.0]
|
|
include:
|
|
- arch: x64
|
|
sdl2: ON
|
|
sdl2_ver: 2.28.5
|
|
steps:
|
|
- name: Clone repository
|
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
|
|
- name: Install Ninja
|
|
id: install_ninja
|
|
run: |
|
|
choco install ninja
|
|
|
|
- name: Install ccache
|
|
uses: ggml-org/ccache-action@v1.2.21
|
|
with:
|
|
key: ${{ github.job }}-${{ matrix.cuda-toolkit }}-${{ matrix.build }}
|
|
evict-old-files: 5d
|
|
|
|
- name: Install Cuda Toolkit 11.8.0
|
|
if: ${{ matrix.cuda-toolkit == '11.8.0' }}
|
|
run: |
|
|
$CUDA_VERSION = ${{ matrix.cuda-toolkit }}
|
|
$CUDA_TOOLKIT_DIR = "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v$CUDA_VERSION"
|
|
$CUDA_DOWNLOAD = "https://developer.download.nvidia.com/compute/cuda/redist"
|
|
|
|
# Components versions
|
|
$CUDART_VER = "11.8.89"
|
|
$NVCC_VER = "11.8.89"
|
|
$NVRTC_VER = "11.8.89"
|
|
$CUBLAS_VER = "11.8.1.74"
|
|
$NVTX_VER = "11.8.86"
|
|
$VS_VER = "11.8.86"
|
|
$NVPROF_VER = "11.8.87"
|
|
$CCCL_VER = "11.8.89"
|
|
|
|
# Create the directory where the CUDA Toolkit will be installed
|
|
mkdir -p $CUDA_TOOLKIT_DIR
|
|
|
|
# Install unzip to extract the downloaded files
|
|
choco install unzip -y
|
|
|
|
# Download all the required components
|
|
curl -O "$CUDA_DOWNLOAD/cuda_cudart/windows-x86_64/cuda_cudart-windows-x86_64-${CUDART_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/cuda_nvcc/windows-x86_64/cuda_nvcc-windows-x86_64-${NVCC_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/cuda_nvrtc/windows-x86_64/cuda_nvrtc-windows-x86_64-${NVRTC_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/libcublas/windows-x86_64/libcublas-windows-x86_64-${CUBLAS_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/cuda_nvtx/windows-x86_64/cuda_nvtx-windows-x86_64-${NVTX_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/visual_studio_integration/windows-x86_64/visual_studio_integration-windows-x86_64-${VS_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/cuda_nvprof/windows-x86_64/cuda_nvprof-windows-x86_64-${NVPROF_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/cuda_cccl/windows-x86_64/cuda_cccl-windows-x86_64-${CCCL_VER}-archive.zip"
|
|
|
|
# Extract all the downloaded files to the CUDA Toolkit directory
|
|
unzip '*.zip' -d $CUDA_TOOLKIT_DIR
|
|
|
|
# Copy all the extracted files to the main CUDA Toolkit directory
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_cudart-windows-x86_64-${CUDART_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_nvcc-windows-x86_64-${NVCC_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_nvrtc-windows-x86_64-${NVRTC_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\libcublas-windows-x86_64-${CUBLAS_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_nvtx-windows-x86_64-${NVTX_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_nvprof-windows-x86_64-${NVPROF_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_cccl-windows-x86_64-${CCCL_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\visual_studio_integration-windows-x86_64-${VS_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
|
|
# Visual Studio integration
|
|
xcopy "$CUDA_TOOLKIT_DIR\visual_studio_integration-windows-x86_64-${VS_VER}-archive\visual_studio_integration\MSBuildExtensions\*" "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Microsoft\VC\v170\BuildCustomizations" /E /I /H /Y
|
|
|
|
# Set environment variables
|
|
echo "$CUDA_TOOLKIT_DIR\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
|
echo "$CUDA_TOOLKIT_DIR\libnvvp" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
|
echo "CUDA_PATH=$CUDA_TOOLKIT_DIR" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
|
echo "CUDA_PATH_V11_8=$CUDA_TOOLKIT_DIR" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
|
|
|
- name: Install Cuda Toolkit 12.4.0
|
|
if: ${{ matrix.cuda-toolkit == '12.4.0' }}
|
|
run: |
|
|
$CUDA_VERSION = ${{ matrix.cuda-toolkit }}
|
|
$CUDA_TOOLKIT_DIR = "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v$CUDA_VERSION"
|
|
$CUDA_DOWNLOAD = "https://developer.download.nvidia.com/compute/cuda/redist"
|
|
|
|
# Components versions
|
|
$CUDART_VER = "12.4.127"
|
|
$NVCC_VER = "12.4.131"
|
|
$NVRTC_VER = "12.4.127"
|
|
$CUBLAS_VER = "12.4.5.8"
|
|
$NVTX_VER = "12.4.127"
|
|
$PROFILER_VER = "12.4.127"
|
|
$VS_VER = "12.4.127"
|
|
$NVPROF_VER = "12.4.128"
|
|
$CCCL_VER = "12.4.127"
|
|
|
|
# Create the directory where the CUDA Toolkit will be installed
|
|
mkdir -p $CUDA_TOOLKIT_DIR
|
|
|
|
# Install unzip to extract the downloaded files
|
|
choco install unzip -y
|
|
|
|
# Download all the required components
|
|
curl -O "$CUDA_DOWNLOAD/cuda_cudart/windows-x86_64/cuda_cudart-windows-x86_64-${CUDART_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/cuda_nvcc/windows-x86_64/cuda_nvcc-windows-x86_64-${NVCC_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/cuda_nvrtc/windows-x86_64/cuda_nvrtc-windows-x86_64-${NVRTC_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/libcublas/windows-x86_64/libcublas-windows-x86_64-${CUBLAS_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/cuda_nvtx/windows-x86_64/cuda_nvtx-windows-x86_64-${NVTX_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/cuda_profiler_api/windows-x86_64/cuda_profiler_api-windows-x86_64-${PROFILER_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/visual_studio_integration/windows-x86_64/visual_studio_integration-windows-x86_64-${VS_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/cuda_nvprof/windows-x86_64/cuda_nvprof-windows-x86_64-${NVPROF_VER}-archive.zip"
|
|
curl -O "$CUDA_DOWNLOAD/cuda_cccl/windows-x86_64/cuda_cccl-windows-x86_64-${CCCL_VER}-archive.zip"
|
|
|
|
# Extract all the downloaded files to the CUDA Toolkit directory
|
|
unzip -q '*.zip' -d $CUDA_TOOLKIT_DIR
|
|
|
|
# Copy all the extracted files to the main CUDA Toolkit directory
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_cudart-windows-x86_64-${CUDART_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_nvcc-windows-x86_64-${NVCC_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_nvrtc-windows-x86_64-${NVRTC_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\libcublas-windows-x86_64-${CUBLAS_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_nvtx-windows-x86_64-${NVTX_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_nvprof-windows-x86_64-${NVPROF_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_cccl-windows-x86_64-${CCCL_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\cuda_profiler_api-windows-x86_64-${PROFILER_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
xcopy "$CUDA_TOOLKIT_DIR\visual_studio_integration-windows-x86_64-${VS_VER}-archive\*" "$CUDA_TOOLKIT_DIR" /E /I /H /Y
|
|
|
|
# Visual Studio integration
|
|
xcopy "$CUDA_TOOLKIT_DIR\visual_studio_integration-windows-x86_64-${VS_VER}-archive\visual_studio_integration\MSBuildExtensions\*" "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Microsoft\VC\v170\BuildCustomizations" /E /I /H /Y
|
|
|
|
# Set environment variables
|
|
echo "$CUDA_TOOLKIT_DIR\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
|
echo "$CUDA_TOOLKIT_DIR\libnvvp" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
|
echo "CUDA_PATH=$CUDA_TOOLKIT_DIR" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
|
echo "CUDA_PATH_V12_2=$CUDA_TOOLKIT_DIR" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
|
|
|
- name: Add msbuild to PATH
|
|
uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce # v2
|
|
|
|
- name: Install 7-Zip
|
|
run: choco install 7zip -y
|
|
|
|
- name: Fetch SDL2 and set SDL2_DIR
|
|
if: matrix.sdl2 == 'ON'
|
|
run: |
|
|
Invoke-WebRequest -Uri https://github.com/libsdl-org/SDL/releases/download/release-${{ matrix.sdl2_ver }}/SDL2-devel-${{ matrix.sdl2_ver }}-VC.zip -OutFile sdl2.zip
|
|
7z x sdl2.zip
|
|
echo "SDL2_DIR=${{ github.workspace }}\SDL2-${{ matrix.sdl2_ver }}\cmake" | Out-File -FilePath $env:GITHUB_ENV -Append
|
|
echo "${{ github.workspace }}\SDL2-${{ matrix.sdl2_ver }}\cmake" > SDL2_PATH.txt
|
|
|
|
- name: Install cmake
|
|
run: choco install cmake
|
|
|
|
- name: Build Project
|
|
shell: cmd
|
|
run: |
|
|
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
|
|
cmake --version
|
|
where cmake
|
|
if "${{ matrix.cuda-toolkit }}" == "11.8.0" (
|
|
set CUDA_FLAGS=-allow-unsupported-compiler -D_ALLOW_COMPILER_AND_STL_VERSION_MISMATCH -D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR
|
|
) else (
|
|
set CUDA_FLAGS=
|
|
)
|
|
cmake -S . -B build -G "Ninja Multi-Config" ^
|
|
-DCMAKE_BUILD_TYPE=${{ matrix.build }} ^
|
|
-DGGML_CUDA=${{ matrix.cublas }} ^
|
|
-DWHISPER_SDL2=${{ matrix.sdl2 }} ^
|
|
-DSDL2_DIR="%SDL2_DIR%" ^
|
|
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 ^
|
|
-DCMAKE_CUDA_FLAGS="%CUDA_FLAGS%"
|
|
set /A NINJA_JOBS=%NUMBER_OF_PROCESSORS%-1
|
|
cmake --build build --config ${{ matrix.build }} -j %NUMBER_OF_PROCESSORS%
|
|
|
|
- name: Check ccache status after build
|
|
run: |
|
|
ccache --show-stats
|
|
|
|
- name: Copy CUDA DLLs
|
|
run: |
|
|
Get-ChildItem "$env:CUDA_PATH\bin\" -Filter "*.dll" |
|
|
Copy-Item -Destination "build/bin/${{ matrix.build }}"
|
|
|
|
- name: Copy SDL2.dll
|
|
if: matrix.sdl2 == 'ON'
|
|
run: copy "$env:SDL2_DIR/../lib/${{ matrix.arch }}/SDL2.dll" build/bin/${{ matrix.build }}
|
|
|
|
- name: Pack bin artifacts
|
|
shell: pwsh
|
|
run: |
|
|
Compress-Archive -Path "build/bin/${{ matrix.build }}" -DestinationPath "whisper-cublas-${{ matrix.cuda-toolkit }}-bin-${{ matrix.arch }}.zip"
|
|
|
|
- name: Upload binaries
|
|
if: ${{ needs.determine-tag.outputs.should_release }}
|
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
with:
|
|
name: whisper-cublas-${{ matrix.cuda-toolkit }}-bin-${{ matrix.arch }}.zip
|
|
path: whisper-cublas-${{ matrix.cuda-toolkit }}-bin-${{ matrix.arch }}.zip
|
|
|
|
ios-xcode-build:
|
|
runs-on: macos-latest
|
|
needs: determine-tag
|
|
|
|
strategy:
|
|
matrix:
|
|
build: [Release]
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
|
|
- name: Configure
|
|
run: |
|
|
cp models/for-tests-ggml-base.en.bin models/ggml-base.en.bin
|
|
mkdir models/ggml-base.en-encoder.mlmodelc
|
|
|
|
- name: Build
|
|
id: cmake_build
|
|
run: |
|
|
sysctl -a
|
|
mkdir build
|
|
cd build
|
|
cmake -G Xcode .. \
|
|
-DGGML_METAL_USE_BF16=ON \
|
|
-DGGML_METAL_EMBED_LIBRARY=ON \
|
|
-DWHISPER_BUILD_EXAMPLES=OFF \
|
|
-DWHISPER_BUILD_TESTS=OFF \
|
|
-DWHISPER_BUILD_SERVER=OFF \
|
|
-DCMAKE_SYSTEM_NAME=iOS \
|
|
-DCMAKE_OSX_DEPLOYMENT_TARGET=14.0 \
|
|
-DCMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM=ggml
|
|
cmake --build . --config Release -j $(sysctl -n hw.logicalcpu) -- CODE_SIGNING_ALLOWED=NO
|
|
|
|
- name: xcodebuild for swift package
|
|
id: xcodebuild
|
|
run: |
|
|
./build-xcframework.sh
|
|
|
|
- name: Build objc example
|
|
run: xcodebuild -project examples/whisper.objc/whisper.objc.xcodeproj -scheme whisper.objc -configuration ${{ matrix.build }} -sdk iphoneos CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO FRAMEWORK_FOLDER_PATH=./build-ios build
|
|
|
|
- name: Build swiftui example
|
|
run: xcodebuild -project examples/whisper.swiftui/whisper.swiftui.xcodeproj -scheme WhisperCppDemo -configuration ${{ matrix.build }} -sdk iphoneos CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY= -destination 'generic/platform=iOS' FRAMEWORK_FOLDER_PATH=./build-ios build
|
|
|
|
- name: Pack artifacts
|
|
id: pack_artifacts
|
|
run: |
|
|
zip --symlinks -r whisper-${{ needs.determine-tag.outputs.tag_name }}-xcframework.zip build-apple/whisper.xcframework
|
|
|
|
- name: Upload artifacts
|
|
if: ${{ needs.determine-tag.outputs.should_release }}
|
|
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
|
|
with:
|
|
path: whisper-${{ needs.determine-tag.outputs.tag_name }}-xcframework.zip
|
|
name: whisper-${{ needs.determine-tag.outputs.tag_name }}-xcframework.zip
|
|
|
|
release:
|
|
if: ${{ github.event.inputs.create_release == 'true' || github.event.inputs.pre_release_tag != '' || startsWith(github.ref, 'refs/tags/v') }}
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
needs:
|
|
- determine-tag
|
|
- ubuntu-cpu
|
|
- ios-xcode-build
|
|
- windows
|
|
- windows-blas
|
|
- windows-cublas
|
|
|
|
steps:
|
|
- name: Clone
|
|
id: checkout
|
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: ccache
|
|
uses: ggml-org/ccache-action@v1.2.21
|
|
with:
|
|
key: release
|
|
evict-old-files: 1d
|
|
|
|
# Downloads all the artifacts from the previous jobs
|
|
- name: Download artifacts
|
|
id: download-artifact
|
|
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
|
|
with:
|
|
path: ./artifact
|
|
|
|
- name: Move artifacts
|
|
id: move_artifacts
|
|
run: mkdir -p ./artifact/release && mv ./artifact/*/*.zip ./artifact/release && mv ./artifact/*/*.tar.gz ./artifact/release 2>/dev/null || true
|
|
|
|
- name: Create release
|
|
id: create_release
|
|
uses: ggml-org/action-create-release@v1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
tag_name: ${{ needs.determine-tag.outputs.tag_name }}
|
|
prerelease: ${{ github.event.inputs.pre_release_tag != '' }}
|
|
draft: true
|
|
|
|
- name: Upload release
|
|
id: upload_release
|
|
uses: actions/github-script@ffc2c79a5b2490bd33e0a41c1de74b877714d736 # v3
|
|
with:
|
|
github-token: ${{secrets.GITHUB_TOKEN}}
|
|
script: |
|
|
const path = require('path');
|
|
const fs = require('fs');
|
|
const release_id = '${{ steps.create_release.outputs.id }}';
|
|
for (let file of await fs.readdirSync('./artifact/release')) {
|
|
if (path.extname(file) === '.zip' || file.endsWith('.tar.gz')) {
|
|
console.log('uploadReleaseAsset', file);
|
|
await github.repos.uploadReleaseAsset({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
release_id: release_id,
|
|
name: file,
|
|
data: await fs.readFileSync(`./artifact/release/${file}`)
|
|
});
|
|
}
|
|
}
|