Головна/Завдання/Частина 4/Огляд
Зоря. Частина 4. Збірка і здача
1Що видано
Четверта частина перетворює ваш репозиторій на здачу: стек, який ми зберемо з вашого коміту і піднімемо на вашій машині в заліковій партії. Нових оцінюваних осей тут немає - є ворота допуску і вікна здачі.
| Документ | Що в ньому |
|---|---|
01-submit.md | коміт і вікна: що фіксується, коли, як влаштовано перездачу, що видно в кабінеті |
02-build.md | стек за compose: ролі й мітки, правила машини, збірка в пісочниці, ліміти |
03-preflight.md | передстартовий прогін: одинадцять ступенів, вердикт, локальний прогін, тренувальний день |
04-service.md | службовий контракт бота: /health, /metrics, пресети, потік віри |
05-provocateur.md | доповнення 2 до оцінювання: три рівні провокатора та їхні параметри |
| Команда | Що робить |
|---|---|
npx zaria-kit init stack | дописує в репозиторій compose.yaml і сервіси навколо вашого каталогу бота: службові ручки і штаб |
npx zaria-kit preflight | ті самі одинадцять ступенів, що в нас, на вашій машині |
npx zaria-kit pack --provoke 1\|2\|3 | локальний пакет під вузлом-провокатором |
2Що має працювати до кінця частини 4
| ID | Вимога | Як перевірити |
|---|---|---|
| P4-01 | У репозиторії є compose.yaml у корені, каталог бота bot із частини 2, каталог штабу з частини 3, bot/nakaz.yaml, .zoria і README з командами | ступінь repo |
| P4-02 | У стеку рівно один сервіс із міткою zaria.role: head - голова на проводі; службові ручки позначено zaria.control, штаб - zaria.hq | ступінь stack |
| P4-03 | Стек живе за правилами машини: без privileged, чужих мереж і просторів імен, без bind-томів, без include і extends, контекст збірки - з репозиторію | ступінь stack |
| P4-04 | Образи збираються з цього самого коміту в пісочниці без мережі, крім реєстру конкурсу, за 20 хвилин | ступінь build |
| P4-05 | Бота написано на TypeScript або JavaScript, і він запускається node: поле zaria.bot у package.json каталогу бота, вихідного коду інших мов у каталозі немає | ступінь lang (scoring.md, 5.1а) |
| P4-06 | В історії репозиторію немає секретів; пуш захищено: push protection GitHub, а де його немає - локальний хук pre-push зі сканером секретів (доповнення 13) | ступінь secrets (scoring.md, 8.2) |
| P4-07 | Дзеркало репозиторію не більше за 200 МіБ | ступінь repo |
| P4-08 | bot/nakaz.yaml проходить три ступені лінтера | ступінь nakaz |
| P4-09 | Стек піднімається з чистого знімка, і голова присягає вузлу в лобі | ступені up і hello |
| P4-10 | Службові ручки відповідають: /health зовні контейнера, /metrics із п'ятьма канонними лічильниками | ступені health і metrics |
| P4-11 | Якщо штаб оголошено - він віддає сторінку і всі її місцеві ресурси | ступінь hq-bundle (іде, тільки якщо в стеку є роль zaria.hq) |
| P4-12 | Коміт здається в оголошені вікна; перездача одна на вікно | вердикт у кабінеті, поле sha |
| P4-13 | Ті самі ворота проходять у вас локально | npx zaria-kit preflight |
| P4-14 | npm test із каталогу бота йде без мережі і не довше за 10 хвилин | прогін під час підрахунку К4 (scoring.md, 8.6) |
npx zaria-kit init stack виконує P4-01 ... P4-04 і P4-10 ... P4-11 з першої хвилини: він дописує робочий стек навколо того, що у вас уже є. Міняти його можна як завгодно, поки ворота зелені: черга, кеш, база, окремий планувальник, друга голова - це ваша архітектура, і оцінюється вона кодом (scoring.md, 8).
3Як влаштовано здачу одним екраном
вікно зачинилося
|
v
дзеркало репозиторію --> SHA коміту --> git bundle (архів доказу)
|
v
пісочниця збірки: docker compose build --> замок стека і digest образів
|
v
ваша машина: знімок диска, відкат перед кожним прогоном пакета
|
v
передстартовий прогін: підйом, присяга, ручки, штаб
|
v
вердикт у кабінет: ok -> граєте failed -> одна перездачаВечір у GitHub не ходить: усе забирається у вікно, далі граємо з дзеркала і зібраних образів. Тому вікно - точка неповернення, а не формальність (01-submit.md).
4Вікна сезону
Увесь час у таблиці - UTC.
| Коли | Що | Перездача |
|---|---|---|
| 05.10 21:00 | строк підтвердження доступу до репозиторію (частина 1, P1-06) | - |
| 06.10 21:00 | фіксація коміту тренувального дня | - |
| 07.10 | тренувальний день: прогін і пакет проти двох ботів організаторів, поза заліком | - |
| 09.10 21:00 | заморожування: фіксація коміту групового етапу | - |
| 10.10 | передстартовий прогін групового етапу | одна, до 21:00 |
| 15, 16, 17.10, 03:00 | фіксація коміту вечора, прогін одразу | одна, до 09:00 |
| 17.10 03:00 | фінальна здача: за нею оцінюються код, штаб і розбір | одна, до 09:00 |
Не пройшли прогін і не виправили у вікно - до групового етапу не допущені (scoring.md, 5.1); у вечорі грає останній прийнятий коміт (scoring.md, 6.3).
5Що не входить у частину 4
- Правила гри, SDK, протокол і наказ - частина 2.
- Штаб і його приймання - частина 3.
- Пульта важелів у сезоні немає: під час партії у вашу машину ніхто не ходить, між прогонами пакета вона відкочується до знімка. Усе, що вам потрібне в бою, мусить підніматися з репозиторію.
- Свого хостингу залікових партій не існує: граємо тільки на машинах організаторів.
6Питання учасників
Мій бот із частини 2 і так грає. Що міняти? Дописати стек командою init stack і перевірити себе preflight. Каталог bot лишається тим самим: команда знаходить його полем zaria.bot, кладе поруч Dockerfile і у ваш код не пише. Каталогу бота немає зовсім - вона покладе і шаблон частини 2.
Чи можна здати один сервіс? Так, якщо він відповідає і проводу, і службовим ручкам, і віддає штаб. Мітки ролей у цьому разі стоять на одному сервісі.
Мій Dockerfile тягне пакети з інтернету. З реєстру конкурсу - можна, з публічного npm - через той самий реєстр (він його проксує). Іншої мережі у збірки немає (02-build.md, розділ 4).
Що буде, якщо я запушу після дедлайну? Нічого: здано коміт, який був у гілці за замовчуванням на момент дедлайну. Наступне вікно візьме наступний.
Зелений CI у мене в репозиторії - це залік? Ні. Правда - тільки наш передстартовий прогін.
Що як репозиторій недоступний у момент вікна? Це ваш ризик: немає дзеркала - немає здачі. Доступ мусить триматися до кінця конкурсу (частина 1, P1-07).
Чи можна поміняти пресет між партіями пакета? Ні. Образи і грамота заморожені з моменту фіксації коміту до кінця пакета; промоут у заліковій партії відхиляється (04-service.md, розділ 4).