Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
913d11e
chore: finalize veilid 0.5.1 upgrade and cleanup
tripledoublev Feb 4, 2026
c16149f
fix: update p2p tests to handle auto-created repositories on join
tripledoublev Feb 4, 2026
4152438
trigger ci: re-run tests on github actions
tripledoublev Feb 5, 2026
792331d
ci: pin rust to 1.88.0 to fix keyvaluedb-sqlite build
tripledoublev Feb 12, 2026
98042b4
ci: revert rust pin to stable, fix is dep pin in save-dweb-backend
tripledoublev Feb 12, 2026
93d87d6
chore: bump save-dweb-backend to v0.3.1
tripledoublev Feb 12, 2026
32d55e4
chore: remove internal doc from repo
tripledoublev Feb 12, 2026
6f72a73
chore: remove internal script from repo
tripledoublev Feb 12, 2026
1a5b4bf
fix: remove local path patch for CI compatibility
tripledoublev Feb 12, 2026
f6e041f
ci: add test_join_group to P2P retry override
tripledoublev Feb 12, 2026
8d006f0
Fix joined refresh test for multi-repo join behavior
tripledoublev Feb 12, 2026
470ba26
Stabilize refresh_joined_group first-refresh assertion
tripledoublev Feb 12, 2026
1073a40
Reduce CI retry amplification and harden relay-flaky tests
tripledoublev Feb 12, 2026
250125e
Fix clippy and reduce CI runtime for relay-flaky tests
tripledoublev Feb 12, 2026
6fb5b40
test: add cross-group refresh isolation regression
tripledoublev Feb 16, 2026
2545fae
fix: preserve legacy error body shape for readiness failures
tripledoublev Feb 16, 2026
59d1f84
Fix nextest config loading and timeout keys
tripledoublev Feb 16, 2026
7de4993
Harden joined-group refresh test convergence logic
tripledoublev Feb 16, 2026
0463fc5
Add CI-local Veilid test mode via network overrides
tripledoublev Feb 16, 2026
e96240c
upgrade veilid to 0.5.2 and save-dweb-backend v0.3.2
tripledoublev Feb 17, 2026
b7d92cb
ci: exclude long p2p tests from PR workflow
tripledoublev Feb 17, 2026
385e67c
chore: bump save-dweb-backend to v0.3.3
tripledoublev Feb 17, 2026
d87be57
ci: use ci-virtual nextest profile for PR runs
tripledoublev Feb 17, 2026
f686970
test: make custom veilid network key opt-in in CI
tripledoublev Feb 17, 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
4 changes: 4 additions & 0 deletions .cargo/config-android.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,7 @@ ar = "llvm-ar"
[target.armv7-linux-androideabi]
linker = "armv7a-linux-androideabi34-clang"
ar = "llvm-ar"

[target.x86_64-linux-android]
linker = "x86_64-linux-android34-clang"
ar = "llvm-ar"
40 changes: 40 additions & 0 deletions .config/nextest.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Nextest configuration for save-rust
# Veilid/DHT tests can be slow and flaky due to P2P peer discovery and network setup.

[profile.default]
# Set timeout to 10 minutes per test (Veilid network operations can be slow)
# Terminate after 10 periods of 60s.
slow-timeout = { period = "60s", terminate-after = 10 }

# Retry flaky tests with exponential backoff to give Veilid time to connect
retries = { backoff = "exponential", count = 3, delay = "5s", max-delay = "30s" }

# Run tests serially to avoid Veilid network conflicts
test-threads = 1

# P2P tests are flaky in CI, but very high retry counts can stretch failures to >1h.
# Keep retries moderate so truly broken runs fail fast.
[[profile.default.overrides]]
filter = 'test(test_replicate_group) | test(test_join_group)'
retries = { backoff = "exponential", count = 4, delay = "8s", max-delay = "45s", jitter = true }

[[profile.default.overrides]]
filter = 'test(test_refresh_joined_group)'
retries = { backoff = "exponential", count = 2, delay = "8s", max-delay = "30s", jitter = true }
slow-timeout = { period = "60s", terminate-after = 5 }

