Skip to main content

Graphviz Artifact

Portable binary distribution of Graphviz, the open-source graph visualization toolkit. This repository is consumed by the Embedbits Platform Artifact Handler to locate, download, verify, and configure Graphviz in downstream embedded projects (e.g. for CMake/Doxygen-driven dependency and call graphs).

This repository is split into three branches by role — the main (master) branch you are reading now holds only this documentation; the actual handler scripts live on the Core branch, and versioned binaries are published as GitHub Releases anchored to the Bin branch.


Repository contents​

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)

Role in the platform​

This repository is one of several artifact distributions within the Embedbits platform. The overall flow is:

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 (in GithubArtifactsHandler) pulls each Graphviz version from GitLab's Generic Package Registry, repacks it into a standardised .zip, and publishes it as a GitHub Release on this repository — tagged Bin/<version>-<platform> — rather than as a file committed to the Bin branch. The Bin branch itself only carries empty anchor commits for the release tags to point at.

The Platform Artifact Handler in downstream projects references the Core branch as a Git submodule. At CMake configure time it reads ArtifactConfig.cmake to determine which release to fetch, then downloads and verifies the matching release asset for the current platform.


Branch structure​

Branch / RefContent
main / masterThis README only — no functional content
CoreCMake handler scripts (ArtifactConfig.cmake, CMakeGraphvizDefaults.cmake) for consuming the artifact
BinAnchor branch only — no binaries are committed here
Release tag Bin/<version>-<platform>GitHub Release carrying the actual .zip binary and its .hash checksum file as release assets

Supported platforms: Win (Windows), Unix (Linux), DarwinARM (macOS).

Note: The Embedbits Artifact Handler protocol itself is not tied to GitHub Releases — that is simply how GraphvizImporter.sh happens to publish binaries, since the target is GitHub. On a Git host without an equivalent Releases API, the handler also supports packaged binaries committed directly as tracked files on the Bin branch, tagged per version/platform (Bin/<version>-<platform>) instead of uploaded as release assets. The CMake handler resolves either form transparently.


⚠️ Fetching a release​

Binaries are not stored as tracked files in Bin — clone the Core branch for the handler scripts, and download binaries as release assets for a specific tag instead of cloning the Bin branch.

# 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.*"

Included components​

ComponentDescription
dot, neato, fdp, sfdp, circo, twopiLayout engine executables
gvprGraph pattern scanning and manipulation tool
Plugin/config files (config6, etc.)Output-format plugin registrations

Usage​

The artifact is installed automatically during the Artifacts setup phase via:

cmake -P Artifacts/Graphviz/ArtifactConfig.cmake

The script ensures the Graphviz binaries are available, unpacks the release asset if needed, and adds the tool to the system PATH for subsequent build steps.

Handler functions​

Graphviz_ArtifactInit(ARTIFACT_BIN_PATH)

Initializes the artifact: locates (or downloads) the correct platform release asset and exposes its bin/ directory at ARTIFACT_BIN_PATH.

Graphviz_GetArtifactVersion()

Returns the version of the currently resolved Graphviz binaries.


Versioning​

Artifact versions correspond directly to official Graphviz release versions as published on GitLab:

12.1.0, 12.1.2, 12.2.1, ...

New versions are published by GraphvizImporter.sh in the GithubArtifactsHandler repository, which reads the release list from gitlab.com/graphviz/graphviz, downloads the matching Generic Package Registry asset per platform, repacks it as a .zip with a SHA-256 checksum, and publishes it as a GitHub Release tagged Bin/<version>-<platform>.


Notes​

  • No installation required — binaries are portable and self-contained.
  • Offline use is supported once the artifact is cached locally.
  • In Azure DevOps pipelines, caching the artifact folder is recommended to reduce build time.
  • Not every Graphviz version on GitLab necessarily ships a matching asset for all three platforms — the importer skips (rather than fails) a platform it cannot find a release asset for.

License​

Graphviz is distributed under the Eclipse Public License 1.0 (EPL-1.0). For details, see: https://gitlab.com/graphviz/graphviz/-/blob/main/LICENSE


Authors​

Contributions are welcome! Please open a pull request.