@ -64,6 +64,38 @@ jobs:
cd build
cd build
ctest --output-on-failure
ctest --output-on-failure
ubuntu-latest-cmake-sanitizer:
runs-on : ubuntu-latest
strategy:
matrix:
sanitizer : [ ADDRESS, THREAD, UNDEFINED]
steps:
- name : Clone
id : checkout
uses : actions/checkout@v1
- name : Dependencies
id : depends
run : |
sudo apt-get update
sudo apt-get install build-essential
- name : Build
id : cmake_build
run : |
mkdir build
cd build
cmake .. -DLLAMA_SANITIZE_${{ matrix.sanitizer }}=ON
cmake --build . --config Release
- name : Test
id : cmake_test
run : |
cd build
ctest --output-on-failure
macOS-latest-make:
macOS-latest-make:
runs-on : macos-latest
runs-on : macos-latest
@ -112,6 +144,16 @@ jobs:
windows-latest-cmake:
windows-latest-cmake:
runs-on : windows-latest
runs-on : windows-latest
strategy:
matrix:
include:
- build : 'avx2'
defines : ''
- build : 'avx'
defines : '-DLLAMA_AVX2=OFF'
- build : 'avx512'
defines : '-DLLAMA_AVX512=ON'
steps:
steps:
- name : Clone
- name : Clone
id : checkout
id : checkout
@ -122,11 +164,21 @@ jobs:
run : |
run : |
mkdir build
mkdir build
cd build
cd build
cmake ..
cmake .. ${{ matrix.defines }}
cmake --build . --config Release
cmake --build . --config Release
- name : Check AVX512F support
id : check_avx512f
if : ${{ matrix.build == 'avx512' }}
continue-on-error : true
run : |
cd build
Set-Content -Path .\avx512f.exe -Value ([Convert]::FromBase64String('TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAAClmfXY4fibi+H4m4vh+JuL4fiai+P4m4si98aL4vibi7Xbq4vg+JuLUmljaOH4m4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQRQAATAEBAGo6H2QAAAAAAAAAAOAADwELAQYAAAIAAAAAAAAAAAAADBAAAAAQAAAAIAAAAABAAAAQAAAAAgAABAAAAAAAAAAEAAAAAAAAAAAgAAAAAgAAAAAAAAMAAAAAABAAABAAAAAAEAAAEAAAAAAAABAAAAAAAAAAAAAAAFQQAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC50ZXh0AAAAsgAAAAAQAAAAAgAAAAIAAAAAAAAAAAAAAAAAACAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUEAAAiBAAAAAAAABVi+xRUVNTuAcAAAAPosHrEGaD4wGJXfxbg0X8MI1F+GoAUI1F/GoBUGr1/xUAEEAAUP8VBBBAAItF/FuDwND32BvAQMnDzMx8EAAAAAAAAAAAAACkEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlBAAAIgQAAAAAAAApANXcml0ZUZpbGUAuQFHZXRTdGRIYW5kbGUAAEtFUk5FTDMyLmRsbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==')) -AsByteStream
.\avx512f.exe && echo " AVX512F: YES" && ( echo HAS_AVX512F=1 >> $env:GITHUB_ENV ) || echo " AVX512F: NO"
- name : Test
- name : Test
id : cmake_test
id : cmake_test
if : ${{ matrix.build != 'avx512' || env.HAS_AVX512F == '1' }} # Test AVX-512 only when possible
run : |
run : |
cd build
cd build
ctest -C Release --output-on-failure
ctest -C Release --output-on-failure
@ -140,12 +192,39 @@ jobs:
id : pack_artifacts
id : pack_artifacts
if : ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }}
if : ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }}
run : |
run : |
7z a llama-${{ env.BRANCH_NAME }}-${{ steps.commit.outputs.short }}-bin-win-x64.zip .\build\bin\Release\*
7z a llama-${{ env.BRANCH_NAME }}-${{ steps.commit.outputs.short }}-bin-win-${{ matrix.build }}-x64.zip .\build\bin\Release\*
- name : Upload artifacts
if : ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }}
uses : actions/upload-artifact@v3
with:
path : |
llama-${{ env.BRANCH_NAME }}-${{ steps.commit.outputs.short }}-bin-win-${{ matrix.build }}-x64.zip
release:
if : ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }}
runs-on : ubuntu-latest
needs:
- ubuntu-latest-make
- ubuntu-latest-cmake
- macOS-latest-make
- macOS-latest-cmake
- windows-latest-cmake
steps:
- name : Download artifacts
id : download-artifact
uses : actions/download-artifact@v3
- name : Get commit hash
id : commit
uses : pr-mpt/actions-commit-hash@v2
- name : Create release
- name : Create release
id : create_release
id : create_release
if : ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }}
uses : anzz1/action-create-release@v1
uses : zendesk/action-create-release@v1
env:
env:
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
with:
with:
@ -153,15 +232,25 @@ jobs:
- name : Upload release
- name : Upload release
id : upload_release
id : upload_release
if : ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }}
uses : actions/github-script@v3
uses : actions/upload-release-asset@v1
env:
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
with:
with:
upload_url : ${{ steps.create_release.outputs.upload_url }}
github-token : ${{secrets.GITHUB_TOKEN}}
asset_path : .\llama-${{ env.BRANCH_NAME }}-${{ steps.commit.outputs.short }}-bin-win-x64.zip
script : |
asset_name : llama-${{ env.BRANCH_NAME }}-${{ steps.commit.outputs.short }}-bin-win-x64.zip
const path = require('path');
asset_content_type : application/octet-stream
const fs = require('fs');
const release_id = '${{ steps.create_release.outputs.id }}';
for (let file of await fs.readdirSync('./artifact')) {
if (path.extname(file) === '.zip') {
console.log('uploadReleaseAsset', file);
await github.repos.uploadReleaseAsset({
owner : context.repo.owner,
repo : context.repo.repo,
release_id : release_id,
name : file,
data : await fs.readFileSync(`./artifact/${file}`)
});
}
}
# ubuntu-latest-gcc:
# ubuntu-latest-gcc:
# runs-on: ubuntu-latest
# runs-on: ubuntu-latest