# bhom/ci_toolkit architecture

> Architecture diagram of the GitHub repository bhom/ci_toolkit, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/bhom/ci_toolkit
- Repository: https://github.com/bhom/ci_toolkit

## Overview

CI_Toolkit supplies independent GitHub Actions checks for BHoM repositories: workflows invoke checks that resolve/build dependencies, run analysis or tests, and report results. The principal workflow is a repository pull request triggering selected checks; serialisation and versioning additionally use .NET runners, while compliance and dataset checks have distinct analysis stages. Shared actions provide dependency resolution, runner preparation, change filtering, solution discovery, configuration inference, and optional credentials. Runner links follow the README and sampled entry points; unsampled action internals are represented only where documented.

Main entry points: [`.github/actions/ci-build`](https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/ci-build) (Build check), [`.github/actions/prepare-runner`](https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/prepare-runner) (Runner preparation), [`.github/actions/ci-compliance`](https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/ci-compliance) (Compliance check), [`.github/actions/ci-serialisation`](https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/ci-serialisation) (Serialisation check)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Workflow entry"]
  node_repo_workflow(("Repository workflow"))
  node_templates["Workflow templates"]
end

subgraph group_checks["CI checks"]
  node_build["Build check<br/>[ci-build]"]
  node_compliance["Compliance check<br/>[ci-compliance]"]
  node_dataset_tests["Dataset tests<br/>[ci-dataset-tests]"]
  node_serialisation["Serialisation check<br/>[ci-serialisation]"]
  node_versioning["Versioning check<br/>[ci-versioning]"]
  node_unit_tests["Unit tests<br/>[ci-unit-tests]"]
  node_format["Format check<br/>[ci-format]"]
end

subgraph group_shared["Shared plumbing"]
  node_resolve["Dependency resolver"]
  node_prepare["Runner preparation<br/>[prepare-runner]"]
  node_changed["Changed-file filter"]
  node_discover["Solution discovery<br/>[discover-solution]"]
  node_infer["Config inference"]
  node_token["Token minting<br/>[mint-dep-token]"]
end

subgraph group_runners["Analysis runners"]
  node_compliance_runner["Source compliance"]
  node_dataset_compliance_runner["Dataset compliance"]
  node_dataset_test_runner["Dataset test runner"]
  node_serialiser_runner["Serialiser runner"]
  node_versioning_runner["Versioning runner"]
end

subgraph group_reporting["Results"]
  node_pr_results["Pull request results"]
end

node_bhom["BHoM assemblies"]
node_github(("GitHub Actions"))

node_templates -->|"copied into"| node_repo_workflow
node_repo_workflow -->|"invokes"| node_build
node_repo_workflow -->|"invokes"| node_compliance
node_repo_workflow -->|"invokes"| node_dataset_tests
node_repo_workflow -->|"invokes"| node_serialisation
node_repo_workflow -->|"invokes"| node_versioning
node_repo_workflow -->|"invokes"| node_unit_tests
node_repo_workflow -->|"invokes"| node_format
node_build -->|"resolves dependencies"| node_resolve
node_build -->|"finds solution"| node_discover
node_build -->|"filters changes"| node_changed
node_compliance -->|"filters changes"| node_changed
node_dataset_tests -->|"filters changes"| node_changed
node_serialisation -->|"filters changes"| node_changed
node_versioning -->|"filters changes"| node_changed
node_unit_tests -->|"finds solution"| node_discover
node_build -->|"prepares runner"| node_prepare
node_compliance -->|"prepares runner"| node_prepare
node_dataset_tests -->|"prepares runner"| node_prepare
node_serialisation -->|"prepares runner"| node_prepare
node_versioning -->|"prepares runner"| node_prepare
node_unit_tests -->|"prepares runner"| node_prepare
node_resolve -.->|"requests credentials"| node_token
node_serialisation -->|"infers configuration"| node_infer
node_versioning -->|"infers configuration"| node_infer
node_compliance -->|"runs analysis"| node_compliance_runner
node_compliance -->|"runs dataset rules"| node_dataset_compliance_runner
node_dataset_tests -->|"runs fixtures"| node_dataset_test_runner
node_serialisation -->|"runs comparison"| node_serialiser_runner
node_versioning -->|"runs historical scan"| node_versioning_runner
node_serialiser_runner -->|"loads assemblies"| node_bhom
node_versioning_runner -->|"loads assemblies"| node_bhom
node_dataset_test_runner -->|"executes tests"| node_bhom
node_compliance_runner -->|"emits findings"| node_pr_results
node_dataset_compliance_runner -->|"emits findings"| node_pr_results
node_dataset_test_runner -->|"emits findings"| node_pr_results
node_serialiser_runner -->|"reports regressions"| node_pr_results
node_versioning_runner -->|"reports failures"| node_pr_results
node_build -->|"reports status"| node_pr_results
node_unit_tests -->|"reports status"| node_pr_results
node_format -->|"reports status"| node_pr_results
node_github -->|"runs on pull request"| node_repo_workflow

