Перейти до основного вмісту

Огляд артефактів

Цей репозиторій слугує центральним хабом артефактів для інструментів збірки, генераторів документації та інших зовнішніх залежностей, що використовуються в багатьох embedded-проєктах.

Кожен артефакт (наприклад, GCC, Doxygen, Cppcheck) керується як окремий Git submodule, що дає змогу відстежувати версії та оновлювати модулі окремо, залишаючи основні репозиторії легкими.


🧱 Призначення​

Мета цього репозиторію:

  • Підтримувати єдину точку доступу до спільних залежностей збірки
  • Забезпечити керування версіями артефактів у різних проєктах
  • Підтримувати автоматичне отримання та розпакування через CMake або Azure pipelines
  • Зменшити залежність від зовнішніх завантажень під час збірок CI/CD

Доступні артефакти​

АртефактРепозиторійОпис
gccArtifact-gccНабір інструментів компілятора GCC
gcc-arm-none-eabiArtifact-gcc-arm-none-eabiНабір інструментів GCC для bare-metal ARM
ninjaArtifact-ninjaСистема збірки Ninja
doxygenArtifact-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}")

Додавання нового артефакту​

Репозиторій нового артефакту має відповідати такій структурі:

  1. Назва репозиторію: Artifact-<name> (наприклад, Artifact-cmake)
  2. Гілка Core: містить ArtifactConfig.cmake з реалізованими <name>_GetArtifactVersion і <name>_ArtifactInit
  3. Гілка Bin: містить версіоновані ZIP-архіви з тегами Bin/<version>-<platform>
  4. Додайте як submodule до цього репозиторію:
git submodule add -b Core https://github.com/Embedbits/Artifact-<name>.git <name>

Пов'язані репозиторії​


🧩 Інтеграція з 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 артефактів зберігають власні ліцензії.
Цей батьківський репозиторій лише координує їх підключення та відстеження версій.