Introduction
Atom is a build automation framework for .NET that lets you define your entire build pipeline in C#. Instead of maintaining separate YAML or script files, you write strongly-typed build logic alongside your application code, gaining full IDE support — IntelliSense, refactoring, and step-through debugging.
Key Concepts
| Concept | Description |
|---|---|
| Build Definition | A C# class that declares your targets, parameters, and build configuration. |
| Target | A named unit of work (compile, test, pack, deploy, etc.) with optional dependencies on other targets. |
| Parameter | A value that can be supplied via the command line, environment variable, appsettings.json, or a secrets provider. |
| Module | A NuGet package that adds reusable targets, parameters, or service registrations to your build. |
| Workflow | An optional layer that maps targets to CI/CD jobs and generates platform-specific YAML (GitHub Actions, Azure DevOps). |
Package Overview
Atom is split into several NuGet packages so you only pull in what you need:
| Package | Purpose |
|---|---|
Invex.Atom.Build |
Core framework — build definitions, targets, parameters, hosting. |
Invex.Atom.Workflows |
Workflow definitions, triggers, and YAML generation. |
Invex.Atom.Module.* |
First-party modules (Dotnet, GitVersion, AzureKeyVault, etc.). |
Invex.Atom.Tool |
The atom .NET global tool for running builds from the command line. |
Foundational Libraries
Several lower-level building blocks live in their own repositories and are published as standalone packages. You don't
normally reference these directly — they are pulled in transitively by Invex.Atom.Build — but their types surface
through Atom (for example via IBuildAccessor.RootedFileSystem and IBuildAccessor.ProcessRunner):
| Package | Purpose |
|---|---|
Invex.FileSystem |
IRootedFileSystem, RootedPath, path providers, and file transformations. |
Invex.Process |
IProcessRunner for executing external tools. |
Invex.SemanticVersion |
Semantic versioning utilities. |
Invex.StructuredText |
Structured text / YAML writing used by the workflow generators. |
How It Works
- You create a C# project (or a single
.csfile) that references the Atom packages. - You define a class decorated with
[BuildDefinition]that inherits fromBuildDefinition(orWorkflowBuildDefinitionif you need CI/CD generation). - Inside that class you declare targets — lambda-based definitions that describe what to execute, their dependencies, required parameters, and produced artifacts.
- You run the build with
dotnet run -- <TargetName>(or via theatomglobal tool). - If you use
WorkflowBuildDefinition, running theGentarget emits platform-specific YAML that invokes your same build on CI.