#!/usr/bin/env bash # adc 이미지 기능 검증 — 호스트에서 bash 로 실행된다(build-hardened-image.sh 가 # `env TAG=... PLATFORM=... SOURCE_COMMIT=... bash verify.sh` 형태로 호출한다). # # 최종 베이스가 bci-base 라 bash/coreutils 가 있다 — 게스트 셸을 그대로 쓴다. adc 는 # APISIX/API7 백엔드에 실제로 접속해야 하는 명령(dump/diff/sync)이 대부분이라 그건 이 # 스모크 범위 밖이다(백엔드 연동은 dev 클러스터 배포 검증이 담당, # .claude/deploy-test-procedure.md). 여기서는 백엔드 없이 확인 가능한 것만 본다: # 바이너리 실행 가능 여부, 버전 문자열, --help 커맨드 목록, non-root 실행. # # 마지막 줄에 VERIFY-OK 를 출력하면 통과다. build-hardened-image.sh 가 그것으로 판정한다. set -e TAG="${TAG:?TAG 환경변수가 필요하다}" PLATFORM="${PLATFORM:-linux/amd64}" echo "== 실행 사용자 (nonroot) ==" USER_CFG="$(docker inspect --format '{{.Config.User}}' "$TAG")" [ "$USER_CFG" = "adc" ] || { echo "FAIL: 이미지 Config.User 가 adc 가 아니다 (실제: $USER_CFG)"; exit 1; } echo " Config.User=$USER_CFG" docker run --rm -i --platform "$PLATFORM" --entrypoint sh "$TAG" <<'GUEST' set -e echo "== 버전 ==" OUT="$(/usr/bin/node /adc/main.cjs --version)" echo " $OUT" case "$OUT" in *0.29.0*) ;; *) echo "FAIL: 버전 출력에 0.29.0 이 없다"; exit 1 ;; esac echo "== --help 스모크 (백엔드 없이 도는 유일한 확인 범위) ==" OUT="$(/usr/bin/node /adc/main.cjs --help)" case "$OUT" in *"dump"*"diff"*"sync"*) ;; *) echo "FAIL: --help 출력에 예상 커맨드(dump/diff/sync)가 없다"; exit 1 ;; esac echo " dump/diff/sync 커맨드 확인됨" echo "VERIFY-OK" GUEST