Skip to content

Commit bc53a41

Browse files
authored
Merge pull request #4432 from Bi0T1N/dotted_config
Support for dotted versions of the GitVersion config files by default
2 parents 7e39153 + 91af213 commit bc53a41

File tree

5 files changed

+39
-7
lines changed

5 files changed

+39
-7
lines changed

docs/input/docs/usage/cli/arguments.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ GitVersion [path]
4141
E.g. /output json /format {SemVer} - will output `1.2.3+beta.4`
4242
/output json /format {Major}.{Minor} - will output `1.2`
4343
/l Path to logfile.
44-
/config Path to config file (defaults to GitVersion.yml or GitVersion.yaml)
44+
/config Path to config file (defaults to GitVersion.yml, GitVersion.yaml, .GitVersion.yml or .GitVersion.yaml)
4545
/showconfig Outputs the effective GitVersion config (defaults + custom
46-
from GitVersion.yml or GitVersion.yaml) in yaml format
46+
from GitVersion.yml, GitVersion.yaml, .GitVersion.yml or .GitVersion.yaml) in yaml format
4747
/overrideconfig Overrides GitVersion config values inline (semicolon-
4848
separated key value pairs e.g. /overrideconfig
4949
tag-prefix=Foo)
@@ -97,7 +97,7 @@ GitVersion [path]
9797
9898
## Override config
9999
100-
`/overrideconfig [key=value]` will override appropriate `key` from 'GitVersion.yml' or 'GitVersion.yaml'.
100+
`/overrideconfig [key=value]` will override appropriate `key` from 'GitVersion.yml', 'GitVersion.yaml', '.GitVersion.yml' or '.GitVersion.yaml'.
101101
102102
To specify multiple options add multiple `/overrideconfig [key=value]` entries:
103103
`/overrideconfig key1=value1 /overrideconfig key2=value2`.
@@ -129,7 +129,7 @@ Following options are supported:
129129
130130
Read more about [Configuration](/docs/reference/configuration).
131131
132-
Using `override-config` on the command line will not change the contents of the config file `GitVersion.yml` or `GitVersion.yaml`.
132+
Using `override-config` on the command line will not change the contents of the config file `GitVersion.yml`, `GitVersion.yaml`, `.GitVersion.yml` or `.GitVersion.yaml`.
133133
134134
### Example: How to override configuration option 'tag-prefix' to use prefix 'custom'
135135

src/GitVersion.App/OverrideConfigurationOptionParser.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ internal class OverrideConfigurationOptionParser
1818
/// </summary>
1919
/// <returns></returns>
2020
/// <remarks>
21-
/// Lookup keys are created from <see cref="System.Text.Json.Serialization.JsonPropertyNameAttribute"/> to match 'GitVersion.yml' or 'GitVersion.yaml' file
21+
/// Lookup keys are created from <see cref="System.Text.Json.Serialization.JsonPropertyNameAttribute"/> to match 'GitVersion.yml', 'GitVersion.yaml', '.GitVersion.yml' or '.GitVersion.yaml' file
2222
/// options as close as possible.
2323
/// </remarks>
2424
private static ILookup<string?, PropertyInfo> GetSupportedProperties() => typeof(GitVersionConfiguration).GetProperties(BindingFlags.Public | BindingFlags.Instance)

src/GitVersion.Configuration.Tests/Configuration/ConfigurationFileLocatorTests.cs

+26
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,20 @@ public void Setup()
3737