# Faster CI profile used for PR runs.
[profile.ci-virtual]
slow-timeout = { period = "30s", terminate-after = 4 }
retries = { backoff = "exponential", count = 1, delay = "3s", max-delay = "10s", jitter = true }
test-threads = 1

[[profile.ci-virtual.overrides]]
filter = 'test(test_replicate_group) | test(test_join_group)'
retries = { backoff = "exponential", count = 2, delay = "5s", max-delay = "20s", jitter = true }
slow-timeout = { period = "45s", terminate-after = 4 }

[[profile.ci-virtual.overrides]]
filter = 'test(test_refresh_joined_group)'
retries = { backoff = "exponential", count = 1, delay = "5s", max-delay = "15s", jitter = true }
slow-timeout = { period = "45s", terminate-after = 4 }
47 changes: 15 additions & 32 deletions .github/workflows/lint_and_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@ on:
- main

jobs:
lint:
lint_and_test:
runs-on: ubuntu-latest
timeout-minutes: 75

steps:
- name: Set up Rust toolchain
uses: hecrj/setup-rust-action@v2
Expand All @@ -24,37 +26,18 @@ jobs:
- name: Run Clippy
run: cargo clippy --all-targets --all-features -- -D warnings

test:
needs: lint
runs-on: ubuntu-latest
timeout-minutes: 15
strategy:
matrix:
test_name: [
"tests::basic_test",
"tests::test_health_endpoint",
"tests::test_join_group",
"tests::test_refresh_empty_group",
"tests::test_refresh_group_with_file",
"tests::test_refresh_group_with_single_repo",
# Skipping: flaky P2P peer discovery (see issue #TODO)
# "tests::test_refresh_joined_group",
"tests::test_refresh_nonexistent_group",
# Skipping: flaky P2P peer discovery (see issue #TODO)
# "tests::test_replicate_group",
"tests::test_upload_list_delete"
]

steps:
- name: Set up Rust toolchain
uses: hecrj/setup-rust-action@v2
with:
rust-version: stable

- name: Check out the code
uses: actions/checkout@v4
- name: Install cargo-nextest
run: cargo install cargo-nextest --locked

- name: Run individual test
- name: Run tests with retries
env:
RUST_MIN_STACK: 8388608
run: cargo test --verbose -- ${{ matrix.test_name }} --test-threads=1 --nocapture
SAVE_VEILID_LOCAL_TEST_MODE: "1"
# Retries configured in .config/nextest.toml (nextest default path)
# --no-fail-fast: run all tests in this PR subset even when some fail.
# Exclude long P2P network convergence tests from PR CI; run them in dedicated/nightly workflows.
run: >
cargo nextest run
--profile ci-virtual
--no-fail-fast
-E 'not (test(test_join_group) | test(test_replicate_group) | test(test_refresh_joined_group) | test(test_idempotent_create_repo_after_join))'
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,8 @@
/target
platform-build
private-*
test_*.log
.cursor/
save-data/
test-output.txt
test_refresh_joined_group_output.txt
7 changes: 5 additions & 2 deletions API.md
Original file line number Diff line number Diff line change
Expand Up @@ -414,11 +414,14 @@ Request Body: Binary file content
Response:
```json
{
"name": "string", // File name
"updated_collection_hash": "string" // Hash of the updated collection
"name": "string", // File name
"updated_collection_hash": "string", // Hash of the updated collection
"file_hash": "string" // Hash of the uploaded file
}
```

`file_hash` is the Veilid content hash stored in the DHT. Clients can use it to verify local uploads, deduplicate media, or trigger replication via the refresh endpoints if the hash is missing locally.

Error Response (400 Bad Request):
```json
{
Expand Down
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Changelog

## 2026-02-03

- Upgrade to `veilid-core` v0.5.1, applying the temporary `fix-underflow` patch while the upstream bugfix is under review.
- Adopt `cargo-nextest` with retries in CI to stabilize Veilid/DHT-related tests.
Loading