ЗОРЯ

Головна/Завдання/Частина 4/Огляд

Зоря. Частина 4. Збірка і здача

оновлено 06.10

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-08bot/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-14npm 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).