d4f93a7b13
- HerdrClient.java, HerdrCodec.java, HerdrContractTest.java: the herdr port to
protocol 19 (CB-521) left the client javadoc and the contract test's own
assertion still saying protocol 14 / herdr 0.7.0. Updated to 19 / 0.8.0 and
renamed pingReturnsProtocol14 -> pingReturnsProtocol19. Verified the
assertion is real by temporarily changing the expected value to 20 (fails),
then restoring 19 (passes).
- AgentControlContractTest.java: tabCreateInjectsEnvIntoTheSeedShell was
failing, not skipping, on a host with a live herdr socket. Diagnosed with a
temporary instrumented run (not committed) that polled the pane every
200ms before and after sending input: the seed shell reliably takes ~2.5s
to reach its prompt (measured 3x), while the test's fixed 1000ms sleep
raced that startup. Input typed too early was swallowed by the shell's own
startup, leaving the typed line followed by the "Restored session" banner
and no command output — indistinguishable at a glance from the env map
never reaching the shell. Once the shell was actually ready, the injected
env value showed up in ~200ms, ruling out an env-seam defect. Replaced both
fixed sleeps with bounded polling on the actual conditions (pane text
settling, then the expected output appearing). Ran the fixed test 3x
standalone, all green.
- .gitea/workflows/ci.yml: the "Contract tests" step ran exactly one class by
name (-Dtest=AmqpReplyInboxContractTest), silently excluding every other
@Tag("contract") test from CI including the herdr ones above -- which is
how the stale protocol 14 assertion went unnoticed. Changed to
-Dgroups=contract, which selects the whole tagged group and picks up
future contract tests automatically.
112 lines
4.9 KiB
YAML
112 lines
4.9 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
pull_request:
|
|
branches: [main]
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
# The wiki submodule is docs only and is not needed to build — leave it unfetched so CI
|
|
# does not depend on the wiki repo being reachable.
|
|
- uses: actions/checkout@v4
|
|
|
|
# The runner image ships an older default-jdk; fleetd sets maven.compiler.release=25, so
|
|
# provision the JDK explicitly rather than apt-installing whatever "default" means today.
|
|
- name: Set up JDK 25
|
|
uses: actions/setup-java@v4
|
|
with:
|
|
distribution: temurin
|
|
java-version: '25'
|
|
cache: maven
|
|
|
|
# setup-java provisions the JDK only — it does NOT install Maven, and the runner image has
|
|
# no mvn on PATH (a bare `mvn` exits 127). Install it separately. apt pulls a default JRE as
|
|
# a dependency; JAVA_HOME from setup-java still wins, which the version check below proves.
|
|
- name: Install Maven
|
|
run: |
|
|
apt-get update && apt-get install -y --no-install-recommends maven
|
|
mvn -version
|
|
|
|
- name: Build and test
|
|
working-directory: fleetd
|
|
# This IS the mock-socket surface CB-503 asks for: the pom's `default-excludes` profile
|
|
# already sets excludedGroups=contract, so the @Tag("contract") tests — which need a live
|
|
# herdr socket and a RabbitMQ container — are excluded without any flag here. Everything
|
|
# that runs does so against the fake UDS herdr and fake ccs/claude stubs.
|
|
run: mvn -B clean install
|
|
|
|
# Deliberately NOT actions/upload-artifact: this Gitea instance presents as GHES, and
|
|
# @actions/artifact v2+ (i.e. upload-artifact@v4) refuses to run there —
|
|
# "GHESNotSupportedError ... not currently supported on GHES", which red-Xes an otherwise
|
|
# green build. Since the artifact could not be retrieved anyway, dump the failing tests into
|
|
# the log instead, where they are actually readable.
|
|
- name: Failing test output
|
|
if: failure()
|
|
working-directory: fleetd
|
|
run: |
|
|
for f in target/surefire-reports/*.txt; do
|
|
[ -f "$f" ] || continue
|
|
grep -qE "Failures: [1-9]|Errors: [1-9]" "$f" && { echo "===== $f ====="; cat "$f"; }
|
|
done
|
|
exit 0
|
|
|
|
# CB-521 — actually run the AMQP contract test in CI, against a REAL broker. The broker is a
|
|
# RabbitMQ SERVICE CONTAINER, not Testcontainers-with-Docker: the runner image has no Docker, so
|
|
# AmqpReplyInboxContractTest reads AMQP_URI (set below to the service's network alias) and binds
|
|
# straight to it — no Docker, no skipped tests. This separation (build job hermetic and
|
|
# Docker-free; contract job broker-provided) is deliberate — see the default-excludes/contract
|
|
# profiles in fleetd/pom.xml. `setup-java` provides the JDK only; Maven is installed separately,
|
|
# exactly as in the build job above.
|
|
contract:
|
|
runs-on: ubuntu-latest
|
|
services:
|
|
rabbitmq:
|
|
image: rabbitmq:3.13 # same AMQP 0-9-1 engine the local Testcontainers fixture uses
|
|
env:
|
|
RABBITMQ_DEFAULT_USER: guest
|
|
RABBITMQ_DEFAULT_PASS: guest
|
|
env:
|
|
# Service containers are reachable from the job by their network alias on their internal port.
|
|
AMQP_URI: amqp://guest:guest@rabbitmq:5672
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Set up JDK 25
|
|
uses: actions/setup-java@v4
|
|
with:
|
|
distribution: temurin
|
|
java-version: '25'
|
|
cache: maven
|
|
|
|
- name: Install Maven
|
|
run: |
|
|
apt-get update && apt-get install -y --no-install-recommends maven
|
|
mvn -version
|
|
|
|
# The `contract` profile clears the default-excludes group, so `-Dgroups=contract` runs every
|
|
# @Tag("contract") test and nothing from the unit suite the `build` job already covered — a
|
|
# tag selects the whole group, so a test added to it later runs here automatically. A prior
|
|
# version of this step pinned `-Dtest=AmqpReplyInboxContractTest` by class name instead: that
|
|
# silently excluded every other contract test (including the herdr ones) from CI, and nobody
|
|
# noticed until the herdr protocol drifted out from under a test that never ran here
|
|
# (fleetd #449). If this runner has no herdr socket, the herdr-backed tests in the group
|
|
# skip on their own `assumeTrue` and only the broker-backed ones actually run — check the
|
|
# step output rather than assuming which.
|
|
- name: Contract tests
|
|
working-directory: fleetd
|
|
run: mvn -B -Pcontract test -Dgroups=contract
|
|
|
|
- name: Failing test output
|
|
if: failure()
|
|
working-directory: fleetd
|
|
run: |
|
|
for f in target/surefire-reports/*.txt; do
|
|
[ -f "$f" ] || continue
|
|
grep -qE "Failures: [1-9]|Errors: [1-9]" "$f" && { echo "===== $f ====="; cat "$f"; }
|
|
done
|
|
exit 0
|