Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
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
174 changes: 118 additions & 56 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,88 +7,156 @@ on:
branches: [main]

jobs:
linux:
linux-unit-tests:
runs-on: ubuntu-latest
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: sudo apt-get update && sudo apt-get install -y libfuse3-dev fuse3
run: sudo apt-get update && sudo apt-get install -y libfuse3-dev fuse3 libelf-dev zlib1g-dev
- name: Configure
run: cmake -B build -DAGENTVFS_EBPF=OFF
run: cmake -B build -DAGENTVFS_EBPF=OFF -DAGENTVFS_LDPRELOAD=ON
- name: Build
run: cmake --build build -j
- name: Unit tests
run: |
./build/cas_test_working_tree
./build/cas_test_write_buffer
./build/cas_test_object_store
./build/cas_test_branch_context
./build/cas_test_branch_merge
./build/cas_test_branch_merge_commit
./build/cas_test_fh_lifecycle /tmp /tmp/test.sock || true
./build/cas_test_branch_merge_daemon || true
./build/cas_test_branch_persistence || true
./build/cas_test_blake3_simd
./build/cas_test_telemetry_event
./build/cas_test_telemetry_registry
run_test() {
echo "==> $1"
"$1"
}

run_test ./build/tests/cas_test_working_tree
run_test ./build/tests/cas_test_write_buffer
run_test ./build/tests/cas_test_object_store
run_test ./build/tests/cas_test_branch_context
run_test ./build/tests/cas_test_branch_merge
run_test ./build/tests/cas_test_branch_merge_commit
run_test ./build/tests/cas_test_branch_merge_daemon
run_test ./build/tests/cas_test_branch_persistence
run_test ./build/tests/cas_test_blake3_simd
run_test ./build/tests/cas_test_telemetry_event
run_test ./build/tests/cas_test_telemetry_registry
run_test ./build/tests/cas_test_workspace_cli
run_test ./build/tests/cas_test_ebpf_backend
run_test ./build/tests/cas_test_fanotify_backend
run_test ./build/tests/cas_test_ptrace_backend
run_test ./build/tests/cas_test_ldpreload_backend
run_test ./build/tests/cas_test_bpftime_backend
run_test ./build/tests/cas_test_wasm_backend
run_test ./build/tests/cas_test_lua_backend
run_test ./build/tests/cas_test_ldpreload_preload

macos:
macos-unit-tests:
runs-on: macos-latest
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: Configure
# AGENTVFS_FUSE_T defaults to ON on Apple; disable it here so this
# portable-only job doesn't require fuse-t (covered by macos-daemon).
# unit-only job doesn't require fuse-t.
run: cmake -B build -DAGENTVFS_EBPF=OFF -DAGENTVFS_FUSE_T=OFF
- name: Build
run: cmake --build build -j
- name: Unit tests
# macOS is UNIX, so every UNIX-gated test still builds and runs.
# The daemon target is Linux-only and is intentionally not built
# here.
run: |
./build/cas_test_working_tree
./build/cas_test_write_buffer
./build/cas_test_object_store
./build/cas_test_branch_context
./build/cas_test_branch_merge
./build/cas_test_branch_merge_commit
./build/cas_test_blake3_simd
./build/cas_test_telemetry_event
./build/cas_test_telemetry_registry
./build/tests/cas_test_working_tree
./build/tests/cas_test_write_buffer
./build/tests/cas_test_object_store
./build/tests/cas_test_branch_context
./build/tests/cas_test_branch_merge
./build/tests/cas_test_branch_merge_commit
./build/tests/cas_test_blake3_simd
./build/tests/cas_test_telemetry_event
./build/tests/cas_test_telemetry_registry
./build/tests/cas_test_workspace_cli
./build/tests/cas_test_fuse_t_preflight

