Skip to content

Commit 71f0829

Browse files
Merge branch 'main' into fix/standalone-build-and-test-hangs
Resolve conflict by keeping e2e.yml from main (PR #108 added functional e2e.yml). Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2 parents fefe510 + bbf8ab6 commit 71f0829

1 file changed

Lines changed: 109 additions & 0 deletions

File tree

.github/workflows/e2e.yml

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
# SPDX-License-Identifier: MPL-2.0
2+
# E2E + Point-to-Point + Unit tests for echidnabot.
3+
#
4+
# Taxonomy: standards/testing-and-benchmarking/TESTING-TAXONOMY.adoc
5+
# Part I §1 Unit · §2 Point-to-Point · §3 End-to-End
6+
# Provenance rule (TESTING-TAXONOMY.adoc, "draw from proven-tests-and-benches
7+
# FIRST"): the categories and their meanings come from that suite's Taxonomy
8+
# module. The assertions here are echidnabot's own, because the proven suite has
9+
# no echidnabot subject to reuse -- see the gap note at the foot of this file.
10+
#
11+
# ⚠ WHY THIS WORKFLOW CHECKS OUT TWO REPOSITORIES
12+
# echidnabot CANNOT BUILD STANDALONE. Its Cargo.toml declares
13+
# gitbot-shared-context = { path = "../../shared-context" }
14+
# which lives in hyperpolymath/gitbot-fleet. A fresh clone of echidnabot alone
15+
# fails dependency resolution outright:
16+
# "failed to load source for dependency gitbot-shared-context"
17+
# Verified 2026-07-29. The layout below (gitbot-fleet/bots/echidnabot) is the one
18+
# that resolves; it is also how the fleet vendors this bot.
19+
#
20+
# ⚠ WHY `cargo test --lib` IS NOT RUN HERE
21+
# The unit tests inside src/lib.rs HANG -- measured: no completion in 20 minutes,
22+
# exit 124. Every INTEGRATION binary passes in about two seconds (91 tests). This
23+
# workflow therefore runs the integration suites explicitly, by name, rather than
24+
# a bare `cargo test` that would hang the runner. The hang is recorded as debt,
25+
# not hidden: the job below states it in its summary on every run.
26+
name: E2E + P2P + Unit
27+
on:
28+
push:
29+
branches: [main, master]
30+
paths: ['src/**', 'tests/**', 'Cargo.toml', 'Cargo.lock', '.github/workflows/e2e.yml']
31+
pull_request:
32+
branches: [main, master]
33+
workflow_dispatch:
34+
35+
concurrency:
36+
group: ${{ github.workflow }}-${{ github.ref }}
37+
cancel-in-progress: true
38+
39+
permissions:
40+
contents: read
41+
42+
jobs:
43+
tests:
44+
name: E2E — Unit, P2P and End-to-End
45+
runs-on: ubuntu-latest
46+
timeout-minutes: 30
47+
permissions:
48+
contents: read
49+
steps:
50+
# gitbot-fleet supplies shared-context; echidnabot must sit at bots/echidnabot.
51+
- name: Checkout gitbot-fleet (provides ../../shared-context)
52+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
53+
with:
54+
repository: hyperpolymath/gitbot-fleet
55+
path: fleet
56+
57+
- name: Checkout echidnabot into fleet/bots/echidnabot
58+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
59+
with:
60+
path: fleet/bots/echidnabot
61+
62+
- name: Prove the layout resolves before building
63+
working-directory: fleet/bots/echidnabot
64+
run: |
65+
set -euo pipefail
66+
# Fails loudly if the two-repo layout is ever broken, rather than
67+
# producing a confusing compile error thousands of lines later.
68+
cargo metadata --format-version 1 >/dev/null
69+
echo "✅ dependency graph resolves (gitbot-shared-context found)"
70+
71+
- uses: Swatinem/rust-cache@f0deed1e0edfc6a9be95417288c0e1099b1eeec3 # v2.7.7
72+
with:
73+
workspaces: fleet/bots/echidnabot
74+
75+
- name: Unit + Point-to-Point + End-to-End
76+
working-directory: fleet/bots/echidnabot
77+
run: |
78+
set -euo pipefail
79+
# Named explicitly. A bare `cargo test` also runs --lib, which hangs
80+
# (see the header). Each binary maps to a taxonomy category:
81+
# smoke -> Part I §8 Smoke
82+
# property_tests -> Part I §9 Property-based
83+
# lifecycle -> Part I §7 Lifecycle
84+
# integration_tests -> Part I §2 Point-to-Point
85+
# seam_test -> Part I §3 End-to-End (webhook -> corpus)
86+
for t in smoke property_tests lifecycle integration_tests seam_test; do
87+
echo "::group::$t"
88+
cargo test --test "$t" -- --test-threads=4
89+
echo "::endgroup::"
90+
done
91+
92+
- name: Summary
93+
if: always()
94+
run: |
95+
{
96+
echo "### E2E + P2P + Unit"
97+
echo
98+
echo "| Suite | Taxonomy category |"
99+
echo "|---|---|"
100+
echo "| \`smoke\` | Part I §8 Smoke |"
101+
echo "| \`property_tests\` | Part I §9 Property-based |"
102+
echo "| \`lifecycle\` | Part I §7 Lifecycle |"
103+
echo "| \`integration_tests\` | Part I §2 Point-to-Point |"
104+
echo "| \`seam_test\` | Part I §3 End-to-End |"
105+
echo
106+
echo "**Known debt:** \`cargo test --lib\` hangs (>20 min, exit 124) and is"
107+
echo "deliberately NOT run here. The integration suites above complete in ~2s."
108+
echo "This is stated rather than silently excluded."
109+
} >> "$GITHUB_STEP_SUMMARY"

0 commit comments

Comments
 (0)