Skip to content

feat(island): the cards that wait and today's activity, for the island #571

feat(island): the cards that wait and today's activity, for the island

feat(island): the cards that wait and today's activity, for the island #571

Workflow file for this run

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