Files
labtimesheet/docs/tests/integration/production-delivery.md
T
sechmachine 7a6139017f
Verify / verify (push) Failing after 12m3s
Container / amd64 (push) Failing after 19m25s
Container / arm64 (push) Skipped
Container / manifest (push) Skipped
docs(test): record production delivery evidence
2026-08-15 22:46:19 +07:00

5.0 KiB
Raw Blame History

Test Evidence: Production delivery baseline

  • Test type: Integration
  • Requirement IDs: OPS-005OPS-013, OPS-017, TST-001, TST-005, TST-009
  • Scenario IDs: AC-OPS-002, AC-OPS-003, AC-OPS-004
  • Test class/method: com.lab.labtimesheet.feature.account.service.BootstrapIntegrationTest.rootGuidesFreshInstallToBootstrapWhileOtherRoutesRemainHidden, src/test/js/delivery-contract.test.mjs
  • Implementation commit: cea4378f5699de4919c283b12371941d6742ca4b

Protected behavior

The production image runs as a non-root Java 25 process, exposes health probes, and accepts the same environment-backed datasource configuration with either the optional PostgreSQL 18.4 Compose sidecar or an external database. Gitea verifies every pull request and push, publishes immutable SHA plus main image tags only from main, and skips native ARM64 work unless the matching runner is explicitly available.

Test method

The existing PostgreSQL-backed bootstrap integration test requests the liveness and readiness endpoints before initialization. A dependency-free Node contract checks the deployment files for the required runtime, Compose, trigger, permission, publication, and optional-runner boundaries. Docker and Compose validation then exercise the real build and both database topologies.

Hand-derived expected result

An absent ARM runner must skip the ARM job without blocking AMD64 publication. Enabling the runner creates an ARM64 architecture tag and a combined manifest, while the canonical SHA and main tags remain valid AMD64 images when ARM is disabled. Compose must preserve PostgreSQL data in a named volume and must not require the bundled database when an external JDBC URL is supplied.

RED

Command

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

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 '-Dtest=BootstrapIntegrationTest#rootGuidesFreshInstallToBootstrapWhileOtherRoutesRemainHidden' test

Observed result

The delivery contract ran 3 tests and failed all 3 because Dockerfile,
.gitea/workflows/verify.yml, and .gitea/workflows/container.yml did not exist.

The PostgreSQL-backed bootstrap test ran 1 test and failed because
/actuator/health/liveness returned 404 instead of 200.

GREEN

Command

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

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 '-Dtest=BootstrapIntegrationTest#rootGuidesFreshInstallToBootstrapWhileOtherRoutesRemainHidden' test

Observed result

Delivery contract: 3 tests, 3 passed.
Bootstrap health regression: 1 test, 1 passed against PostgreSQL 18.4.

Affected suite

Command and result

npm ci
npm run test:ui
npm run build
git diff --exit-code -- src/main/resources/static/assets/app.css src/main/resources/static/assets/icons.svg

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 test

env JAVA_HOME=/opt/homebrew/opt/openjdk@25 \
  PATH=/opt/homebrew/opt/openjdk@25/bin:/opt/homebrew/bin:/usr/bin:/bin \
  ./mvnw -DskipTests -Ddoclint=all javadoc:javadoc

docker build --check .
docker build --platform linux/amd64 --build-arg VCS_REF=validation -t labtimesheet:ci-amd64 .
docker build --platform linux/arm64 --build-arg VCS_REF=validation -t labtimesheet:ci-arm64 .
docker compose --env-file .env.compose.example config
docker compose --env-file .env.compose.example --profile bundled-db config

Frontend tests: 4 passed; generated assets remained byte-clean.
Maven: 217 tests across 49 suites, 0 failures, 0 errors, 0 skipped.
Javadoc: BUILD SUCCESS; 83 pre-existing repository-wide warnings.
Dockerfile check: passed without warnings. Both Linux architecture images built
and reported the requested platform, UID/GID 10001, and readiness HEALTHCHECK.
Both Compose configurations parsed successfully.

Real smoke tests used the AMD64 image with disposable resources. Bundled mode
started PostgreSQL 18.4 with the named volume and returned UP from liveness and
readiness on 127.0.0.1:28080. External mode used a separately started
PostgreSQL 18.4 service and returned UP from readiness on 127.0.0.1:28081.
All disposable containers, networks, and the bundled test volume were removed.

git diff --check: passed.

External-test boundaries

Local validation cannot prove that the private Gitea registry credentials are configured or that an ubuntu-latest-arm runner is online. Repository variable ARM64_RUNNER_AVAILABLE is the scheduler-safe availability signal because an unavailable runner label cannot be discovered from inside a job that has not yet been scheduled.