Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

DOTNET_CLI_HOME not respected, unset HOME can break CI

Open
#637 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
35/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
csharp
Domain
cli

Research direction

Start with the path construction in src/LibraryManager/Cache/CacheService.cs:46 and src/LibraryManager/Configuration/Settings.cs:97, then reproduce the Jenkins or unset-HOME scenario described in the issue. Done means DOTNET_CLI_HOME is honored on non-Windows platforms and missing HOME no longer leads to an attempted /.librarymanager path or an unhandled permission error.

Written by the indexing model from the issue text.

Description

Describe the bug

Similar to NuGet#6989
On non-Windows platforms, DOTNET_CLI_HOME does not override HOME. And if HOME is unset, it effectively defaults to / potentially causing permissions issues in CI/CD systems etc.

To Reproduce

Steps to reproduce the behavior:

  1. Run the following Jenkinsfile in Jenkins:

pipeline {
	agent {
		docker {
			image 'mcr.microsoft.com/dotnet/sdk:5.0'
		}
	}
	environment {
		DOTNET_CLI_HOME = "/tmp/DOTNET_CLI_HOME"
		//HOME = "/tmp/DOTNET_CLI_HOME" // This line will "fix" it, but above should be enough.
	}
	stages {
		stage('Setup') {
			steps {
				sh 'dotnet tool install -g Microsoft.Web.LibraryManager.Cli'
			}
		}
		stage('Build') {
			steps {
				sh 'libman --version'
				sh 'libman restore'
			}
		}
	}
}
Expected behavior

If DOTNET_CLI_HOME is set, libman restore runs without error even if HOME is unset.
If neither is set, warn, rather than assuming '/.librarymanager'

Actual behavior
+ libman restore
Unhandled exception. System.TypeInitializationException: The type initializer for 'Microsoft.Web.LibraryManager.Configuration.Settings' threw an exception.
 ---> System.UnauthorizedAccessException: Access to the path '/.librarymanager' is denied.
 ---> System.IO.IOException: Permission denied
   --- End of inner exception stack trace ---
   at System.IO.FileSystem.CreateDirectory(String fullPath)
   at System.IO.Directory.CreateDirectory(String path)
   at Microsoft.Web.LibraryManager.Configuration.Settings.SaveSettingsFile(String filePath, JToken token) in C:\A\1\3\s\src\LibraryManager\Configuration\Settings.cs:line 170
   at Microsoft.Web.LibraryManager.Configuration.Settings.InitSettingsFile(String configFilePath) in C:\A\1\3\s\src\LibraryManager\Configuration\Settings.cs:line 82
   at Microsoft.Web.LibraryManager.Configuration.Settings..ctor() in C:\A\1\3\s\src\LibraryManager\Configuration\Settings.cs:line 73
   at Microsoft.Web.LibraryManager.Configuration.Settings..cctor() in C:\A\1\3\s\src\LibraryManager\Configuration\Settings.cs:line 35
   --- End of inner exception stack trace ---
   at Microsoft.Web.LibraryManager.Configuration.Settings.get_DefaultSettings() in C:\A\1\3\s\src\LibraryManager\Configuration\Settings.cs:line 35
   at Microsoft.Web.LibraryManager.Tools.Contracts.HostInteraction.get_Settings() in C:\A\1\3\s\src\libman\Contracts\HostInteraction.cs:line 41
   at Microsoft.Web.LibraryManager.Tools.Commands.ConfigCommand..ctor(IHostEnvironment hostEnvironment, Boolean throwOnUnexpectedArg) in C:\A\1\3\s\src\libman\Commands\ConfigCommand.cs:line 25
   at Microsoft.Web.LibraryManager.Tools.Commands.LibmanApp.Configure(CommandLineApplication parent) in C:\A\1\3\s\src\libman\Commands\LibmanApp.cs:line 34
   at Microsoft.Web.LibraryManager.Tools.Program.Main(String[] args) in C:\A\1\3\s\src\libman\Program.cs:line 32
Aborted (core dumped)
Additional context

libman --version 2.1.113+g422d40002e.RR

These spots could be changed to validate before calling Path.Combine:
src/LibraryManager/Cache/CacheService.cs:46: CacheFolderValue = Path.Combine(localAppData, ".librarymanager", "cache");
src/LibraryManager/Configuration/Settings.cs:97: return Path.Combine(Environment.ExpandEnvironmentVariables(envVar), ".librarymanager");

https://github.com/NuGet/Home/issues/6989
https://newbedev.com/dotnet-build-permission-denied-in-docker-container-running-jenkins
https://blog.jongallant.com/2018/09/solution-users-home-directory-could-not-be-determined/
https://stackoverflow.com/questions/53556623/dotnet-build-permission-denied-in-docker-container-running-jenkins

Dominant language
C#
Stars
486
Forks
91
PR merge metrics
No merged PRs in 30d

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from aspnet/LibraryManager

All issues in aspnet/LibraryManager

Similar issues

More C# issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.