Skip to content

feat: pack libraries and create releases #63

feat: pack libraries and create releases

feat: pack libraries and create releases #63

Workflow file for this run

name: CI
on:
pull_request:
types: [opened, synchronize, reopened]
workflow_dispatch:
env:
LLM_MODEL_URL: https://delta.jan.ai/tinyllama-1.1b-chat-v0.3.Q2_K.gguf
EMBEDDING_MODEL_URL: https://catalog.jan.ai/dist/models/embeds/nomic-embed-text-v1.5.f16.gguf
jobs:
create-draft-release:
runs-on: ubuntu-latest
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
outputs:
upload_url: ${{ steps.create_release.outputs.upload_url }}
version: ${{ steps.get_version.outputs.version }}
permissions:
contents: write
steps:
- name: Extract tag name without v prefix
id: get_version
run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV && echo "::set-output name=version::${GITHUB_REF#refs/tags/v}"
env:
GITHUB_REF: ${{ github.ref }}
- name: Create Draft Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref_name }}
release_name: "${{ env.VERSION }}"
draft: true
prerelease: false
# Get the latest version of the release
set-cortex-llamacpp-version:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.version_update.outputs.new_version }}
steps:
- name: Get latest release
id: version_update
run: |
NEW_VERSION="0.1.0-1"
echo "::set-output name=new_version::$NEW_VERSION"
echo "Version: $NEW_VERSION"
# ldd --version
# if [[ ${{ github.event_name }} == push && ${{ github.ref }} == refs/tags/* ]]; then
# echo "VERSION=${GITHUB_REF#refs/tags/}"
# NEW_VERSION="${VERSION#v}"
# echo "::set-output name=new_version::$NEW_VERSION"
# else
# # Function to get the latest release tag
# get_latest_tag() {
# local retries=0
# local max_retries=3
# local tag
# while [ $retries -lt $max_retries ]; do
# tag=$(curl -s https://api.github.com/repos/janhq/cortex.llamacpp/releases/latest | jq -r .tag_name)
# if [ -n "$tag" ] && [ "$tag" != "null" ]; then
# echo $tag
# return
# else
# let retries++
# sleep 2
# fi
# done
# echo "Failed to fetch latest tag after $max_retries attempts."
# exit 1
# }
# # Get the latest release tag from GitHub API
# LATEST_TAG=$(get_latest_tag)
# # Remove the 'v' and append the build number to the version
# NEW_VERSION="${LATEST_TAG#v}-${GITHUB_RUN_NUMBER}"
# echo "New version: $NEW_VERSION"
# echo "::set-output name=new_version::$NEW_VERSION"
# fi
# echo "Version: $NEW_VERSION"
ubuntu-amd64-build:
runs-on: ubuntu-18-04-cuda-11-7
needs: [create-draft-release, set-cortex-llamacpp-version]
if: always() && (needs.create-draft-release.result == 'success' || needs.create-draft-release.result == 'skipped') && needs.set-cortex-llamacpp-version.result == 'success'
timeout-minutes: 40
strategy:
matrix:
include:
- build: "amd64-avx2"
defines: "-DLLAMA_NATIVE=OFF"
- build: "amd64-avx"
defines: "-DLLAMA_AVX2=OFF -DLLAMA_NATIVE=OFF"
- build: "amd64-avx512"
defines: "-DLLAMA_AVX512=ON -DLLAMA_NATIVE=OFF"
- build: "amd64-vulkan"
defines: "-DLLAMA_VULKAN=ON -DLLAMA_NATIVE=OFF"
steps:
- name: Clone
id: checkout
uses: actions/checkout@v3
with:
submodules: recursive
- name: Prepare Vulkan SDK
if: ${{ matrix.build == 'amd64-vulkan' }}
uses: humbletim/[email protected]
with:
vulkan-query-version: 1.3.275.0
vulkan-components: Vulkan-Headers, Vulkan-Loader
vulkan-use-cache: true
- name: Build library
run: |
./configure.sh
make build CMAKE_EXTRA_FLAGS="${{ matrix.defines }}"
- name: Build server example
run: |
mkdir -p examples/server/build
cd examples/server/build
cmake .. ${{ matrix.defines }}
cmake --build . --config Release
- name: Package
shell: bash
run: |
mkdir -p cortex.llamacpp
cp build/libengine.so cortex.llamacpp
tar -czvf cortex.llamacpp.tar.gz cortex.llamacpp
- name: Upload Artifact
uses: actions/upload-artifact@v2
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || github.event_name == 'pull_request'
with:
name: cortex.llamacpp-linux-${{ matrix.build }}
path: ./cortex.llamacpp
- name: Run e2e testing
shell: bash
if: ${{ matrix.build != 'arm64' && matrix.build != 'amd64-vulkan' && matrix.build != 'amd64-avx512' }}
run: |
mkdir -p examples/server/build/engines/cortex.llamacpp
cd examples/server/build/
cp ../../../build/libengine.so engines/cortex.llamacpp/
chmod +x ../../../.github/scripts/e2e-test-server-linux-and-mac.sh && ../../../.github/scripts/e2e-test-server-linux-and-mac.sh ./server ${{ env.LLM_MODEL_URL }} ${{ env.EMBEDDING_MODEL_URL }}
- uses: actions/[email protected]
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.create-draft-release.outputs.upload_url }}
asset_path: ./cortex.llamacpp.tar.gz
asset_name: cortex.llamacpp-${{ needs.create-draft-release.outputs.version }}-linux-${{ matrix.build }}.tar.gz
asset_content_type: application/gzip
ubuntu-amd64-cuda-build:
runs-on: ubuntu-18-04-cuda-${{ matrix.cuda }}
needs: [create-draft-release, set-cortex-llamacpp-version]
if: always() && (needs.create-draft-release.result == 'success' || needs.create-draft-release.result == 'skipped') && needs.set-cortex-llamacpp-version.result == 'success'
timeout-minutes: 40
strategy:
matrix:
cuda: ["12-0", "11-7"]
steps:
- name: Clone
id: checkout
uses: actions/checkout@v3
with:
submodules: recursive
- name: Build library
run: |
./configure.sh
make build CMAKE_EXTRA_FLAGS="-DLLAMA_NATIVE=OFF -DLLAMA_CUDA=ON"
- name: Package
shell: bash
run: |
mkdir -p cortex.llamacpp
cp build/libengine.so cortex.llamacpp
tar -czvf cortex.llamacpp.tar.gz cortex.llamacpp
- name: Upload Artifact
uses: actions/upload-artifact@v2
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || github.event_name == 'pull_request'
with:
name: cortex.llamacpp-linux-amd64-cuda-${{ matrix.cuda }}
path: ./cortex.llamacpp
- name: Build server example
run: |
mkdir -p examples/server/build
cd examples/server/build
cmake .. -DLLAMA_NATIVE=OFF -DLLAMA_CUDA=ON
cmake --build . --config Release
- uses: actions/[email protected]
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.create-draft-release.outputs.upload_url }}
asset_path: ./cortex.llamacpp.tar.gz
asset_name: cortex.llamacpp-${{ needs.create-draft-release.outputs.version }}-linux-amd64-cuda-${{ matrix.cuda }}.tar.gz
asset_content_type: application/gzip
macOS-silicon-build:
runs-on: mac-silicon
needs: [create-draft-release, set-cortex-llamacpp-version]
if: always() && (needs.create-draft-release.result == 'success' || needs.create-draft-release.result == 'skipped') && needs.set-cortex-llamacpp-version.result == 'success'
timeout-minutes: 40
steps:
- name: Clone
id: checkout
uses: actions/checkout@v3
with:
submodules: recursive
- name: Build library
run: |
./configure.sh
make build CMAKE_EXTRA_FLAGS="-DLLAMA_METAL_EMBED_LIBRARY=ON"
- name: Build server example
run: |
mkdir -p examples/server/build
cd examples/server/build
cmake ..
cmake --build . --config Release
- name: Package
shell: bash
run: |
mkdir -p cortex.llamacpp
cp build/libengine.dylib cortex.llamacpp/
- name: Upload Artifact
uses: actions/upload-artifact@v2
with:
name: cortex.llamacpp-mac-arm64
path: ./cortex.llamacpp
- name: Run e2e testing
shell: bash
run: |
mkdir -p examples/server/build/engines/cortex.llamacpp
cd examples/server/build/
cp ../../../build/libengine.dylib engines/cortex.llamacpp/
chmod +x ../../../.github/scripts/e2e-test-server-linux-and-mac.sh && ../../../.github/scripts/e2e-test-server-linux-and-mac.sh ./server ${{ env.LLM_MODEL_URL }} ${{ env.EMBEDDING_MODEL_URL }}
macOS-amd64-build:
runs-on: macos-13
needs: [create-draft-release, set-cortex-llamacpp-version]
if: always() && (needs.create-draft-release.result == 'success' || needs.create-draft-release.result == 'skipped') && needs.set-cortex-llamacpp-version.result == 'success'
timeout-minutes: 40
steps:
- name: Clone
id: checkout
uses: actions/checkout@v3
with:
submodules: recursive
- name: Build library
id: cmake_build
run: |
./configure.sh
make build CMAKE_EXTRA_FLAGS="-DLLAMA_METAL=OFF"
- name: Build server example
run: |
mkdir -p examples/server/build
cd examples/server/build
cmake ..
cmake --build . --config Release
- name: Package
shell: bash
run: |
mkdir -p cortex.llamacpp
cp build/libengine.dylib cortex.llamacpp/
- name: Upload Artifact
uses: actions/upload-artifact@v2
with:
name: cortex.llamacpp-mac-amd64
path: ./cortex.llamacpp
- name: Run e2e testing
shell: bash
run: |
mkdir -p examples/server/build/engines/cortex.llamacpp
cd examples/server/build/
cp ../../../build/libengine.dylib engines/cortex.llamacpp/
chmod +x ../../../.github/scripts/e2e-test-server-linux-and-mac.sh && ../../../.github/scripts/e2e-test-server-linux-and-mac.sh ./server ${{ env.LLM_MODEL_URL }} ${{ env.EMBEDDING_MODEL_URL }}
universal-cortex-llamacpp-artifact-macos:
runs-on: macos-latest
needs: [create-draft-release, set-cortex-llamacpp-version, macOS-silicon-build, macOS-amd64-build]
if: always() && (needs.create-draft-release.result == 'success' || needs.create-draft-release.result == 'skipped') && needs.set-cortex-llamacpp-version.result == 'success'
timeout-minutes: 40
permissions:
contents: write
steps:
- name: download artifact amd64
uses: actions/download-artifact@v2
with:
name: cortex.llamacpp-mac-amd64
path: ./cortex.llamacpp-mac-amd64
- name: download artifact arm64
uses: actions/download-artifact@v2
with:
name: cortex.llamacpp-mac-arm64
path: ./cortex.llamacpp-mac-arm64
- name: bundle universal binary
run: |
mkdir -p cortex.llamacpp
ls ./cortex.llamacpp-mac-amd64
lipo -create ./cortex.llamacpp-mac-amd64/libengine.dylib ./cortex.llamacpp-mac-arm64/libengine.dylib -output ./cortex.llamacpp/libengine.dylib
tar -czvf cortex.llamacpp.tar.gz cortex.llamacpp
- name: Upload Artifact
uses: actions/upload-artifact@v2
with:
name: cortex.llamacpp-mac-universal
path: ./cortex.llamacpp
- uses: actions/[email protected]
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.create-draft-release.outputs.upload_url }}
asset_path: ./cortex.llamacpp.tar.gz
asset_name: cortex.llamacpp-${{ needs.create-draft-release.outputs.version }}-mac-universal.tar.gz
asset_content_type: application/gzip
windows-amd64-build:
runs-on: windows-latest
needs: [create-draft-release, set-cortex-llamacpp-version]
if: always() && (needs.create-draft-release.result == 'success' || needs.create-draft-release.result == 'skipped') && needs.set-cortex-llamacpp-version.result == 'success'
timeout-minutes: 40
strategy:
matrix:
include:
- build: "amd64-avx2"
defines: "-DLLAMA_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DLLAMA_BLAS=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=RELEASE"
- build: "amd64-avx"
defines: "-DLLAMA_AVX2=OFF -DLLAMA_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DLLAMA_BLAS=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=RELEASE"
- build: "amd64-avx512"
defines: "-DLLAMA_AVX512=ON -DLLAMA_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DLLAMA_BLAS=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=RELEASE"
- build: "amd64-vulkan"
defines: "-DLLAMA_VULKAN=ON -DLLAMA_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=RELEASE"
steps:
- name: Clone
id: checkout
uses: actions/checkout@v3
with:
submodules: recursive
- name: install make-gnu
run: |
choco install make -y
- name: Prepare Vulkan SDK
uses: humbletim/[email protected]
if: ${{ matrix.build == 'amd64-vulkan' }}
with:
vulkan-query-version: 1.3.275.0
vulkan-components: Vulkan-Headers, Vulkan-Loader
vulkan-use-cache: true
- name: Build library
shell: cmd
run: |
cmake -S ./third-party -B ./build_deps/third-party
cmake --build ./build_deps/third-party --config Release -j %NUMBER_OF_PROCESSORS%
mkdir -p build
cd build
cmake .. ${{ matrix.defines }}
cmake --build . --config Release
- name: Build server example
shell: cmd
run: |
mkdir .\examples\server\build
cd .\examples\server\build
cmake .. ${{ matrix.defines }}
cmake --build . --config Release
- name: Pack artifacts
id: pack_artifacts
shell: cmd
run: |
dotnet tool install --global AzureSignTool
azuresigntool.exe sign -kvu "${{ secrets.AZURE_KEY_VAULT_URI }}" -kvi "${{ secrets.AZURE_CLIENT_ID }}" -kvt "${{ secrets.AZURE_TENANT_ID }}" -kvs "${{ secrets.AZURE_CLIENT_SECRET }}" -kvc ${{ secrets.AZURE_CERT_NAME }} -tr http://timestamp.globalsign.com/tsa/r6advanced1 -v ".\build\Release\engine.dll"
7z a -ttar temp.tar .\build\Release\*
7z a -tgzip cortex.llamacpp.tar.gz temp.tar
- name: Run e2e testing
shell: cmd
if: ${{ matrix.build != 'arm64' && matrix.build != 'amd64-vulkan' && matrix.build != 'amd64-avx512' }}
run: |
mkdir examples\server\build\Release\engines\cortex.llamacpp
cd examples\server\build\Release
copy ..\..\..\..\build\Release\engine.dll engines\cortex.llamacpp\
..\..\..\..\.github\scripts\e2e-test-server-windows.bat server.exe ${{ env.LLM_MODEL_URL }} ${{ env.EMBEDDING_MODEL_URL }}
- name: Upload Artifact
uses: actions/upload-artifact@v2
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || github.event_name == 'pull_request'
with:
name: cortex.llamacpp-win-${{ matrix.build }}
path: ./build/Release
- uses: actions/[email protected]
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.create-draft-release.outputs.upload_url }}
asset_path: ./cortex.llamacpp.tar.gz
asset_name: cortex.llamacpp-${{ needs.create-draft-release.outputs.version }}-win-${{ matrix.build }}.tar.gz
asset_content_type: application/gzip
windows-amd64-cuda-build:
runs-on: windows-cuda-${{ matrix.cuda }}
needs: [create-draft-release, set-cortex-llamacpp-version]
if: always() && (needs.create-draft-release.result == 'success' || needs.create-draft-release.result == 'skipped') && needs.set-cortex-llamacpp-version.result == 'success'
timeout-minutes: 40
strategy:
matrix:
include:
- cuda: "12-0"
instructions: "amd64-avx2"
inst-flags: "-DLLAMA_NATIVE=OFF"
cmake-flags: "-DLLAMA_BUILD_SERVER=ON -DLLAMA_CUDA=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=RELEASE"
- cuda: "12-0"
instructions: "amd64-avx"
inst-flags: "-DLLAMA_AVX2=OFF -DLLAMA_NATIVE=OFF"
cmake-flags: "-DLLAMA_BUILD_SERVER=ON -DLLAMA_CUDA=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=RELEASE"
- cuda: "12-0"
instructions: "amd64-avx512"
inst-flags: "-DLLAMA_AVX512=ON -DLLAMA_NATIVE=OFF"
cmake-flags: "-DLLAMA_BUILD_SERVER=ON -DLLAMA_CUDA=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=RELEASE"
- cuda: "11-7"
instructions: "amd64-avx2"
inst-flags: "-DLLAMA_NATIVE=OFF"
cmake-flags: "-DLLAMA_BUILD_SERVER=ON -DLLAMA_CUDA=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=RELEASE"
- cuda: "11-7"
instructions: "amd64-avx"
inst-flags: "-DLLAMA_AVX2=OFF -DLLAMA_NATIVE=OFF"
cmake-flags: "-DLLAMA_BUILD_SERVER=ON -DLLAMA_CUDA=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=RELEASE"
- cuda: "11-7"
instructions: "amd64-avx512"
inst-flags: "-DLLAMA_AVX512=ON -DLLAMA_NATIVE=OFF"
cmake-flags: "-DLLAMA_BUILD_SERVER=ON -DLLAMA_CUDA=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=RELEASE"
steps:
- name: Clone
id: checkout
uses: actions/checkout@v3
with:
submodules: recursive
- name: Build library
shell: cmd
run: |
cmake -S ./third-party -B ./build_deps/third-party
cmake --build ./build_deps/third-party --config Release -j %NUMBER_OF_PROCESSORS%
mkdir -p build
cd build
cmake .. ${{ matrix.inst-flags }} ${{ matrix.cmake-flags }}
cmake --build . --config Release
- name: Build server example
shell: cmd
run: |
mkdir .\examples\server\build
cd .\examples\server\build
cmake .. ${{ matrix.inst-flags }} ${{ matrix.cmake-flags }}
cmake --build . --config Release
- name: Pack artifacts
id: pack_artifacts
shell: cmd
run: |
dotnet tool install --global AzureSignTool
azuresigntool.exe sign -kvu "${{ secrets.AZURE_KEY_VAULT_URI }}" -kvi "${{ secrets.AZURE_CLIENT_ID }}" -kvt "${{ secrets.AZURE_TENANT_ID }}" -kvs "${{ secrets.AZURE_CLIENT_SECRET }}" -kvc ${{ secrets.AZURE_CERT_NAME }} -tr http://timestamp.globalsign.com/tsa/r6advanced1 -v ".\build\Release\engine.dll"
7z a -ttar temp.tar .\build\Release\*
7z a -tgzip cortex.llamacpp.tar.gz temp.tar
- name: Upload Artifact
uses: actions/upload-artifact@v2
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || github.event_name == 'pull_request'
with:
name: cortex.llamacpp-win-${{ matrix.instructions }}-cuda-${{ matrix.cuda }}
path: ./build/Release
- uses: actions/[email protected]
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.create-draft-release.outputs.upload_url }}
asset_path: ./cortex.llamacpp.tar.gz
asset_name: cortex.llamacpp-${{ needs.create-draft-release.outputs.version }}-win-${{ matrix.instructions }}-cuda-${{ matrix.cuda }}.tar.gz
asset_content_type: application/gzip