Артефакт Graphviz
Портативний бінарний дистрибутив Graphviz — відкритого інструментарію для візуалізації графів. Цей репозиторій використовується Embedbits Platform Artifact Handler для пошуку, завантаження, перевірки та налаштування Graphviz у подальших embedded-проєктах (наприклад, для графів залежностей і викликів, що генеруються через CMake/Doxygen).
Цей репозиторій поділено на три гілки за ролями: гілка main (master), яку ви зараз читаєте, містить лише цю документацію; власне скрипти handler містяться в гілці Core, а версіоновані бінарні файли публікуються як GitHub Releases, прив'язані до гілки Bin.
Вміст репозиторію
main / master
└── README.md ← This document — no other content
Core
├── ArtifactConfig.cmake ← Artifact metadata (name, version constraints, asset naming)
└── CMakeGraphvizDefaults.cmake ← Graphviz integration logic (artifact init, version lookup)
Bin (anchor branch — no tracked binary files)
└── (empty commits only; each release tag points here)
Роль у платформі
Цей репозиторій — один із кількох дистрибутивів артефактів у платформі Embedbits. Загальний потік такий:
GitLab (graphviz/graphviz) GitHub (Embedbits)
───────────────────────────── ──────────────────────────────────────────
Generic Package Registry Artifact-graphviz
graphviz-releases/<version>/*.zip ──► main / master → README only (this document)
Core → ArtifactConfig.cmake, CMakeGraphvizDefaults.cmake
Bin → Anchor branch (empty commits)
Releases → graphviz-<version>-<platform>.zip + .hash
tagged Bin/<version>-<platform>
GraphvizImporter.sh (у GithubArtifactsHandler) завантажує кожну версію Graphviz із Generic Package Registry на GitLab, перепаковує її в стандартизований .zip і публікує як GitHub Release у цьому репозиторії з тегом Bin/<version>-<platform>, а не як файл, закомічений у гілку Bin. Сама гілка Bin містить лише порожні якірні коміти, на які вказують теги релізів.
Platform Artifact Handler у подальших проєктах посилається на гілку Core як на Git submodule. Під час конфігурації CMake він зчитує ArtifactConfig.cmake, щоб визначити, який реліз завантажувати, а потім завантажує та перевіряє відповідний ресурс релізу для поточної платформи.
Структура гілок
| Гілка / посилання | Вміст |
|---|---|
main / master | Лише цей README — жодного функціонального вмісту |
Core | Скрипти CMake handler (ArtifactConfig.cmake, CMakeGraphvizDefaults.cmake) для використання артефакту |
Bin | Лише якірна гілка — бінарні файли тут не комітяться |
Тег релізу Bin/<version>-<platform> | GitHub Release із власне бінарним .zip та файлом контрольної суми .hash як ресурсами релізу |
Підтримувані платформи: Win (Windows), Unix (Linux), DarwinARM (macOS).
Примітка: Сам протокол Embedbits Artifact Handler не прив'язаний до GitHub Releases — це лише те, як
GraphvizImporter.shпублікує бінарні файли, оскільки цільовою платформою є GitHub. На Git-хостингу без еквівалентного Releases API handler також підтримує пакетовані бінарні файли, закомічені безпосередньо як відстежувані файли в гілціBinі позначені тегами за версією/платформою (Bin/<version>-<platform>), а не завантажені як ресурси релізу. Handler для CMake прозоро розпізнає обидві форми.
⚠️ Отримання релізу
Бінарні файли не зберігаються як відстежувані файли в Bin — клонуйте гілку Core для скриптів handler, а бінарні файли завантажуйте як ресурси релізу для конкретного тега, а не клонуючи гілку Bin.
# Core handler scripts
git clone --branch Core --single-branch --depth=1 <repository_url> graphviz-core
# Binary + checksum for one specific version/platform (GitHub Release asset)
gh release download Bin/12.2.1-Unix --repo Embedbits/Artifact-graphviz --pattern "graphviz-12.2.1-Unix.*"
Складові
| Компонент | Опис |
|---|---|
dot, neato, fdp, sfdp, circo, twopi | Виконувані файли рушіїв розкладки |
gvpr | Інструмент для сканування та маніпулювання шаблонами графів |
Файли плагінів/конфігурації (config6 тощо) | Реєстрації плагінів вихідних форматів |
Використання
Артефакт встановлюється автоматично на етапі налаштування артефактів за допомогою:
cmake -P Artifacts/Graphviz/ArtifactConfig.cmake
Скрипт забезпечує наявність бінарних файлів Graphviz, за потреби розпаковує ресурс релізу і додає інструмент до системного PATH для наступних кроків збірки.
Функції handler
Graphviz_ArtifactInit(ARTIFACT_BIN_PATH)
Ініціалізує артефакт: знаходить (або завантажує) правильний ресурс релізу для платформи і надає його теку bin/ за адресою ARTIFACT_BIN_PATH.
Graphviz_GetArtifactVersion()
Повертає версію поточних визначених бінарних файлів Graphviz.
Версіонування
Версії артефакту безпосередньо відповідають офіційним версіям релізів Graphviz, опублікованим на GitLab:
12.1.0, 12.1.2, 12.2.1, ...
Нові версії публікує GraphvizImporter.sh у репозиторії GithubArtifactsHandler, який зчитує список релізів із gitlab.com/graphviz/graphviz, завантажує відповідний ресурс Generic Package Registry для кожної платформи, перепаковує його як .zip із контрольною сумою SHA-256 і публікує як GitHub Release з тегом Bin/<version>-<platform>.
Примітки
- Встановлення не потрібне — бінарні файли портативні та самодостатні.
- Офлайн-використання підтримується після локального кешування артефакту.
- У pipelines Azure DevOps для скорочення часу збірки рекомендовано кешувати теку артефакту.
- Не кожна версія Graphviz на GitLab обов'язково постачається з відповідним ресурсом для всіх трьох платформ — імпортер пропускає (а не завершується помилкою) платформу, для якої не вдалося знайти ресурс релізу.
Ліцензія
Graphviz розповсюджується за Eclipse Public License 1.0 (EPL-1.0). Докладніше: https://gitlab.com/graphviz/graphviz/-/blob/main/LICENSE
Автори
- Mr.Nobody — embedbits.com
Запрошуємо до співпраці! Будь ласка, відкрийте pull request.