fix(verify): dynamic label-based verification for any PROJECT_NAME

This commit is contained in:
a2nr 2026-08-10 11:23:13 +07:00
parent 8976acd154
commit 34ab1cde73
1 changed files with 63 additions and 22 deletions

View File

@ -247,30 +247,71 @@ verify)
echo "🔍 === Memverifikasi Image Container ==="
echo ""
echo "📋 Image yang tersedia:"
podman images | grep -E "lms-c-(backend|frontend|velxio)" || echo " ⚠️ Tidak ada image lms-c yang ditemukan"
echo ""
# 1) Service -> image tag dari compose config. Resolusi via podman-compose
# sehingga TIDAK tergantung nama direktori parent / PROJECT_NAME.
declare -A SERVICE_IMAGE_TAG
COMPOSE_CONFIG=$(run_compose_out config 2>/dev/null)
while IFS= read -r svc; do
[ -z "$svc" ] && continue
SERVICE_IMAGE_TAG["$svc"]=$(printf '%s\n' "$COMPOSE_CONFIG" | awk -v s="$svc" '
$0 ~ "^ " s ":" { in_svc=1; next }
in_svc && /^ [A-Za-z0-9_.-]+:$/ && $0 !~ "^ " s ":$" { in_svc=0 }
in_svc && /^ image:/ { sub(/^ image: */, ""); gsub(/[" ]/, "", $0); print; exit }
')
done < <(run_compose_out config --services 2>/dev/null)
echo "📋 Container yang sedang berjalan:"
podman ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}" | grep -E "lms-dev" || echo " ⚠️ Tidak ada container yang berjalan"
echo ""
echo "🔍 Memeriksa CMD tiap container..."
for container in "lms-dev_elemes_1" "lms-dev_elemes-frontend_1" "lms-dev_velxio_1" "lms-dev_postgres_1"; do
if podman ps --format "{{.Names}}" | grep -q "$container"; then
CMD=$(podman inspect "$container" --format '{{.Config.Cmd}}' 2>/dev/null)
ENTRYPOINT=$(podman inspect "$container" --format '{{.Config.Entrypoint}}' 2>/dev/null)
IMAGE=$(podman inspect "$container" --format '{{.Image}}' 2>/dev/null)
echo "$container"
echo " Image: $IMAGE"
echo " Entrypoint: $ENTRYPOINT"
echo " Cmd: $CMD"
echo ""
else
echo " ⚠️ $container tidak ditemukan"
echo ""
fi
echo "📋 Service yang didefinisikan di podman-compose.yml:"
for svc in "${!SERVICE_IMAGE_TAG[@]}"; do
printf " %s → %s\n" "$svc" "${SERVICE_IMAGE_TAG[$svc]:-<tanpa image:>}"
done
echo ""
# 2) Container milik project ini (ditemukan via label io.podman.compose.project)
# + deteksi image STALE: ImageID container != ImageID tag saat ini.
echo "📋 Container project '$PROJECT_NAME':"
CONTAINERS=$(podman ps -a \
--filter "label=io.podman.compose.project=$PROJECT_NAME" \
--format '{{.Names}}|{{.Image}}|{{.ImageID}}|{{.Status}}|{{.Labels}}' 2>/dev/null)
if [ -z "$CONTAINERS" ]; then
echo " ⚠️ Tidak ada container untuk project '$PROJECT_NAME' (jalankan ./elemes.sh run dulu)"
else
while IFS='|' read -r cname cimage cid cstatus clabels; do
svc=$(printf '%s' "$clabels" | sed -n 's/.*com.docker.compose.service[:=]\([^ ,}]*\).*/\1/p')
tag="${SERVICE_IMAGE_TAG[$svc]:-unknown}"
stale=""
if [ -n "$tag" ]; then
tag_iid=$(podman images "$tag" --noheading --format '{{.ID}}' 2>/dev/null | head -1)
if [ -n "$tag_iid" ] && [ -n "$cid" ] && [ "${cid:0:12}" != "${tag_iid:0:12}" ]; then
stale=" ⚠️ STALE (container:$cid != image:$tag_iid)"
fi
fi
printf " • %s\n" "$cname"
printf " image: %s (status: %s)%s\n" "$cimage" "$cstatus" "$stale"
done <<< "$CONTAINERS"
fi
echo ""
# 3) CMD/Entrypoint tiap service (ditemukan via label project + service)
echo "🔍 Memeriksa CMD/Entrypoint tiap service..."
while IFS= read -r svc; do
[ -z "$svc" ] && continue
cid=$(podman ps -a \
--filter "label=io.podman.compose.project=$PROJECT_NAME" \
--filter "label=com.docker.compose.service=$svc" \
--format '{{.ID}}' 2>/dev/null | head -1)
if [ -n "$cid" ]; then
CMD=$(podman inspect "$cid" --format '{{.Config.Cmd}}' 2>/dev/null)
ENTRYPOINT=$(podman inspect "$cid" --format '{{.Config.Entrypoint}}' 2>/dev/null)
IMAGE=$(podman inspect "$cid" --format '{{.Image}}' 2>/dev/null)
echo "$svc ($cid)"
echo " Image: $IMAGE"
echo " Entrypoint: $ENTRYPOINT"
echo " Cmd: $CMD"
else
echo " ⚠️ $svc tidak ditemukan (container belum dibuat)"
fi
echo ""
done < <(run_compose_out config --services 2>/dev/null)
;;
dbupgrade)
echo "🗄️ Menjalankan migrasi database (alembic upgrade head)..."