Исправить передачу исходников в CI-контейнеры
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
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
This commit is contained in:
75
scripts/test-run-ci-container.sh
Executable file
75
scripts/test-run-ci-container.sh
Executable file
@@ -0,0 +1,75 @@
|
||||
#!/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'
|
||||
Reference in New Issue
Block a user