# https://webui.me # https://github.com/webui-dev/webui # Copyright (c) 2020-2025 Hassan Draga. # Licensed under MIT License. # All rights reserved. # Canada. # # Special Thanks to Turiiya (https://github.com/ttytm) name: Linux on: workflow_call: jobs: setup: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - name: Bundle WebUI Bridge run: | npm i -g esbuild chmod +x bridge/build.sh bridge/build.sh - uses: actions/cache@v4 with: path: bridge/webui_bridge.h key: ${{ runner.os }}-${{ github.sha }}-bridge build: needs: setup runs-on: ubuntu-22.04 permissions: contents: write strategy: matrix: include: - cc: gcc arch: x64 - cc: clang arch: x64 fail-fast: false env: ARTIFACT: webui-linux-${{ matrix.cc }}-${{ matrix.arch }} CC: ${{ matrix.cc }} steps: - uses: actions/checkout@v4 - uses: actions/cache/restore@v4 with: path: bridge/webui_bridge.h key: ${{ runner.os }}-${{ github.sha }}-bridge fail-on-cache-miss: true - name: Setup run: | if [ "$CC" == "clang" ]; then sudo ln -s llvm-ar-14 /usr/bin/llvm-ar sudo ln -s llvm-ranlib-14 /usr/bin/llvm-ranlib sudo ln -s llvm-strip-14 /usr/bin/llvm-strip fi - name: Build Debug Target run: make debug - name: Build Release Target if: ${{ !cancelled() }} run: make - name: Build TLS Debug Target run: make WEBUI_USE_TLS=1 debug - name: Build TLS Release Target run: make WEBUI_USE_TLS=1 - name: Build Examples run: | examples_base_dir=$(pwd)/examples/C for example in $(find $examples_base_dir/* -maxdepth 0 -type d); do echo "> $example" cd $example || (exit_code=1 && continue) if ! make; then echo "Failed to build '$example'" exit_code=1 continue fi if [[ ! -e "main" || ! -e "main-dyn" ]] ; then echo "Failed to find executable for '$example'" && find . exit_code=1 continue fi done exit $exit_code - name: Setup Browser uses: browser-actions/setup-chrome@v1 - name: Prepare Artifact run: | cp -r include dist mv dist/ "$ARTIFACT" - name: Upload Artifact uses: actions/upload-artifact@v4 with: name: ${{ env.ARTIFACT }} path: ${{ env.ARTIFACT }} - name: Prepare Release if: > github.repository_owner == 'webui-dev' && (github.ref_type == 'tag' || (github.ref_name == 'main' && github.event_name == 'push')) run: | zip -r "$ARTIFACT.zip" "$ARTIFACT" if [ $GITHUB_REF_TYPE == tag ]; then echo "TAG=$GITHUB_REF_NAME" >> $GITHUB_ENV else { echo "IS_PRERELEASE=true"; echo "TAG=nightly"; echo "TITLE=WebUI Nightly Build $(date -u +'%Y-%m-%d %H:%M:%S UTC')" echo "BODY=Generated from commit $GITHUB_SHA." } >> $GITHUB_ENV fi - name: Update Nightly Tag if: env.IS_PRERELEASE uses: richardsimko/update-tag@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: nightly - name: Release if: > github.repository_owner == 'webui-dev' && (github.ref_type == 'tag' || (github.ref_name == 'main' && github.event_name == 'push')) uses: ncipollo/release-action@v1 with: artifacts: ${{ env.ARTIFACT }}.zip tag: ${{ env.TAG }} body: ${{ env.BODY }} name: ${{ env.TITLE }} prerelease: ${{ env.IS_PRERELEASE }} allowUpdates: true build-ubuntu-22: needs: setup runs-on: ubuntu-22.04 permissions: contents: write strategy: matrix: include: - cc: gcc arch: x64 - cc: clang arch: x64 fail-fast: false env: ARTIFACT: webui-linux-${{ matrix.cc }}-${{ matrix.arch }} steps: - uses: actions/checkout@v4 - uses: actions/cache/restore@v4 with: path: bridge/webui_bridge.h key: ${{ runner.os }}-${{ github.sha }}-bridge fail-on-cache-miss: true - name: Setup run: | CC="${{ matrix.cc }}" if [ "$CC" == "clang" ]; then sudo ln -s llvm-ar-14 /usr/bin/llvm-ar sudo ln -s llvm-ranlib-14 /usr/bin/llvm-ranlib sudo ln -s llvm-strip-14 /usr/bin/llvm-strip else sudo apt -qq install gcc-11 CC+="-11" fi echo "CC=$CC" >> $GITHUB_ENV - name: Build Debug Target run: make debug - name: Build Release Target if: ${{ !cancelled() }} run: make - name: Build TLS Debug Target run: make WEBUI_USE_TLS=1 debug - name: Build TLS Release Target run: make WEBUI_USE_TLS=1 - name: Build Examples run: | examples_base_dir=$(pwd)/examples/C for example in $(find $examples_base_dir/* -maxdepth 0 -type d); do echo "> $example" cd $example || (exit_code=1 && continue) if ! make; then echo "Failed to build '$example'" exit_code=1 continue fi if [[ ! -e "main" || ! -e "main-dyn" ]] ; then echo "Failed to find executable for '$example'" && find . exit_code=1 continue fi done exit $exit_code