2e138a199b
Two changes ship together here.
1. One shared herdr workspace. The lead and every worker now live in one
workspace called "fleet", so the operator sees one "session" with many
windows, not two. Before, the lead sat in a "leads" workspace and workers
in "bridged-workers", which read as two sessions. The lead is still told
apart from workers by its exact tab label ("lead: <name>"), so putting them
in one space is safe. LeadTabScanner keeps the exclude-by-label mechanism
for split layouts; Fleetd now passes an empty exclude set.
2. Rename the daemon from "bridged" to "fleetd" (the binary, config, scripts,
launchd/systemd units, module dir, and MCP mount).
- Module dir bridged/ -> fleetd/; jar finalName -> fleetd.jar.
- Log line, comments, docs, and CLAUDE.md updated to say fleetd.
- Scripts renamed: redeploy-bridged.sh -> redeploy-fleetd.sh,
bridged-launchd-wrapper.sh -> fleetd-launchd-wrapper.sh.
- Deploy units renamed: dev.ltms.bridged.plist -> dev.ltms.fleetd.plist,
bridged.service -> fleetd.service; launchd Label -> dev.ltms.fleetd.
- Config default bridged.yaml -> fleetd.yaml; the legacy bridged.yaml is
still read as a fallback, and still gitignored.
- MCP: drop the deprecated bridge_* tool twins; only fleet_* remain. The
server name is "fleet". The mount name in the local .mcp.json becomes
"fleet" (gitignored, not in this commit).
- Env var defaults BRIDGED_API_TOKEN -> FLEETD_API_TOKEN, fixture
BRIDGED_WORKER_TOKEN -> FLEETD_WORKER_TOKEN.
Kept on purpose: the BRIDGED_MEMBER marker. Renaming it is a coupled change to
the credential-scrub security control (an operator secrets.sh may guard on it),
so it stays until that migration is done on its own.
Metrics were already fleet_* (CB-632); MetricNamesTest still guards that no
name says bridged_.
The canonical CLAUDE.md block and the wiki template stay byte-identical
(wiki working tree edited, committed to the wiki repo separately).
949 tests pass (mvn clean install). 4 fewer than before = the 4 removed
bridge_* alias tests.
106 lines
4.4 KiB
YAML
106 lines
4.4 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 the @Tag("contract") AMQP test
|
|
# runs against the RabbitMQ service container (AMQP_URI). Pinned to the one contract test to
|
|
# avoid re-running the unit suite already covered by the `build` job.
|
|
- name: Contract tests
|
|
working-directory: fleetd
|
|
run: mvn -B -Pcontract test -Dtest=AmqpReplyInboxContractTest
|
|
|
|
- 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
|