name: ContinuousDelivery on: push: branches: [ master ] pull_request: branches: [ master ] env: BUILD_TYPE: RelWithDebInfo BRANCH_NAME: ${{ github.head_ref || github.ref_name }} jobs: linux-ubuntu: timeout-minutes: 10 runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v4 with: submodules: recursive - name: Install Dependencies run: sudo apt update && sudo apt -y install libsodium-dev - name: Configure CMake run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} - name: Build run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} -j 4 - name: Determine tag name id: tag shell: bash # taken from llama.cpp run: | SHORT_HASH="$(git rev-parse --short=7 HEAD)" if [[ "${{ env.BRANCH_NAME }}" == "master" ]]; then echo "name=dev-${SHORT_HASH}" >> $GITHUB_OUTPUT else SAFE_NAME=$(echo "${{ env.BRANCH_NAME }}" | tr '/' '-') echo "name=dev-${SAFE_NAME}-${SHORT_HASH}" >> $GITHUB_OUTPUT fi - name: Compress artifacts shell: bash run: | tar -czvf ${{ github.event.repository.name }}-${{ steps.tag.outputs.name }}-${{ runner.os }}-ubuntu20.04-x86_64.tar.gz -C ${{github.workspace}}/build/bin/ . - uses: actions/upload-artifact@v4 with: # TODO: simpler name? name: ${{ github.event.repository.name }}-${{ steps.tag.outputs.name }}-${{ runner.os }}-ubuntu20.04-x86_64 # TODO: do propper packing path: | ${{github.workspace}}/${{ github.event.repository.name }}-${{ steps.tag.outputs.name }}-${{ runner.os }}-ubuntu20.04-x86_64.tar.gz windows: timeout-minutes: 15 runs-on: windows-latest steps: - uses: actions/checkout@v4 with: submodules: recursive - name: update vcpkg shell: bash run: | cd C:/vcpkg git pull - name: Install Dependencies run: vcpkg install libsodium:x64-windows-static pthreads:x64-windows-static # setup vs env - uses: ilammy/msvc-dev-cmd@v1 with: arch: amd64 - name: Configure CMake run: cmake -G Ninja -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows-static - name: Build run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} - name: Determine tag name id: tag shell: bash # taken from llama.cpp run: | SHORT_HASH="$(git rev-parse --short=7 HEAD)" if [[ "${{ env.BRANCH_NAME }}" == "master" ]]; then echo "name=dev-${SHORT_HASH}" >> $GITHUB_OUTPUT else SAFE_NAME=$(echo "${{ env.BRANCH_NAME }}" | tr '/' '-') echo "name=dev-${SAFE_NAME}-${SHORT_HASH}" >> $GITHUB_OUTPUT fi - name: Clean temporary artifacts # msvc sometimes produces .ilk files, which are used for linking only shell: powershell run: | Remove-Item "${{github.workspace}}/build/bin/*.ilk" - name: Compress artifacts shell: powershell run: | Compress-Archive -Path ${{github.workspace}}/build/bin/* -Destination ${{ github.event.repository.name }}-${{ steps.tag.outputs.name }}-${{ runner.os }}-msvc-x86_64.zip - uses: actions/upload-artifact@v4 with: # TODO: simpler name? name: ${{ github.event.repository.name }}-${{ steps.tag.outputs.name }}-${{ runner.os }}-msvc-x86_64 # TODO: do propper packing path: | ${{github.workspace}}/${{ github.event.repository.name }}-${{ steps.tag.outputs.name }}-${{ runner.os }}-msvc-x86_64.zip release: if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) }} runs-on: ubuntu-latest needs: - linux-ubuntu - windows permissions: contents: write steps: - uses: actions/checkout@v4 with: submodules: recursive - name: Determine tag name id: tag shell: bash # taken from llama.cpp run: | SHORT_HASH="$(git rev-parse --short=7 HEAD)" if [[ "${{ env.BRANCH_NAME }}" == "master" ]]; then echo "name=dev-${SHORT_HASH}" >> $GITHUB_OUTPUT else SAFE_NAME=$(echo "${{ env.BRANCH_NAME }}" | tr '/' '-') echo "name=dev-${SAFE_NAME}-${SHORT_HASH}" >> $GITHUB_OUTPUT fi - name: Download artifacts id: download-artifact uses: actions/download-artifact@v4 with: path: ./artifacts/ - name: Create release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} tag: ${{ steps.tag.outputs.name }} shell: bash run: | gh release create "$tag" \ --repo="$GITHUB_REPOSITORY" \ --title="nightly ${tag#v}" \ --notes="nightly build" \ --prerelease - name: Upload artifacts env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} tag: ${{ steps.tag.outputs.name }} shell: bash run: | ls -laR ./artifacts gh release upload "$tag" ./artifacts/*/* \ --repo="$GITHUB_REPOSITORY"