Files
magistr/scripts/test-run-ci-container.sh
Zuev 7b5053f42a
Some checks failed
Проверка, сборка и развёртывание Magistr / Обязательные проверки (push) Successful in 1m23s
Проверка, сборка и развёртывание Magistr / Собрать backend image (push) Successful in 7m36s
Проверка, сборка и развёртывание Magistr / Собрать frontend image (push) Successful in 31s
Проверка, сборка и развёртывание Magistr / Проверить опубликованные образы (push) Failing after 4m56s
Проверка, сборка и развёртывание Magistr / Развернуть проверенные digests (push) Has been skipped
Исправить передачу исходников в CI-контейнеры
2026-07-29 23:39:35 +03:00

76 lines
2.5 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)
RUN_SCRIPT="$ROOT_DIR/scripts/run-ci-container.sh"
FIXTURE_DIR=$(mktemp -d)
CALL_LOG="$FIXTURE_DIR/docker-calls.log"
FAKE_BIN="$FIXTURE_DIR/bin"
SOURCE_DIR="$FIXTURE_DIR/source"
EXTRA_SOURCE_DIR="$FIXTURE_DIR/extra-source"
trap 'rm -rf "$FIXTURE_DIR"' EXIT
mkdir -p "$FAKE_BIN" "$SOURCE_DIR" "$EXTRA_SOURCE_DIR"
printf 'fixture\n' > "$SOURCE_DIR/pom.xml"
printf 'extra fixture\n' > "$EXTRA_SOURCE_DIR/backend.java"
cat > "$FAKE_BIN/docker" <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
printf '%s\n' "$*" >> "$DOCKER_CALL_LOG"
case "$1" in
create)
printf 'ci-container-id\n'
;;
start)
exit "${DOCKER_START_EXIT_CODE:-0}"
;;
esac
EOF
chmod +x "$FAKE_BIN/docker"
DOCKER_CALL_LOG="$CALL_LOG" PATH="$FAKE_BIN:$PATH" \
bash "$RUN_SCRIPT" "$SOURCE_DIR" 'registry.local/test@sha256:abc' \
--copy "$EXTRA_SOURCE_DIR" /backend \
--env DOCKER_CONFIG=/workspace \
-- sh -c 'exit 0'
grep --fixed-strings \
'create --workdir /workspace --env DOCKER_CONFIG=/workspace registry.local/test@sha256:abc sh -c exit 0' \
"$CALL_LOG" >/dev/null
grep --fixed-strings \
"cp $SOURCE_DIR/. ci-container-id:/workspace" \
"$CALL_LOG" >/dev/null
grep --fixed-strings \
"cp $EXTRA_SOURCE_DIR/. ci-container-id:/backend" \
"$CALL_LOG" >/dev/null
grep --fixed-strings 'start --attach ci-container-id' "$CALL_LOG" >/dev/null
grep --fixed-strings 'rm --force ci-container-id' "$CALL_LOG" >/dev/null
if grep -Eq '(^|[[:space:]])(-v|--volume)([[:space:]]|=)' "$CALL_LOG"; then
printf 'Ошибка теста: helper использовал bind mount\n' >&2
exit 1
fi
: > "$CALL_LOG"
set +e
DOCKER_CALL_LOG="$CALL_LOG" DOCKER_START_EXIT_CODE=17 PATH="$FAKE_BIN:$PATH" \
bash "$RUN_SCRIPT" "$SOURCE_DIR" 'registry.local/test@sha256:abc' \
-- sh -c 'exit 17' >/dev/null 2>&1
status=$?
set -e
if (( status != 17 )); then
printf 'Ошибка теста: код контейнера 17 превратился в %d\n' "$status" >&2
exit 1
fi
grep --fixed-strings 'rm --force ci-container-id' "$CALL_LOG" >/dev/null
if PATH="$FAKE_BIN:$PATH" bash "$RUN_SCRIPT" "$FIXTURE_DIR/missing" \
'registry.local/test@sha256:abc' -- true >/dev/null 2>&1; then
printf 'Ошибка теста: отсутствующий каталог исходников не был отклонён\n' >&2
exit 1
fi
printf 'Проверка запуска CI-контейнеров без bind mount завершена успешно\n'