3838
[TestCase(ConfigurationFileLocator.DefaultFileName, ConfigurationFileLocator.DefaultFileName)]
3939
[TestCase(ConfigurationFileLocator.DefaultFileName, ConfigurationFileLocator.DefaultAlternativeFileName)]
40+
[TestCase(ConfigurationFileLocator.DefaultFileName, ConfigurationFileLocator.DefaultFileNameDotted)]
41+
[TestCase(ConfigurationFileLocator.DefaultFileName, ConfigurationFileLocator.DefaultAlternativeFileNameDotted)]
4042
[TestCase(ConfigurationFileLocator.DefaultAlternativeFileName, ConfigurationFileLocator.DefaultFileName)]
4143
[TestCase(ConfigurationFileLocator.DefaultAlternativeFileName, ConfigurationFileLocator.DefaultAlternativeFileName)]
44+
[TestCase(ConfigurationFileLocator.DefaultAlternativeFileName, ConfigurationFileLocator.DefaultFileNameDotted)]
45+
[TestCase(ConfigurationFileLocator.DefaultAlternativeFileName, ConfigurationFileLocator.DefaultAlternativeFileNameDotted)]
46+
[TestCase(ConfigurationFileLocator.DefaultFileNameDotted, ConfigurationFileLocator.DefaultFileName)]
47+
[TestCase(ConfigurationFileLocator.DefaultFileNameDotted, ConfigurationFileLocator.DefaultAlternativeFileName)]
48+
[TestCase(ConfigurationFileLocator.DefaultFileNameDotted, ConfigurationFileLocator.DefaultFileNameDotted)]
49+
[TestCase(ConfigurationFileLocator.DefaultFileNameDotted, ConfigurationFileLocator.DefaultAlternativeFileNameDotted)]
50+
[TestCase(ConfigurationFileLocator.DefaultAlternativeFileNameDotted, ConfigurationFileLocator.DefaultFileName)]
51+
[TestCase(ConfigurationFileLocator.DefaultAlternativeFileNameDotted, ConfigurationFileLocator.DefaultAlternativeFileName)]
52+
[TestCase(ConfigurationFileLocator.DefaultAlternativeFileNameDotted, ConfigurationFileLocator.DefaultFileNameDotted)]
53+
[TestCase(ConfigurationFileLocator.DefaultAlternativeFileNameDotted, ConfigurationFileLocator.DefaultAlternativeFileNameDotted)]
4254
public void ThrowsExceptionOnAmbiguousConfigFileLocation(string repoConfigFile, string workingConfigFile)
4355
{
4456
using var repositoryConfigFilePath = this.fileSystem.SetupConfigFile(path: this.repoPath, fileName: repoConfigFile);
@@ -52,13 +64,27 @@ public void ThrowsExceptionOnAmbiguousConfigFileLocation(string repoConfigFile,
5264

5365
[TestCase(ConfigurationFileLocator.DefaultFileName)]
5466
[TestCase(ConfigurationFileLocator.DefaultAlternativeFileName)]
67+
[TestCase(ConfigurationFileLocator.DefaultFileNameDotted)]
68+
[TestCase(ConfigurationFileLocator.DefaultAlternativeFileNameDotted)]
5569
public void NoWarnOnGitVersionYmlFile(string configurationFile)
5670
{
5771
using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, fileName: configurationFile);
5872

5973
Should.NotThrow(() => this.configurationProvider.ProvideForDirectory(this.repoPath));
6074
}
6175

76+
[TestCase(ConfigurationFileLocator.DefaultFileName)]
77+
[TestCase(ConfigurationFileLocator.DefaultAlternativeFileName)]
78+
[TestCase(ConfigurationFileLocator.DefaultFileNameDotted)]
79+
[TestCase(ConfigurationFileLocator.DefaultAlternativeFileNameDotted)]
80+
public void NoWarnOnLowercasedGitVersionYmlFile(string configurationFile)
81+
{
82+
var lowercasedConfigurationFile = configurationFile.ToLower();
83+
using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, fileName: lowercasedConfigurationFile);
84+
85+
Should.NotThrow(() => this.configurationProvider.ProvideForDirectory(this.repoPath));
86+
}
87+
6288
[Test]
6389
public void NoWarnOnNoGitVersionYmlFile() => Should.NotThrow(() => this.configurationProvider.ProvideForDirectory(this.repoPath));
6490
}

src/GitVersion.Configuration/ConfigurationFileLocator.cs

+6-2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ internal class ConfigurationFileLocator(
1313
{
1414
public const string DefaultFileName = "GitVersion.yml";
1515
public const string DefaultAlternativeFileName = "GitVersion.yaml";
16+
public const string DefaultFileNameDotted = $".{DefaultFileName}";
17+
public const string DefaultAlternativeFileNameDotted = $".{DefaultAlternativeFileName}";
18+
public List<string> SupportedConfigFileNames = [DefaultFileName, DefaultAlternativeFileName, DefaultFileNameDotted, DefaultAlternativeFileNameDotted];
1619

1720
private readonly IFileSystem fileSystem = fileSystem.NotNull();
1821
private readonly ILog log = log.NotNull();
@@ -30,7 +33,8 @@ public void Verify(string? workingDirectory, string? projectRootDirectory)
3033
public string? GetConfigurationFile(string? directory)
3134
{
3235
if (directory is null) return null;
33-
string?[] candidates = [this.ConfigurationFile, DefaultFileName, DefaultAlternativeFileName];
36+
37+
string?[] candidates = [this.ConfigurationFile, .. SupportedConfigFileNames];
3438
var candidatePaths =
3539
from candidate in candidates
3640
where !candidate.IsNullOrWhiteSpace()
@@ -65,7 +69,7 @@ private void WarnAboutAmbiguousConfigFileSelection(string? workingDirectory, str
6569

6670
if (!hasConfigInProjectRootDirectory && !hasConfigInWorkingDirectory)
6771
{
68-
if (this.ConfigurationFile is not (DefaultFileName or DefaultAlternativeFileName))
72+
if (!SupportedConfigFileNames.Any(entry => entry.Equals(this.ConfigurationFile, StringComparison.OrdinalIgnoreCase)))
6973
{
7074
workingConfigFile = PathHelper.Combine(workingDirectory, this.ConfigurationFile);
7175
projectRootConfigFile = PathHelper.Combine(projectRootDirectory, this.ConfigurationFile);

src/GitVersion.Core.Tests/Core/GitVersionExecutorTests.cs

+2
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,8 @@ public void CacheFileIsMissing()
243243

244244
[TestCase(ConfigurationFileLocator.DefaultFileName)]
245245
[TestCase(ConfigurationFileLocator.DefaultAlternativeFileName)]
246+
[TestCase(ConfigurationFileLocator.DefaultFileNameDotted)]
247+
[TestCase(ConfigurationFileLocator.DefaultAlternativeFileNameDotted)]
246248
public void ConfigChangeInvalidatesCache(string configFileName)
247249
{
248250
const string versionCacheFileContent = """

0 commit comments

Comments
 (0)