Skip to content

Make the clean-slate Compose stack and CI runtime gates executable #78

Description

@ULookup

Target Version

3.0-dev。当前开发线为唯一承载 3.0 正式版准备工作的版本线;证据复核于提交 a75fc8721b99e5c0b4421d0c58b5618bbe71ff31

Evidence

  • .github/workflows/ci.yml:115-124,148-157,181-190,247-256 的全栈 jobs 都调用 ./scripts/wait_for_services.sh,但仓库不存在该文件。
  • docker-compose.yml:21,129 依赖 MYSQL_ROOT_PASSWORDRABBITMQ_DEFAULT_PASS,workflow 没有注入这些变量,仓库也没有可供 CI 使用的无敏感值环境契约。
  • docker-compose.yml 启动 media_server,但不包含 MinIO;conf/media.json 的 endpoint 是 http://127.0.0.1:9000,在 Media 容器内会指向自身。
  • docker/docker-compose.yml 的 MinIO 位于独立默认网络,并把宿主机 9000/9001 暴露给 MinIO,与 Gateway/Push 冲突。
  • 根 Compose 没有声明 MYSQL_DATABASE=chatnowsql/ 只有媒体三表参考 DDL,缺少完整数据库 cold-start 初始化入口。
  • entrypoint.sh 只轮询 TCP 端口,不验证数据库、Redis Cluster、RabbitMQ、ES、MinIO 或业务服务 readiness。
  • 当前 Go static checks 与各标签测试可编译,但本提交没有从空数据卷启动完整栈并执行 BVT/Functional/Reliability 的可重复证据。

Problem or Goal

提供一个从空机器和空数据卷可重复启动的完整开发/CI Compose profile,使 CI 能等待真实业务 readiness,并实际进入 BVT、Functional、Reliability 与 Performance 测试,而不是在缺失脚本、凭据、数据库或对象存储阶段中断。

Scope

  • 统一根应用栈与 MinIO 的网络、endpoint、依赖和无冲突端口。
  • 提供完整、版本化、幂等的 MySQL cold-start schema 初始化入口。
  • 定义无敏感值的本地/CI secret 注入契约,并与 Remove tracked runtime secrets and standardize secret injection #62 保持一致。
  • 实现并测试 CI 引用的 readiness helper;检查 Redis Cluster、MySQL schema、RabbitMQ、ES、MinIO、etcd 注册和 Gateway/Push 业务可服务状态。
  • 修复 workflow,使每个全栈 job 从空 volume 启动、运行目标测试并可靠清理。
  • 增加静态 contract,禁止 workflow 引用不存在的脚本、缺失 Compose service 或未声明的必需变量。

Non-goals

Acceptance Criteria

  • 在干净 Ubuntu 22.04 runner、空数据卷和仅占位 secret 的条件下,一个仓库命令可启动完整应用栈。
  • 根 profile 包含可用 MinIO,Media 容器使用可解析的容器 endpoint,Gateway/Push/MinIO 无宿主端口冲突。
  • chatnow 数据库及全部当前 ODB schema 通过版本化、幂等迁移创建;重复启动不会破坏已有数据。
  • readiness helper 存在、可执行、使用有界 deadline,并验证业务 readiness 而非仅 TCP connect。
  • Gateway 提供无需认证的 GET /health readiness endpoint,BVT-001 返回 200;依赖未就绪时不得报告可服务。
  • CI 的 BVT、Functional、Reliability 与 Performance jobs 均能到达各自 make test-* 命令。
  • 缺少必需 secret、schema、bucket、Redis Cluster 状态或服务注册时,启动/门禁快速失败并输出不含敏感数据的诊断。
  • docker compose down -v 后再次 cold-start 仍可重复通过。
  • contracts 测试阻止不存在的 workflow helper、缺失 service/dependency、端口冲突和 loopback 容器 endpoint 回归。
  • README 与 canonical operations 文档只描述已通过上述门禁的启动命令。

Test-first Plan

先运行现有 BVT cold-start 路径:

docker compose down -v && docker compose up -d --build && make -C tests test-bvt

预期 RED 是当前栈无法形成完整 readiness,且 BVT-001 或 Media BVT 在缺失 Gateway health/MinIO 时失败。先增加 tests/pkg/contracts 的 workflow/Compose contract 并观察缺失 helper、MinIO、DB bootstrap 与端口冲突的 RED,再实现最小 GREEN。随后依次运行 BVT、Functional、Scenario、Reliability 和 CI workflow。

Risk and Security

该改动触及数据库初始化、对象存储、网络与 secret。测试必须拒绝非本地/非 CI endpoint,不得删除共享数据;迁移必须前滚幂等并有回滚/恢复说明。日志、workflow output 和 artifact 不得包含口令、JWT key、SMTP 或对象存储凭据。所有容器初始化使用最小权限账户,并与 #62 的轮换计划协调。

Architecture Impact

Yes。应用 Compose 与 MinIO 网络拓扑、数据库初始化所有权、readiness 边界和 CI 运行拓扑都会变化。

Core-flow Impact

No。Identity、消息、ACK、媒体元数据和对象上传的业务协议及状态所有权不变;本 Issue 让现有流程在 cold-start 环境可执行并可验证。

Required Skill Updates

  • .agents/skills/chatnow-orienting/references/technology-stack.md
  • .agents/skills/chatnow-orienting/references/repository-map.md
  • .agents/skills/chatnow-testing/references/framework.md
  • 受影响的 canonical deployment/operations 文档

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions