Skip to content

Refactor CICD windows nitro #37

Refactor CICD windows nitro

Refactor CICD windows nitro #37

Workflow file for this run

name: CI
on:
push:
branches:
- main
- 57-add-github-ci-cd-for-windows
tags: ['v*.*.*']
paths: ['.github/workflows/**', '**/CMakeLists.txt', '**/Makefile', '**/*.h', '**/*.hpp', '**/*.c', '**/*.cpp', '**/*.cu']
pull_request:
types: [opened, synchronize, reopened]
paths: ['**/CMakeLists.txt', '**/Makefile', '**/*.h', '**/*.hpp', '**/*.c', '**/*.cpp', '**/*.cu']
env:
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
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
# ubuntu-amd64-build:
# runs-on: ubuntu-20.04
# needs: create-draft-release
# if: always() && (needs.create-draft-release.result == 'success' || needs.create-draft-release.result == 'skipped')
# permissions:
# contents: write
# env:
# OPENBLAS_VERSION: 0.3.23
# OPENCL_VERSION: 2023.04.17
# CLBLAST_VERSION: 1.6.0
# strategy:
# matrix:
# include:
# - build: 'openblas'
# defines: '-DLLAMA_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DLLAMA_BLAS=ON -DBUILD_SHARED_LIBS=ON -DLLAMA_BLAS_VENDOR=OpenBLAS -DBLAS_INCLUDE_DIRS="$env:RUNNER_TEMP/openblas/include" -DBLAS_LIBRARIES="$env:RUNNER_TEMP/openblas/lib/openblas.lib"'
# steps:
# - name: Clone
# id: checkout
# uses: actions/checkout@v3
# with:
# submodules: recursive
# - name: Download OpenBLAS
# id: get_openblas
# if: ${{ matrix.build == 'openblas' }}
# run: |
# sudo apt-get update
# sudo apt-get install build-essential gcc-8
# - name: Build
# id: make_build
# run: |
# ./install_deps.sh
# mkdir build && cd build
# cmake ..
# CC=gcc-8 make -j $(nproc)
# ls -la
# - name: Package
# shell: bash
# run: |
# mkdir -p nitro && mkdir -p nitro/config
# cp config.json nitro/config/
# cp build/nitro nitro/
# zip -r nitro.zip nitro
# - 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: ./nitro.zip
# asset_name: nitro-${{ needs.create-draft-release.outputs.version }}-linux-amd64.zip
# asset_content_type: application/zip
# ubuntu-amd64-cuda-build:
# runs-on: linux-gpu
# needs: create-draft-release
# if: always() && (needs.create-draft-release.result == 'success' || needs.create-draft-release.result == 'skipped')
# permissions:
# contents: write
# steps:
# - name: Clone
# id: checkout
# uses: actions/checkout@v3
# with:
# submodules: recursive
# # - name: Dependencies
# # id: depends
# # run: |
# # sudo apt-get update
# # sudo apt-get install build-essential gcc-8 uuid-dev
# - name: Build
# id: make_build
# run: |
# ./install_deps.sh
# mkdir build && cd build
# cmake -DLLAMA_CUBLAS=ON ..
# CC=gcc-8 make -j $(nproc)
# ls -la
# - name: Package
# shell: bash
# run: |
# mkdir -p nitro && mkdir -p nitro/config
# cp config.json nitro/config/
# cp build/nitro nitro/
# zip -r nitro.zip nitro
# - 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: ./nitro.zip
# asset_name: nitro-${{ needs.create-draft-release.outputs.version }}-linux-amd64-cuda.zip
# asset_content_type: application/zip
# macOS-M-build:
# runs-on: mac-silicon
# needs: create-draft-release
# if: always() && (needs.create-draft-release.result == 'success' || needs.create-draft-release.result == 'skipped')
# permissions:
# contents: write
# steps:
# - name: Clone
# id: checkout
# uses: actions/checkout@v3
# with:
# submodules: recursive
# - name: Dependencies
# id: depends
# continue-on-error: true
# run: |
# brew update
# brew install cmake gcc@8
# - name: Build
# id: cmake_build
# shell: bash
# run: |
# ./install_deps.sh
# mkdir build && cd build
# cmake ..
# CC=gcc-8 make -j $(nproc)
# ls -la
# - name: Package
# shell: bash
# run: |
# mkdir -p nitro && mkdir -p nitro/config
# cp config.json nitro/config/
# cp llama.cpp/ggml-metal.h nitro/
# cp build/nitro nitro/
# zip -r nitro.zip nitro
# - 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: ./nitro.zip
# asset_name: nitro-${{ needs.create-draft-release.outputs.version }}-mac-arm64.zip
# asset_content_type: application/zip
# macOS-Intel-build:
# runs-on: macos-latest
# needs: create-draft-release
# if: always() && (needs.create-draft-release.result == 'success' || needs.create-draft-release.result == 'skipped')
# permissions:
# contents: write
# steps:
# - name: Clone
# id: checkout
# uses: actions/checkout@v3
# with:
# submodules: recursive
# - name: Dependencies
# id: depends
# continue-on-error: true
# run: |
# brew update
# - name: Build
# id: cmake_build
# run: |
# ./install_deps.sh
# mkdir build && cd build
# cmake -DLLAMA_METAL=OFF ..
# CC=gcc-8 make -j $(nproc)
# ls -la
# - name: Package
# shell: bash
# run: |
# $dst='.\build\Release'
# robocopy build_deps\_install\bin\zlib.dll $dst
# robocopy build\bin\Release\llama.dll $dst
# mkdir -p .\build\Release\config
# robocopy config.json .\build\Release\config
# 7z a nitro.zip .\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: ./nitro.zip
# asset_name: nitro-${{ needs.create-draft-release.outputs.version }}-mac-amd64.zip
# asset_content_type: application/zip
windows-amd64-build:
runs-on: windows-latest
# needs: create-draft-release
if: always() && (needs.create-draft-release.result == 'success' || needs.create-draft-release.result == 'skipped')
permissions:
contents: write
env:
OPENBLAS_VERSION: 0.3.23
OPENCL_VERSION: 2023.04.17
CLBLAST_VERSION: 1.6.0
strategy:
matrix:
include:
- build: 'openblas'
defines: '-DLLAMA_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DLLAMA_BLAS=ON -DBUILD_SHARED_LIBS=ON -DLLAMA_BLAS_VENDOR=OpenBLAS -DBLAS_INCLUDE_DIRS="$env:RUNNER_TEMP/openblas/include" -DBLAS_LIBRARIES="$env:RUNNER_TEMP/openblas/lib/openblas.lib"'
steps:
- name: Clone
id: checkout
uses: actions/checkout@v3
with:
submodules: recursive
- name: Setup VSWhere.exe
uses: warrenbuckley/Setup-VSWhere@v1
with:
version: latest
silent: true
- name: actions-setup-cmake
uses: jwlawson/[email protected]
- name: Download OpenBLAS
id: get_openblas
if: ${{ matrix.build == 'openblas' }}
run: |
curl.exe -o $env:RUNNER_TEMP/openblas.zip -L "https://github.com/xianyi/OpenBLAS/releases/download/v${env:OPENBLAS_VERSION}/OpenBLAS-${env:OPENBLAS_VERSION}-x64.zip"
curl.exe -o $env:RUNNER_TEMP/OpenBLAS.LICENSE.txt -L "https://github.com/xianyi/OpenBLAS/raw/v${env:OPENBLAS_VERSION}/LICENSE"
mkdir $env:RUNNER_TEMP/openblas
tar.exe -xvf $env:RUNNER_TEMP/openblas.zip -C $env:RUNNER_TEMP/openblas
$vcdir = $(vswhere -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath)
$msvc = $(join-path $vcdir $('VC\Tools\MSVC\'+$(gc -raw $(join-path $vcdir 'VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt')).Trim()))
$lib = $(join-path $msvc 'bin\Hostx64\x64\lib.exe')
& $lib /machine:x64 "/def:${env:RUNNER_TEMP}/openblas/lib/libopenblas.def" "/out:${env:RUNNER_TEMP}/openblas/lib/openblas.lib" /name:openblas.dll
- name: Build
id: cmake_build
shell: bash
run: |
cmake -S ./nitro_deps -B ./build_deps/nitro_deps
cmake --build ./build_deps/nitro_deps --config Release
mkdir build
cd build
cmake .. ${{ matrix.defines }}
cmake --build . --config Release -j 4
- name: Add libopenblas.dll
id: add_libopenblas_dll
if: ${{ matrix.build == 'openblas' }}
run: |
cp $env:RUNNER_TEMP/openblas/bin/libopenblas.dll ./build/Release/openblas.dll
cp $env:RUNNER_TEMP/OpenBLAS.LICENSE.txt ./build/Release/OpenBLAS-${env:OPENBLAS_VERSION}.txt
- name: Extract branch name
shell: bash
id: extract_branch
run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
- name: Extract commit short SHA
shell: bash
id: extract_commit_id
run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)"
- name: Pack artifacts
id: pack_artifacts
run: |
$dst='.\build\Release'
robocopy build_deps\_install\bin\zlib.dll $dst
robocopy build\bin\Release\llama.dll $dst
mkdir -p .\build\Release\config
robocopy config.json .\build\Release\config
7z a nitro.zip .\build\Release\*
# - name: Upload binaries to release
# uses: svenstaro/upload-release-action@v2
# with:
# repo_token: ${{ secrets.GITHUB_TOKEN }}
# file: nitro.zip
# asset_name: nitro-${{ steps.extract_commit_id.outputs.sha_short }}-win-amd64-${{ matrix.build }}.zip
# tag: ${{ steps.extract_branch.outputs.branch }}-${{ steps.extract_commit_id.outputs.sha_short }}
windows-amd64-cuda-build:
runs-on: [windows-nvidia, windows-desktop]
permissions:
contents: write
strategy:
matrix:
cuda: ['12.2.0']
build: ['cublas']
steps:
- name: Clone
id: checkout
uses: actions/checkout@v3
with:
submodules: recursive
- name: Setup VSWhere.exe
uses: warrenbuckley/Setup-VSWhere@v1
with:
version: latest
silent: true
- name: actions-setup-cmake
uses: jwlawson/[email protected]
- uses: Jimver/[email protected]
id: cuda-toolkit
with:
cuda: ${{ matrix.cuda }}
method: 'network'
sub-packages: '["nvcc", "cudart", "cublas", "cublas_dev", "thrust", "visual_studio_integration"]'
- name: Build
id: cmake_build
shell: bash
run: |
cmake -S ./nitro_deps -B ./build_deps/nitro_deps
cmake --build ./build_deps/nitro_deps --config Release
mkdir build
cd build
cmake .. -DLLAMA_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DLLAMA_CUBLAS=ON -DBUILD_SHARED_LIBS=ON
cmake --build . --config Release -j 4
- name: Extract branch name
shell: bash
id: extract_branch
run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
- name: Extract commit short SHA
shell: bash
id: extract_commit_id
run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)"
- name: Pack artifacts
id: pack_artifacts
run: |
$dst='.\build\Release'
robocopy build_deps\_install\bin\zlib.dll $dst
robocopy build\bin\Release\llama.dll $dst
robocopy "${{steps.cuda-toolkit.outputs.CUDA_PATH}}\bin" $dst cudart64_*.dll cublas64_*.dll cublasLt64_*.dll
mkdir -p .\build\Release\config
robocopy config.json .\build\Release\config
7z a nitro.zip .\build\Release\*
# - name: Upload binaries to release
# uses: svenstaro/upload-release-action@v2
# with:
# repo_token: ${{ secrets.GITHUB_TOKEN }}
# file: nitro.zip
# asset_name: nitro-${{ steps.extract_commit_id.outputs.sha_short }}-win-amd64-${{ matrix.build }}-cu${{ matrix.cuda }}.zip
# tag: ${{ steps.extract_branch.outputs.branch }}-${{ steps.extract_commit_id.outputs.sha_short }}
# update_release_draft:
# needs: [ubuntu-amd64-build, ubuntu-amd64-cuda-build, macOS-M-build, macOS-Intel-build, windows-amd64-build, windows-amd64-cuda-build]
# permissions:
# # write permission is required to create a github release
# contents: write
# # write permission is required for autolabeler
# # otherwise, read permission is required at least
# pull-requests: write
# runs-on: ubuntu-latest
# steps:
# # (Optional) GitHub Enterprise requires GHE_HOST variable set
# #- name: Set GHE_HOST
# # run: |
# # echo "GHE_HOST=${GITHUB_SERVER_URL##https:\/\/}" >> $GITHUB_ENV
# # Drafts your next Release notes as Pull Requests are merged into "master"
# - uses: release-drafter/release-drafter@v5
# # (Optional) specify config name to use, relative to .github/. Default: release-drafter.yml
# # with:
# # config-name: my-config.yml
# # disable-autolabeler: true
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}