Skip to content

ci(release): migrate to manylinux_2_28 #659

ci(release): migrate to manylinux_2_28

ci(release): migrate to manylinux_2_28 #659

Workflow file for this run

name: Build and release binaries.
on:
workflow_dispatch:
push:
tags:
- 'v*'
- 'nightly'
- "!*-dev.*"
- '!vscode@*'
- '!vim@*'
pull_request:
branches: [ "main" ]
paths:
- '.github/workflows/release.yml'
concurrency:
group: ${{ github.workflow_ref }}-${{ github.head_ref || github.ref_name }}
# If this is enabled it will cancel current running and start latest
cancel-in-progress: true
env:
RUST_TOOLCHAIN: 1.76.0
jobs:
release-llama-server-binary:
runs-on: ${{ matrix.os }}
container: ${{ matrix.container }}
strategy:
matrix:
binary:
- aarch64-apple-darwin
- x86_64-manylinux_2_28
- x86_64-manylinux_2_28-cuda123
- x86_64-manylinux_2_28-vulkan
- x86_64-windows-msvc
- x86_64-windows-msvc-vulkan
# - x86_64-windows-msvc-cuda117
# - x86_64-windows-msvc-cuda122
include:
- os: macos-latest
target: aarch64-apple-darwin
binary: aarch64-apple-darwin
build_args: --features binary
- os: buildjet-2vcpu-ubuntu-2204
target: x86_64-unknown-linux-gnu
binary: x86_64-manylinux_2_28
container: quay.io/pypa/manylinux_2_28_x86_64
build_args: --features binary
- os: buildjet-2vcpu-ubuntu-2204
target: x86_64-unknown-linux-gnu
binary: x86_64-manylinux_2_28-cuda123
container: sameli/manylinux_2_28_x86_64_cuda_12.3
build_args: --features binary,cuda
- os: buildjet-4vcpu-ubuntu-2204
target: x86_64-unknown-linux-gnu
binary: x86_64-manylinux_2_28-vulkan
container: quay.io/pypa/manylinux_2_28_x86_64
build_args: --features binary,vulkan
vulkan_sdk: '1.3.239.0'
- os: windows-latest
target: x86_64-pc-windows-msvc
binary: x86_64-windows-msvc
build_args: --features binary
ext: .exe
- os: windows-latest
target: x86_64-pc-windows-msvc
binary: x86_64-windows-msvc-vulkan
ext: .exe
build_args: --features vulkan,binary
vulkan_sdk: '1.3.280.0'
# - os: windows-2019
# target: x86_64-pc-windows-msvc
# binary: x86_64-windows-msvc-cuda117
# ext: .exe
# build_args: --features cuda,binary
# windows_cuda: '11.7.1'
# - os: windows-2019
# target: x86_64-pc-windows-msvc
# binary: x86_64-windows-msvc-cuda122
# ext: .exe
# build_args: --features cuda,binary
# windows_cuda: '12.2.0'
env:
SCCACHE_GHA_ENABLED: true
RUSTC_WRAPPER: sccache
CARGO_INCREMENTAL: 0
ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true
steps:
- name: Checkout
uses: actions/checkout@v3
with:
submodules: recursive
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ env.RUST_TOOLCHAIN }}
target: ${{ matrix.target }}
components: clippy
- name: Set default rust version
run: rustup default ${{ env.RUST_TOOLCHAIN }}
- name: Sccache cache
uses: mozilla-actions/sccache-action@v0.0.3
with:
version: "v0.4.0"
- name: Cargo registry cache
uses: actions/cache@v3
with:
key: cargo-${{ runner.os }}-${{ hashFiles('**/Cargo.toml') }}-${{ github.sha }}
restore-keys: |
cargo-${{ runner.os }}-${{ hashFiles('**/Cargo.toml') }}-
cargo-${{ runner.os }}-
path: |
~/.cargo/registry
~/.cargo/git
- name: Prepare build environment for macOS & Linux
run: bash ./ci/prepare_build_environment.sh
if: runner.os != 'Windows'
- name: Prepare build environment for Windows
run: ./ci/prepare_build_environment.ps1
if: runner.os == 'Windows'
- name: Install CUDA toolkit for Windows
uses: Jimver/cuda-toolkit@v0.2.11
with:
cuda: ${{ matrix.windows_cuda }}
method: 'network'
sub-packages: '["nvcc", "cudart", "cublas", "cublas_dev", "thrust", "visual_studio_integration"]'
if: runner.os == 'Windows' && matrix.windows_cuda != ''
- name: Install Vulkan SDK
uses: icycodes/install-vulkan-sdk@v1.1.1-patch
with:
version: ${{ matrix.vulkan_sdk }}
cache: true
if: matrix.vulkan_sdk != ''
- name: Bulid release binary
run: cargo build ${{ matrix.build_args }} --release --target ${{ matrix.target }} --package llama-cpp-server
- name: Rename release binary
run: mv target/${{ matrix.target }}/release/llama-server${{ matrix.ext }} llama-server_${{ matrix.binary }}${{ matrix.ext }}
- name: Upload artifacts
uses: actions/upload-artifact@v3
with:
retention-days: 3
name: llama-server_${{ matrix.binary }}${{ matrix.ext }}
path: llama-server_${{ matrix.binary }}${{ matrix.ext }}
release-binary:
runs-on: ${{ matrix.os }}
container: ${{ matrix.container }}
strategy:
matrix:
binary:
- aarch64-apple-darwin
- x86_64-manylinux_2_28
- x86_64-windows-msvc
include:
- os: macos-latest
target: aarch64-apple-darwin
binary: aarch64-apple-darwin
build_args: --no-default-features --features prod
- os: buildjet-2vcpu-ubuntu-2204
target: x86_64-unknown-linux-gnu
binary: x86_64-manylinux_2_28
container: quay.io/pypa/manylinux_2_28_x86_64
build_args: --no-default-features --features static-ssl,prod
- os: windows-latest
target: x86_64-pc-windows-msvc
binary: x86_64-windows-msvc
build_args: --no-default-features --features prod
ext: .exe
env:
SCCACHE_GHA_ENABLED: true
RUSTC_WRAPPER: sccache
CARGO_INCREMENTAL: 0
ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true
steps:
- name: Checkout
uses: actions/checkout@v3
with:
submodules: recursive
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ env.RUST_TOOLCHAIN }}
target: ${{ matrix.target }}
components: clippy
- name: Set default rust version
run: rustup default ${{ env.RUST_TOOLCHAIN }}
- name: Sccache cache
uses: mozilla-actions/sccache-action@v0.0.3
with:
version: "v0.4.0"
- name: Cargo registry cache
uses: actions/cache@v3
with:
key: cargo-${{ runner.os }}-${{ hashFiles('**/Cargo.toml') }}-${{ github.sha }}
restore-keys: |
cargo-${{ runner.os }}-${{ hashFiles('**/Cargo.toml') }}-
cargo-${{ runner.os }}-
path: |
~/.cargo/registry
~/.cargo/git
- name: Prepare build environment for macOS & Linux
run: bash ./ci/prepare_build_environment.sh
if: runner.os != 'Windows'
- name: Prepare build environment for Windows
run: ./ci/prepare_build_environment.ps1
if: runner.os == 'Windows'
- name: Build release binary
run: cargo build ${{ matrix.build_args }} --release --target ${{ matrix.target }} --package tabby
- name: Rename release binary
run: mv target/${{ matrix.target }}/release/tabby${{ matrix.ext }} tabby_${{ matrix.binary }}${{ matrix.ext }}
- name: Upload artifacts
uses: actions/upload-artifact@v3
with:
retention-days: 3
name: tabby_${{ matrix.binary }}${{ matrix.ext }}
path: tabby_${{ matrix.binary }}${{ matrix.ext }}
package-win-cuda:
runs-on: ubuntu-latest
needs: [release-binary]
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v3
with:
submodules: recursive
- name: Download all artifacts
uses: actions/download-artifact@v3
- name: Display structure of downloaded files
run: ls -R
- name: Package CUDA 11.7
run: >
LLAMA_CPP_PLATFORM=cuda-cu11.7.1-x64 OUTPUT_NAME=tabby_x86_64-windows-msvc-cuda117 ./ci/package-win.sh
- name: Package CUDA 12.2
run: >
LLAMA_CPP_PLATFORM=cuda-cu12.2.0-x64 OUTPUT_NAME=tabby_x86_64-windows-msvc-cuda122 ./ci/package-win.sh
- name: Upload artifacts
uses: actions/upload-artifact@v3
with:
retention-days: 3
name: dist
path: dist/
pre-release:
needs: [release-llama-server-binary, release-binary, package-win-cuda]
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Download all artifacts
uses: actions/download-artifact@v3
- name: Display structure of downloaded files
run: ls -R
- name: Creating distribution bundles
run: |
get_file_extension() {
local filename="$1"
# Check if the file has an extension
if [[ "$filename" == *.* && ! "$filename" == .* ]]; then
echo ".${filename##*.}"
else
echo ""
fi
}
dist_dir=$(pwd)/dist
mkdir -p $dist_dir
for llama_server in llama-server_*/llama-server_*; do
for tabby in tabby_*/tabby_*; do
llamab=$(basename $llama_server)
tabbyb=$(basename $tabby)
extname=$(get_file_extension $tabbyb)
llaman=${llamab%.*}
tabbyn=${tabbyb%.*}
llamav=${llaman#llama-server_}
tabbyv=${tabbyn#tabby_}
if [[ $llamav == *"$tabbyv"* ]]; then
echo "Creating bundle for $llamav"
# the downloaded files may have the same folder name with release_dir
# put the release files in a new folder
build_dir=build
release_name=tabby_${llamav}
release_dir=$build_dir/$release_name
mkdir -p $release_dir
cp $llama_server $release_dir/llama-server${extname}
cp $tabby $release_dir/tabby${extname}
pushd $build_dir
# Release zip for Windows, tar.gz for macOS and Linux
# use `extname` to determine the platform
if [[ "$extname" == ".exe" ]]; then
zip -r $release_name.zip $release_name
mv $release_name.zip $dist_dir/
else
chmod +x $release_name/llama-server${extname} $release_name/tabby${extname}
tar zcvf $release_name.tar.gz $release_name
mv $release_name.tar.gz $dist_dir/
fi
rm -rf "$release_name"
popd
fi
done
done
- name: Display structure of created files
run: ls -R dist
- name: Determine is stable release
run: |
if [[ ${{ github.ref_name }} =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "STABLE_RELEASE=true" >> $GITHUB_ENV
else
echo "STABLE_RELEASE=false" >> $GITHUB_ENV
fi
- name: Check if stable release
run: echo "Stable Release is ${{ env.STABLE_RELEASE }}"
- uses: ncipollo/release-action@v1
if: github.event_name == 'push'
with:
allowUpdates: true
prerelease: ${{ env.STABLE_RELEASE == 'false' }}
makeLatest: ${{ env.STABLE_RELEASE == 'true' }}
artifacts: "dist/tabby_*.zip,dist/tabby_*.tar.gz"
tag: ${{ github.ref_name }}
removeArtifacts: true