From 840d163527839078bafa33298ba758b6878ae0e3 Mon Sep 17 00:00:00 2001 From: Maxim Brett Date: Mon, 31 Aug 2026 00:47:31 +0400 Subject: [PATCH 1/2] chore(gitignore): ignore .idea and crash.log --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) 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 From b4ad6c879c928b2ebf8ee09d9508ed0bd33ad34a Mon Sep 17 00:00:00 2001 From: Maxim Brett Date: Mon, 31 Aug 2026 00:48:50 +0400 Subject: [PATCH 2/2] feat(orbital-failure): add new task "Orbital-failure" --- migrations/25032026_orbital-failure/down.sql | 1 + migrations/25032026_orbital-failure/up.sql | 13 +++++++++ tasks/orbital-failure/justfile | 3 +++ tasks/orbital-failure/src/Dockerfile | 15 +++++++++++ tests/orbital-failure/test1.sh | 15 +++++++++++ tests/orbital-failure/test2.sh | 11 ++++++++ tests/orbital-failure/test3.sh | 22 +++++++++++++++ tests/orbital-failure/test4.sh | 25 +++++++++++++++++ tests/orbital-failure/test5.sh | 26 ++++++++++++++++++ tests/orbital-failure/test6.sh | 28 ++++++++++++++++++++ 10 files changed, 159 insertions(+) create mode 100644 migrations/25032026_orbital-failure/down.sql create mode 100644 migrations/25032026_orbital-failure/up.sql create mode 100644 tasks/orbital-failure/justfile create mode 100644 tasks/orbital-failure/src/Dockerfile create mode 100755 tests/orbital-failure/test1.sh create mode 100755 tests/orbital-failure/test2.sh create mode 100755 tests/orbital-failure/test3.sh create mode 100755 tests/orbital-failure/test4.sh create mode 100755 tests/orbital-failure/test5.sh create mode 100755 tests/orbital-failure/test6.sh 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 +