![]() |
VOOZH | about |
dotnet add package GiantCroissant.Lunar.Build.Configuration --version 0.1.1-ci.113
NuGet\Install-Package GiantCroissant.Lunar.Build.Configuration -Version 0.1.1-ci.113
<PackageReference Include="GiantCroissant.Lunar.Build.Configuration" Version="0.1.1-ci.113" />
<PackageVersion Include="GiantCroissant.Lunar.Build.Configuration" Version="0.1.1-ci.113" />Directory.Packages.props
<PackageReference Include="GiantCroissant.Lunar.Build.Configuration" />Project file
paket add GiantCroissant.Lunar.Build.Configuration --version 0.1.1-ci.113
#r "nuget: GiantCroissant.Lunar.Build.Configuration, 0.1.1-ci.113"
#:package GiantCroissant.Lunar.Build.Configuration@0.1.1-ci.113
#addin nuget:?package=GiantCroissant.Lunar.Build.Configuration&version=0.1.1-ci.113&prereleaseInstall as a Cake Addin
#tool nuget:?package=GiantCroissant.Lunar.Build.Configuration&version=0.1.1-ci.113&prereleaseInstall as a Cake Tool
This directory contains shared configuration interfaces and implementations for NUKE build automation.
A simplified, reusable interface that provides wrapper script integration for location-independent builds with priority-based path resolution and smart configuration discovery.
Deprecation: IWrapperPathComponent has been replaced by IWrapperPath. Please migrate any remaining references.
The IWrapperPath solves the common problem of JSON configuration discovery in multi-project workspaces by providing:
DebugWrapper target for troubleshootingTo use IWrapperPath in your build class:
partial class Build :
NukeBuild,
IGeneralizedBuildComponent,
IWrapperPath // Add this interface
{
// 1. Define project-specific configuration identifiers
public string[] ProjectConfigIdentifiers => new[]
{
"com.yourcompany.yourproject",
"scoped-1234",
"Your Project Name"
};
// 2. Add wrapper parameter properties with NUKE Parameter attributes
[Parameter("NUKE root directory override from wrapper script", Name = "wrapper-nuke-root")]
readonly string? _wrapperNukeRootParam;
[Parameter("Config path override from wrapper script", Name = "wrapper-config-path")]
readonly string? _wrapperConfigPathParam;
[Parameter("Script directory from wrapper script", Name = "wrapper-script-dir")]
readonly string? _wrapperScriptDirParam;
// 3. Implement interface properties
public string? WrapperNukeRootParam => _wrapperNukeRootParam;
public string? WrapperConfigPathParam => _wrapperConfigPathParam;
public string? WrapperScriptDirParam => _wrapperScriptDirParam;
// 4. Use WrapperNukeRoot/WrapperConfigPath for path resolution
private IBuildConfigurationProvider ConfigProvider
{
get
{
if (_configProvider == null)
{
_configProvider = new BuildConfigurationProvider();
var root = WrapperNukeRoot; // From interface
var configPath = WrapperConfigPath; // From interface
_configProvider.LoadConfiguration(root, configPath);
}
return _configProvider;
}
}
}
Create wrapper scripts in your project's build/nuke/scripts/ directory:
PowerShell: build-with-root.ps1
[CmdletBinding()]
Param(
[Parameter(Mandatory=$false)]
[string]$NukeRoot,
[Parameter(Mandatory=$false)]
[string]$ConfigPath,
[Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)]
[string[]]$BuildArguments
)
# Set environment variables and parameters
if ($NukeRoot) {
$env:WRAPPER_NUKE_ROOT = $NukeRoot
}
if ($ConfigPath) {
$env:WRAPPER_CONFIG_PATH = $ConfigPath
}
if ($PSScriptRoot) {
$env:WRAPPER_SCRIPT_DIR = $PSScriptRoot
}
# Auto-detect project root (3 levels up from scripts/)
if (-not $NukeRoot -and $PSScriptRoot) {
$DetectedRoot = Split-Path (Split-Path (Split-Path $PSScriptRoot -Parent) -Parent) -Parent
$env:WRAPPER_NUKE_ROOT = $DetectedRoot
}
# Build final arguments with wrapper parameters
$FinalBuildArguments = @()
if ($NukeRoot) {
$FinalBuildArguments += "--wrapper-nuke-root=$NukeRoot"
}
if ($ConfigPath) {
$FinalBuildArguments += "--wrapper-config-path=$ConfigPath"
}
if ($PSScriptRoot) {
$FinalBuildArguments += "--wrapper-script-dir=$PSScriptRoot"
}
if ($env:WRAPPER_NUKE_ROOT) {
$FinalBuildArguments += "--root=$($env:WRAPPER_NUKE_ROOT)"
}
if ($BuildArguments) {
$FinalBuildArguments += $BuildArguments
}
# Change to project root and execute build
$BuildScript = Join-Path (Split-Path $PSScriptRoot -Parent) "build.ps1"
$OriginalLocation = Get-Location
if ($env:WRAPPER_NUKE_ROOT -and (Test-Path $env:WRAPPER_NUKE_ROOT)) {
Set-Location $env:WRAPPER_NUKE_ROOT
}
try {
& $BuildScript @FinalBuildArguments
$exitCode = $LASTEXITCODE
} finally {
Set-Location $OriginalLocation
}
exit $exitCode
CMD: build-with-root.cmd
@echo off
setlocal
REM Auto-detect project root from script location
for %%I in (%~dp0..) do set "NUKE_DIR=%%~fI"
for %%I in (%NUKE_DIR%\..) do set "BUILD_DIR=%%~fI"
for %%I in (%BUILD_DIR%\..) do set "PROJECT_ROOT=%%~fI"
REM Set environment variables
set WRAPPER_SCRIPT_DIR=%~dp0
set WRAPPER_NUKE_ROOT=%PROJECT_ROOT%
REM Change to project root and execute build
cd /d "%PROJECT_ROOT%"
call "%NUKE_DIR%\build.cmd" --wrapper-script-dir="%WRAPPER_SCRIPT_DIR%" --root="%PROJECT_ROOT%" %*
From Project Root:
# Using PowerShell wrapper
./build/nuke/scripts/build-with-root.ps1 BuildAll
# Using CMD wrapper
./build/nuke/scripts/build-with-root.cmd BuildAll
From Any Directory:
# Explicit paths
./build-with-root.ps1 -NukeRoot "C:\my-project" -ConfigPath "C:\my-project\build\nuke\build-config.json" BuildAll
# Auto-detection (script automatically detects project root)
./build-with-root.ps1 BuildAll
Debug Wrapper Functionality:
./build-with-root.ps1 DebugWrapper
The component uses a 3-level priority system:
Script Parameters (Highest Priority)
--wrapper-nuke-root=<path>--wrapper-config-path=<path>--wrapper-script-dir=<path>Environment Variables (Medium Priority)
WRAPPER_NUKE_ROOTWRAPPER_CONFIG_PATHWRAPPER_SCRIPT_DIRAuto-detection (Fallback)
../build-config.json relative to script directoryThe component automatically discovers project-specific build-config.json files using:
WrapperConfigPath if provided and validProjectConfigIdentifiers patternsBefore (Project-specific Implementation):
After (IWrapperPath Interface):
To migrate existing wrapper implementations to use IWrapperPath:
IWrapperPath in your build classWrapperNukeRoot, WrapperConfigPath)DebugWrapper targetConfig Not Found:
ProjectConfigIdentifiers match your build-config.json contentDebugWrapper target to see path resolution detailsEnvironment Variables Not Working:
Build Failures:
.nuke directory exists in project rootbuild-config.json exists and contains valid JSONThe IWrapperPath provides:
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net9.0 net9.0 is compatible. net9.0-android net9.0-android was computed. net9.0-browser net9.0-browser was computed. net9.0-ios net9.0-ios was computed. net9.0-maccatalyst net9.0-maccatalyst was computed. net9.0-macos net9.0-macos was computed. net9.0-tvos net9.0-tvos was computed. net9.0-windows net9.0-windows was computed. net10.0 net10.0 was computed. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
Showing the top 5 NuGet packages that depend on GiantCroissant.Lunar.Build.Configuration:
| Package | Downloads |
|---|---|
|
GiantCroissant.Lunar.Build
Meta-package that depends on the Lunar Build component packages for one-line install. |
|
|
GiantCroissant.Lunar.Build.NuGet
NuGet packaging and repository management components for Nuke build system. Includes NuGet package building, repository management, and publishing workflows. |
|
|
GiantCroissant.Lunar.Build.CodeQuality
Code quality and analysis components for Nuke build system. Includes Roslynator CLI integration, ReSharper CLI integration, and comprehensive code quality workflows. |
|
|
GiantCroissant.Lunar.Build.Mobile
Base mobile build components for iOS and Android development with shared interfaces and patterns |
|
|
GiantCroissant.Lunar.Build.Mobile.iOS
RFC021: iOS build component with comprehensive iOS build support including Xcode integration, code signing, TestFlight deployment, and Firebase App Distribution |
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.1.1-ci.113 | 190 | 10/7/2025 |
| 0.1.1-ci.112 | 184 | 10/7/2025 |
| 0.1.1-ci.111 | 271 | 9/15/2025 |
| 0.1.1-ci.110 | 260 | 9/15/2025 |
| 0.1.1-ci.109 | 259 | 9/15/2025 |
| 0.1.1-ci.108 | 259 | 9/15/2025 |
| 0.1.1-ci.107 | 261 | 9/15/2025 |
| 0.1.1-ci.104 | 229 | 9/15/2025 |
| 0.1.1-ci.90 | 187 | 9/8/2025 |
| 0.1.1-ci.40 | 181 | 9/6/2025 |
| 0.1.1-ci.21 | 210 | 9/4/2025 |
| 0.1.1-ci.20 | 191 | 9/3/2025 |
| 0.1.1-chore-ci-pack-mobile-... | 77 | 9/4/2025 |
RFC029: Massive simplification - eliminated ComponentDiscoveryService, ComponentRegistry, and 15+ exception types. Replaced with clean NUKE-native interface composition.