You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
D. Moonfire 6a0b9d1e94 test: fixing tests to match System.CommandLine changes 7 months ago
.config feat: initial commit 7 months ago
scripts chore: switching test detection 7 months ago
src feat: updating package dependencies 7 months ago
tests test: fixing tests to match System.CommandLine changes 7 months ago
.editorconfig feat: initial commit 7 months ago
.envrc build: preparing project layout 7 months ago
.gitignore fix(template): correcting git ignore 7 months ago
.prettierignore feat: initial commit 7 months ago
.woodpecker.yml ci(woodpecker): adding basic file 7 months ago
CODE-OF-CONDUCT.md feat: initial commit 7 months ago
LICENSE.md refactor!: reverting AGPL-3.0 back to MIT license 1 year ago
LICENSE.txt feat: initial commit 7 months ago
MfGames.ToolBuilder.sln refactor!: moved table services into a dedicated assembly 1 year ago
MfGames.ToolBuilder.sln.DotSettings feat: initial commit 2 years ago
NuGet.Config fix: integrating common project layout 7 months ago
README.md refactor!: moved table services into a dedicated assembly 1 year ago
flake.lock fix: integrating common project layout 7 months ago
flake.nix feat: initial commit 7 months ago
lefthook.yml fix: integrating common project layout 7 months ago

README.md

MfGames.ToolBuilder

An opinionated library for easily creating command-line tools in C#.

MfGames.ToolBuilder is a library to encapsulate the setup and running of tools, CLI components arranged with verbs (like git). It includes some opinionated decisions on default setup.

Building

To make sure the environment is correctly set up for build:

./scripts/setup.sh

To build the project:

./scripts/build.sh

To test the project:

./scripts/test.sh

Commands

This library is built on top of System.CommandLine and .NET 6 generic hosting. The commands are combined together using dependency injection (see below) which allows for them to be included as parameters for the constructor or dynamically discovered.

All commands are assumed to be asynchronous and include a cancellation token in their calls.

System.CommandLine was chosen because it allows for composition of features instead on needing inheritance to give a tool the ability to render a table or handle additional features.

Autofac

While most libraries should only use the included service provider infrastructure with the base library, this tool sets up Autofac to handle services. This allows for both service provider usage (via ConfigureServices) and Autofac (via ConfigureContainer).

Autofac was chosen because of a number of quality of life features and personal preferences of the developer. A tool can easily ignore that functionality in favor of using only IServiceProvider.

Serilog

Likewise, tools are set up to use Serilog for logging instead of the built-in logging code. However, both are served by Serilog so ILoggerFactory<T> can be used.

Like Autofac, Serilog was given because of the variety of sinks, certain quality of life, but also the ability to log more detailed objects. It also produces some coloring to log details based on data types.

To use the Serilog functionality with ILoggerFactory, objects needed to be included as parameters instead of inlined with string interpolation.