click node_templates "https://github.com/bhom/ci_toolkit/tree/develop/templates"
click node_build "https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/ci-build"
click node_compliance "https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/ci-compliance"
click node_dataset_tests "https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/ci-dataset-tests"
click node_serialisation "https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/ci-serialisation"
click node_versioning "https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/ci-versioning"
click node_unit_tests "https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/ci-unit-tests"
click node_format "https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/ci-format"
click node_resolve "https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/resolve-dependencies"
click node_prepare "https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/prepare-runner"
click node_changed "https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/compute-changed-files"
click node_discover "https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/discover-solution"
click node_infer "https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/infer-verification-config"
click node_token "https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/mint-dep-token"
click node_compliance_runner "https://github.com/bhom/ci_toolkit/tree/develop/tools/ComplianceRunner/src/ComplianceRunner"
click node_dataset_compliance_runner "https://github.com/bhom/ci_toolkit/tree/develop/tools/ComplianceRunner/src/DatasetComplianceRunner"
click node_dataset_test_runner "https://github.com/bhom/ci_toolkit/tree/develop/tools/ComplianceRunner/src/DatasetTestRunner"
click node_serialiser_runner "https://github.com/bhom/ci_toolkit/tree/develop/tools/SerialiserRunner/src/SerialiserRunner"
click node_versioning_runner "https://github.com/bhom/ci_toolkit/tree/develop/tools/VersioningRunner/src/VersioningRunner"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_repo_workflow,node_templates toneBlue
class node_build,node_compliance,node_dataset_tests,node_serialisation,node_versioning,node_unit_tests,node_format toneAmber
class node_resolve,node_prepare,node_changed,node_discover,node_infer,node_token toneMint
class node_compliance_runner,node_dataset_compliance_runner,node_dataset_test_runner,node_serialiser_runner,node_versioning_runner toneRose
class node_pr_results,node_bhom,node_github toneIndigo
```

## Components

### Workflow entry

- **Repository workflow**
- [Workflow templates](https://github.com/bhom/ci_toolkit/tree/develop/templates): `templates`

### CI checks

- [Build check](https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/ci-build): `.github/actions/ci-build`
- [Compliance check](https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/ci-compliance): `.github/actions/ci-compliance`
- [Dataset tests](https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/ci-dataset-tests): `.github/actions/ci-dataset-tests`
- [Serialisation check](https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/ci-serialisation): `.github/actions/ci-serialisation`
- [Versioning check](https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/ci-versioning): `.github/actions/ci-versioning`
- [Unit tests](https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/ci-unit-tests): `.github/actions/ci-unit-tests`
- [Format check](https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/ci-format): `.github/actions/ci-format`

### Shared plumbing

- [Dependency resolver](https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/resolve-dependencies): `.github/actions/resolve-dependencies`
- [Runner preparation](https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/prepare-runner): `.github/actions/prepare-runner`
- [Changed-file filter](https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/compute-changed-files): `.github/actions/compute-changed-files`
- [Solution discovery](https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/discover-solution): `.github/actions/discover-solution`
- [Config inference](https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/infer-verification-config): `.github/actions/infer-verification-config`
- [Token minting](https://github.com/bhom/ci_toolkit/tree/develop/.github/actions/mint-dep-token): `.github/actions/mint-dep-token`

### Analysis runners

- [Source compliance](https://github.com/bhom/ci_toolkit/tree/develop/tools/ComplianceRunner/src/ComplianceRunner): `tools/ComplianceRunner/src/ComplianceRunner`
- [Dataset compliance](https://github.com/bhom/ci_toolkit/tree/develop/tools/ComplianceRunner/src/DatasetComplianceRunner): `tools/ComplianceRunner/src/DatasetComplianceRunner`
- [Dataset test runner](https://github.com/bhom/ci_toolkit/tree/develop/tools/ComplianceRunner/src/DatasetTestRunner): `tools/ComplianceRunner/src/DatasetTestRunner`
- [Serialiser runner](https://github.com/bhom/ci_toolkit/tree/develop/tools/SerialiserRunner/src/SerialiserRunner): `tools/SerialiserRunner/src/SerialiserRunner`
- [Versioning runner](https://github.com/bhom/ci_toolkit/tree/develop/tools/VersioningRunner/src/VersioningRunner): `tools/VersioningRunner/src/VersioningRunner`

### Results

- **Pull request results**

### Other components

- **BHoM assemblies**
- **GitHub Actions**

## Connections

- Workflow templates → Repository workflow: copied into
- Repository workflow → Build check: invokes
- Repository workflow → Compliance check: invokes
- Repository workflow → Dataset tests: invokes
- Repository workflow → Serialisation check: invokes
- Repository workflow → Versioning check: invokes
- Repository workflow → Unit tests: invokes
- Repository workflow → Format check: invokes
- Build check → Dependency resolver: resolves dependencies
- Build check → Solution discovery: finds solution
- Build check → Changed-file filter: filters changes
- Compliance check → Changed-file filter: filters changes
- Dataset tests → Changed-file filter: filters changes
- Serialisation check → Changed-file filter: filters changes
- Versioning check → Changed-file filter: filters changes
- Unit tests → Solution discovery: finds solution
- Build check → Runner preparation: prepares runner
- Compliance check → Runner preparation: prepares runner
- Dataset tests → Runner preparation: prepares runner
- Serialisation check → Runner preparation: prepares runner
- Versioning check → Runner preparation: prepares runner
- Unit tests → Runner preparation: prepares runner
- Dependency resolver → Token minting: requests credentials
- Serialisation check → Config inference: infers configuration
- Versioning check → Config inference: infers configuration
- Compliance check → Source compliance: runs analysis
- Compliance check → Dataset compliance: runs dataset rules
- Dataset tests → Dataset test runner: runs fixtures
- Serialisation check → Serialiser runner: runs comparison
- Versioning check → Versioning runner: runs historical scan
- Serialiser runner → BHoM assemblies: loads assemblies
- Versioning runner → BHoM assemblies: loads assemblies
- Dataset test runner → BHoM assemblies: executes tests
- Source compliance → Pull request results: emits findings
- Dataset compliance → Pull request results: emits findings
- Dataset test runner → Pull request results: emits findings
- Serialiser runner → Pull request results: reports regressions
- Versioning runner → Pull request results: reports failures
- Build check → Pull request results: reports status
- Unit tests → Pull request results: reports status
- Format check → Pull request results: reports status
- GitHub Actions → Repository workflow: runs on pull request
