test-docker-config.sh 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #!/bin/sh
  2. set -eu
  3. ROOT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
  4. cd "$ROOT_DIR"
  5. assert_file() {
  6. if [ ! -f "$1" ]; then
  7. echo "缺少文件: $1" >&2
  8. exit 1
  9. fi
  10. }
  11. assert_contains() {
  12. file=$1
  13. expected=$2
  14. if ! grep -Fq -- "$expected" "$file"; then
  15. echo "$file 缺少配置: $expected" >&2
  16. exit 1
  17. fi
  18. }
  19. assert_file Dockerfile
  20. assert_file compose.yaml
  21. assert_file docker/entrypoint.sh
  22. assert_file .dockerignore
  23. assert_contains Dockerfile "FROM node:20"
  24. assert_contains Dockerfile "FROM maven:3.9"
  25. assert_contains Dockerfile "COPY --from=frontend-build /build/frontend/dist"
  26. assert_contains Dockerfile 'ENTRYPOINT ["/app/entrypoint.sh"]'
  27. assert_contains compose.yaml "./data:/app/data"
  28. assert_contains compose.yaml "SPRING_DATASOURCE_URL: jdbc:sqlite:/app/data/okr-performance.db"
  29. assert_contains compose.yaml "APP_BACKUP_DIR: /app/data/backups"
  30. assert_contains docker/entrypoint.sh 'mkdir -p "$DATA_DIR" "$BACKUP_DIR"'
  31. assert_contains docker/entrypoint.sh '数据库目录不可写'
  32. assert_contains .dockerignore "data/"
  33. assert_contains .dockerignore "**/target/"
  34. assert_contains .dockerignore "**/node_modules/"
  35. echo "Docker 配置契约检查通过"