Přehled artefaktů
Tento repozitář slouží jako centrální hub artefaktů pro build nástroje, generátory dokumentace a další externí závislosti používané napříč více embedded projekty.
Každý artefakt (např. GCC, Doxygen, Cppcheck) je spravován jako samostatný Git submodul, což umožňuje sledování verzí a modulární aktualizace a zároveň udržuje hlavní repozitáře lehké.
🧱 Účel
Cílem tohoto repozitáře je:
- Udržovat jediný přístupový bod ke sdíleným build závislostem
- Umožnit verzovanou správu artefaktů napříč projekty
- Podporovat automatické stahování a rozbalování pomocí CMake nebo Azure pipelines
- Omezit závislost na externích stahováních při CI/CD buildech
Dostupné artefakty
| Artefakt | Repozitář | Popis |
|---|---|---|
gcc | Artifact-gcc | Toolchain kompilátoru GCC |
gcc-arm-none-eabi | Artifact-gcc-arm-none-eabi | Toolchain GCC ARM pro bare-metal |
ninja | Artifact-ninja | Build systém Ninja |
doxygen | Artifact-ninja | Nástroj pro generování dokumentace Doxygen |
Struktura repozitáře
Každý podadresář představuje samostatný repozitář artefaktu.
Artifacts/
├─ gcc/ # GCC toolchain (as submodule)
├─ doxygen/ # Doxygen generator (as submodule)
├─ cppcheck/ # Static analysis tool (as submodule)
└─ ...
Struktura artefaktu
Každý repozitář artefaktu se řídí jednotnou konvencí tří větví:
Artifact-<name>/
├── main # Default branch, documentation and general information
├── Core # CMake integration layer (ArtifactConfig.cmake)
└── Bin # Binary releases as ZIP archives
Větev Core
Obsahuje ArtifactConfig.cmake — integrační soubor CMake pro daný artefakt. Zpřístupňuje dvě povinné funkce, které musí implementovat každý artefakt:
| Funkce | Signatura | Popis |
|---|---|---|
<name>_GetArtifactVersion | (<name>_GetArtifactVersion RET_VERSION) | Vrací nainstalovanou verzi artefaktu ve formátu X.Y.Z |
<name>_ArtifactInit | (<name>_ArtifactInit) | Inicializuje artefakt pro použití v buildu (nastaví PATH, proměnné CMake atd.) |
Poznámka: Prefix funkce se musí přesně shodovat s názvem složky artefaktu (názvem adresáře submodulu). Build proces se na tuto konvenci pojmenování spoléhá při vyhledávání a volání správných funkcí.
Commity ve větvi Core jsou verzované — každý commit odpovídá konkrétní verzi integrační vrstvy CMake.
Větev Bin
Obsahuje verzovaná binární vydání artefaktu. Každý commit obsahuje ZIP archiv s předkompilovanými binárkami pro podporované platformy spolu se souborem s kontrolním součtem SHA-256.
Vydání jsou označována tagy ve formátu:
Bin/<version>-<platform>
Například: Bin/1.12.1-linux, Bin/1.12.1-windows
Použití
Klonování se submoduly
Jak snížit velikost repozitáře při stahování artefaktů:
git clone --no-checkout --depth=1 https://github.com/YourOrg/Artifacts.git
Jednotlivé submoduly lze stáhnout na vyžádání, až když jsou potřeba:
git -C Artifacts submodule update --init --depth=1 gcc
Integrace s CMake
Každý adresář submodulu artefaktu obsahuje soubor ArtifactConfig.cmake (pocházející z větve Core). Vložte ho do svého projektu 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}")
Příklad s Ninja:
include(${ARTIFACTS_DIR}/ninja/ArtifactConfig.cmake)
ninja_ArtifactInit()
ninja_GetArtifactVersion(NINJA_VERSION)
message(STATUS "Ninja version: ${NINJA_VERSION}")
Přidání nového artefaktu
Repozitář nového artefaktu musí dodržovat tuto strukturu:
- Název repozitáře:
Artifact-<name>(např.Artifact-cmake) - Větev
Core: obsahujeArtifactConfig.cmakes implementovanými funkcemi<name>_GetArtifactVersiona<name>_ArtifactInit - Větev
Bin: obsahuje verzované ZIP archivy označené tagyBin/<version>-<platform> - Přidejte jako submodul do tohoto repozitáře:
git submodule add -b Core https://github.com/Embedbits/Artifact-<name>.git <name>
Související repozitáře
- Artifact-ninja — artefakt build systému Ninja
- Artifact-gcc-arm-none-eabi — artefakt toolchainu GCC ARM
🧩 Integrace s CI/CD
Tento repozitář je navržen pro automatizované použití v CI prostředích, jako jsou Azure DevOps nebo GitHub Actions.
Příklad použití v Azure pipeline:
- script: |
cmake -DARTIFACT_NAME=gcc -DARTIFACT_VERSION=1.0.3 -P ./CMakeModules/ArtifactsHandler.cmake
displayName: 'Fetch GCC artifact'
🧠 Poznámky
- Každý submodul artefaktu lze verzovat a aktualizovat nezávisle
- Pro zajištění integrity artefaktů se doporučují hash soubory (
.hash) - Neukládejte velké binárky přímo do commitů; používejte pouze komprimované archivy
- Hlavní repozitář (
Artifacts) nikdy neobsahuje zdrojové kódy nástrojů přímo — pouze odkazy
🏷 Licence
Všechny submoduly artefaktů si ponechávají své vlastní licence.
Tento nadřazený repozitář pouze koordinuje jejich zahrnutí a sledování verzí.