123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647 |
- name: release
- on:
- push:
- tags:
- - 'v*'
- jobs:
- # Full build of the Mac assets
- build-darwin:
- runs-on: macos-12
- 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
- security set-keychain-settings -lut 3600 build.keychain
- - uses: actions/setup-go@v5
- with:
- go-version-file: go.mod
- 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 }}
- SDKROOT: /Applications/Xcode_13.4.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
- DEVELOPER_DIR: /Applications/Xcode_13.4.1.app/Contents/Developer
- 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-file: go.mod
- 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: |
- build/**/*
- build/**/*.a
- dist/windows-amd64/**
- # 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-file: go.mod
- 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-24.Q3-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: |
- build/**/*
- dist/windows-amd64/**
- - uses: actions/upload-artifact@v4
- with:
- name: windows-rocm-deps
- path: dist/deps/*
- # CUDA generation step
- generate-windows-cuda:
- environment: release
- runs-on: windows
- strategy:
- matrix:
- cuda:
- - version: "11"
- url: 'https://developer.download.nvidia.com/compute/cuda/11.3.1/local_installers/cuda_11.3.1_465.89_win10.exe'
- - version: "12"
- url: 'https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_551.61_windows.exe'
- 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-file: go.mod
- cache: true
- - name: 'Install CUDA ${{ matrix.cuda.version }}'
- run: |
- $ErrorActionPreference = "Stop"
- write-host "downloading CUDA Installer"
- Invoke-WebRequest -Uri "${{ matrix.cuda.url }}" -OutFile "${env:RUNNER_TEMP}\cuda-install.exe"
- write-host "Installing CUDA"
- Start-Process "${env:RUNNER_TEMP}\cuda-install.exe" -ArgumentList '-s' -NoNewWindow -Wait
- write-host "Completed CUDA"
- $cudaPath=((resolve-path "c:\Program Files\NVIDIA*\CUDA\v*\bin\nvcc.exe")[0].path | split-path | split-path)
- $cudaVer=($cudaPath | split-path -leaf ) -replace 'v(\d+).(\d+)', '$1_$2'
- echo "$cudaPath\bin" >> $env:GITHUB_PATH
- echo "CUDA_PATH=$cudaPath" >> $env:GITHUB_ENV
- echo "CUDA_PATH_V${cudaVer}=$cudaPath" >> $env:GITHUB_ENV
- echo "CUDA_PATH_VX_Y=CUDA_PATH_V${cudaVer}" >> $env:GITHUB_ENV
- - name: 'Verify CUDA'
- run: nvcc -V
- - run: go get ./...
- - name: go generate
- run: |
- $gopath=(get-command go).source | split-path -parent
- $cudabin=(get-command nvcc).source | split-path
- & "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;$cudabin;$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-${{ matrix.cuda.version }}
- path: |
- build/**/*
- dist/windows-amd64/**
- - uses: actions/upload-artifact@v4
- with:
- name: windows-cuda-deps-${{ matrix.cuda.version }}
- 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-file: go.mod
- cache: true
- - run: go get
- - uses: actions/download-artifact@v4
- with:
- name: generate-windows-cpu
- - uses: actions/download-artifact@v4
- with:
- name: generate-windows-cuda-11
- - uses: actions/download-artifact@v4
- with:
- name: generate-windows-cuda-12
- - uses: actions/download-artifact@v4
- with:
- name: windows-cuda-deps-11
- - uses: actions/download-artifact@v4
- with:
- name: windows-cuda-deps-12
- - uses: actions/download-artifact@v4
- with:
- name: windows-rocm-deps
- - uses: actions/download-artifact@v4
- with:
- name: generate-windows-rocm
- - run: dir 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"
- & .\scripts\build_windows.ps1
- - uses: actions/upload-artifact@v4
- with:
- name: dist-windows
- path: |
- dist/OllamaSetup.exe
- dist/ollama-windows-*.zip
- # Linux x86 assets built using the container based build
- build-linux-amd64:
- environment: release
- runs-on: linux
- env:
- BUILD_ARCH: amd64
- steps:
- - uses: actions/checkout@v4
- with:
- submodules: recursive
- - name: Set Version
- shell: bash
- run: echo "VERSION=${GITHUB_REF_NAME#v}" >> $GITHUB_ENV
- - run: |
- ./scripts/build_linux.sh
- - 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:
- BUILD_ARCH: arm64
- 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
- - run: |
- ./scripts/build_linux.sh
- - uses: actions/upload-artifact@v4
- with:
- name: dist-linux-arm64
- path: |
- dist/*linux*
- !dist/*-cov
- # Container image build
- build-linux:
- environment: release
- strategy:
- matrix:
- runner:
- - linux
- - linux-arm64
- runs-on: ${{ matrix.runner }}
- env:
- FINAL_IMAGE_REPO: ollama/ollama
- steps:
- - uses: actions/checkout@v4
- with:
- submodules: recursive
- - name: 'Install Docker'
- if: ${{ startsWith(matrix.runner, 'linux-arm64') }}
- run: |
- 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
- 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: Docker meta
- id: meta
- uses: docker/metadata-action@v5
- with:
- images: ${{ env.FINAL_IMAGE_REPO }}
- flavor: |
- latest=false
- tags: |
- type=ref,event=tag
- type=ref,enable=true,priority=600,prefix=0.0.0-pr,suffix=,event=pr
- type=semver,pattern={{version}}
- - name: Set Version
- shell: bash
- run: |
- machine=$(uname -m)
- case ${machine} in
- x86_64) echo ARCH=amd64; echo PLATFORM_PAIR=linux-amd64 ;;
- aarch64) echo ARCH=arm64; echo PLATFORM_PAIR=linux-arm64 ;;
- esac >>$GITHUB_ENV
- echo GOFLAGS="'-ldflags=-w -s \"-X=github.com/ollama/ollama/version.Version=${{ env.DOCKER_METADATA_OUTPUT_VERSION }}\" \"-X=github.com/ollama/ollama/server.mode=release\"'" >>$GITHUB_ENV
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v3
- - name: Login to Docker Hub
- uses: docker/login-action@v3
- with:
- username: ${{ vars.DOCKER_USER }}
- password: ${{ secrets.DOCKER_ACCESS_TOKEN }}
- - name: Build and push by digest
- id: build
- uses: docker/build-push-action@v6
- with:
- context: "."
- platforms: linux/${{ env.ARCH }}
- build-args: |
- GOFLAGS
- outputs: type=image,name=${{ env.FINAL_IMAGE_REPO }},push-by-digest=true,name-canonical=true,push=true
- - name: Export digest
- run: |
- mkdir -p /tmp/digests
- digest="${{ steps.build.outputs.digest }}"
- touch "/tmp/digests/${digest#sha256:}"
- - name: Upload digest
- uses: actions/upload-artifact@v4
- with:
- name: digests-${{ env.PLATFORM_PAIR }}
- path: /tmp/digests/*
- if-no-files-found: error
- retention-days: 1
- merge:
- environment: release
- runs-on: linux
- needs:
- - build-linux
- env:
- FINAL_IMAGE_REPO: ollama/ollama
- steps:
- - uses: actions/checkout@v4
- with:
- submodules: recursive
- - name: Download digests
- uses: actions/download-artifact@v4
- with:
- path: /tmp/digests
- pattern: digests-*
- merge-multiple: true
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v3
- - name: Docker meta
- id: meta
- uses: docker/metadata-action@v5
- with:
- images: ${{ env.FINAL_IMAGE_REPO }}
- flavor: |
- latest=false
- tags: |
- type=ref,event=tag
- type=ref,enable=true,priority=600,prefix=0.0.0-pr,suffix=,event=pr
- type=semver,pattern={{version}}
- - name: Set Version
- shell: bash
- run: |
- machine=$(uname -m)
- case ${machine} in
- x86_64) echo ARCH=amd64; echo PLATFORM_PAIR=linux-amd64 ;;
- aarch64) echo ARCH=arm64; echo PLATFORM_PAIR=linux-arm64 ;;
- esac >>$GITHUB_ENV
- echo GOFLAGS="'-ldflags=-w -s \"-X=github.com/ollama/ollama/version.Version=${{ env.DOCKER_METADATA_OUTPUT_VERSION }}\" \"-X=github.com/ollama/ollama/server.mode=release\"'" >>$GITHUB_ENV
- - name: Login to Docker Hub
- uses: docker/login-action@v3
- with:
- username: ${{ vars.DOCKER_USER }}
- password: ${{ secrets.DOCKER_ACCESS_TOKEN }}
- - name: Create manifest list and push
- working-directory: /tmp/digests
- run: |
- docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
- $(printf '${{ env.FINAL_IMAGE_REPO }}@sha256:%s ' *)
- - name: Inspect image
- run: |
- docker buildx imagetools inspect ${{ env.FINAL_IMAGE_REPO }}:${{ steps.meta.outputs.version }}
- build-linux-rocm:
- environment: release
- runs-on: linux
- env:
- FINAL_IMAGE_REPO: ollama/ollama
- ARCH: amd64
- PLATFORM_PAIR: linux-amd64
- steps:
- - uses: actions/checkout@v4
- with:
- submodules: recursive
- - name: Docker meta
- id: meta
- uses: docker/metadata-action@v5
- with:
- images: ${{ env.FINAL_IMAGE_REPO }}
- flavor: |
- latest=false
- tags: |
- type=ref,event=tag
- type=ref,enable=true,priority=600,prefix=0.0.0-pr,suffix=,event=pr
- type=semver,pattern={{version}}
- - name: Set Version
- shell: bash
- run: |
- echo GOFLAGS="'-ldflags=-w -s \"-X=github.com/ollama/ollama/version.Version=${{ env.DOCKER_METADATA_OUTPUT_VERSION }}\" \"-X=github.com/ollama/ollama/server.mode=release\"'" >>$GITHUB_ENV
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v3
- - name: Login to Docker Hub
- uses: docker/login-action@v3
- with:
- username: ${{ vars.DOCKER_USER }}
- password: ${{ secrets.DOCKER_ACCESS_TOKEN }}
- - name: Build and push by digest
- id: build
- uses: docker/build-push-action@v6
- with:
- context: "."
- target: runtime-rocm
- build-args: |
- GOFLAGS
- tags: ${{ env.FINAL_IMAGE_REPO }}:${{ env.DOCKER_METADATA_OUTPUT_VERSION}}-rocm,${{ env.FINAL_IMAGE_REPO }}:rocm
- push: true
- # Aggregate all the assets and ship a release
- release:
- needs:
- - build-darwin
- - build-windows
- - build-linux-amd64
- - build-linux-arm64
- runs-on: linux
- environment: release
- permissions:
- contents: write
- env:
- GH_TOKEN: ${{ github.token }}
- 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: Retrieve built artifact
- uses: actions/download-artifact@v4
- with:
- path: dist
- pattern: dist-*
- merge-multiple: true
- - run: |
- ls -lh dist/
- (cd dist; find . -type f | xargs sha256sum > ../sha256sum.txt)
- mv sha256sum.txt dist/
- mv dist/linux-???64 .
- mv dist/linux-amd64-rocm .
- cat dist/sha256sum.txt
- - name: Create or update Release
- run: |
- echo "Looking for existing release for ${{ env.RELEASE_VERSION }}"
- OLD_TAG=$(gh release ls --json name,tagName | jq -r ".[] | select(.name == \"${{ env.RELEASE_VERSION }}\") | .tagName")
- if [ -n "$OLD_TAG" ]; then
- echo "Updating release ${{ env.RELEASE_VERSION }} to point to new tag ${GITHUB_REF_NAME}"
- gh release edit ${OLD_TAG} --tag ${GITHUB_REF_NAME}
- else
- echo "Creating new release ${{ env.RELEASE_VERSION }} pointing to tag ${GITHUB_REF_NAME}"
- gh release create ${GITHUB_REF_NAME} \
- --title ${{ env.RELEASE_VERSION }} \
- --draft \
- --generate-notes \
- --prerelease
- fi
- echo "Uploading artifacts for tag ${GITHUB_REF_NAME}"
- gh release upload ${GITHUB_REF_NAME} dist/* --clobber
|