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