Курс › Як здавати роботи
Покроково↔ Сюжет С.І.Д.
Курс · довідка для студента

Як здавати роботи

Ця сторінка — про організацію, а не про теорію: як потрапити в курс, де взяти робоче місце і що саме вважається зданою роботою. Її читають один раз на початку семестру й повертаються, коли щось не запускається. Про рівні, оцінки й дедлайни — силабус і вступне заняття.

Кроків чотири, і три з них робляться один раз за семестр.

1. Запрошення

Курс живе в організації GitHub alex-ordynski: там створюються репозиторії твоїх робіт і там працюють автотести. Потрапити всередину можна лише на запрошення.

  1. Потрібен акаунт GitHub. Якщо його ще немає — зареєструйся на github.com/signup. Пошту вказуй ту, якою справді користуєшся: на неї прийде запрошення, а потім приходитимуть результати перевірок.
  2. Передай викладачу свій нік на GitHub і адресу, на яку реєструєшся.
  3. Прийми запрошення. У листі від GitHub («… has invited you to join the alex-ordynski organization») є кнопка, що веде на сторінку з єдиною дією — Join alex-ordynski.

Лист часто не доходить до «Вхідних». Gmail кладе його в Промоакції (Promotions), інші поштовики — у Спам. Перевір обидві теки, перш ніж вирішити, що листа немає. А якщо ти вже у GitHub, лист можна взагалі не шукати: чинне запрошення відкривається за прямою адресою github.com/orgs/alex-ordynski/invitation.

2. Свій репозиторій

Репозиторії робіт роздає Classroom 50 — той самий інструмент, який потім запускає автотести.

  1. Відкрий classroom50.org і натисни Sign in with GitHub. Окремого логіна й пароля тут немає — акаунт той самий, що в кроці 1.
  2. У списку з'явиться твоя група. Якщо не з'явилося жодної — запрошення з кроку 1 ще не прийняте; повернися й прийми його.
  3. Відкрий потрібну роботу й натисни Accept the assignment.

За кілька секунд Classroom 50 створить персональний репозиторій — із стартовим кодом роботи всередині. Посилання на нього з'явиться там же, на сторінці завдання.

Репозиторіїв у тебе буде два, і це не помилка. Той, що створює Classroom 50, — окремий на кожну лабораторну, і в ньому живе рівень 1: саме його перевіряють автотести. Рівні 2 і 3 ростуть у наскрізному репозиторії vtfk-sid, який створюється один раз у ЛР1 і ведеться до кінця семестру; його не здають тегом — його показують на захисті. Подробиці — у вступному занятті і в ЛР1.

Ще одне, про що краще знати одразу: цей репозиторій приватний. Його бачиш ти і викладач — ні група, ні інтернет. На вступній лекції 4 вересня звучало протилежне; відтоді правило змінилося, бо інакше не працюють автотести: перевірка викликає закритий службовий репозиторій курсу, а GitHub не дозволяє публічному репозиторію тягнутися в приватний. На оцінку це не впливає — рівні 2 і 3 дає розмова на захисті, а не наявність коду.

3. Робоче місце

На ноутбук не треба ставити нічого — ні Docker, ні Rust, ні компілятора. Робоче середовище кожної роботи вже описане в курсі, і GitHub піднімає його на вимогу.

  1. Відкрий свій репозиторій завдання на GitHub.
  2. Зелена кнопка Code → вкладка Codespaces → Create codespace on main.
  3. Кілька хвилин — і у вкладці браузера відкривається повноцінний редактор із терміналом. Це не емулятор: за вкладкою стоїть справжня машина в хмарі, і Docker у ній уже встановлений.

Перевір, що середовище справді готове:

docker version

У виводі мають бути обидва блоки — Client: і Server:. Client: — це сама команда, яку ти щойно набираєш; Server: — демон Docker, який насправді запускає контейнери. Один Client: без Server: означає, що двигун не піднявся (див. останній розділ).

Codespace не треба створювати заново щодня: він засинає сам, коли ним не користуються, і будиться тією ж кнопкою Code → Codespaces.

Але про квоту варто знати одну річ, бо вона неочевидна. Безкоштовних годин у тебе 120 на місяць (180, якщо маєш GitHub Pro), і на кілька занять на тиждень їх вистачає із запасом. Витрачається не там. Зупинений Codespace не витрачає годин — але витрачає сховище, бо сховище нараховується, доки простір існує, а не доки працює. У цьому курсі це важить: починаючи з ЛР2 ти збираєш образи Docker, вони важать гігабайти, і живуть вони всередині простору.