windows:
windows-unit-tests:
runs-on: windows-latest
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: Configure
# AGENTVFS_WINFSP defaults to ON on Windows; explicitly disable it
# so this portable-only job doesn't require the WinFsp SDK.
# Build only unit targets here; WinFsp is reserved for system tests.
run: cmake -B build -DAGENTVFS_EBPF=OFF -DAGENTVFS_WINFSP=OFF
- name: Build
# Windows builds only the portable tests gated by the CMake
# if(UNIX)/if(LINUX) guards. The fh_lifecycle / object_store /
# branch_merge_commit / telemetry_registry / branch_persistence /
# branch_merge_daemon harnesses use POSIX-only APIs and are not
# available here. cas_core itself compiles via std::filesystem
# and the posix_compat.h shim.
run: cmake --build build --config Release -j
- name: Unit tests
run: |
.\build\Release\cas_test_working_tree.exe
.\build\Release\cas_test_write_buffer.exe
.\build\Release\cas_test_branch_context.exe
.\build\Release\cas_test_branch_merge.exe
.\build\Release\cas_test_blake3_simd.exe
.\build\Release\cas_test_telemetry_event.exe
.\build\tests\Release\cas_test_working_tree.exe
.\build\tests\Release\cas_test_write_buffer.exe
.\build\tests\Release\cas_test_branch_context.exe
.\build\tests\Release\cas_test_branch_merge.exe
.\build\tests\Release\cas_test_blake3_simd.exe
.\build\tests\Release\cas_test_telemetry_event.exe
.\build\tests\Release\cas_test_win_helpers.exe
.\build\tests\Release\cas_test_named_pipe_channel.exe

linux-system-tests:
runs-on: ubuntu-latest
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
libfuse3-dev \
fuse3 \
netcat-openbsd \
clang \
libbpf-dev \
libelf-dev \
zlib1g-dev \
liblua5.4-dev \
lua5.4 \
wabt
- name: Configure
run: cmake -B build -DAGENTVFS_EBPF=OFF -DAGENTVFS_FANOTIFY=ON -DAGENTVFS_PTRACE=ON -DAGENTVFS_LDPRELOAD=ON -DAGENTVFS_BPFTIME=ON -DAGENTVFS_WASM=ON -DAGENTVFS_LUA=ON
- name: Build
run: cmake --build build -j
- name: System tests
run: |
run_system_test() {
echo "==> $1"
bash "$1"
}

windows-daemon:
run_root_system_test() {
echo "==> $1 (root)"
sudo -E env "PATH=$PATH" bash "$1"
}

sudo sysctl -w kernel.yama.ptrace_scope=0

run_system_test tests/system/test_agentvfs_ctl.sh
run_system_test tests/system/test_workspace_cli.sh
run_system_test tests/system/test_cas_smoke.sh
run_system_test tests/system/test_cas_bootstrap.sh
run_system_test tests/system/test_cas_fh_lifecycle.sh
run_root_system_test tests/system/test_cas_branching.sh
run_root_system_test tests/system/test_cas_branch_merge.sh
run_root_system_test tests/system/test_cas_multi_branch.sh
run_root_system_test tests/system/test_cas_multi_branch_merge.sh
run_root_system_test tests/system/test_workspace_multi_branch.sh
run_system_test tests/system/test_cas_10cp_rollback.sh
# eBPF-specific coverage is not runnable on the hosted Ubuntu kernel/tooling image.
run_system_test tests/system/test_cas_backend_compare.sh
run_system_test tests/system/test_cas_multi_backend.sh
run_root_system_test tests/system/test_cas_fanotify.sh
run_system_test tests/system/test_cas_ptrace.sh
run_system_test tests/system/test_cas_ldpreload.sh
run_system_test tests/system/test_cas_bpftime.sh
run_system_test tests/system/test_cas_lua_actually_skipped.sh
run_system_test tests/system/test_cas_wasm_actually_skipped.sh
run_system_test tests/system/test_start_sh.sh
run_system_test tests/system/test_quickstart_demo_smoke.sh

windows-system-tests:
runs-on: windows-latest
strategy: { fail-fast: false }
steps:
Expand All @@ -114,15 +182,11 @@ jobs:
run: cmake -B build -DAGENTVFS_EBPF=OFF -DAGENTVFS_WINFSP=ON
- name: Build
run: cmake --build build --config Release -j
- name: Windows unit tests
run: |
.\build\Release\cas_test_win_helpers.exe
.\build\Release\cas_test_named_pipe_channel.exe
- name: E2E test
- name: System tests
shell: powershell
run: ./tests/cas/windows/test_winfsp_e2e.ps1
run: ./tests/system/windows/test_winfsp_e2e.ps1

macos-daemon:
macos-system-tests:
runs-on: macos-latest
strategy: { fail-fast: false }
steps:
Expand All @@ -133,7 +197,5 @@ jobs:
run: cmake -B build -DAGENTVFS_EBPF=OFF -DAGENTVFS_FUSE_T=ON
- name: Build
run: cmake --build build -j
- name: Preflight unit test
run: ./build/cas_test_fuse_t_preflight
- name: E2E test
run: bash tests/cas/test_macos_e2e.sh
- name: System tests
run: bash tests/system/test_macos_e2e.sh
Loading
Loading