Skip to content
This repository was archived by the owner on Jul 4, 2025. It is now read-only.

Commit c9079b4

Browse files
authored
feat: CI - Add vulkan build for linux, macos and windows with AMD64 build (#385)
1 parent a600cf5 commit c9079b4

File tree

1 file changed

+248
-10
lines changed

1 file changed

+248
-10
lines changed

.github/workflows/build.yml

Lines changed: 248 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,76 @@ jobs:
184184
asset_name: nitro-${{ needs.create-draft-release.outputs.version }}-linux-amd64.tar.gz
185185
asset_content_type: application/gzip
186186

187+
ubuntu-amd64-vulkan-build:
188+
runs-on: ubuntu-18-04-cuda-11-7
189+
needs: [create-draft-release, set-nitro-version]
190+
if: always() && (needs.create-draft-release.result == 'success' || needs.create-draft-release.result == 'skipped') && needs.set-nitro-version.result == 'success'
191+
permissions:
192+
contents: write
193+
steps:
194+
- name: Clone
195+
id: checkout
196+
uses: actions/checkout@v3
197+
with:
198+
submodules: recursive
199+
200+
- name: Prepare Vulkan SDK
201+
uses: humbletim/setup-vulkan-sdk@v1.2.0
202+
with:
203+
vulkan-query-version: 1.3.204.0
204+
vulkan-components: Vulkan-Headers, Vulkan-Loader
205+
vulkan-use-cache: true
206+
207+
- name: Build
208+
id: make_build
209+
run: |
210+
ldd --version
211+
./install_deps.sh
212+
mkdir build && cd build
213+
cmake -DLLAMA_NATIVE=OFF -DLLAMA_VULKAN=OFF -DNITRO_VERSION=${{ needs.set-nitro-version.outputs.version }} ..
214+
make -j $(nproc)
215+
ls -la
216+
217+
- name: Package
218+
shell: bash
219+
run: |
220+
mkdir -p nitro
221+
cp build/nitro nitro/
222+
tar -czvf nitro.tar.gz nitro
223+
224+
- name: Upload Artifact
225+
uses: actions/upload-artifact@v2
226+
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
227+
with:
228+
name: nitro-linux-amd64
229+
path: ./nitro
230+
231+
- name: Run e2e testing - LLama.CPP
232+
shell: bash
233+
run: |
234+
# run e2e testing
235+
cd nitro
236+
chmod +x ../.github/scripts/e2e-test-llama-linux-and-mac.sh && ../.github/scripts/e2e-test-llama-linux-and-mac.sh ./nitro ${{ env.LLM_MODEL_URL }}
237+
rm -rf uploads/
238+
239+
- name: Run e2e testing - Whisper.CPP
240+
shell: bash
241+
run: |
242+
# run e2e testing
243+
cd nitro
244+
chmod +x ../.github/scripts/e2e-test-whisper-linux-and-mac.sh && ../.github/scripts/e2e-test-whisper-linux-and-mac.sh ./nitro ${{ env.WHISPER_MODEL_URL }}
245+
rm -rf uploads/
246+
247+
- uses: actions/upload-release-asset@v1.0.1
248+
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
249+
env:
250+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
251+
with:
252+
upload_url: ${{ needs.create-draft-release.outputs.upload_url }}
253+
asset_path: ./nitro.tar.gz
254+
asset_name: nitro-${{ needs.create-draft-release.outputs.version }}-linux-amd64-vulkan.tar.gz
255+
asset_content_type: application/gzip
256+
187257
ubuntu-amd64-cuda-build:
188258
runs-on: ubuntu-18-04-cuda-${{ matrix.cuda }}
189259
needs: [create-draft-release, set-nitro-version]
@@ -250,7 +320,7 @@ jobs:
250320
asset_name: nitro-${{ needs.create-draft-release.outputs.version }}-linux-amd64-cuda-${{ matrix.cuda }}.tar.gz
251321
asset_content_type: application/gzip
252322

253-
macOS-M-build:
323+
macOS-silicon-build:
254324
runs-on: mac-silicon
255325
needs: [create-draft-release, set-nitro-version]
256326
if: always() && (needs.create-draft-release.result == 'success' || needs.create-draft-release.result == 'skipped') && needs.set-nitro-version.result == 'success'
@@ -328,7 +398,7 @@ jobs:
328398
asset_name: nitro-${{ needs.create-draft-release.outputs.version }}-mac-arm64.tar.gz
329399
asset_content_type: application/gzip
330400

331-
macOS-Intel-build:
401+
macOS-amd64-build:
332402
runs-on: macos-latest
333403
needs: [create-draft-release, set-nitro-version]
334404
if: always() && (needs.create-draft-release.result == 'success' || needs.create-draft-release.result == 'skipped') && needs.set-nitro-version.result == 'success'
@@ -397,6 +467,82 @@ jobs:
397467
asset_name: nitro-${{ needs.create-draft-release.outputs.version }}-mac-amd64.tar.gz
398468
asset_content_type: application/gzip
399469

470+
macOS-amd64-vulkan-build:
471+
runs-on: macos-latest
472+
needs: [create-draft-release, set-nitro-version]
473+
if: always() && (needs.create-draft-release.result == 'success' || needs.create-draft-release.result == 'skipped') && needs.set-nitro-version.result == 'success'
474+
permissions:
475+
contents: write
476+
steps:
477+
- name: Clone
478+
id: checkout
479+
uses: actions/checkout@v3
480+
with:
481+
submodules: recursive
482+
483+
- name: Dependencies
484+
id: depends
485+
continue-on-error: true
486+
run: |
487+
brew update
488+
brew install sdl2
489+
490+
- name: Prepare Vulkan SDK
491+
uses: humbletim/setup-vulkan-sdk@v1.2.0
492+
with:
493+
vulkan-query-version: 1.3.204.0
494+
vulkan-components: Vulkan-Headers, Vulkan-Loader
495+
vulkan-use-cache: true
496+
497+
- name: Build
498+
id: cmake_build
499+
run: |
500+
./install_deps.sh
501+
mkdir build && cd build
502+
cmake -DNITRO_VERSION=${{ needs.set-nitro-version.outputs.version }} -DLLAMA_VULKAN=OFF -DLLAMA_METAL=OFF ..
503+
CC=gcc-8 make -j $(sysctl -n hw.ncp)
504+
ls -la
505+
506+
- name: Package
507+
shell: bash
508+
run: |
509+
mkdir -p nitro
510+
cp build/nitro nitro/
511+
tar -czvf nitro.tar.gz nitro
512+
513+
- name: Upload Artifact
514+
uses: actions/upload-artifact@v2
515+
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
516+
with:
517+
name: nitro-mac-amd64
518+
path: ./nitro
519+
520+
- name: Run e2e testing - LLama.CPP
521+
shell: bash
522+
run: |
523+
# run e2e testing
524+
cd nitro
525+
chmod +x ../.github/scripts/e2e-test-llama-linux-and-mac.sh && ../.github/scripts/e2e-test-llama-linux-and-mac.sh ./nitro ${{ env.LLM_MODEL_URL }}
526+
rm -rf uploads/
527+
528+
- name: Run e2e testing - Whisper.CPP
529+
shell: bash
530+
run: |
531+
# run e2e testing
532+
cd nitro
533+
chmod +x ../.github/scripts/e2e-test-whisper-linux-and-mac.sh && ../.github/scripts/e2e-test-whisper-linux-and-mac.sh ./nitro ${{ env.WHISPER_MODEL_URL }}
534+
rm -rf uploads/
535+
536+
- uses: actions/upload-release-asset@v1.0.1
537+
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
538+
env:
539+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
540+
with:
541+
upload_url: ${{ needs.create-draft-release.outputs.upload_url }}
542+
asset_path: ./nitro.tar.gz
543+
asset_name: nitro-${{ needs.create-draft-release.outputs.version }}-mac-amd64-vulkan.tar.gz
544+
asset_content_type: application/gzip
545+
400546
windows-amd64-build:
401547
runs-on: windows-latest
402548
needs: [create-draft-release, set-nitro-version]
@@ -483,6 +629,89 @@ jobs:
483629
asset_name: nitro-${{ needs.create-draft-release.outputs.version }}-win-amd64.tar.gz
484630
asset_content_type: application/gzip
485631

632+
windows-amd64-vulkan-build:
633+
runs-on: windows-latest
634+
needs: [create-draft-release, set-nitro-version]
635+
if: always() && (needs.create-draft-release.result == 'success' || needs.create-draft-release.result == 'skipped') && needs.set-nitro-version.result == 'success'
636+
permissions:
637+
contents: write
638+
639+
steps:
640+
- name: Clone
641+
642+
id: checkout
643+
uses: actions/checkout@v3
644+
with:
645+
submodules: recursive
646+
647+
- name: Setup VSWhere.exe
648+
uses: warrenbuckley/Setup-VSWhere@v1
649+
with:
650+
version: latest
651+
silent: true
652+
env:
653+
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
654+
655+
- name: Add msbuild to PATH
656+
uses: microsoft/setup-msbuild@v1
657+
658+
- name: Fetch SDL2 and set SDL2_DIR version 2.28.5
659+
run: |
660+
C:/msys64/usr/bin/wget.exe -qO sdl2.zip https://github.com/libsdl-org/SDL/releases/download/release-2.28.5/SDL2-devel-2.28.5-VC.zip
661+
7z x sdl2.zip
662+
echo "SDL2_DIR=$env:GITHUB_WORKSPACE/SDL2-2.28.5/cmake" >> $env:GITHUB_ENV
663+
664+
- name: actions-setup-cmake
665+
uses: jwlawson/actions-setup-cmake@v1.14.1
666+
667+
- name: Prepare Vulkan SDK
668+
uses: humbletim/setup-vulkan-sdk@v1.2.0
669+
with:
670+
vulkan-query-version: 1.3.204.0
671+
vulkan-components: Vulkan-Headers, Vulkan-Loader
672+
vulkan-use-cache: true
673+
674+
- name: Build
675+
id: cmake_build
676+
shell: cmd
677+
run: |
678+
cmake -S ./nitro_deps -B ./build_deps/nitro_deps
679+
cmake --build ./build_deps/nitro_deps --config Release
680+
mkdir -p build
681+
cd build
682+
cmake .. -DLLAMA_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DLLAMA_VULKAN=ON -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=RELEASE -DWHISPER_SDL2=ON -DNITRO_VERSION=${{ needs.set-nitro-version.outputs.version }}
683+
cmake --build . --config Release -j "%NUMBER_OF_PROCESSORS%"
684+
685+
- name: Pack artifacts
686+
id: pack_artifacts
687+
shell: cmd
688+
run: |
689+
robocopy build_deps\_install\bin\ .\build\Release\ zlib.dll
690+
robocopy build\bin\Release\ .\build\Release\ llama.dll
691+
robocopy build\bin\Release\ .\build\Release\ whisper.dll
692+
robocopy "$env:SDL2_DIR\..\lib\2.28.5\" .\build\Release\ SDL2.dll
693+
dotnet tool install --global AzureSignTool
694+
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\nitro.exe"
695+
7z a -ttar temp.tar .\build\Release\*
696+
7z a -tgzip nitro.tar.gz temp.tar
697+
698+
- name: Upload Artifact
699+
uses: actions/upload-artifact@v2
700+
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
701+
with:
702+
name: nitro-win-amd64
703+
path: ./build/Release
704+
705+
- uses: actions/upload-release-asset@v1.0.1
706+
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
707+
env:
708+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
709+
with:
710+
upload_url: ${{ needs.create-draft-release.outputs.upload_url }}
711+
asset_path: ./nitro.tar.gz
712+
asset_name: nitro-${{ needs.create-draft-release.outputs.version }}-win-amd64-vulkan.tar.gz
713+
asset_content_type: application/gzip
714+
486715
windows-amd64-cuda-build:
487716
runs-on: windows-cuda-${{ matrix.cuda }}
488717
needs: [create-draft-release, set-nitro-version]
@@ -581,10 +810,13 @@ jobs:
581810
[
582811
ubuntu-amd64-build,
583812
ubuntu-amd64-cuda-build,
584-
macOS-M-build,
585-
macOS-Intel-build,
813+
macOS-silicon-build,
814+
macOS-amd64-build,
586815
windows-amd64-build,
587816
windows-amd64-cuda-build,
817+
macOS-amd64-vulkan-build,
818+
ubuntu-amd64-vulkan-build,
819+
windows-amd64-vulkan-build,
588820
]
589821
permissions:
590822
contents: write
@@ -596,16 +828,19 @@ jobs:
596828
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
597829

598830
noti-discord-nightly:
599-
if: always() && github.event_name == 'schedule' && (needs.create-draft-release.result == 'success' || needs.create-draft-release.result == 'skipped') && needs.ubuntu-amd64-build.result == 'success' && needs.ubuntu-amd64-cuda-build.result == 'success' && needs.macOS-M-build.result == 'success' && needs.macOS-Intel-build.result == 'success' && needs.windows-amd64-build.result == 'success' && needs.windows-amd64-cuda-build.result == 'success'
831+
if: always() && github.event_name == 'schedule' && (needs.create-draft-release.result == 'success' || needs.create-draft-release.result == 'skipped') && needs.ubuntu-amd64-build.result == 'success' && needs.ubuntu-amd64-cuda-build.result == 'success' && needs.macOS-silicon-build.result == 'success' && needs.macOS-amd64-build.result == 'success' && needs.windows-amd64-build.result == 'success' && needs.windows-amd64-cuda-build.result == 'success'
600832
needs:
601833
[
602834
create-draft-release,
603835
ubuntu-amd64-build,
604836
ubuntu-amd64-cuda-build,
605-
macOS-M-build,
606-
macOS-Intel-build,
837+
macOS-silicon-build,
838+
macOS-amd64-build,
607839
windows-amd64-build,
608840
windows-amd64-cuda-build,
841+
macOS-amd64-vulkan-build,
842+
ubuntu-amd64-vulkan-build,
843+
windows-amd64-vulkan-build,
609844
]
610845
runs-on: ubuntu-latest
611846
steps:
@@ -632,16 +867,19 @@ jobs:
632867
GITHUB_RUN_ID: ${{ github.run_id }}
633868

634869
noti-discord-manual:
635-
if: always() && github.event_name == 'workflow_dispatch' && (needs.create-draft-release.result == 'success' || needs.create-draft-release.result == 'skipped') && needs.ubuntu-amd64-build.result == 'success' && needs.ubuntu-amd64-cuda-build.result == 'success' && needs.macOS-M-build.result == 'success' && needs.macOS-Intel-build.result == 'success' && needs.windows-amd64-build.result == 'success' && needs.windows-amd64-cuda-build.result == 'success'
870+
if: always() && github.event_name == 'workflow_dispatch' && (needs.create-draft-release.result == 'success' || needs.create-draft-release.result == 'skipped') && needs.ubuntu-amd64-build.result == 'success' && needs.ubuntu-amd64-cuda-build.result == 'success' && needs.macOS-silicon-build.result == 'success' && needs.macOS-amd64-build.result == 'success' && needs.windows-amd64-build.result == 'success' && needs.windows-amd64-cuda-build.result == 'success'
636871
needs:
637872
[
638873
create-draft-release,
639874
ubuntu-amd64-build,
640875
ubuntu-amd64-cuda-build,
641-
macOS-M-build,
642-
macOS-Intel-build,
876+
macOS-silicon-build,
877+
macOS-amd64-build,
643878
windows-amd64-build,
644879
windows-amd64-cuda-build,
880+
macOS-amd64-vulkan-build,
881+
ubuntu-amd64-vulkan-build,
882+
windows-amd64-vulkan-build,
645883
]
646884
runs-on: ubuntu-latest
647885
steps:

0 commit comments

Comments
 (0)