Тому правило таке: здав роботу — видали простір. github.com/codespaces → … → Delete. Не «зупини», а саме видали. Усе, що закомічене й запушене, лишається в репозиторії; видаляється тільки робоче місце, і наступного разу воно підніметься наново за хвилину.

Звідси й звичка, яка рятує найчастіше: усе цінне — комітом у репозиторій, а не файлом у контейнері.

4. Здача

Головне, що варто зрозуміти один раз:

Звичайний git push нічого не запускає. Комітити й пушити можна скільки завгодно, у будь-який час — це не здача, воно нічого не витрачає й нікого не турбує. Перевірка стартує тільки тоді, коли в репозиторій приходить тег із префіксом submit/.

Саме тому здачу не набирають руками. У робочому просторі натисни Ctrl+Shift+B — і все, що описано нижче, станеться за один раз.

Ctrl+Shift+B

Це рідна кнопка VS Code (меню: Terminal → Run Build Task), і в репозиторії завдання вона запускає .devcontainer/submit.sh. Той самий скрипт можна викликати з терміналу:

bash .devcontainer/submit.sh

Скрипт робить чотири речі поспіль:

  1. якщо є незбережене — показує список і пропонує закомітити (тег вішається на коміт, тож файл, який не потрапив у коміт, не потрапить і в здачу);
  2. пушить роботу;
  3. показує, який тег створить і на якому коміті, і чекає підтвердження — y означає «так», будь-що інше й порожній Enter означають «ні»;
  4. після «так» створює тег і відправляє його.

Скасувати можна на останньому питанні, і скасування — не помилка: скрипт спокійно виходить, нічого не здавши.

Далі, без твоєї участі:

Якщо кнопки немає

Поза Codespaces — у власному терміналі, у чужому редакторі, у будь-якій ситуації, де скрипта під рукою немає, — здача робиться тими самими трьома командами, які скрипт і виконує:

git add .
git commit -m "lab01: рівень 1"
git tag submit/lab01
git push origin submit/lab01

Перездавати можна скільки завгодно разів. Тег — це сигнал «дивіться сюди», а не назва оцінки: яка це робота, перевірка дізнається з імені репозиторію, не з тега. Тому друга здача — просто наступний вільний тег:

git tag submit/lab01-2
git push origin submit/lab01-2

Скрипт робить саме це й сам: бере перше вільне ім'я, спитавши про зайняті не свою пам'ять, а GitHub. Руками — так само: наступний номер, а старий тег не переставляється.

Автотести перевіряють лише рівень 1. Рівні 2 і 3 — це розмова: жива демонстрація і пояснення, чому воно працює. Жоден тег їх не зарахує і жоден тег їх не зіпсує.

🆘 КОЛИ ЩОСЬ ПІШЛО НЕ ТАК

Чотири речі, на яких спотикається початок семестру.

  • Запрошення не прийшло Перевір Промоакції і Спам — GitHub-листи туди потрапляють постійно. Якщо ти вже у GitHub, відкрий github.com/orgs/alex-ordynski/invitation напряму. Порожньо і там — напиши викладачу, щоб надіслав запрошення ще раз: найчастіша причина — помилка в одній літері адреси.

  • Codespace не стартує або висить на «Setting up your codespace» Дай йому кілька хвилин: перший запуск збирає середовище з нуля, наступні — швидші. Якщо він таки завис або впав, видали його (github.com/codespaces → … → Delete) і створи наново. Усе, що було закомічене й запушене, від цього не постраждає — саме тому комітити варто часто.

  • docker version показує лише Client: (або Cannot connect to the Docker daemon) Демон ще не піднявся — таке буває в перші секунди після створення Codespace. Зачекай трохи й повтори команду. Якщо не минає — перестворити Codespace швидше, ніж лагодити.

  • Тег запушений, а в Actions порожньо Майже завжди — ім'я тега. Перевірка реагує лише на теги submit/*: lab01 або submit-lab01 не підходять, потрібен саме submit/lab01. (Ctrl+Shift+B такої помилки не робить — ім'я складає скрипт.) Подивись, що насправді поїхало: git ls-remote --tags origin. Друга за частотою причина — тег створений, але не запушений: git push сам по собі теги не відправляє, потрібен git push origin submit/lab01.

Решта помилок курсу — у «Коли щось пішло не так».