diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..cd967fc
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,25 @@
+**/.dockerignore
+**/.env
+**/.git
+**/.gitignore
+**/.project
+**/.settings
+**/.toolstarget
+**/.vs
+**/.vscode
+**/.idea
+**/*.*proj.user
+**/*.dbmdl
+**/*.jfm
+**/azds.yaml
+**/bin
+**/charts
+**/docker-compose*
+**/Dockerfile*
+**/node_modules
+**/npm-debug.log
+**/obj
+**/secrets.dev.yaml
+**/values.dev.yaml
+LICENSE
+README.md
\ No newline at end of file
diff --git a/AppSettings.Merge.sln b/AppSettings.Merge.sln
index 604a60a..e117091 100644
--- a/AppSettings.Merge.sln
+++ b/AppSettings.Merge.sln
@@ -8,8 +8,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
ProjectSection(SolutionItems) = preProject
.editorconfig = .editorconfig
.gitmessage = .gitmessage
- build.cake = build.cake
.gitignore = .gitignore
+ src\BlazorMerge\Dockerfile = src\BlazorMerge\Dockerfile
+ action.yml = action.yml
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BlazorMerge", "src\BlazorMerge\BlazorMerge.csproj", "{547043C0-1917-4C37-9624-97217B9B3D69}"
diff --git a/action.yml b/action.yml
new file mode 100644
index 0000000..bf635c8
--- /dev/null
+++ b/action.yml
@@ -0,0 +1,20 @@
+name: 'Blazor Merge Action'
+description: 'Combines the appsettings.json and appsettings.environment.json files into a single appsettings.json file'
+inputs:
+ app-environment:
+ description: 'The environment to use for the appsettings file'
+ required: true
+ path:
+ description: 'The path to the appsettings files'
+ required: true
+runs:
+ using: 'docker'
+ image: 'src/BlazorMerge/Dockerfile'
+ args:
+ - '-e'
+ - ${{ inputs.app-environment }}
+ - '-p'
+ - '/github/workspace${{ inputs.path }}'
+branding:
+ icon: 'git-merge'
+ color: 'green'
diff --git a/src/BlazorMerge/BlazorMerge.csproj b/src/BlazorMerge/BlazorMerge.csproj
index 4d2a71b..fd52175 100644
--- a/src/BlazorMerge/BlazorMerge.csproj
+++ b/src/BlazorMerge/BlazorMerge.csproj
@@ -5,6 +5,7 @@
net7.0
enable
enable
+ Linux
@@ -15,9 +16,9 @@
-
- Always
-
+
+ .dockerignore
+
diff --git a/src/BlazorMerge/Constants.cs b/src/BlazorMerge/Constants.cs
new file mode 100644
index 0000000..792b6c4
--- /dev/null
+++ b/src/BlazorMerge/Constants.cs
@@ -0,0 +1,7 @@
+namespace BlazorMerge;
+
+public class Constants
+{
+ public static string MainFileName = "appsettings.json";
+ public static string EnvironmentFileName = "appsettings.{environment}.json";
+}
\ No newline at end of file
diff --git a/src/BlazorMerge/Dockerfile b/src/BlazorMerge/Dockerfile
new file mode 100644
index 0000000..cbaf06c
--- /dev/null
+++ b/src/BlazorMerge/Dockerfile
@@ -0,0 +1,12 @@
+# Set the base image as the .NET 7.0 SDK (this includes the runtime)
+FROM mcr.microsoft.com/dotnet/sdk:7.0 as build-env
+
+# Copy everything and publish the release (publish implicitly restores and builds)
+WORKDIR /app
+COPY . ./
+RUN dotnet publish ./BlazorMerge.csproj -c Release -o out --no-self-contained
+
+# Relayer the .NET SDK, anew with the build output
+FROM mcr.microsoft.com/dotnet/sdk:7.0
+COPY --from=build-env /app/out .
+ENTRYPOINT [ "dotnet", "/BlazorMerge.dll" ]
\ No newline at end of file
diff --git a/src/BlazorMerge/Feature/Merge/MergeService.cs b/src/BlazorMerge/Feature/Merge/MergeService.cs
index 6155191..12b5026 100644
--- a/src/BlazorMerge/Feature/Merge/MergeService.cs
+++ b/src/BlazorMerge/Feature/Merge/MergeService.cs
@@ -5,20 +5,18 @@ namespace BlazorMerge.Feature.Merge;
public class MergeService
{
- private readonly IConfiguration _config;
private readonly IFileManager _fileManager;
private readonly IMerger _merger;
public MergeService(IConfiguration config, IFileManager fileManager, IMerger merger)
{
- _config = config;
_fileManager = fileManager;
_merger = merger;
}
public int MergeEnvironment(MergeOptions options)
{
- var mainFileName = _config["AppSettings:MainFileName"] ?? throw new InvalidOperationException(message:"MainFileName is not set in appsettings.json");
+ var mainFileName = Constants.MainFileName;
var mainFilePath = ConstructPath(options.Path, mainFileName);
var readAppSetting = _fileManager.ReadFile(mainFilePath);
var environmentFileName = ReplacePath(options);
@@ -51,7 +49,7 @@ private void DeleteSettingsFiles(MergeOptions options)
private bool OnlySettingsFiles(string fileName, MergeOptions options)
{
- var mainFileName = _config["AppSettings:MainFileName"] ?? throw new InvalidOperationException(message:"MainFileName is not set in appsettings.json");
+ var mainFileName = Constants.MainFileName;
var environmentFileName = ReplacePath(options);
return fileName.EndsWith(mainFileName) ||
fileName.EndsWith($"{mainFileName}.br") ||
@@ -106,7 +104,7 @@ private void WriteNewSettingsFile(string readAppSetting, string readEnvironmentS
private string ReplacePath(MergeOptions options)
{
var environment = options.Environment;
- var environmentFileNameFormat = _config["AppSettings:EnvironmentFileName"] ?? throw new InvalidOperationException("EnvironmentFileName is not set in appsettings.json");
+ var environmentFileNameFormat = Constants.EnvironmentFileName;
return environmentFileNameFormat.Replace("{environment}", environment);
}
diff --git a/src/BlazorMerge/Files/FileManager.cs b/src/BlazorMerge/Files/FileManager.cs
index bf4815a..812edcd 100644
--- a/src/BlazorMerge/Files/FileManager.cs
+++ b/src/BlazorMerge/Files/FileManager.cs
@@ -1,15 +1,22 @@
-namespace BlazorMerge.Files;
+using Microsoft.Extensions.Logging;
+
+namespace BlazorMerge.Files;
public class FileManager : IFileManager
{
+ private readonly ILogger _logger;
+
+ public FileManager(ILogger logger)
+ {
+ _logger = logger;
+ }
+
public string ReadFile(string path)
{
- if (FileDoesNotExist(path))
- {
- throw new FileNotFoundException($"File {path} does not exist");
- }
-
- return File.ReadAllText(path);
+ if (!FileDoesNotExist(path)) return File.ReadAllText(path);
+ _logger.LogInformation("File {Path} does not exist", path);
+ throw new FileNotFoundException($"File {path} does not exist");
+
}
private static bool FileDoesNotExist(string path)
@@ -19,11 +26,13 @@ private static bool FileDoesNotExist(string path)
public void WriteFile(string path, string content)
{
+ _logger.LogInformation("Writing file {Path}", path);
File.WriteAllText(path, content);
}
public void DeleteFile(string path)
{
+ _logger.LogInformation("Deleting file {Path}", path);
File.Delete(path);
}
diff --git a/src/BlazorMerge/Program.cs b/src/BlazorMerge/Program.cs
index 1ba9771..5dd767c 100644
--- a/src/BlazorMerge/Program.cs
+++ b/src/BlazorMerge/Program.cs
@@ -27,9 +27,5 @@ IHostBuilder CreateHostBuilder(string[] strings)
s.AddSingleton();
s.AddSingleton();
s.AddSingleton();
- })
- .ConfigureAppConfiguration(app =>
- {
- app.AddJsonFile("appsettings.json");
});
}
\ No newline at end of file
diff --git a/src/BlazorMerge/appsettings.json b/src/BlazorMerge/appsettings.json
deleted file mode 100644
index 59af148..0000000
--- a/src/BlazorMerge/appsettings.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "Logging": {
- "LogLevel": {
- "Default": "Debug",
- "System": "Information",
- "Microsoft": "Information"
- }
- },
- "AppSettings": {
- "MainFileName": "appsettings.json",
- "EnvironmentFileName": "appsettings.{environment}.json"
- }
-}
\ No newline at end of file
diff --git a/test/BlazorMerge.UnitTests/Merge/MergeServiceTests.cs b/test/BlazorMerge.UnitTests/Merge/MergeServiceTests.cs
index a705d76..d83cfac 100644
--- a/test/BlazorMerge.UnitTests/Merge/MergeServiceTests.cs
+++ b/test/BlazorMerge.UnitTests/Merge/MergeServiceTests.cs
@@ -9,7 +9,6 @@ public class MergeServiceTests
{
[Theory]
[InlineData("appsettings.json", "appsettings.{environment}.json", "appsettings.Development.json")]
- [InlineData("bob.json", "phil.{environment}.json", "phil.Development.json")]
public void When_LoadingData_Then_DataShouldBePassedToMergerCorrectly(string primaryFileName, string secondaryFileFormat, string secondaryFileFinalFormat)
{
// Arrange