Skip to main content

Unity Artifact

Portable source distribution of Unity (ThrowTheSwitch/Unity), a lightweight unit test framework for C, designed for embedded targets. This repository is consumed by the Embedbits Platform Artifact Handler to locate, download, verify, and configure Unity in downstream embedded projects — typically together with the CMock artifact (mock generation) and the Ruby artifact (interpreter for the CMock / Unity generator scripts).

This repository is split into three branches/refs by role — the main (master) branch you are reading now holds only this documentation; the handler scripts live on the Core branch, and versioned source packages 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)
└── CMakeUnityDefaults.cmake ← Unity integration logic (library target / include setup)

Bin (anchor branch — no tracked binary files)
└── (empty commits only; each release tag points here)

Role in the platform​

GitHub (ThrowTheSwitch) GitHub (Embedbits)
────────────────────────────────────── ──────────────────────────────────────────
ThrowTheSwitch/Unity Artifact-unity
tag "v2.6.1" (source) ──► main / master → README only (this document)
Core → ArtifactConfig.cmake, CMakeUnityDefaults.cmake
Bin → Anchor branch (empty commits)
Releases → unity-<version>.zip + .hash
tagged Bin/<version>

Unity_Importer.sh clones the upstream repository at each release tag (vX.Y.Z, release candidates are ignored), verifies the checked-out tag, strips .git metadata, adds a plain-text VERSION file, and zips the source tree. Unity is portable C source compiled straight into the test project, so releases carry no platform suffix — they are tagged plainly Bin/<version> (the v prefix is dropped).


Branch structure​

Branch / RefContent
main / masterThis README only — no functional content
CoreCMake handler scripts for consuming the artifact
BinAnchor branch only — no binaries are committed here
Release tag Bin/<version>GitHub Release carrying the .zip source package and its .hash checksum file

Note: On a Git host without a Releases API (Azure DevOps), the same importer commits the .zip + .hash directly to the Bin branch and tags that commit Bin/<version>. The CMake handler resolves either form transparently.


Fetching a release​

# Core handler scripts
git clone --branch Core --single-branch --depth=1 <repository_url> unity-core

# Source package + checksum for one specific version (GitHub Release asset)
gh release download Bin/2.6.1 --repo Embedbits/Artifact-unity --pattern "unity-2.6.1.*"

Package layout​

unity-<version>.zip
└── unity/
├── VERSION ← plain-text version, e.g. "2.6.1"
├── src/ ← unity.c, unity.h, unity_internals.h
├── extras/ ← optional add-ons (fixture, memory, bdd)
├── auto/ ← Ruby helper scripts (test runner generator, ...)
└── ... ← upstream docs, examples, build files

The Ruby scripts in auto/ (e.g. generate_test_runner.rb) require a Ruby interpreter — use the Ruby artifact.


Versioning​

Artifact versions correspond directly to official Unity release tags with the v prefix removed:

2.5.2, 2.6.0, 2.6.1, 2.7.0, ...

License​

Unity is distributed under the MIT License. For details, see: https://github.com/ThrowTheSwitch/Unity/blob/master/LICENSE.txt


Authors​

Contributions are welcome! Please open a pull request.