name: CEF Runtime on: workflow_dispatch: inputs: cef_version: description: "CEF version to package" required: true default: "144.0.6+g5f7e671+chromium-144.0.7559.59" source: description: "Build from official archive or CEF source" required: true type: choice default: "official" options: - official - source cef_branch: description: "Optional CEF branch for source builds" required: false default: "" permissions: contents: write jobs: build: name: Build ${{ matrix.platform }} runs-on: ${{ matrix.runner }} strategy: fail-fast: false matrix: include: - platform: macosarm64 runner: macos-14 - platform: macosx64 runner: macos-15 - platform: linux64 runner: ubuntu-latest - platform: linuxarm64 runner: ubuntu-24.04-arm - platform: windows64 runner: windows-2022 # windowsarm64 disabled: Zig 0.16.0 aarch64-windows binary is broken # https://codeberg.org/ziglang/zig/issues/31865 # - platform: windowsarm64 # runner: windows-11-arm steps: - uses: actions/checkout@v4 - uses: mlugg/setup-zig@v2 with: version: 0.16.0 - name: Download official CEF if: ${{ inputs.source == 'official' }} shell: bash run: | set -euo pipefail version="${{ inputs.cef_version }}" platform="${{ matrix.platform }}" archive="cef_binary_${version}_${platform}.tar.bz2" base="https://cef-builds.spotifycdn.com" mkdir -p zig-out/cef-download curl --fail --location --output "zig-out/cef-download/${archive}" "${base}/${archive}" curl --fail --location --output "zig-out/cef-download/${archive}.sha256" "${base}/${archive}.sha256" expected="$(tr -d '[:space:]' < "zig-out/cef-download/${archive}.sha256")" if command -v sha256sum &>/dev/null; then actual="$(sha256sum "zig-out/cef-download/${archive}" | awk '{print $1}')" elif command -v shasum &>/dev/null; then actual="$(shasum -a 256 "zig-out/cef-download/${archive}" | awk '{print $1}')" else echo "::error::No SHA-256 hashing utility found"; exit 1 fi test "$expected" = "$actual" tar -xjf "zig-out/cef-download/${archive}" -C zig-out/cef-download echo "CEF_ROOT=zig-out/cef-download/${archive%.tar.bz2}" >> "$GITHUB_ENV" - name: Build CEF wrapper if: ${{ inputs.source == 'official' }} shell: bash run: | set -euo pipefail cmake_args=(-S "$CEF_ROOT" -B "$CEF_ROOT/build/libcef_dll_wrapper") case "${{ matrix.platform }}" in *arm64) cmake_args+=(-DPROJECT_ARCH=arm64) ;; macosx64) cmake_args+=(-DCMAKE_OSX_ARCHITECTURES=x86_64 -DPROJECT_ARCH=x86_64) ;; esac cmake "${cmake_args[@]}" cmake --build "$CEF_ROOT/build/libcef_dll_wrapper" --target libcef_dll_wrapper --config Release mkdir -p "$CEF_ROOT/libcef_dll_wrapper" case "${{ matrix.platform }}" in windows*) wrapper="libcef_dll_wrapper.lib" ;; *) wrapper="libcef_dll_wrapper.a" ;; esac find "$CEF_ROOT/build/libcef_dll_wrapper" -name "$wrapper" -print -quit | xargs -I{} cp "{}" "$CEF_ROOT/libcef_dll_wrapper/$wrapper" - name: Prepare native-sdk runtime archive if: ${{ inputs.source == 'official' }} shell: bash run: | zig build cli="zig-out/bin/native" if [[ "${{ runner.os }}" == "Windows" ]]; then cli="zig-out/bin/native.exe"; fi "$cli" cef prepare-release --dir "$CEF_ROOT" --output zig-out/cef --version "${{ inputs.cef_version }}" - name: Build CEF from source and prepare runtime if: ${{ inputs.source == 'source' }} shell: bash run: | zig build chmod +x tools/cef/build-from-source.sh args=( tools/cef/build-from-source.sh --platform "${{ matrix.platform }}" --version "${{ inputs.cef_version }}" --output zig-out/cef --native-sdk-bin zig-out/bin/native ) if [ -n "${{ inputs.cef_branch }}" ]; then args+=(--cef-branch "${{ inputs.cef_branch }}") fi "${args[@]}" - name: Publish release asset uses: softprops/action-gh-release@v2 with: tag_name: cef-${{ inputs.cef_version }} name: CEF ${{ inputs.cef_version }} files: | zig-out/cef/native-sdk-cef-${{ inputs.cef_version }}-${{ matrix.platform }}.tar.gz zig-out/cef/native-sdk-cef-${{ inputs.cef_version }}-${{ matrix.platform }}.tar.gz.sha256