Repository navigation
feat(agent): find Codex wherever it was installed, and Brave or Chrome #556
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: ci-${{ github.ref }} | |
| cancel-in-progress: true | |
| env: | |
| CARGO_TERM_COLOR: always | |
| jobs: | |
| rust-windows: | |
| name: Rust (Windows) | |
| runs-on: windows-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: rustfmt, clippy | |
| - uses: Swatinem/rust-cache@v2 | |
| - run: cargo fmt --all --check | |
| - run: cargo clippy --workspace --all-targets -- -D warnings | |
| # The runner has nobody at its desktop: the bots' real mouse and | |
| # keyboard may be tested there (spec 24.7), never on a developer's. | |
| - run: cargo test --workspace | |
| env: | |
| BOTLOFT_REAL_INPUT_TESTS: "1" | |
| - name: Generated TypeScript bindings are up to date | |
| run: git diff --exit-code -- app/src/lib/protocol.gen.ts | |
| # The daemon, its crates and the app's Rust side off Windows (spec 18, | |
| # item 8). Plain `cargo` builds the default members; the app crate comes | |
| # after, with the desktop libraries Tauri needs on Linux. The setup | |
| # window is Windows only. | |
| rust-unix: | |
| name: Rust (${{ matrix.name }}) | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - name: Ubuntu | |
| os: ubuntu-latest | |
| - name: macOS | |
| os: macos-latest | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: clippy | |
| - uses: Swatinem/rust-cache@v2 | |
| - run: cargo clippy --all-targets -- -D warnings | |
| - name: Desktop libraries for the app (Linux) | |
| if: runner.os == 'Linux' | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y --no-install-recommends libwebkit2gtk-4.1-dev \ | |
| libayatana-appindicator3-dev librsvg2-dev libxdo-dev | |
| - name: The app's Rust side | |
| run: | | |
| cargo clippy -p botloft-app --all-targets -- -D warnings | |
| cargo test -p botloft-app | |
| # The runner image ships Edge and Chrome with sandbox helpers that are | |
| # not setuid root, as their packages would leave them, so they refuse | |
| # to start. The browser tests need a working sandbox. | |
| - name: Browser sandbox helpers as their packages set them | |
| if: runner.os == 'Linux' | |
| run: | | |
| for helper in /opt/microsoft/msedge/msedge-sandbox /opt/google/chrome/chrome-sandbox; do | |
| if [ -f "$helper" ]; then | |
| sudo chown root:root "$helper" | |
| sudo chmod 4755 "$helper" | |
| fi | |
| done | |
| - run: cargo test | |
| # `botloftd service` against the real systemd or launchd (spec 14.1). | |
| # The Linux runner has no user manager until the user lingers. | |
| - name: The daemon as a service of the system | |
| timeout-minutes: 10 | |
| env: | |
| BOTLOFT_SERVICE_TEST: "1" | |
| run: | | |
| if [ "$RUNNER_OS" = Linux ]; then | |
| sudo loginctl enable-linger "$USER" | |
| export XDG_RUNTIME_DIR="/run/user/$(id -u)" | |
| export DBUS_SESSION_BUS_ADDRESS="unix:path=$XDG_RUNTIME_DIR/bus" | |
| for i in $(seq 1 30); do | |
| systemctl --user show-environment > /dev/null 2>&1 && break | |
| sleep 1 | |
| done | |
| fi | |
| cargo test -p botloftd --test service -- --nocapture && exit 0 | |
| # What the service manager saw, when the test fails. | |
| if [ "$RUNNER_OS" = Linux ]; then | |
| journalctl --user --no-pager -n 60 || true | |
| else | |
| launchctl list | grep -i botloft || true | |
| log show --last 5m --predicate 'subsystem == "com.apple.xpc.launchd"' --style compact 2>/dev/null | grep -i botloft | tail -40 || true | |
| fi | |
| exit 1 | |
| app: | |
| name: App (Windows) | |
| runs-on: windows-latest | |
| defaults: | |
| run: | |
| working-directory: app | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - uses: pnpm/action-setup@v4 | |
| with: | |
| package_json_file: app/package.json | |
| - uses: actions/setup-node@v5 | |
| with: | |
| node-version: 24 | |
| cache: pnpm | |
| cache-dependency-path: app/pnpm-lock.yaml | |
| - run: pnpm install --frozen-lockfile | |
| - run: pnpm check | |
| - run: pnpm build | |
| - name: The setup window's page builds too (spec 15.7) | |
| run: pnpm exec vite build --mode setup |