Ця сторінка — про організацію, а не про теорію: як потрапити в курс, де взяти робоче місце і що саме вважається зданою роботою. Її читають один раз на початку семестру й повертаються, коли щось не запускається. Про рівні, оцінки й дедлайни — силабус і вступне заняття.
Кроків чотири, і три з них робляться один раз за семестр.
1. Запрошення
Курс живе в організації GitHub alex-ordynski: там створюються репозиторії твоїх робіт і
там працюють автотести. Потрапити всередину можна лише на запрошення.
- Потрібен акаунт GitHub. Якщо його ще немає — зареєструйся на github.com/signup. Пошту вказуй ту, якою справді користуєшся: на неї прийде запрошення, а потім приходитимуть результати перевірок.
- Передай викладачу свій нік на GitHub і адресу, на яку реєструєшся.
- Прийми запрошення. У листі від 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 — той самий інструмент, який потім запускає автотести.
- Відкрий classroom50.org і натисни Sign in with GitHub. Окремого логіна й пароля тут немає — акаунт той самий, що в кроці 1.
- У списку з'явиться твоя група. Якщо не з'явилося жодної — запрошення з кроку 1 ще не прийняте; повернися й прийми його.
- Відкрий потрібну роботу й натисни Accept the assignment.
За кілька секунд Classroom 50 створить персональний репозиторій — із стартовим кодом роботи всередині. Посилання на нього з'явиться там же, на сторінці завдання.
Репозиторіїв у тебе буде два, і це не помилка. Той, що створює Classroom 50, — окремий на
кожну лабораторну, і в ньому живе рівень 1: саме його перевіряють автотести. Рівні 2 і 3
ростуть у наскрізному репозиторії vtfk-sid, який створюється один раз у ЛР1 і ведеться до
кінця семестру; його не здають тегом — його показують на захисті. Подробиці — у
вступному занятті і в ЛР1.
Ще одне, про що краще знати одразу: цей репозиторій приватний. Його бачиш ти і викладач — ні група, ні інтернет. На вступній лекції 4 вересня звучало протилежне; відтоді правило змінилося, бо інакше не працюють автотести: перевірка викликає закритий службовий репозиторій курсу, а GitHub не дозволяє публічному репозиторію тягнутися в приватний. На оцінку це не впливає — рівні 2 і 3 дає розмова на захисті, а не наявність коду.
3. Робоче місце
На ноутбук не треба ставити нічого — ні Docker, ні Rust, ні компілятора. Робоче середовище кожної роботи вже описане в курсі, і GitHub піднімає його на вимогу.
- Відкрий свій репозиторій завдання на GitHub.
- Зелена кнопка Code → вкладка Codespaces → Create codespace on main.
- Кілька хвилин — і у вкладці браузера відкривається повноцінний редактор із терміналом. Це не емулятор: за вкладкою стоїть справжня машина в хмарі, і 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
Скрипт робить чотири речі поспіль:
- якщо є незбережене — показує список і пропонує закомітити (тег вішається на коміт, тож файл, який не потрапив у коміт, не потрапить і в здачу);
- пушить роботу;
- показує, який тег створить і на якому коміті, і чекає підтвердження —
yозначає «так», будь-що інше й порожній Enter означають «ні»; - після «так» створює тег і відправляє його.
Скасувати можна на останньому питанні, і скасування — не помилка: скрипт спокійно виходить, нічого не здавши.
Далі, без твоєї участі:
- у репозиторії на GitHub, у вкладці Actions, з'являється запуск за цим тегом;
- кожна перевірка звітує окремо — тому видно не глухе «не зараховано», а який саме крок не пройшов і на чому;
- результат з'являється за кілька хвилин: у Releases цього репозиторію, а оцінка й коментар — у Feedback PR.
Якщо кнопки немає
Поза 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.
Решта помилок курсу — у «Коли щось пішло не так».