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