mirror of https://gitee.com/namelin2022/ollama
Browse Source
Flesh out our github actions CI so we can build official releaes.brucemacd/no-move-prompt-path
5 changed files with 601 additions and 64 deletions
@ -0,0 +1,463 @@ |
|||
name: release |
|||
|
|||
on: |
|||
push: |
|||
tags: |
|||
- 'v*' |
|||
|
|||
jobs: |
|||
# Full build of the Mac assets |
|||
build-darwin: |
|||
runs-on: macos-latest |
|||
environment: release |
|||
steps: |
|||
- uses: actions/checkout@v4 |
|||
- name: Set Version |
|||
shell: bash |
|||
run: | |
|||
echo "VERSION=${GITHUB_REF_NAME#v}" >> $GITHUB_ENV |
|||
echo "RELEASE_VERSION=$(echo ${GITHUB_REF_NAME} | cut -f1 -d-)" >> $GITHUB_ENV |
|||
- name: key |
|||
env: |
|||
MACOS_SIGNING_KEY: ${{ secrets.MACOS_SIGNING_KEY }} |
|||
MACOS_SIGNING_KEY_PASSWORD: ${{ secrets.MACOS_SIGNING_KEY_PASSWORD }} |
|||
run: | |
|||
echo $MACOS_SIGNING_KEY | base64 --decode > certificate.p12 |
|||
security create-keychain -p password build.keychain |
|||
security default-keychain -s build.keychain |
|||
security unlock-keychain -p password build.keychain |
|||
security import certificate.p12 -k build.keychain -P $MACOS_SIGNING_KEY_PASSWORD -T /usr/bin/codesign |
|||
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k password build.keychain |
|||
- uses: actions/setup-go@v5 |
|||
with: |
|||
go-version: '1.22' |
|||
cache: true |
|||
- name: Build Darwin |
|||
env: |
|||
APPLE_IDENTITY: ${{ secrets.APPLE_IDENTITY }} |
|||
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }} |
|||
APPLE_TEAM_ID: ${{ vars.APPLE_TEAM_ID }} |
|||
APPLE_ID: ${{ vars.APPLE_ID }} |
|||
run: | |
|||
./scripts/build_darwin.sh |
|||
|
|||
- uses: actions/upload-artifact@v4 |
|||
with: |
|||
name: dist-darwin |
|||
path: | |
|||
dist/*arwin* |
|||
!dist/*-cov |
|||
|
|||
|
|||
# Windows builds take a long time to both install the dependencies and build, so parallelize |
|||
# CPU generation step |
|||
generate-windows-cpu: |
|||
environment: release |
|||
runs-on: windows |
|||
env: |
|||
KEY_CONTAINER: ${{ vars.KEY_CONTAINER }} |
|||
steps: |
|||
- uses: actions/checkout@v4 |
|||
- name: Set Version |
|||
shell: bash |
|||
run: echo "VERSION=${GITHUB_REF_NAME#v}" >> $GITHUB_ENV |
|||
- uses: 'google-github-actions/auth@v2' |
|||
with: |
|||
project_id: 'ollama' |
|||
credentials_json: '${{ secrets.GOOGLE_SIGNING_CREDENTIALS }}' |
|||
- run: echo "${{ vars.OLLAMA_CERT }}" > ollama_inc.crt |
|||
- name: install Windows SDK 8.1 to get signtool |
|||
run: | |
|||
$ErrorActionPreference = "Stop" |
|||
write-host "downloading SDK" |
|||
Invoke-WebRequest -Uri "https://go.microsoft.com/fwlink/p/?LinkId=323507" -OutFile "${env:RUNNER_TEMP}\sdksetup.exe" |
|||
Start-Process "${env:RUNNER_TEMP}\sdksetup.exe" -ArgumentList @("/q") -NoNewWindow -Wait |
|||
write-host "Win SDK 8.1 installed" |
|||
gci -path 'C:\Program Files (x86)\Windows Kits\' -r -fi 'signtool.exe' |
|||
- name: install signing plugin |
|||
run: | |
|||
$ErrorActionPreference = "Stop" |
|||
write-host "downloading plugin" |
|||
Invoke-WebRequest -Uri "https://github.com/GoogleCloudPlatform/kms-integrations/releases/download/cng-v1.0/kmscng-1.0-windows-amd64.zip" -OutFile "${env:RUNNER_TEMP}\plugin.zip" |
|||
Expand-Archive -Path "${env:RUNNER_TEMP}\plugin.zip" -DestinationPath ${env:RUNNER_TEMP}\plugin\ |
|||
write-host "Installing plugin" |
|||
& "${env:RUNNER_TEMP}\plugin\*\kmscng.msi" /quiet |
|||
write-host "plugin installed" |
|||
- uses: actions/setup-go@v5 |
|||
with: |
|||
go-version: '1.22' |
|||
cache: true |
|||
- run: go get ./... |
|||
- run: | |
|||
$gopath=(get-command go).source | split-path -parent |
|||
& "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\Launch-VsDevShell.ps1" |
|||
cd $env:GITHUB_WORKSPACE |
|||
$env:CMAKE_SYSTEM_VERSION="10.0.22621.0" |
|||
$env:PATH="$gopath;$env:PATH" |
|||
go generate -x ./... |
|||
name: go generate |
|||
- uses: actions/upload-artifact@v4 |
|||
with: |
|||
name: generate-windows-cpu |
|||
path: llm/llama.cpp/build/**/lib/* |
|||
|
|||
# ROCm generation step |
|||
generate-windows-rocm: |
|||
environment: release |
|||
runs-on: windows |
|||
env: |
|||
KEY_CONTAINER: ${{ vars.KEY_CONTAINER }} |
|||
steps: |
|||
- uses: actions/checkout@v4 |
|||
- name: Set Version |
|||
shell: bash |
|||
run: echo "VERSION=${GITHUB_REF_NAME#v}" >> $GITHUB_ENV |
|||
- uses: 'google-github-actions/auth@v2' |
|||
with: |
|||
project_id: 'ollama' |
|||
credentials_json: '${{ secrets.GOOGLE_SIGNING_CREDENTIALS }}' |
|||
- run: echo "${{ vars.OLLAMA_CERT }}" > ollama_inc.crt |
|||
- name: install Windows SDK 8.1 to get signtool |
|||
run: | |
|||
$ErrorActionPreference = "Stop" |
|||
write-host "downloading SDK" |
|||
Invoke-WebRequest -Uri "https://go.microsoft.com/fwlink/p/?LinkId=323507" -OutFile "${env:RUNNER_TEMP}\sdksetup.exe" |
|||
Start-Process "${env:RUNNER_TEMP}\sdksetup.exe" -ArgumentList @("/q") -NoNewWindow -Wait |
|||
write-host "Win SDK 8.1 installed" |
|||
gci -path 'C:\Program Files (x86)\Windows Kits\' -r -fi 'signtool.exe' |
|||
- name: install signing plugin |
|||
run: | |
|||
$ErrorActionPreference = "Stop" |
|||
write-host "downloading plugin" |
|||
Invoke-WebRequest -Uri "https://github.com/GoogleCloudPlatform/kms-integrations/releases/download/cng-v1.0/kmscng-1.0-windows-amd64.zip" -OutFile "${env:RUNNER_TEMP}\plugin.zip" |
|||
Expand-Archive -Path "${env:RUNNER_TEMP}\plugin.zip" -DestinationPath ${env:RUNNER_TEMP}\plugin\ |
|||
write-host "Installing plugin" |
|||
& "${env:RUNNER_TEMP}\plugin\*\kmscng.msi" /quiet |
|||
write-host "plugin installed" |
|||
- uses: actions/setup-go@v5 |
|||
with: |
|||
go-version: '1.22' |
|||
cache: true |
|||
- name: "Install ROCm" |
|||
run: | |
|||
$ErrorActionPreference = "Stop" |
|||
write-host "downloading AMD HIP Installer" |
|||
Invoke-WebRequest -Uri "https://download.amd.com/developer/eula/rocm-hub/AMD-Software-PRO-Edition-23.Q4-WinSvr2022-For-HIP.exe" -OutFile "${env:RUNNER_TEMP}\rocm-install.exe" |
|||
write-host "Installing AMD HIP" |
|||
Start-Process "${env:RUNNER_TEMP}\rocm-install.exe" -ArgumentList '-install' -NoNewWindow -Wait |
|||
write-host "Completed AMD HIP" |
|||
- name: "Verify ROCm" |
|||
run: | |
|||
& 'C:\Program Files\AMD\ROCm\*\bin\clang.exe' --version |
|||
- run: go get ./... |
|||
- run: | |
|||
$gopath=(get-command go).source | split-path -parent |
|||
& "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\Launch-VsDevShell.ps1" |
|||
cd $env:GITHUB_WORKSPACE |
|||
$env:CMAKE_SYSTEM_VERSION="10.0.22621.0" |
|||
$env:PATH="$gopath;$env:PATH" |
|||
$env:OLLAMA_SKIP_CPU_GENERATE="1" |
|||
$env:HIP_PATH=$(Resolve-Path 'C:\Program Files\AMD\ROCm\*\bin\clang.exe' | split-path | split-path) |
|||
go generate -x ./... |
|||
name: go generate |
|||
- name: "gather rocm dependencies" |
|||
run: | |
|||
$HIP_PATH=$(Resolve-Path 'C:\Program Files\AMD\ROCm\*\bin\clang.exe' | split-path | split-path) |
|||
md "dist\deps\bin\rocblas\library" |
|||
cp "${HIP_PATH}\bin\hipblas.dll" "dist\deps\bin\" |
|||
cp "${HIP_PATH}\bin\rocblas.dll" "dist\deps\bin\" |
|||
cp "${HIP_PATH}\bin\rocblas\library\*" "dist\deps\bin\rocblas\library\" |
|||
- uses: actions/upload-artifact@v4 |
|||
with: |
|||
name: generate-windows-rocm |
|||
path: llm/llama.cpp/build/**/lib/* |
|||
- uses: actions/upload-artifact@v4 |
|||
with: |
|||
name: windows-rocm-deps |
|||
path: dist/deps/* |
|||
|
|||
# CUDA generation step |
|||
generate-windows-cuda: |
|||
environment: release |
|||
runs-on: windows |
|||
env: |
|||
KEY_CONTAINER: ${{ vars.KEY_CONTAINER }} |
|||
steps: |
|||
- uses: actions/checkout@v4 |
|||
- name: Set Version |
|||
shell: bash |
|||
run: echo "VERSION=${GITHUB_REF_NAME#v}" >> $GITHUB_ENV |
|||
- uses: 'google-github-actions/auth@v2' |
|||
with: |
|||
project_id: 'ollama' |
|||
credentials_json: '${{ secrets.GOOGLE_SIGNING_CREDENTIALS }}' |
|||
- run: echo "${{ vars.OLLAMA_CERT }}" > ollama_inc.crt |
|||
- name: install Windows SDK 8.1 to get signtool |
|||
run: | |
|||
$ErrorActionPreference = "Stop" |
|||
write-host "downloading SDK" |
|||
Invoke-WebRequest -Uri "https://go.microsoft.com/fwlink/p/?LinkId=323507" -OutFile "${env:RUNNER_TEMP}\sdksetup.exe" |
|||
Start-Process "${env:RUNNER_TEMP}\sdksetup.exe" -ArgumentList @("/q") -NoNewWindow -Wait |
|||
write-host "Win SDK 8.1 installed" |
|||
gci -path 'C:\Program Files (x86)\Windows Kits\' -r -fi 'signtool.exe' |
|||
- name: install signing plugin |
|||
run: | |
|||
$ErrorActionPreference = "Stop" |
|||
write-host "downloading plugin" |
|||
Invoke-WebRequest -Uri "https://github.com/GoogleCloudPlatform/kms-integrations/releases/download/cng-v1.0/kmscng-1.0-windows-amd64.zip" -OutFile "${env:RUNNER_TEMP}\plugin.zip" |
|||
Expand-Archive -Path "${env:RUNNER_TEMP}\plugin.zip" -DestinationPath ${env:RUNNER_TEMP}\plugin\ |
|||
write-host "Installing plugin" |
|||
& "${env:RUNNER_TEMP}\plugin\*\kmscng.msi" /quiet |
|||
write-host "plugin installed" |
|||
- uses: actions/setup-go@v5 |
|||
with: |
|||
go-version: '1.22' |
|||
cache: true |
|||
# TODO - consider replacing this action with a ps1 snippet to install |
|||
# This actions seems to fail sometimes with "no tools in cache" but a re-run of the failed job clears it |
|||
# https://developer.download.nvidia.com/compute/cuda/11.3.1/local_installers/cuda_11.3.1_465.89_win10.exe |
|||
- name: "Install CUDA" |
|||
uses: Jimver/cuda-toolkit@v0.2.14 |
|||
id: cuda-toolkit |
|||
with: |
|||
cuda: '11.3.1' |
|||
- name: "Verify CUDA" |
|||
run: nvcc -V |
|||
- run: go get ./... |
|||
- name: go generate |
|||
run: | |
|||
$gopath=(get-command go).source | split-path -parent |
|||
& "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\Launch-VsDevShell.ps1" |
|||
cd $env:GITHUB_WORKSPACE |
|||
$env:CMAKE_SYSTEM_VERSION="10.0.22621.0" |
|||
$env:PATH="$gopath;$env:PATH" |
|||
$env:OLLAMA_SKIP_CPU_GENERATE="1" |
|||
go generate -x ./... |
|||
- name: "gather cuda dependencies" |
|||
run: | |
|||
$NVIDIA_DIR=(resolve-path 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\*\bin\')[0] |
|||
md "dist\deps" |
|||
cp "${NVIDIA_DIR}\cudart64_*.dll" "dist\deps\" |
|||
cp "${NVIDIA_DIR}\cublas64_*.dll" "dist\deps\" |
|||
cp "${NVIDIA_DIR}\cublasLt64_*.dll" "dist\deps\" |
|||
- uses: actions/upload-artifact@v4 |
|||
with: |
|||
name: generate-windows-cuda |
|||
path: llm/llama.cpp/build/**/lib/* |
|||
- uses: actions/upload-artifact@v4 |
|||
with: |
|||
name: windows-cuda-deps |
|||
path: dist/deps/* |
|||
|
|||
# Import the prior generation steps and build the final windows assets |
|||
build-windows: |
|||
environment: release |
|||
runs-on: windows |
|||
needs: |
|||
- generate-windows-cuda |
|||
- generate-windows-rocm |
|||
- generate-windows-cpu |
|||
env: |
|||
KEY_CONTAINER: ${{ vars.KEY_CONTAINER }} |
|||
steps: |
|||
- uses: actions/checkout@v4 |
|||
with: |
|||
submodules: recursive |
|||
- name: Set Version |
|||
shell: bash |
|||
run: echo "VERSION=${GITHUB_REF_NAME#v}" >> $GITHUB_ENV |
|||
- uses: 'google-github-actions/auth@v2' |
|||
with: |
|||
project_id: 'ollama' |
|||
credentials_json: '${{ secrets.GOOGLE_SIGNING_CREDENTIALS }}' |
|||
- run: echo "${{ vars.OLLAMA_CERT }}" > ollama_inc.crt |
|||
- name: install Windows SDK 8.1 to get signtool |
|||
run: | |
|||
$ErrorActionPreference = "Stop" |
|||
write-host "downloading SDK" |
|||
Invoke-WebRequest -Uri "https://go.microsoft.com/fwlink/p/?LinkId=323507" -OutFile "${env:RUNNER_TEMP}\sdksetup.exe" |
|||
Start-Process "${env:RUNNER_TEMP}\sdksetup.exe" -ArgumentList @("/q") -NoNewWindow -Wait |
|||
write-host "Win SDK 8.1 installed" |
|||
gci -path 'C:\Program Files (x86)\Windows Kits\' -r -fi 'signtool.exe' |
|||
- name: install signing plugin |
|||
run: | |
|||
$ErrorActionPreference = "Stop" |
|||
write-host "downloading plugin" |
|||
Invoke-WebRequest -Uri "https://github.com/GoogleCloudPlatform/kms-integrations/releases/download/cng-v1.0/kmscng-1.0-windows-amd64.zip" -OutFile "${env:RUNNER_TEMP}\plugin.zip" |
|||
Expand-Archive -Path "${env:RUNNER_TEMP}\plugin.zip" -DestinationPath ${env:RUNNER_TEMP}\plugin\ |
|||
write-host "Installing plugin" |
|||
& "${env:RUNNER_TEMP}\plugin\*\kmscng.msi" /quiet |
|||
write-host "plugin installed" |
|||
- uses: actions/setup-go@v5 |
|||
with: |
|||
go-version: '1.22' |
|||
cache: true |
|||
- run: go get |
|||
- uses: actions/download-artifact@v4 |
|||
with: |
|||
name: generate-windows-cpu |
|||
path: llm/llama.cpp/build |
|||
- uses: actions/download-artifact@v4 |
|||
with: |
|||
name: generate-windows-cuda |
|||
path: llm/llama.cpp/build |
|||
- uses: actions/download-artifact@v4 |
|||
with: |
|||
name: windows-cuda-deps |
|||
path: dist/deps |
|||
- uses: actions/download-artifact@v4 |
|||
with: |
|||
name: windows-rocm-deps |
|||
path: dist/deps |
|||
- uses: actions/download-artifact@v4 |
|||
with: |
|||
name: generate-windows-rocm |
|||
path: llm/llama.cpp/build |
|||
- run: dir llm/llama.cpp/build |
|||
- run: | |
|||
$gopath=(get-command go).source | split-path -parent |
|||
& "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\Launch-VsDevShell.ps1" |
|||
cd $env:GITHUB_WORKSPACE |
|||
$env:CMAKE_SYSTEM_VERSION="10.0.22621.0" |
|||
$env:PATH="$gopath;$env:PATH" |
|||
$env:OLLAMA_SKIP_GENERATE="1" |
|||
$env:NVIDIA_DIR=$(resolve-path ".\dist\deps") |
|||
$env:HIP_PATH=$(resolve-path ".\dist\deps") |
|||
& .\scripts\build_windows.ps1 |
|||
- uses: actions/upload-artifact@v4 |
|||
with: |
|||
name: dist-windows |
|||
path: dist/*.exe |
|||
|
|||
# Linux x86 assets built using the container based build |
|||
build-linux-amd64: |
|||
environment: release |
|||
runs-on: linux |
|||
env: |
|||
OLLAMA_SKIP_MANIFEST_CREATE: "1" |
|||
BUILD_ARCH: amd64 |
|||
PUSH: "1" |
|||
steps: |
|||
- uses: actions/checkout@v4 |
|||
with: |
|||
submodules: recursive |
|||
- name: Set Version |
|||
shell: bash |
|||
run: echo "VERSION=${GITHUB_REF_NAME#v}" >> $GITHUB_ENV |
|||
- name: Login to Docker Hub |
|||
uses: docker/login-action@v3 |
|||
with: |
|||
username: ${{ vars.DOCKER_USER }} |
|||
password: ${{ secrets.DOCKER_ACCESS_TOKEN }} |
|||
- run: | |
|||
./scripts/build_linux.sh |
|||
./scripts/build_docker.sh |
|||
mv dist/deps/* dist/ |
|||
- uses: actions/upload-artifact@v4 |
|||
with: |
|||
name: dist-linux-amd64 |
|||
path: | |
|||
dist/*linux* |
|||
!dist/*-cov |
|||
|
|||
# Linux ARM assets built using the container based build |
|||
# (at present, docker isn't pre-installed on arm ubunutu images) |
|||
build-linux-arm64: |
|||
environment: release |
|||
runs-on: linux-arm64 |
|||
env: |
|||
OLLAMA_SKIP_MANIFEST_CREATE: "1" |
|||
BUILD_ARCH: arm64 |
|||
PUSH: "1" |
|||
steps: |
|||
- uses: actions/checkout@v4 |
|||
with: |
|||
submodules: recursive |
|||
- name: Set Version |
|||
shell: bash |
|||
run: echo "VERSION=${GITHUB_REF_NAME#v}" >> $GITHUB_ENV |
|||
- name: "Install Docker" |
|||
run: | |
|||
# Add Docker's official GPG key: |
|||
env |
|||
uname -a |
|||
sudo apt-get update |
|||
sudo apt-get install -y ca-certificates curl |
|||
sudo install -m 0755 -d /etc/apt/keyrings |
|||
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc |
|||
sudo chmod a+r /etc/apt/keyrings/docker.asc |
|||
|
|||
# Add the repository to Apt sources: |
|||
echo \ |
|||
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ |
|||
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ |
|||
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null |
|||
sudo apt-get update |
|||
sudo apt-get install -y docker-ce docker-ce-cli containerd.io |
|||
sudo usermod -aG docker $USER |
|||
sudo apt-get install acl |
|||
sudo setfacl --modify user:$USER:rw /var/run/docker.sock |
|||
- name: Login to Docker Hub |
|||
uses: docker/login-action@v3 |
|||
with: |
|||
username: ${{ vars.DOCKER_USER }} |
|||
password: ${{ secrets.DOCKER_ACCESS_TOKEN }} |
|||
- run: | |
|||
./scripts/build_linux.sh |
|||
./scripts/build_docker.sh |
|||
- uses: actions/upload-artifact@v4 |
|||
with: |
|||
name: dist-linux-arm64 |
|||
path: | |
|||
dist/*linux* |
|||
!dist/*-cov |
|||
|
|||
# Aggregate all the assets and ship a release |
|||
release: |
|||
needs: |
|||
- build-darwin |
|||
- build-windows |
|||
- build-linux-amd64 |
|||
- build-linux-arm64 |
|||
runs-on: ubuntu-latest |
|||
environment: release |
|||
permissions: |
|||
contents: write |
|||
env: |
|||
OLLAMA_SKIP_IMAGE_BUILD: "1" |
|||
PUSH: "1" |
|||
steps: |
|||
- uses: actions/checkout@v4 |
|||
- name: Set Version |
|||
shell: bash |
|||
run: | |
|||
echo "VERSION=${GITHUB_REF_NAME#v}" >> $GITHUB_ENV |
|||
echo "RELEASE_VERSION=$(echo ${GITHUB_REF_NAME} | cut -f1 -d-)" >> $GITHUB_ENV |
|||
- name: Login to Docker Hub |
|||
uses: docker/login-action@v3 |
|||
with: |
|||
username: ${{ vars.DOCKER_USER }} |
|||
password: ${{ secrets.DOCKER_ACCESS_TOKEN }} |
|||
- run: ./scripts/build_docker.sh |
|||
- name: Retrieve built artifact |
|||
uses: actions/download-artifact@v4 |
|||
with: |
|||
path: dist |
|||
pattern: dist-* |
|||
merge-multiple: true |
|||
- run: | |
|||
ls -lh dist/ |
|||
(cd dist; sha256sum * > sha256sum.txt) |
|||
cat dist/sha256sum.txt |
|||
- uses: ncipollo/release-action@v1 |
|||
with: |
|||
name: ${{ env.RELEASE_VERSION }} |
|||
allowUpdates: true |
|||
artifacts: "dist/*" |
|||
draft: true |
|||
prerelease: true |
|||
omitBodyDuringUpdate: true |
|||
generateReleaseNotes: true |
|||
omitDraftDuringUpdate: true |
|||
omitPrereleaseDuringUpdate: true |
|||
replacesArtifacts: true |
|||
Loading…
Reference in new issue