| 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}`) |
| }); |
| } |
| } |
| |