Огляд артефактів
Цей репозиторій слугує центральним хабом артефактів для інструментів збірки, генераторів документації та інших зовнішніх залежностей, що використовуються в багатьох embedded-проєктах.
Кожен артефакт (наприклад, GCC, Doxygen, Cppcheck) керується як окремий Git submodule, що дає змогу відстежувати версії та оновлювати модулі окремо, залишаючи основні репозиторії легкими.
🧱 Призначення
Мета цього репозиторію:
- Підтримувати єдину точку доступу до спільних залежностей збірки
- Забезпечити керування версіями артефактів у різних проєктах
- Підтримувати автоматичне отримання та розпакування через CMake або Azure pipelines
- Зменшити залежність від зовнішніх завантажень під час збірок CI/CD
Доступні артефакти
| Артефакт | Репозиторій | Опис |
|---|---|---|
gcc | Artifact-gcc | Набір інструментів компілятора GCC |
gcc-arm-none-eabi | Artifact-gcc-arm-none-eabi | Набір інструментів GCC для bare-metal ARM |
ninja | Artifact-ninja | Система збірки Ninja |
doxygen | Artifact-ninja | Інструмент генерації документації Doxygen |
Структура репозиторію
Кожна підтека представляє окремий репозиторій артефакту.
Artifacts/
├─ gcc/ # GCC toolchain (as submodule)
├─ doxygen/ # Doxygen generator (as submodule)
├─ cppcheck/ # Static analysis tool (as submodule)
└─ ...
Структура артефакту
Кожен репозиторій артефакту дотримується єдиної угоди про три гілки:
Artifact-<name>/
├── main # Default branch, documentation and general information
├── Core # CMake integration layer (ArtifactConfig.cmake)
└── Bin # Binary releases as ZIP archives
Гілка Core
Містить ArtifactConfig.cmake — файл інтеграції артефакту з CMake. Він надає дві обов'язкові функції, які мають бути реалізовані для кожного артефакту:
| Функція | Сигнатура | Опис |
|---|---|---|
<name>_GetArtifactVersion | (<name>_GetArtifactVersion RET_VERSION) | Повертає встановлену версію артефакту у форматі X.Y.Z |
<name>_ArtifactInit | (<name>_ArtifactInit) | Ініціалізує артефакт для використання в збірці (встановлює PATH, змінні CMake тощо) |
Примітка: Префікс функції має точно збігатися з назвою теки артефакту (назвою теки submodule). Процес збірки покладається на це правило іменування, щоб знайти та викликати потрібні функції.
Коміти в Core версіоновані — кожен коміт відповідає певній версії рівня інтеграції з CMake.
Гілка Bin
Містить версіоновані бінарні релізи артефакту. Кожен коміт містить ZIP-архів зі зібраними бінарними файлами для підтримуваних платформ разом із файлом контрольної суми SHA-256.
Релізи тегуються у форматі:
Bin/<version>-<platform>
Наприклад: Bin/1.12.1-linux, Bin/1.12.1-windows
Використання
Клонування з submodules
Щоб зменшити розмір репозиторію під час отримання артефактів:
git clone --no-checkout --depth=1 https://github.com/YourOrg/Artifacts.git
Окремі submodules можна отримувати за потреби:
git -C Artifacts submodule update --init --depth=1 gcc
Інтеграція з CMake
Кожна тека submodule артефакту містить файл ArtifactConfig.cmake (з гілки Core). Підключіть його у свій проєкт CMake:
include(<path_to_artifacts>/<artifact_name>/ArtifactConfig.cmake)
# Initialize the artifact (sets PATH and other environment variables)
<artifact_name>_ArtifactInit()
# Optionally query the installed version
<artifact_name>_GetArtifactVersion(ARTIFACT_VERSION)
message(STATUS "<artifact_name> version: ${ARTIFACT_VERSION}")
Приклад із Ninja:
include(${ARTIFACTS_DIR}/ninja/ArtifactConfig.cmake)
ninja_ArtifactInit()
ninja_GetArtifactVersion(NINJA_VERSION)
message(STATUS "Ninja version: ${NINJA_VERSION}")
Додавання нового артефакту
Репозиторій нового артефакту має відповідати такій структурі:
- Назва репозиторію:
Artifact-<name>(наприклад,Artifact-cmake) - Гілка
Core: міститьArtifactConfig.cmakeз реалізованими<name>_GetArtifactVersionі<name>_ArtifactInit - Гілка
Bin: містить версіоновані ZIP-архіви з тегамиBin/<version>-<platform> - Додайте як submodule до цього репозиторію:
git submodule add -b Core https://github.com/Embedbits/Artifact-<name>.git <name>
Пов'язані репозиторії
- Artifact-ninja — артефакт системи збірки Ninja
- Artifact-gcc-arm-none-eabi — артефакт набору інструментів GCC для ARM
🧩 Інтеграція з CI/CD
Цей репозиторій розроблено для автоматизованого використання в середовищах CI, як-от Azure DevOps або GitHub Actions.
Приклад використання в Azure pipeline:
- script: |
cmake -DARTIFACT_NAME=gcc -DARTIFACT_VERSION=1.0.3 -P ./CMakeModules/ArtifactsHandler.cmake
displayName: 'Fetch GCC artifact'
🧠 Примітки
- Кожен submodule артефакту можна версіонувати й оновлювати незалежно
- Для забезпечення цілісності артефакту рекомендовано використовувати файли хешів (
.hash) - Уникайте безпосереднього коміту великих бінарних файлів; використовуйте лише стиснуті архіви
- Основний репозиторій (
Artifacts) ніколи не містить вихідного коду інструментів безпосередньо — лише посилання
🏷 Ліцензія
Усі submodules артефактів зберігають власні ліцензії.
Цей батьківський репозиторій лише координує їх підключення та відстеження версій.