Build Setup
import AsciinemaPlayer from '@site/src/components/AsciinemaPlayer';
After installing the Fallout global tool, you can call it from anywhere on your machine to set up a new build:
# terminal-command
fallout :setup
Preferably, you should run the setup from inside an existing repository. Fallout will search for the next upwards .git or .svn directory to determine the build root directory. If neither is found, it will use the current directory. You can also pass the --root parameter to specify that the current directory should be used as a root directory.
During the setup, you'll be asked several questions to configure your build to your preferences:
Congratulations! π₯³ Your first build has now been set up, and you can run the build with the default implementation!
Effective Changesβ
The setup will create a number of files in your repository and β if you've chosen so β add the build project to your solution file. Below, you can examine the structure of added files and what they are used for:
<root-directory>
βββ .config
β βββ dotnet-tools.json # Local tool manifest pinning Fallout.GlobalTools
β
βββ .fallout # Root directory marker
β βββ build.schema.json # Build schema file
β βββ parameters.json # Default parameters file
β
βββ build
β βββ _build.csproj # Build project file
β βββ Build.cs # Default build implementation
β βββ Directory.Build.props # MSBuild stop files
β βββ Directory.Build.targets
β
βββ build.ps1 # Windows/PowerShell bootstrapping
βββ build.sh # Linux/Shell bootstrapping
The two thin bootstrappers (build.ps1 and build.sh) provision the .NET SDK locally when it's not on PATH, then run dotnet tool restore and dotnet fallout "$@". They're optional once you have a global dotnet install and have run dotnet tool restore at least once β but they're the safest way to run the build in CI and on a freshly-cloned machine. The .config/dotnet-tools.json manifest pins the exact Fallout.GlobalTools version your build expects.
Project Structureβ
While you can enjoy writing most build-relevant logic inside your build console applications, there is still a large number of files involved in the general process of build automation. Fallout organizes these files in different folders as linked files in the build project for you:
<root-directory>
βββ .config
β βββ dotnet-tools.json # Local tool manifest (Fallout.GlobalTools pin)
β
βββ .fallout
β βββ parameters.json # Parameters files
β βββ parameters.*.json
β
βββ global.json # SDK version
βββ nuget.config # NuGet feeds configuration
βββ version.json # Nerdbank GitVersioning configuration
<root-directory>
βββ .github
β βββ workflows # GitHub Actions
β βββ *.yml
β
βββ .teamcity # TeamCity
β βββ settings.kts
β
βββ .gitlab-ci.yml # GitLab CI
βββ .space.kts # JetBrains Space
βββ .travis.yml # Travis CI
βββ appveyor.yml # AppVeyor
βββ appveyor.*.yml
βββ azure-pipelines.yml # Azure Pipelines
βββ azure-pipelines.*.yml
βββ bitrise.yml # Bitrise
<root-directory>
βββ build.ps1 # Windows/PowerShell β thin shim, calls dotnet fallout
βββ build.sh # Linux/Shell β thin shim, calls dotnet fallout
<root-directory>
βββ **
βββ Directory.Build.props
βββ Directory.Build.targets
You can deactivate linking of the above files by removing the FalloutRootDirectory and FalloutScriptDirectory properties from the build project file. (Legacy NukeRootDirectory / NukeScriptDirectory properties are still recognized for migration but should be renamed.)
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
{/* <FalloutRootDirectory>..</FalloutRootDirectory> */}
{/* <FalloutScriptDirectory>..</FalloutScriptDirectory> */}
</PropertyGroup>
</Project>