Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,6 @@ target
db.sqlite

.DS_Store

.idea
crash.log
1 change: 1 addition & 0 deletions migrations/25032026_orbital-failure/down.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
DELETE FROM tasks WHERE work_name = 'orbital-failure';
13 changes: 13 additions & 0 deletions migrations/25032026_orbital-failure/up.sql
Original file line number Diff line number Diff line change
@@ -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');
3 changes: 3 additions & 0 deletions tasks/orbital-failure/justfile
Original file line number Diff line number Diff line change
@@ -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 .
15 changes: 15 additions & 0 deletions tasks/orbital-failure/src/Dockerfile
Original file line number Diff line number Diff line change
@@ -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
15 changes: 15 additions & 0 deletions tests/orbital-failure/test1.sh
Original file line number Diff line number Diff line change
@@ -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




11 changes: 11 additions & 0 deletions tests/orbital-failure/test2.sh
Original file line number Diff line number Diff line change
@@ -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
22 changes: 22 additions & 0 deletions tests/orbital-failure/test3.sh
Original file line number Diff line number Diff line change
@@ -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
25 changes: 25 additions & 0 deletions tests/orbital-failure/test4.sh
Original file line number Diff line number Diff line change
@@ -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
26 changes: 26 additions & 0 deletions tests/orbital-failure/test5.sh
Original file line number Diff line number Diff line change
@@ -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
28 changes: 28 additions & 0 deletions tests/orbital-failure/test6.sh
Original file line number Diff line number Diff line change
@@ -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