Files
labtimesheet/docs/tests/integration/ci-testcontainers-actions.md
T
2026-08-15 23:21:23 +07:00

3.5 KiB

Test Evidence: Gitea Testcontainers and container workflow gates

  • Test type: Integration
  • Requirement IDs: OPS-011, OPS-012, TST-001, TST-005, TST-009
  • Scenario IDs: AC-OPS-002, AC-OPS-004
  • Test class/method: src/test/js/delivery-contract.test.mjs
  • Implementation commit: pending

Protected behavior

Gitea verification must reach Docker Desktop-published Testcontainers ports from inside its job container. Container builds may start only after an equivalent verification job succeeds, and the container workflow may run only by manual dispatch or by a push to main. Every third-party workflow action is pinned to the reviewed latest release commit rather than a moving tag.

Test method

The dependency-free delivery contract reads both workflow files and checks the Testcontainers host override, event filters, verify-to-build dependencies, and the complete allowlist of immutable action SHAs. The remote failure log supplies the production-shaped network reproduction because it ran inside the real Gitea Docker runner.

Hand-derived expected result

The runner already resolves host.docker.internal to its Docker host. Therefore Testcontainers must use that host instead of the job-network gateway 172.17.0.1. Pull requests and non-main branch pushes must never schedule the container workflow. Manual dispatches build but do not publish, while main pushes publish only after verification succeeds.

RED

Command

env PATH=/opt/homebrew/opt/node@24/bin:/usr/bin:/bin \
  node --test src/test/js/delivery-contract.test.mjs

tea actions runs logs 174 --repo sechmachine/labtimesheet \
  --login sechmachine-git

Observed result

Delivery contract: 4 tests, 1 passed, 3 failed. The workflows lacked the
Testcontainers host override, container event/dependency gates, and current
action pins.

Gitea run 174 found Docker at unix:///var/run/docker.sock but selected host
172.17.0.1. Ryuk started, then repeated connections to 172.17.0.1:57499 were
refused. Maven ended with 217 tests, 64 errors.

GREEN

Command

env PATH=/opt/homebrew/opt/node@24/bin:/usr/bin:/bin \
  node --test src/test/js/delivery-contract.test.mjs

Observed result

Delivery contract: 4 tests, 4 passed.

Affected suite

Command and result

env PATH=/opt/homebrew/opt/node@24/bin:/usr/bin:/bin npm run test:ui
Result: 5 tests passed.

env JAVA_HOME=/opt/homebrew/opt/openjdk@25 \
  PATH=/opt/homebrew/opt/openjdk@25/bin:/opt/homebrew/bin:/usr/bin:/bin \
  DOCKER_HOST=unix:///Users/sechmachine/.orbstack/run/docker.sock \
  ./mvnw -B test
Result: 205 tests passed across 44 suites; 0 failures, errors, or skips.

npm ci && npm run build
Result: Tailwind and Lucide assets built successfully; tracked assets remained unchanged.

./mvnw -B -DskipTests -Ddoclint=all javadoc:javadoc
Result: BUILD SUCCESS with 83 existing missing-comment warnings and no production Java change.

Ruby YAML parsing and git diff --check
Result: both workflow files parsed and the diff check passed.

Pending branch and main Gitea Actions validation after commit and push.

External-test boundaries

The local contract cannot prove action-runner compatibility, registry credentials, or availability of the optional ARM runner. Those are checked by the actual Gitea branch verification and main container runs. Release freshness was checked against the official upstream release APIs on 2026-08-15; the immutable pins remain stable, but a later release requires an intentional reviewed update.