Шаблон репозиторію курсу. Містить dev-контейнер з C++ toolchain, стартову структуру проєкту і окремі папки під кожну домашню роботу.
Основний спосіб користуватись цим репо - створити власну копію через кнопку Use this template на GitHub. Курс-репо залишається read-only для вас, PR-и на вашій копії йдуть у ваш main.
-
Створити власну копію через Use this template:
- Відкрити сторінку курс-репо на GitHub.
- Натиснути
Use this template->Create a new repository. - В Owner dropdown обрати свій акаунт, задати назву (наприклад
cpp-miltech), створити.
Це дає самостійне репо у вашому акаунті з чистою git-історією і без fork-зв'язку з курс-репо.
-
Склонувати власний репо і відкрити у VS Code:
Windows: клонувати всередині WSL (відкрити
wslу PowerShell), не наC:\. Dev Containers очікує POSIX-середовище (shell-скрипти,$HOME,$USER); на Windows host це не працює - VS Code падає на.devcontainer/scripts/initialize(error 193), а${localEnv:HOME}і${localEnv:USER}порожні. Деталі - у preps/windows.md.git clone https://github.com/<your-username>/cpp-miltech.git cd cpp-miltech code .
VS Code запропонує
Reopen in Container- погодитись. Перший запуск тягне і білдить Docker image (5-10 хв), наступні запуски миттєві. -
Зібрати весь репо всередині контейнера:
cmake --preset debug cmake --build --preset debug
Виконувані файли домашніх робіт з'являться в
build/debug/homework_XX/. Demo-код занять лежить у відповідних піддиректоріяхbuild/debug/demos/. -
Зібрати ARM64 debug binary для Raspberry Pi / Radxa / Jetson:
cmake --preset aarch64-debug cmake --build --preset aarch64-debug
ARM64 артефакти з'являться в
build/aarch64-debug/. Цей preset використовує toolchaincmake/toolchains/aarch64-linux-gnu.cmake.
Базові команди для форматування C++, форматування CMake і запуску
clang-tidy описано в docs/code-quality.md.
Команди розраховані на запуск всередині devcontainer terminal після
cmake --preset debug.
Додати обох лекторів як collaborators свого репо, щоб вони могли бачити код і робити review на pull request-ах:
Settings->Collaborators->Add people->yevhenkuznetsov, рольReadдостатня.Settings->Collaborators->Add people->farnblack, рольReadдостатня.
Без цього лектори не побачать приватний репо взагалі і не зможуть залишати formal review (approve / request changes) навіть на публічному.
Зміни в курс-репо не синкаються автоматично у локальний репо. Якщо щось важливе оновлюється - буде анонс у Slack-каналі курсу.
Рекомендований спосіб підтягнути snapshot курс-репо без затирання ДЗ 4:
tmp_dir=$(mktemp -d)
git clone --depth 1 \
[email protected]:robot-dreams-code/C-PLUS-PLUS-FOR-MILITARY-TECHNOLOGY.git \
"$tmp_dir/course"
(
cd "$tmp_dir/course"
tar --exclude='./.git' --exclude='./homework_04' -cf - .
) | tar -xf -
rm -rf "$tmp_dir"
git status
git add .
git commit -m "chore: sync course repository updates"Команда копіює tooling/devcontainer/CMake/demo/homework_05 з актуального
курс-репо, але не затирає homework_04/. git status перед комітом потрібен
як контроль того, які файли зміняться у локальному репо.
Чому не git merge / cherry-pick: курс-репо позначений як GitHub Template. Копія через "Use this template" - це новий репо з єдиним "Initial commit", без зв'язку з курс-репо в історії. Спільного предка нема, тому git нічого не може злити автоматично.
Чому Template, а не fork: fork залишає історію спільною, і merge для нього працював би. Але PR на fork-у GitHub дефолтно цілить у upstream (у курс-репо). Курс-репо має лишатися read-only, PR-и студентів - іти у їхні репо. Template це знімає, ціна - нема прямого git-sync.
git merge course/main падає з refusing to merge unrelated histories.
З --allow-unrelated-histories merge пройде, але вийде каша: дві
кореневі коміти і конфлікти на більшості файлів. Cherry-pick не падає
сам, але конфліктує на локально модифікованих файлах.
Простіше - snapshot copy за командою вище. Без merge unrelated histories і без ручного вибору окремих файлів.
Потрібно:
- Docker Engine (рекомендовано на всіх платформах).
preps/містить інструкції: Linux напряму, macOS через Colima, Windows всередині WSL2. Docker Desktop теж працює, але потребує додаткових налаштувань (WSL2 integration, file sharing, ресурси), якіpreps/не покриває. - VS Code з розширенням
ms-vscode-remote.remote-containers(Dev Containers).
Покрокові інструкції під конкретну платформу:
Загальний огляд інструментів в preps/ - у preps/README.md.
.
|-- .devcontainer/ # Docker image + конфіг dev-контейнера
|-- .github/workflows/ # GitHub Actions: CI build через devcontainer
|-- CHANGELOG.md # лог помітних змін по PR-ах
|-- CMakeLists.txt # корневий CMakeLists, підтягує homework_XX через add_subdirectory
|-- cmake/toolchains/ # CMake toolchain-файли для cross-compilation
|-- docs/ # HowTo та короткі інструкції для роботи з repo
|-- demos/ # demo-код для занять
|-- homework_XX/ # окрема домашка, кожна зі своїм CMakeLists.txt
`-- preps/ # інструкції зі сетапу за платформами
Коли лектор анонсував нову ДЗ або ви починаєте роботу над уже анонсованою:
- Створити папку
homework_NN/з власнимCMakeLists.txt,src/,include/і даними якщо є. - Додати у корневий CMakeLists.txt рядок:
add_subdirectory(homework_NN)
- Комітити і пушити у свій репо. CI (якщо налаштований у вашому репо) перевірить що все збирається.
Workflow .github/workflows/build.yml запускається на кожен PR (і на push у
main). Він:
- Будує devcontainer image з Dockerfile.
- Виконує native debug build:
cmake --preset debug && cmake --build --preset debug. - Виконує ARM64 cross debug build:
cmake --preset aarch64-debug && cmake --build --preset aarch64-debug. - Падає якщо хоч одна
homework_XXабо demo target не компілюється з тулчейном з devcontainer-а (gcc-13, clang-18, C++20).
Якщо CI червоний локально зібралося, але на CI ні - швидше за все devcontainer треба rebuild локально (Dev Containers: Rebuild Container), щоб підхопити свіжі версії тулів.