Build win #92
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: release | |
| on: | |
| pull_request: | |
| branches: [main] | |
| push: | |
| tags: | |
| - 'v*' | |
| - 'tmp*' | |
| env: | |
| CGO_CFLAGS: '-O3' | |
| CGO_CXXFLAGS: '-O3' | |
| jobs: | |
| setup-environment: | |
| runs-on: ubuntu-22.04 | |
| environment: release | |
| outputs: | |
| GOFLAGS: ${{ steps.goflags.outputs.GOFLAGS }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set environment | |
| id: goflags | |
| run: | | |
| echo GOFLAGS="'-ldflags=-w -s \"-X=github.com/ollama/ollama/version.Version=${GITHUB_REF_NAME#v}\" \"-X=github.com/ollama/ollama/server.mode=release\"'" >>$GITHUB_OUTPUT | |
| windows-depends: | |
| strategy: | |
| matrix: | |
| os: [windows] | |
| arch: [amd64] | |
| preset: ['SYCL'] | |
| include: | |
| - install: https://registrationcenter-download.intel.com/akdlm/IRC_NAS/75d4eb97-914a-4a95-852c-7b9733d80f74/intel-deep-learning-essentials-2025.1.3.8_offline.exe | |
| #install: https://registrationcenter-download.intel.com/akdlm/IRC_NAS/e5785fb3-b5a7-4b97-89bc-918adab1f77d/intel-oneapi-base-toolkit-2025.1.3.8_offline.exe | |
| sycl-version: '2025.1.3' | |
| runs-on: windows-2019 | |
| environment: release | |
| env: | |
| GOFLAGS: ${{ needs.setup-environment.outputs.GOFLAGS }} | |
| WINDOWS_BASEKIT_URL: https://registrationcenter-download.intel.com/akdlm/IRC_NAS/75d4eb97-914a-4a95-852c-7b9733d80f74/intel-deep-learning-essentials-2025.1.3.8_offline.exe | |
| WINDOWS_DPCPP_MKL: intel.oneapi.win.cpp-dpcpp-common:intel.oneapi.win.mkl.devel:intel.oneapi.win.dnnl:intel.oneapi.win.tbb.devel | |
| ONEAPI_ROOT: "C:\\Program Files (x86)\\Intel\\oneAPI" | |
| steps: | |
| - name: Install system dependencies | |
| run: | | |
| choco install -y --no-progress ccache ninja | |
| ccache -o cache_dir=${{ github.workspace }}\.ccache | |
| - name: Clone | |
| id: checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: ccache | |
| uses: hendrikmuhs/ccache-action@v1.2.16 | |
| with: | |
| key: windows-depends | |
| variant: sccache | |
| evict-old-files: 1d | |
| - name: Install | |
| shell: bash | |
| run: | | |
| scripts/install-oneapi.bat $WINDOWS_BASEKIT_URL $WINDOWS_DPCPP_MKL | |
| - if: startsWith(matrix.preset, 'SYCL') | |
| name: Configure oneAPI ${{ matrix.sycl-version }} | |
| run: | | |
| $oneAPIPath="C:\Program Files (x86)\Intel\oneAPI\*" | |
| echo "$oneAPIPath\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append | |
| echo "CC=$oneAPIPath\compiler\latest\bin\icx.exe" | Out-File -FilePath $env:GITHUB_ENV -Append | |
| echo "CXX=$oneAPIPath\compiler\latest\bin\icx.exe" | Out-File -FilePath $env:GITHUB_ENV -Append | |
| - if: matrix.preset == 'CPU' | |
| run: | | |
| echo "CC=clang.exe" | Out-File -FilePath $env:GITHUB_ENV -Append | |
| echo "CXX=clang++.exe" | Out-File -FilePath $env:GITHUB_ENV -Append | |
| - if: ${{ !cancelled() && steps.cache-install.outputs.cache-hit != 'true' }} | |
| uses: actions/cache/save@v4 | |
| with: | |
| path: | | |
| C:\Program Files (x86)\Intel\oneAPI | |
| key: ${{ matrix.install }} | |
| - uses: actions/checkout@v4 | |
| - uses: actions/cache@v4 | |
| with: | |
| path: ${{ github.workspace }}\.ccache | |
| key: ccache-${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.preset }} | |
| windows-build: | |
| strategy: | |
| matrix: | |
| os: [windows] | |
| arch: [amd64] | |
| runs-on: windows-2019 | |
| environment: release | |
| needs: [setup-environment,windows-depends] | |
| env: | |
| GOFLAGS: ${{ needs.setup-environment.outputs.GOFLAGS }} | |
| steps: | |
| - name: Install AMD64 system dependencies | |
| if: matrix.arch == 'amd64' | |
| run: | | |
| $ErrorActionPreference = "Stop" | |
| Start-Process "C:\msys64\usr\bin\pacman.exe" -ArgumentList @("-S", "--noconfirm", "mingw-w64-clang-x86_64-gcc-compat", "mingw-w64-clang-x86_64-clang") -NoNewWindow -Wait | |
| echo "C:\msys64\usr\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append | |
| echo "C:\msys64\clang64\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-go@v5 | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| pattern: build-windows-* | |
| path: dist\ | |
| merge-multiple: true | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| pattern: depends-windows-amd64-* | |
| path: dist\windows-amd64\ | |
| merge-multiple: true | |
| - name: Build ollamas | |
| run: | | |
| $env:VERSION='${{ github.ref_name }}' -Replace "v(.*)", '$1' | |
| & cmd /c "C:\Program Files (x86)\Intel\oneAPI\setvars.bat" intel64 --force | |
| & .\scripts\build_windows.ps1 | |
| env: | |
| VCToolsRedistDir: stub | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: build-${{ matrix.os }}-${{ matrix.arch }} | |
| path: | | |
| dist\${{ matrix.os }}-${{ matrix.arch }}\*.exe | |
| dist\${{ matrix.os }}-${{ matrix.arch }}-app.exe | |
| dist\* | |
| windows-publish: | |
| runs-on: windows-2019 | |
| environment: release | |
| needs: [windows-depends, windows-build] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| pattern: build-windows-* | |
| path: dist\ | |
| merge-multiple: true | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| pattern: depends-windows-amd64-* | |
| path: dist\windows-amd64\ | |
| merge-multiple: true | |
| env: | |
| KEY_CONTAINER: ${{ vars.KEY_CONTAINER }} | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: dist-windows | |
| path: | | |
| dist\OllamaSetup.exe | |
| dist\ollama-windows-*.zip | |
| linux-build: | |
| strategy: | |
| matrix: | |
| include: | |
| - os: linux | |
| arch: amd64 | |
| target: archive | |
| runs-on: ubuntu-22.04 | |
| environment: release | |
| needs: setup-environment | |
| env: | |
| GOFLAGS: ${{ needs.setup-environment.outputs.GOFLAGS }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: docker/setup-buildx-action@v3 | |
| - uses: docker/build-push-action@v6 | |
| with: | |
| context: . | |
| platforms: ${{ matrix.os }}/${{ matrix.arch }} | |
| target: ${{ matrix.target }} | |
| build-args: | | |
| GOFLAGS=${{ env.GOFLAGS }} | |
| CGO_CFLAGS=${{ env.CGO_CFLAGS }} | |
| CGO_CXXFLAGS=${{ env.CGO_CXXFLAGS }} | |
| outputs: type=local,dest=dist/${{ matrix.os }}-${{ matrix.arch }} | |
| cache-from: type=registry,ref=ollama/ollama:latest | |
| cache-to: type=inline | |
| - run: | | |
| for COMPONENT in bin/* lib/ollama/*; do | |
| case "$COMPONENT" in | |
| bin/ollama) echo $COMPONENT >>ollama-${{ matrix.os }}-${{ matrix.arch }}.tar.in ;; | |
| lib/ollama/*.so) echo $COMPONENT >>ollama-${{ matrix.os }}-${{ matrix.arch }}.tar.in ;; | |
| lib/ollama/cuda_v11) echo $COMPONENT >>ollama-${{ matrix.os }}-${{ matrix.arch }}.tar.in ;; | |
| lib/ollama/cuda_v12) echo $COMPONENT >>ollama-${{ matrix.os }}-${{ matrix.arch }}.tar.in ;; | |
| lib/ollama/cuda_jetpack5) echo $COMPONENT >>ollama-${{ matrix.os }}-${{ matrix.arch }}-jetpack5.tar.in ;; | |
| lib/ollama/cuda_jetpack6) echo $COMPONENT >>ollama-${{ matrix.os }}-${{ matrix.arch }}-jetpack6.tar.in ;; | |
| lib/ollama/rocm) echo $COMPONENT >>ollama-${{ matrix.os }}-${{ matrix.arch }}-rocm.tar.in ;; | |
| lib/ollama/sycl) echo $COMPONENT >>ollama-${{ matrix.os }}-${{ matrix.arch }}-sycl.tar.in ;; | |
| esac | |
| done | |
| working-directory: dist/${{ matrix.os }}-${{ matrix.arch }} | |
| - run: | | |
| for ARCHIVE in dist/${{ matrix.os }}-${{ matrix.arch }}/*.tar.in; do | |
| tar c -C dist/${{ matrix.os }}-${{ matrix.arch }} -T $ARCHIVE --owner 0 --group 0 | pigz -9vc >$(basename ${ARCHIVE//.*/}.tgz); | |
| done | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: dist-${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.target }} | |
| path: | | |
| *.tgz | |
| # Aggregate all the assets and ship a release | |
| release: | |
| needs: [linux-build] | |
| runs-on: ubuntu-22.04 | |
| environment: release | |
| permissions: | |
| contents: write | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| pattern: dist-linux-* | |
| path: dist | |
| merge-multiple: true | |
| - run: find . -type f -not -name 'sha256sum.txt' | xargs sha256sum | tee sha256sum.txt | |
| working-directory: dist | |
| - name: Create or update Release | |
| run: | | |
| RELEASE_VERSION="$(echo ${GITHUB_REF_NAME} | cut -f1 -d-)" | |
| echo "Looking for existing release for ${RELEASE_VERSION}" | |
| OLD_TAG=$(gh release ls --json name,tagName | jq -r ".[] | select(.name == \"${RELEASE_VERSION}\") | .tagName") | |
| if [ -n "$OLD_TAG" ]; then | |
| echo "Updating release ${RELEASE_VERSION} to point to new tag ${GITHUB_REF_NAME}" | |
| gh release edit ${OLD_TAG} --tag ${GITHUB_REF_NAME} | |
| else | |
| echo "Creating new release ${RELEASE_VERSION} pointing to tag ${GITHUB_REF_NAME}" | |
| gh release create ${GITHUB_REF_NAME} \ | |
| --title ${RELEASE_VERSION} \ | |
| --draft \ | |
| --generate-notes \ | |
| --prerelease | |
| fi | |
| echo "Uploading artifacts for tag ${GITHUB_REF_NAME}" | |
| gh release upload ${GITHUB_REF_NAME} dist/* --clobber |