|
name: CI |
|
|
|
on: |
|
workflow_dispatch: |
|
inputs: |
|
create_release: |
|
description: 'Create new release' |
|
required: true |
|
type: boolean |
|
push: |
|
branches: |
|
- master |
|
- ci |
|
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: |
|
ubuntu-latest-cmake: |
|
runs-on: ubuntu-latest |
|
|
|
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 |
|
|
|
- name: Build |
|
id: cmake_build |
|
run: | |
|
mkdir build |
|
cd build |
|
cmake .. |
|
cmake --build . --config Release |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
macOS-latest-cmake: |
|
runs-on: macos-latest |
|
|
|
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: | |
|
sysctl -a |
|
mkdir build |
|
cd build |
|
cmake .. |
|
cmake --build . --config Release |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
windows-latest-cmake: |
|
runs-on: windows-latest |
|
|
|
strategy: |
|
matrix: |
|
include: |
|
- build: 'noavx' |
|
defines: '-DGGML_AVX=OFF -DGGML_AVX2=OFF -DGGML_FMA=OFF' |
|
- build: 'avx2' |
|
defines: '-DGGML_AVX2=ON' |
|
- build: 'avx' |
|
defines: '-DGGML_AVX2=OFF' |
|
- build: 'avx512' |
|
defines: '-DGGML_AVX512=ON' |
|
|
|
steps: |
|
- name: Clone |
|
id: checkout |
|
uses: actions/checkout@v3 |
|
with: |
|
submodules: recursive |
|
|
|
- name: Build |
|
id: cmake_build |
|
run: | |
|
mkdir build |
|
cd build |
|
cmake .. ${{ matrix.defines }} |
|
cmake --build . --config Release |
|
|
|
- name: Check AVX512F support |
|
id: check_avx512f |
|
if: ${{ matrix.build == 'avx512' }} |
|
continue-on-error: true |
|
run: | |
|
cd build |
|
$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())) |
|
$cl = $(join-path $msvc 'bin\Hostx64\x64\cl.exe') |
|
echo 'int main(void){unsigned int a[4];__cpuid(a,7);return !(a[1]&65536);}' >> avx512f.c |
|
& $cl /O2 /GS- /kernel avx512f.c /link /nodefaultlib /entry:main |
|
.\avx512f.exe && echo "AVX512F: YES" && ( echo HAS_AVX512F=1 >> $env:GITHUB_ENV ) || echo "AVX512F: NO" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- name: Get commit hash |
|
id: commit |
|
if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }} |
|
uses: pr-mpt/actions-commit-hash@v2 |
|
|
|
- name: Pack artifacts |
|
id: pack_artifacts |
|
if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }} |
|
run: | |
|
Copy-Item ggml/LICENSE .\build\bin\Release\ggml.txt |
|
Copy-Item LICENSE .\build\bin\Release\stable-diffusion.cpp.txt |
|
7z a sd-${{ 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: | |
|
sd-${{ 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-cmake |
|
- 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 |
|
id: create_release |
|
uses: anzz1/action-create-release@v1 |
|
env: |
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
|
with: |
|
tag_name: ${{ env.BRANCH_NAME }}-${{ steps.commit.outputs.short }} |
|
|
|
- name: Upload release |
|
id: upload_release |
|
uses: actions/github-script@v3 |
|
with: |
|
github-token: ${{secrets.GITHUB_TOKEN}} |
|
script: | |
|
const path = require('path'); |
|
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}`) |
|
}); |
|
} |
|
} |
|
|