Incrementalist.Cmd 1.0.0-beta4

This is a prerelease version of Incrementalist.Cmd.
dotnet tool install --global Incrementalist.Cmd --version 1.0.0-beta4
                    
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest
                    
if you are setting up this repo
dotnet tool install --local Incrementalist.Cmd --version 1.0.0-beta4
                    
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=Incrementalist.Cmd&version=1.0.0-beta4&prerelease
                    
nuke :add-package Incrementalist.Cmd --version 1.0.0-beta4
                    

🔄 Incrementalist

<img src="https://raw.githubusercontent.com/petabridge/Incrementalist/refs/heads/dev/docs/incrementalist-logo-dark.svg" width="90" alt="Incrementalist Logo" />

Incrementalist is a .NET tool that leverages libgit2sharp and Roslyn to compute incremental build steps for large .NET solutions. It helps optimize your CI/CD pipeline by building and testing only the projects affected by your changes.

🎯 When to Use Incrementalist

Incrementalist is particularly valuable for:

  • 🏗️ Large Solutions: If your solution contains dozens or hundreds of projects, Incrementalist can significantly reduce build times by only building what's necessary.
  • 📦 Monorepos: When managing multiple applications or services in a single repository, Incrementalist helps identify and build only the affected components.
  • 🌐 Microservice Architectures: In repositories containing multiple microservices, build only the services impacted by your changes.
  • 🔗 Complex Dependencies: When projects have intricate dependencies, Incrementalist automatically determines the complete build graph.
  • CI/CD Optimization: Reduce CI/CD pipeline execution time by skipping unnecessary builds and tests.

⚙️ Requirements

  • .NET 8.0 SDK or later
  • Git installed and available in the system PATH

📥 Installation

Incrementalist is available in two forms:

  1. Incrementalist Library - a .NET 8 library for programmatic use
  2. Incrementalist.Cmd - a dotnet tool for command-line use (recommended)

Install the command-line tool globally:

dotnet tool install --global Incrementalist.Cmd

Or install locally in your project:

# From your repository root
dotnet new tool-manifest # if you haven't already created a .config/dotnet-tools.json
dotnet tool install Incrementalist.Cmd

Running as a Global Tool

When installed globally, run commands directly using the incrementalist command:

# Get list of affected projects
incrementalist -b dev -f ./affected-projects.txt

# Run tests for affected projects
incrementalist -b dev -r -- test -c Release --no-build --nologo

Running as a Local Tool

When using Incrementalist as a local tool, you need to use dotnet tool run with an additional -- before the Incrementalist commands:

# Get list of affected projects
dotnet tool run incrementalist -- -b dev -f ./affected-projects.txt

# Build affected projects
dotnet tool run incrementalist -- -b dev -r -- build -c Release --nologo

# Run tests with coverage
dotnet tool run incrementalist -- -b dev -r -- test -c Release --no-build --logger:trx --collect:"XPlat Code Coverage" --results-directory ./testresults

# Run in parallel mode
dotnet tool run incrementalist -- -b dev -r --parallel -- build -c Release --nologo

# Save affected projects AND run commands
dotnet tool run incrementalist -- -b dev -f ./affected-projects.txt -r -- build -c Release --nologo

Note the command structure when using as a local tool:

  • First -- after dotnet tool run incrementalist is for Incrementalist options
  • Second -- (if using -r) is for the dotnet command to run on affected projects

🚀 Quick Start Examples

# Get list of affected projects and save to file
incrementalist -b dev -f ./affected-projects.txt

# Specify solution explicitly
incrementalist -s ./src/MySolution.sln -b dev -f ./affected-projects.txt

# Get list of affected folders
incrementalist -b dev -l -f ./affected-folders.txt

# Build only affected projects
incrementalist -b dev -r -- build -c Release --nologo

# Run tests for affected projects
incrementalist -b dev -r -- test -c Release --no-build --nologo

# Run tests with code coverage
incrementalist -b dev -r -- test -c Release --no-build --nologo /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:CoverletOutput=./coverage/

# Save affected projects AND run commands
incrementalist -b dev -f ./affected-projects.txt -r -- build -c Release --nologo

📄 Output Files

Incrementalist can generate two types of output files using -f, --file:

  1. Project Lists (default):

    D:\src\Project1\Project1.csproj,D:\src\Project2\Project2.csproj
    
  2. Folder Lists (with -l, --folders-only):

    D:\src\Project1,D:\src\Project2\SubFolder
    

These files can be used in build scripts, CI/CD pipelines, or other automation tools.

🛠️ Command-Line Options

  -s, --sln             Optional. Solution file to analyze. Uses first .sln in
                        current directory if not specified.

  -f, --file            Optional. Write output to the specified file.

  -l, --folders-only    Optional. List affected folders instead of projects.

  -b, --branch          Required. (Default: dev) Git branch to compare against
                        (e.g., 'dev' or 'master').

  -d, --dir             Optional. Working directory. Defaults to current directory.

  --verbose             Optional. (Default: false) Enable debug logging.

  -t, --timeout         Optional. (Default: 2) Solution load timeout in minutes.

  -r, --run            Optional. Run dotnet CLI command against affected projects.
                       All arguments after -- are passed to dotnet.

  --continue-on-error   Optional. (Default: true) Continue executing commands even
                       if some fail.

  --parallel           Optional. (Default: false) Execute commands in parallel.

  --fail-on-no-projects Optional. (Default: false) Fail if no projects are affected.

  --no-cache           Optional. (Default: false) Ignore any existing cache file
                      and perform a full Roslyn analysis.

  --help                Display help screen.

  --version             Display version information.

⚡ Running Commands

Execute dotnet CLI commands against affected projects:

# Build affected projects
incrementalist -b dev -r -- build -c Release --nologo

# Run tests
incrementalist -b dev -r -- test -c Release --no-build --nologo

# Run in parallel
incrementalist -b dev -r --parallel -- build -c Release --nologo

# Stop on first error
incrementalist -b dev -r --continue-on-error=false -- build -c Release --nologo

📚 Documentation

📜 License

Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0

Copyright 2015-2025 Petabridge

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

Version Downloads Last updated
1.0.0-beta4 458 2/25/2025
1.0.0-beta3 152 2/25/2025
1.0.0-beta2 149 2/24/2025
1.0.0-beta1 152 2/21/2025
0.9.0 51,059 11/22/2023
0.8.0 34,367 11/24/2022
0.7.0 12,645 5/24/2022
0.6.0 30,022 11/10/2021
0.5.0 1,011 6/16/2021
0.4.0 25,091 12/23/2020
0.3.0 812 9/26/2020
0.2.2 38,339 2/14/2020
0.2.1 6,304 11/18/2019
0.2.0 2,062 10/29/2019
0.1.7 3,289 9/9/2019
0.1.6 799 8/30/2019
0.1.5 742 8/30/2019
0.1.4 3,786 5/17/2019
0.1.3 842 5/15/2019
0.1.2 752 5/8/2019
0.1.1 727 5/8/2019
0.1.0 805 5/3/2019

* [Added support for `IProgress<ProjectLoadProgress>` to MSBuild](https://github.com/petabridge/Incrementalist/pull/353)
* [Fix cli parsing](https://github.com/petabridge/Incrementalist/pull/349)
* [Bumped Roslyn to 4.13.0](https://github.com/petabridge/Incrementalist/pull/351)