Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
7b9c0d0
Linux WIP
Jan 25, 2026
dfb58b4
feat(linux): implement PID-based AT-SPI2 window matching
Jan 25, 2026
bc6bb1e
feat(ci): add Linux Docker and GitHub Actions CI/CD
Jan 25, 2026
4657136
fix(ci): use rust:1.84 for Cargo.lock v4 compatibility and correct ac…
Jan 25, 2026
f1c291c
fix(deps): update xcap to 0.8 to fix edition2024 compatibility
Jan 25, 2026
c29eb7a
fix(deps): remove xcap to fix edition2024/moxcms dependency hell
Jan 25, 2026
eaded36
fix(ci): install libxdo-dev for enigo input simulation
Jan 25, 2026
99be7d9
fix(ci): upgrade Rust to 1.93 and fix wildcard pattern tests
Jan 25, 2026
8e29108
style: apply cargo fmt formatting
Jan 25, 2026
aa3bd3c
fix(ci): resolve clippy warnings for CI
Jan 25, 2026
bbbebc2
fix: E2E test runner and CI workflow
Jan 25, 2026
53f09fb
debug: add verbose output to diagnose e2e test hang
Jan 25, 2026
7d67f90
fix: simplify e2e tests to X11-only smoke tests
Jan 25, 2026
b05fb66
style: apply cargo fmt to e2e tests
Jan 25, 2026
ecc39e9
fix: bypass xvfb-run which hangs in CI
Jan 25, 2026
08bd448
fix: use Ubuntu 24.04 for runtime (GLIBC compatibility)
Jan 25, 2026
42fb90f
fix: restore xvfb-run with proper args and debug output
Jan 25, 2026
de80f85
fix: use GitHub step timeout and docker --init for proper signal hand…
Jan 25, 2026
31c0268
fix: copy and run linux_e2e_test integration test binary
Jan 25, 2026
2645e2d
Refactor macOS automation modules and implement accessibility permiss…
Feb 2, 2026
9c1b4d4
feat: Add comprehensive selector reference documentation
Feb 2, 2026
629abb6
feat: Implement window focusing functionality and update related oper…
Feb 2, 2026
6306fd5
fix: resolve macOS compilation errors and Windows CI test flag
Feb 2, 2026
c933add
fix: add core-foundation-sys dep, restore screenshot stubs, fix docke…
Feb 2, 2026
311316a
fix: macOS CFString type, query pseudo-selector parsing, selector tak…
Feb 2, 2026
77a73bf
fix: add timeout and continue-on-error for tutorial generation step
Feb 2, 2026
31db8b5
fix: resolve mdBook version dynamically for docs CI
Feb 2, 2026
9fa71cf
fix: remove duplicate file entry in docs SUMMARY.md
Feb 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Build artifacts
target/
*.rs.bk

# IDE
.idea/
.vscode/
*.swp
*.swo

# Git
.git/
.gitignore

# Documentation (not needed for tests, except templates for tutorial generation)
docs/
!docs/templates/
*.md
!tests/fixtures/**/README.md

# Local config
.env
.env.local
114 changes: 114 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
name: CI

on:
push:
branches: [master, main]
pull_request:
branches: [master, main]

env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1

jobs:
test:
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
e2e: docker
- os: windows-latest
e2e: native
- os: macos-latest
e2e: skip
runs-on: ${{ matrix.os }}
timeout-minutes: 30

steps:
- uses: actions/checkout@v4

- name: Setup Rust
uses: dtolnay/rust-toolchain@stable

- name: Cache cargo
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-

- name: Install Linux dependencies
if: matrix.e2e == 'docker'
run: sudo apt-get update && sudo apt-get install -y libxdo-dev

- name: Build Docker (Linux)
if: matrix.e2e == 'docker'
run: docker build -t desktop-cli-test .

- name: Run E2E tests in Docker (Linux)
if: matrix.e2e == 'docker'
timeout-minutes: 3
run: |
docker run --rm --init \
-e RUST_BACKTRACE=1 \
desktop-cli-test 2>&1

- name: Run unit tests (Linux)
if: matrix.e2e == 'docker'
run: cargo test --lib --no-fail-fast

- name: Run tests (Windows)
if: matrix.e2e == 'native'
run: cargo test -- --test-threads=1

- name: Run unit tests (macOS)
if: matrix.e2e == 'skip'
run: cargo test --lib

docs:
runs-on: ubuntu-latest
timeout-minutes: 15

steps:
- uses: actions/checkout@v4

- name: Install Linux dependencies
run: sudo apt-get update && sudo apt-get install -y libxdo-dev

- name: Setup Rust
uses: dtolnay/rust-toolchain@stable

- name: Build Docker images
run: |
docker build -t desktop-cli-test .
docker build -f Dockerfile.tutorial -t desktop-cli-tutorial .

- name: Generate tutorials
timeout-minutes: 3
run: |
CONTAINER_ID=$(docker create desktop-cli-tutorial)
docker start -a "$CONTAINER_ID" || true
docker cp "$CONTAINER_ID:/app/docs/src/tutorials/" docs/src/tutorials/ 2>/dev/null || true
docker rm "$CONTAINER_ID"
continue-on-error: true

- name: Check for tutorial drift
run: |
if ! git diff --exit-code docs/src/tutorials/; then
echo "::warning::Generated tutorials differ from committed versions"
fi

- name: Install mdBook
run: |
mkdir -p "$HOME/bin"
MDBOOK_VERSION=$(curl -sI https://github.com/rust-lang/mdBook/releases/latest | grep -i '^location:' | sed 's|.*/tag/v||' | tr -d '\r')
curl -sSL "https://github.com/rust-lang/mdBook/releases/download/v${MDBOOK_VERSION}/mdbook-v${MDBOOK_VERSION}-x86_64-unknown-linux-gnu.tar.gz" | tar xz -C "$HOME/bin"
echo "$HOME/bin" >> "$GITHUB_PATH"

- name: Build documentation
run: mdbook build docs/
62 changes: 62 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: Deploy Documentation

on:
push:
branches: [master]

permissions:
contents: read
pages: write
id-token: write

concurrency:
group: "pages"
cancel-in-progress: false

jobs:
build-deploy:
runs-on: ubuntu-latest
timeout-minutes: 20

steps:
- uses: actions/checkout@v4

- name: Install Linux dependencies
run: sudo apt-get update && sudo apt-get install -y libxdo-dev

- name: Setup Rust
uses: dtolnay/rust-toolchain@stable

- name: Build Docker images
run: |
docker build -t desktop-cli-test .
docker build -f Dockerfile.tutorial -t desktop-cli-tutorial .

- name: Generate tutorials
run: |
docker run --rm desktop-cli-tutorial > /dev/null 2>&1 || true
# Extract generated files from container
CONTAINER_ID=$(docker create desktop-cli-tutorial)
docker cp "$CONTAINER_ID:/app/docs/src/tutorials/" docs/src/tutorials/ 2>/dev/null || true
docker rm "$CONTAINER_ID"

- name: Install mdBook
run: |
mkdir -p "$HOME/bin"
curl -sSL https://github.com/rust-lang/mdBook/releases/latest/download/mdbook-v0.4.44-x86_64-unknown-linux-gnu.tar.gz | tar xz -C "$HOME/bin"
echo "$HOME/bin" >> "$GITHUB_PATH"

- name: Build documentation
run: mdbook build docs/

- name: Setup Pages
uses: actions/configure-pages@v4

- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: docs/book

- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
Loading
Loading