diff --git a/.gitignore b/.gitignore index edf6404..42604bb 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,6 @@ target db.sqlite .DS_Store + +.idea +crash.log \ No newline at end of file diff --git a/migrations/25032026_orbital-failure/down.sql b/migrations/25032026_orbital-failure/down.sql new file mode 100644 index 0000000..3cda4f8 --- /dev/null +++ b/migrations/25032026_orbital-failure/down.sql @@ -0,0 +1 @@ +DELETE FROM tasks WHERE work_name = 'orbital-failure'; diff --git a/migrations/25032026_orbital-failure/up.sql b/migrations/25032026_orbital-failure/up.sql new file mode 100644 index 0000000..b019f64 --- /dev/null +++ b/migrations/25032026_orbital-failure/up.sql @@ -0,0 +1,13 @@ +INSERT INTO tasks (id, + name, + work_name, + description, + extended_description) +VALUES (7, + 'Орбитальный сбой', + 'orbital-failure', + 'Во время большого переезда на новую структуру проекта были случайно повреждены некоторые физические константы. Научитесь заглядывать в прошлые коммиты, не ломая текущую ветку.', + 'Вы подключились к небольшому проекту для расчёта орбитальных параметров спутника. Проект раньше работал корректно, но после серии рефакторингов программа начала выдавать физически невозможные результаты. По словам разработчиков, во время большого перехода на новую структуру проекта были случайно повреждены некоторые физические константы. Ваша задача - восстановить корректную работу программы, используя историю Git, и сделать коммит с исправленными значениями. Константы нужно вернуть в точности такими, какими они были до поломки: округлённые или взятые из справочника значения не подойдут. Нельзя просто откатить проект на старый коммит: текущая структура проекта уже изменилась, появился CMake, файлы были перемещены, а старые версии исходников больше не подходят напрямую. +Чтобы собрать проект: +cd orbital-failure +./maker.sh'); diff --git a/tasks/orbital-failure/justfile b/tasks/orbital-failure/justfile new file mode 100644 index 0000000..0b8c0cb --- /dev/null +++ b/tasks/orbital-failure/justfile @@ -0,0 +1,3 @@ +default: + -git clone https://github.com/git-trainer-tasks/orbital-failure.git tasks/orbital-failure/src/repo + docker build -f tasks/orbital-failure/src/Dockerfile -t git-trainer:orbital-failure . \ No newline at end of file diff --git a/tasks/orbital-failure/src/Dockerfile b/tasks/orbital-failure/src/Dockerfile new file mode 100644 index 0000000..3c91d08 --- /dev/null +++ b/tasks/orbital-failure/src/Dockerfile @@ -0,0 +1,15 @@ +FROM git-trainer:base-task-image + +ARG USERNAME=student +ARG GIT_USERNAME=student +ARG GIT_EMAIL=student@alivetech.com +ENV DESCRIPTION="Вы подключились к небольшому проекту для расчёта орбитальных параметров спутника. Проект раньше работал корректно, но после серии рефакторингов программа начала выдавать физически невозможные результаты. По словам разработчиков, во время большого перехода на новую структуру проекта были случайно повреждены некоторые физические константы. Ваша задача - восстановить корректную работу программы, используя историю Git, и сделать коммит с исправленными значениями. Константы нужно вернуть в точности такими, какими они были до поломки: округлённые или взятые из справочника значения не подойдут. Нельзя просто откатить проект на старый коммит: текущая структура проекта уже изменилась, появился CMake, файлы были перемещены, а старые версии исходников больше не подходят напрямую.\nЧтобы собрать проект: \ncd orbital-failure\n./maker.sh" +RUN echo -n "$DESCRIPTION" > /etc/git-trainer/description +COPY ./tasks/orbital-failure/src/repo /home/${USERNAME}/orbital-failure + +RUN sudo apt-get update && sudo apt-get install -y cmake build-essential + +WORKDIR /home/${USERNAME}/orbital-failure +RUN sudo chown -R ${USERNAME}:${USERNAME} /home/${USERNAME}/orbital-failure +USER $USERNAME +RUN git config --global --add safe.directory /home/${USERNAME}/orbital-failure && git switch main diff --git a/tests/orbital-failure/test1.sh b/tests/orbital-failure/test1.sh new file mode 100755 index 0000000..c8fbaaa --- /dev/null +++ b/tests/orbital-failure/test1.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +REPO_DIR="$HOME/orbital-failure" + +if [ -d "$REPO_DIR" ]; then + echo "1. Директория orbital-failure существует." + exit 0 +else + echo "1. Убедитесь, что директория orbital-failure существует." + exit 1 +fi + + + + diff --git a/tests/orbital-failure/test2.sh b/tests/orbital-failure/test2.sh new file mode 100755 index 0000000..3adb28f --- /dev/null +++ b/tests/orbital-failure/test2.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +REPO_DIR="$HOME/orbital-failure" + +if [ -d "$REPO_DIR/.git" ] && git -C "$REPO_DIR" status &>/dev/null; then + echo "2. Git-репозиторий существует." + exit 0 +else + echo "2. Убедитесь, что в директории orbital-failure существует Git-репозиторий." + exit 1 +fi diff --git a/tests/orbital-failure/test3.sh b/tests/orbital-failure/test3.sh new file mode 100755 index 0000000..c6c0c00 --- /dev/null +++ b/tests/orbital-failure/test3.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +REPO_DIR="$HOME/orbital-failure" +TMP_DIR="$(mktemp -d /tmp/orbital-failure.XXXXXX)" +trap 'rm -rf "$TMP_DIR"' EXIT + +if ! cp -R "$REPO_DIR" "$TMP_DIR/repo" 2>/dev/null; then + echo "3. Не удалось подготовить временную копию репозитория." + exit 1 +fi + +cd "$TMP_DIR/repo" || exit 1 +rm -rf build + +if OUT="$(./maker.sh 2>&1)"; then + echo "3. Проект успешно собирается и запускается." + exit 0 +else + echo "3. Проект не собрался или не запустился. Последние строки вывода:" + echo "$OUT" | tail -n 15 + exit 1 +fi diff --git a/tests/orbital-failure/test4.sh b/tests/orbital-failure/test4.sh new file mode 100755 index 0000000..9e9a07b --- /dev/null +++ b/tests/orbital-failure/test4.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +REPO_DIR="$HOME/orbital-failure" +TMP_DIR="$(mktemp -d /tmp/orbital-failure.XXXXXX)" +trap 'rm -rf "$TMP_DIR"' EXIT + +if ! cp -R "$REPO_DIR" "$TMP_DIR/repo" 2>/dev/null; then + echo "4. Не удалось подготовить временную копию репозитория." + exit 1 +fi + +cd "$TMP_DIR/repo" || exit 1 + +if ! grep -q "6\.6743015e-11" include/constants.h; then + echo "4. Убедитесь, что повреждённые константы восстановлены корректно." + exit 1 +fi + +if ! grep -q "5\.9722e24" include/constants.h; then + echo "4. Убедитесь, что повреждённые константы восстановлены корректно." + exit 1 +fi + +echo "4. Повреждённые константы восстановлены." +exit 0 \ No newline at end of file diff --git a/tests/orbital-failure/test5.sh b/tests/orbital-failure/test5.sh new file mode 100755 index 0000000..4f3be5f --- /dev/null +++ b/tests/orbital-failure/test5.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +REPO_DIR="$HOME/orbital-failure" +TMP_DIR="$(mktemp -d /tmp/orbital-failure.XXXXXX)" +trap 'rm -rf "$TMP_DIR"' EXIT + +if ! cp -R "$REPO_DIR" "$TMP_DIR/repo" 2>/dev/null; then + echo "5. Не удалось подготовить временную копию репозитория." + exit 1 +fi + +cd "$TMP_DIR/repo" || exit 1 +rm -rf build + +OUT="$(./maker.sh 2>/dev/null)" + +EXPECTED="Calculated Orbital Velocity: 7672.62 m/s" + +if echo "$OUT" | grep -q "$EXPECTED"; then + echo "5. Орбитальная скорость вычисляется корректно." + exit 0 +else + echo "5. Орбитальная скорость вычисляется неверно. Программа вывела:" + echo "$OUT" | grep "Orbital Velocity" || echo "(строка с орбитальной скоростью не найдена)" + exit 1 +fi \ No newline at end of file diff --git a/tests/orbital-failure/test6.sh b/tests/orbital-failure/test6.sh new file mode 100755 index 0000000..aea93d4 --- /dev/null +++ b/tests/orbital-failure/test6.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +REPO_DIR="$HOME/orbital-failure" +TMP_DIR="$(mktemp -d /tmp/orbital-failure.XXXXXX)" +trap 'rm -rf "$TMP_DIR"' EXIT + +if ! cp -R "$REPO_DIR" "$TMP_DIR/repo" 2>/dev/null; then + echo "6. Не удалось подготовить временную копию репозитория." + exit 1 +fi + +cd "$TMP_DIR/repo" || exit 1 + + +if ! git log -1 >/dev/null 2>&1; then + echo "6. Не удалось получить историю коммитов." + exit 1 +fi + + +if git show HEAD:include/constants.h | grep -q "6\.6743015e-11"; then + echo "6. Изменения констант зафиксированы в коммите." + exit 0 +else + echo "6. Убедитесь, что вы закоммитили исправленные константы." + exit 1 +fi +