name: Build Linux Binaries # Builds stripped voicecat-server + voicecat-admin for linux/amd64 and linux/arm64. # Run manually from the Actions tab, or on any push to main. # Artifacts are downloadable from the workflow run for ~90 days. on: workflow_dispatch: # manual trigger from the Actions tab push: branches: [main] paths: - 'core/**' - 'server/**' - 'tools/**' - 'cmake/**' - 'CMakeLists.txt' - 'CMakePresets.json' - 'vcpkg.json' - 'Dockerfile' - '.github/workflows/build-linux.yml' jobs: build: strategy: fail-fast: false matrix: include: - arch: amd64 runner: ubuntu-24.04 vcpkg_triplet: x64-linux - arch: arm64 runner: ubuntu-24.04-arm vcpkg_triplet: arm64-linux name: linux/${{ matrix.arch }} runs-on: ${{ matrix.runner }} steps: - uses: actions/checkout@v4 - name: Cache vcpkg packages uses: actions/cache@v4 with: path: | ~/.cache/vcpkg /usr/local/share/vcpkg/buildtrees key: vcpkg-${{ matrix.vcpkg_triplet }}-${{ hashFiles('vcpkg.json') }} restore-keys: | vcpkg-${{ matrix.vcpkg_triplet }}- - name: Install build dependencies run: | sudo apt-get update sudo apt-get install -y --no-install-recommends \ build-essential cmake ninja-build git curl zip unzip tar \ pkg-config autoconf autoconf-archive automake libtool nasm python3 - name: Set up vcpkg run: | VCPKG_COMMIT=$(jq -r '."builtin-baseline"' vcpkg.json) git init /tmp/vcpkg git -C /tmp/vcpkg remote add origin https://github.com/microsoft/vcpkg.git git -C /tmp/vcpkg fetch --depth=1 origin "$VCPKG_COMMIT" git -C /tmp/vcpkg checkout FETCH_HEAD /tmp/vcpkg/bootstrap-vcpkg.sh -disableMetrics echo "VCPKG_ROOT=/tmp/vcpkg" >> "$GITHUB_ENV" echo "VCPKG_DISABLE_METRICS=1" >> "$GITHUB_ENV" - name: Build (server-release preset) run: | cmake --preset server-release cmake --build --preset server-release - name: Collect binaries run: | mkdir -p dist cp build/server-release/bin/voicecat-server dist/ cp build/server-release/bin/voicecat-admin dist/ file dist/voicecat-server dist/voicecat-admin ls -lh dist/ - name: Upload binaries uses: actions/upload-artifact@v4 with: name: voicecat-linux-${{ matrix.arch }} path: dist/ retention-days: 90