From b0d5695b8d6cbf782686c65f9121b404a566f43c Mon Sep 17 00:00:00 2001 From: "e.rose" Date: Tue, 30 Apr 2024 20:42:03 -0400 Subject: [PATCH 01/19] cleanup c# files --- .../Controllers/FileUploadController.cs | 18 +++--------- .../Filters/FileFilter.cs | 28 ------------------- 2 files changed, 4 insertions(+), 42 deletions(-) diff --git a/MediaFileMetadataCheckerAPI/Controllers/FileUploadController.cs b/MediaFileMetadataCheckerAPI/Controllers/FileUploadController.cs index 23842a6..2690e8c 100644 --- a/MediaFileMetadataCheckerAPI/Controllers/FileUploadController.cs +++ b/MediaFileMetadataCheckerAPI/Controllers/FileUploadController.cs @@ -39,15 +39,14 @@ public FileUploadController(ILogger logger) [HttpPost] [Route(nameof(UploadLargeFileForMetadata))] [ProducesResponseType(typeof(FileStreamResult), 200, "application/json")] - // [Produces("application/json", "application/json")] [DisableFormValueModelBinding] public async Task UploadLargeFileForMetadata() { var request = HttpContext.Request; - // validation of Content-Type - // 1. first, it must be a form-data request - // 2. a boundary should be found in the Content-Type + // Validation of Content-Type + // 1. First, it must be a form-data request + // 2. A boundary should be found in the Content-Type if (!request.HasFormContentType || !MediaTypeHeaderValue.TryParse(request.ContentType, out var mediaTypeHeader) || string.IsNullOrEmpty(mediaTypeHeader.Boundary.Value)) @@ -59,8 +58,6 @@ public async Task UploadLargeFileForMetadata() var reader = new MultipartReader(boundary, request.Body); var section = await reader.ReadNextSectionAsync(); - // This sample try to get the first file from request and save it - // Make changes according to your needs in actual use while (section != null) { var hasContentDispositionHeader = ContentDispositionHeaderValue.TryParse(section.ContentDisposition, @@ -70,11 +67,6 @@ public async Task UploadLargeFileForMetadata() if (hasContentDispositionHeader && contentDisposition.DispositionType.Equals("form-data") && !string.IsNullOrEmpty(contentDisposition.FileName.Value)) { - // Don't trust any file name, file extension, and file data from the request unless you trust them completely - // Otherwise, it is very likely to cause problems such as virus uploading, disk filling, etc - // In short, it is necessary to restrict and verify the upload - // Here, we just use the temporary folder and a random file name - // Get the temporary folder, and combine a random file name with it var fileName = Path.GetRandomFileName(); var saveToPath = Path.Combine(Path.GetTempPath(), fileName); @@ -88,6 +80,7 @@ public async Task UploadLargeFileForMetadata() if (mediaInfo is not null) { + // Get return properties from App Config and only return configured properties HashSet returnProperties = Settings.ReturnProperties.Split(";").ToHashSet(); var File = new FileUploadItem(); @@ -105,12 +98,9 @@ public async Task UploadLargeFileForMetadata() } } -#pragma warning restore CS8602 // Dereference of a possibly null reference. - section = await reader.ReadNextSectionAsync(); } - // If the code runs to this location, it means that no files have been saved return BadRequest("No files data in the request."); } } diff --git a/MediaFileMetadataCheckerAPI/Filters/FileFilter.cs b/MediaFileMetadataCheckerAPI/Filters/FileFilter.cs index bbe7396..25ba8f1 100644 --- a/MediaFileMetadataCheckerAPI/Filters/FileFilter.cs +++ b/MediaFileMetadataCheckerAPI/Filters/FileFilter.cs @@ -15,12 +15,10 @@ public void Apply(OpenApiOperation operation, OperationFilterContext context) if (formParameters.Any()) { - // already taken care by swashbuckle. no need to add explicitly. return; } if (operation.RequestBody != null) { - // NOT required for form type return; } if (context.ApiDescription.HttpMethod == HttpMethod.Post.Method) @@ -64,29 +62,3 @@ internal static bool IsFromForm(this ApiParameterDescription apiParameter) return (elementType != null && typeof(IFormFile).IsAssignableFrom(elementType)); } } - -public class FileDownloadFilter : IOperationFilter -{ - public void Apply(OpenApiOperation operation, OperationFilterContext context) - { - if (context.ApiDescription.SupportedResponseTypes.Any(x => - x.Type == typeof(FileStreamResult) || - x.Type == typeof(FileResult))) - - if (operation.RequestBody == null) - { - return; - } - - // See https://github.com/Azure/autorest.csharp/issues/197 - foreach (var content in operation.RequestBody.Content) - foreach (var contentProperty in content.Value.Schema.Properties) - { - var schema = contentProperty.Value; - if (schema.Format == "binary") - { - schema.Type = "file"; - } - } - } -} \ No newline at end of file From 17212a686cc84b3ab359176fc3f5a6aab4b6d06c Mon Sep 17 00:00:00 2001 From: "e.rose" Date: Wed, 1 May 2024 13:06:45 -0400 Subject: [PATCH 02/19] add docker image build ci --- .github/workflows/docker-ci.yml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 .github/workflows/docker-ci.yml diff --git a/.github/workflows/docker-ci.yml b/.github/workflows/docker-ci.yml new file mode 100644 index 0000000..986e4e4 --- /dev/null +++ b/.github/workflows/docker-ci.yml @@ -0,0 +1,30 @@ +name: ci + +on: + push: + branches-ignore: + - "main" + +env: + TEST_TAG: user/app:test + LATEST_TAG: user/app:latest + +jobs: + docker: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Build and export to local images + uses: docker/build-push-action@v5 + with: + context: . + load: true + tags: ${{ env.TEST_TAG }} + - name: Test running image + run: | + docker run --rm ${{ env.TEST_TAG }} \ No newline at end of file From a11dd1aca17e491024e66279524a15b42940da40 Mon Sep 17 00:00:00 2001 From: "e.rose" Date: Wed, 1 May 2024 13:07:19 -0400 Subject: [PATCH 03/19] add paths to ci trigger --- .github/workflows/docker-ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/docker-ci.yml b/.github/workflows/docker-ci.yml index 986e4e4..4e1c965 100644 --- a/.github/workflows/docker-ci.yml +++ b/.github/workflows/docker-ci.yml @@ -4,6 +4,8 @@ on: push: branches-ignore: - "main" + paths: + - "MediaFileMetadataCheckerAPI/**" env: TEST_TAG: user/app:test From 1dcabd5c889a626b01da27f1344e97a65e37e793 Mon Sep 17 00:00:00 2001 From: "e.rose" Date: Wed, 1 May 2024 13:10:17 -0400 Subject: [PATCH 04/19] docker context --- .github/workflows/docker-ci.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/docker-ci.yml b/.github/workflows/docker-ci.yml index 4e1c965..af15df9 100644 --- a/.github/workflows/docker-ci.yml +++ b/.github/workflows/docker-ci.yml @@ -4,8 +4,8 @@ on: push: branches-ignore: - "main" - paths: - - "MediaFileMetadataCheckerAPI/**" + # paths: + # - "MediaFileMetadataCheckerAPI/**" env: TEST_TAG: user/app:test @@ -15,8 +15,6 @@ jobs: docker: runs-on: ubuntu-latest steps: - - name: Checkout - uses: actions/checkout@v4 - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx @@ -24,7 +22,7 @@ jobs: - name: Build and export to local images uses: docker/build-push-action@v5 with: - context: . + context: "{{defaultContext}}:MediaFileMetadataCheckerAPI" load: true tags: ${{ env.TEST_TAG }} - name: Test running image From b729ff734e1f9576e5e1665cd0eb34561db460da Mon Sep 17 00:00:00 2001 From: "e.rose" Date: Wed, 1 May 2024 13:22:02 -0400 Subject: [PATCH 05/19] pass secret as build arg --- .github/workflows/docker-ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/docker-ci.yml b/.github/workflows/docker-ci.yml index af15df9..bce46b8 100644 --- a/.github/workflows/docker-ci.yml +++ b/.github/workflows/docker-ci.yml @@ -25,6 +25,8 @@ jobs: context: "{{defaultContext}}:MediaFileMetadataCheckerAPI" load: true tags: ${{ env.TEST_TAG }} + build-args: | + "METADATA_API_CONFIG_CONNECTION_STRING=${{ secrets.APP_CONFIG_CONNECTION_STRING }}" - name: Test running image run: | docker run --rm ${{ env.TEST_TAG }} \ No newline at end of file From ad21025c76ba7813b3099e4ec53ceedc9ef4942d Mon Sep 17 00:00:00 2001 From: "e.rose" Date: Wed, 1 May 2024 13:24:21 -0400 Subject: [PATCH 06/19] env var to run command --- .github/workflows/docker-ci.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/docker-ci.yml b/.github/workflows/docker-ci.yml index bce46b8..1742bb8 100644 --- a/.github/workflows/docker-ci.yml +++ b/.github/workflows/docker-ci.yml @@ -25,8 +25,6 @@ jobs: context: "{{defaultContext}}:MediaFileMetadataCheckerAPI" load: true tags: ${{ env.TEST_TAG }} - build-args: | - "METADATA_API_CONFIG_CONNECTION_STRING=${{ secrets.APP_CONFIG_CONNECTION_STRING }}" - name: Test running image run: | - docker run --rm ${{ env.TEST_TAG }} \ No newline at end of file + docker run --rm ${{ env.TEST_TAG }} -e METADATA_API_CONFIG_CONNECTION_STRING=${{ secrets.APP_CONFIG_CONNECTION_STRING }} \ No newline at end of file From 146070b974aa975c81f6409773e58004b86965c1 Mon Sep 17 00:00:00 2001 From: "e.rose" Date: Wed, 1 May 2024 15:08:13 -0400 Subject: [PATCH 07/19] app config fixes + ci updates --- .github/workflows/docker-ci.yml | 5 ++++- .../Controllers/FileUploadController.cs | 7 +++++-- .../MediaFileMetadataCheckerAPI.csproj | 2 ++ MediaFileMetadataCheckerAPI/Program.cs | 7 +++++-- MediaFileMetadataCheckerAPI/Settings.cs | 2 +- scripts/docker-run.zsh | 10 +++++++++- 6 files changed, 26 insertions(+), 7 deletions(-) diff --git a/.github/workflows/docker-ci.yml b/.github/workflows/docker-ci.yml index 1742bb8..99342a0 100644 --- a/.github/workflows/docker-ci.yml +++ b/.github/workflows/docker-ci.yml @@ -27,4 +27,7 @@ jobs: tags: ${{ env.TEST_TAG }} - name: Test running image run: | - docker run --rm ${{ env.TEST_TAG }} -e METADATA_API_CONFIG_CONNECTION_STRING=${{ secrets.APP_CONFIG_CONNECTION_STRING }} \ No newline at end of file + docker run --rm ${{ env.TEST_TAG }} \ + -e METADATA_API_CONFIG_CONNECTION_STRING=${{ secrets.APP_CONFIG_CONNECTION_STRING }} \ + -e METADATA_API_CONFIG_CACHE_EXPIRATION=1 \ + --stop-timeout 30 \ No newline at end of file diff --git a/MediaFileMetadataCheckerAPI/Controllers/FileUploadController.cs b/MediaFileMetadataCheckerAPI/Controllers/FileUploadController.cs index 2690e8c..b94a3a2 100644 --- a/MediaFileMetadataCheckerAPI/Controllers/FileUploadController.cs +++ b/MediaFileMetadataCheckerAPI/Controllers/FileUploadController.cs @@ -4,6 +4,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.WebUtilities; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; using Microsoft.Net.Http.Headers; using System.IO; using System.Threading.Tasks; @@ -21,11 +22,13 @@ namespace MediaFileMetadataCheckerAPI.Controllers [Route("[controller]")] public class FileUploadController : ControllerBase { + private readonly Settings _settings; private readonly ILogger _logger; - public FileUploadController(ILogger logger) + public FileUploadController(ILogger logger, IOptionsSnapshot settings) { _logger = logger; + _settings = settings.Value; } /// @@ -81,7 +84,7 @@ public async Task UploadLargeFileForMetadata() if (mediaInfo is not null) { // Get return properties from App Config and only return configured properties - HashSet returnProperties = Settings.ReturnProperties.Split(";").ToHashSet(); + HashSet returnProperties = _settings.ReturnProperties.Split(";").ToHashSet(); var File = new FileUploadItem(); File.Duration = returnProperties.Contains("Duration") ? mediaInfo.Duration : null; diff --git a/MediaFileMetadataCheckerAPI/MediaFileMetadataCheckerAPI.csproj b/MediaFileMetadataCheckerAPI/MediaFileMetadataCheckerAPI.csproj index 9f219d5..965cfc3 100644 --- a/MediaFileMetadataCheckerAPI/MediaFileMetadataCheckerAPI.csproj +++ b/MediaFileMetadataCheckerAPI/MediaFileMetadataCheckerAPI.csproj @@ -20,6 +20,8 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all + + diff --git a/MediaFileMetadataCheckerAPI/Program.cs b/MediaFileMetadataCheckerAPI/Program.cs index 1b1946f..e54ccec 100644 --- a/MediaFileMetadataCheckerAPI/Program.cs +++ b/MediaFileMetadataCheckerAPI/Program.cs @@ -3,6 +3,7 @@ using MediaFileMetadataCheckerAPI.Filters; using Microsoft.Extensions.DependencyInjection; using Microsoft.Azure.AppConfiguration.AspNetCore; +using Microsoft.Extensions.Configuration; var builder = WebApplication.CreateBuilder(args); @@ -13,7 +14,7 @@ opt.UseInMemoryDatabase("FileUploadList")); // Get connection string from Environment variables string? connectionString = Environment.GetEnvironmentVariable("METADATA_API_CONFIG_CONNECTION_STRING"); -double? configCacheExpiration = Convert.ToDouble(Environment.GetEnvironmentVariable("METADATA_API_CONFIG_CACHE_EXPIRATION")); +double configCacheExpiration = Convert.ToDouble(Environment.GetEnvironmentVariable("METADATA_API_CONFIG_CACHE_EXPIRATION")); // Load configuration from Azure App Configuration builder.Configuration.AddAzureAppConfiguration(options => @@ -24,8 +25,10 @@ // Configure to reload configuration if the registered sentinel key is modified .ConfigureRefresh(refreshOptions => refreshOptions.Register("MetadataApp:Settings:Sentinel", refreshAll: true) - .SetCacheExpiration(TimeSpan.FromHours(configCacheExpiration ?? 1))); + .SetCacheExpiration(TimeSpan.FromHours(configCacheExpiration))); }); +// Add Azure App Configuration middleware to the container of services. +builder.Services.AddAzureAppConfiguration(); // Bind configuration "MetadataApp:Settings" section to the Settings object builder.Services.Configure(builder.Configuration.GetSection("MetadataApp:Settings")); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle diff --git a/MediaFileMetadataCheckerAPI/Settings.cs b/MediaFileMetadataCheckerAPI/Settings.cs index a63b802..74ea97c 100644 --- a/MediaFileMetadataCheckerAPI/Settings.cs +++ b/MediaFileMetadataCheckerAPI/Settings.cs @@ -2,6 +2,6 @@ namespace MetadataAppConfig { public class Settings { - public static string? ReturnProperties { get; set; } + public string? ReturnProperties { get; set; } } } \ No newline at end of file diff --git a/scripts/docker-run.zsh b/scripts/docker-run.zsh index 40f768a..b4a9387 100644 --- a/scripts/docker-run.zsh +++ b/scripts/docker-run.zsh @@ -1,3 +1,11 @@ #!/usr/bin/env zsh # doc: https://github.com/dotnet/dotnet-docker/blob/main/samples/run-aspnetcore-https-development.md -docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORTS=8001 -e ASPNETCORE_Kestrel__Certificates__Default__Password=$pass -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx -e ASPNETCORE_ENVIRONMENT=Development -v ${HOME}/.aspnet/https:/https/ mediametadata \ No newline at end of file +docker run --rm -it -p 8000:80 -p 8001:443 / + -e ASPNETCORE_URLS="https://+;http://+" / + -e ASPNETCORE_HTTPS_PORTS=8001 / + -e ASPNETCORE_Kestrel__Certificates__Default__Password=$pass / + -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx / + -e ASPNETCORE_ENVIRONMENT=Development / + -e METADATA_API_CONFIG_CACHE_EXPIRATION=1 / + -e METADATA_API_CONFIG_CONNECTION_STRING=$connectionString / + -v ${HOME}/.aspnet/https:/https/ mediametadata \ No newline at end of file From 157512bbc6d64b334110d07e1d90b6fc4defa72d Mon Sep 17 00:00:00 2001 From: "e.rose" Date: Wed, 1 May 2024 15:13:16 -0400 Subject: [PATCH 08/19] docker run formatting --- .github/workflows/docker-ci.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/docker-ci.yml b/.github/workflows/docker-ci.yml index 99342a0..45cebed 100644 --- a/.github/workflows/docker-ci.yml +++ b/.github/workflows/docker-ci.yml @@ -27,7 +27,4 @@ jobs: tags: ${{ env.TEST_TAG }} - name: Test running image run: | - docker run --rm ${{ env.TEST_TAG }} \ - -e METADATA_API_CONFIG_CONNECTION_STRING=${{ secrets.APP_CONFIG_CONNECTION_STRING }} \ - -e METADATA_API_CONFIG_CACHE_EXPIRATION=1 \ - --stop-timeout 30 \ No newline at end of file + docker run --rm ${{ env.TEST_TAG }} -e METADATA_API_CONFIG_CONNECTION_STRING=${{ secrets.APP_CONFIG_CONNECTION_STRING }} -e METADATA_API_CONFIG_CACHE_EXPIRATION=1 --stop-timeout 30 \ No newline at end of file From 3155960c4eadbe24349cee573b3b709f4d78f0a6 Mon Sep 17 00:00:00 2001 From: "e.rose" Date: Wed, 1 May 2024 15:24:49 -0400 Subject: [PATCH 09/19] env->env --- .github/workflows/docker-ci.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docker-ci.yml b/.github/workflows/docker-ci.yml index 45cebed..e2fa880 100644 --- a/.github/workflows/docker-ci.yml +++ b/.github/workflows/docker-ci.yml @@ -26,5 +26,7 @@ jobs: load: true tags: ${{ env.TEST_TAG }} - name: Test running image + env: + CONNECTION_STRING: ${{ secrets.APP_CONFIG_CONNECTION_STRING }} run: | - docker run --rm ${{ env.TEST_TAG }} -e METADATA_API_CONFIG_CONNECTION_STRING=${{ secrets.APP_CONFIG_CONNECTION_STRING }} -e METADATA_API_CONFIG_CACHE_EXPIRATION=1 --stop-timeout 30 \ No newline at end of file + docker run --rm ${{ env.TEST_TAG }} -e METADATA_API_CONFIG_CONNECTION_STRING=$CONNECTION_STRING -e METADATA_API_CONFIG_CACHE_EXPIRATION=1 --stop-timeout 30 \ No newline at end of file From e70060344b1e6b376f4b354bca1cb2b4966ee329 Mon Sep 17 00:00:00 2001 From: "e.rose" Date: Wed, 1 May 2024 15:31:14 -0400 Subject: [PATCH 10/19] stringify? --- .github/workflows/docker-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-ci.yml b/.github/workflows/docker-ci.yml index e2fa880..a264ebd 100644 --- a/.github/workflows/docker-ci.yml +++ b/.github/workflows/docker-ci.yml @@ -29,4 +29,4 @@ jobs: env: CONNECTION_STRING: ${{ secrets.APP_CONFIG_CONNECTION_STRING }} run: | - docker run --rm ${{ env.TEST_TAG }} -e METADATA_API_CONFIG_CONNECTION_STRING=$CONNECTION_STRING -e METADATA_API_CONFIG_CACHE_EXPIRATION=1 --stop-timeout 30 \ No newline at end of file + docker run --rm ${{ env.TEST_TAG }} -e METADATA_API_CONFIG_CONNECTION_STRING="$CONNECTION_STRING" -e METADATA_API_CONFIG_CACHE_EXPIRATION=1 --stop-timeout 30 \ No newline at end of file From 0af407ae0d6baa06a2d119d4539da34d73ed9b91 Mon Sep 17 00:00:00 2001 From: "e.rose" Date: Wed, 1 May 2024 15:34:31 -0400 Subject: [PATCH 11/19] new env syntax --- .github/workflows/docker-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-ci.yml b/.github/workflows/docker-ci.yml index a264ebd..ced0c1c 100644 --- a/.github/workflows/docker-ci.yml +++ b/.github/workflows/docker-ci.yml @@ -29,4 +29,4 @@ jobs: env: CONNECTION_STRING: ${{ secrets.APP_CONFIG_CONNECTION_STRING }} run: | - docker run --rm ${{ env.TEST_TAG }} -e METADATA_API_CONFIG_CONNECTION_STRING="$CONNECTION_STRING" -e METADATA_API_CONFIG_CACHE_EXPIRATION=1 --stop-timeout 30 \ No newline at end of file + docker run --rm ${{ env.TEST_TAG }} -e METADATA_API_CONFIG_CONNECTION_STRING=${{ env.CONNECTION_STRING }} -e METADATA_API_CONFIG_CACHE_EXPIRATION=1 --stop-timeout 30 \ No newline at end of file From ae995bca6bb6e502b7bb6d6cb1c2269839f2faca Mon Sep 17 00:00:00 2001 From: "e.rose" Date: Wed, 1 May 2024 15:38:40 -0400 Subject: [PATCH 12/19] try env for task --- .github/workflows/docker-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker-ci.yml b/.github/workflows/docker-ci.yml index ced0c1c..e4b5aa0 100644 --- a/.github/workflows/docker-ci.yml +++ b/.github/workflows/docker-ci.yml @@ -27,6 +27,6 @@ jobs: tags: ${{ env.TEST_TAG }} - name: Test running image env: - CONNECTION_STRING: ${{ secrets.APP_CONFIG_CONNECTION_STRING }} + METADATA_API_CONFIG_CONNECTION_STRING: ${{ secrets.APP_CONFIG_CONNECTION_STRING }} run: | - docker run --rm ${{ env.TEST_TAG }} -e METADATA_API_CONFIG_CONNECTION_STRING=${{ env.CONNECTION_STRING }} -e METADATA_API_CONFIG_CACHE_EXPIRATION=1 --stop-timeout 30 \ No newline at end of file + docker run --rm ${{ env.TEST_TAG }} -e METADATA_API_CONFIG_CACHE_EXPIRATION=1 --stop-timeout 30 \ No newline at end of file From f11cebab4a9f8f5af7619b261da13e02e16adadc Mon Sep 17 00:00:00 2001 From: "e.rose" Date: Wed, 1 May 2024 15:43:00 -0400 Subject: [PATCH 13/19] try dockerfile args --- .github/workflows/docker-ci.yml | 4 +++- MediaFileMetadataCheckerAPI/Dockerfile | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docker-ci.yml b/.github/workflows/docker-ci.yml index e4b5aa0..db40240 100644 --- a/.github/workflows/docker-ci.yml +++ b/.github/workflows/docker-ci.yml @@ -25,8 +25,10 @@ jobs: context: "{{defaultContext}}:MediaFileMetadataCheckerAPI" load: true tags: ${{ env.TEST_TAG }} + cache-from: type=gha + cache-to: type=gha,mode=max - name: Test running image env: METADATA_API_CONFIG_CONNECTION_STRING: ${{ secrets.APP_CONFIG_CONNECTION_STRING }} run: | - docker run --rm ${{ env.TEST_TAG }} -e METADATA_API_CONFIG_CACHE_EXPIRATION=1 --stop-timeout 30 \ No newline at end of file + docker run --rm ${{ env.TEST_TAG }} -e METADATA_API_CONFIG_CONNECTION_STRING=${{ env.METADATA_API_CONFIG_CONNECTION_STRING }} -e METADATA_API_CONFIG_CACHE_EXPIRATION=1 --stop-timeout 30 \ No newline at end of file diff --git a/MediaFileMetadataCheckerAPI/Dockerfile b/MediaFileMetadataCheckerAPI/Dockerfile index 3817be3..e113ff9 100644 --- a/MediaFileMetadataCheckerAPI/Dockerfile +++ b/MediaFileMetadataCheckerAPI/Dockerfile @@ -10,6 +10,8 @@ RUN dotnet publish -c Release -o out # Build runtime image FROM mcr.microsoft.com/dotnet/aspnet:8.0 +ARG METADATA_API_CONFIG_CONNECTION_STRING +ARG METADATA_API_CONFIG_CACHE_EXPIRATION WORKDIR /App COPY --from=build-env /App/out . # Install ffmpeg/ffprobe dependencies From 15ed9e233547ded5ce0470f76fc625290530f8c2 Mon Sep 17 00:00:00 2001 From: "e.rose" Date: Wed, 1 May 2024 15:52:41 -0400 Subject: [PATCH 14/19] standard bash syntax --- .github/workflows/docker-ci.yml | 2 +- MediaFileMetadataCheckerAPI/Dockerfile | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/docker-ci.yml b/.github/workflows/docker-ci.yml index db40240..a7b1c7f 100644 --- a/.github/workflows/docker-ci.yml +++ b/.github/workflows/docker-ci.yml @@ -31,4 +31,4 @@ jobs: env: METADATA_API_CONFIG_CONNECTION_STRING: ${{ secrets.APP_CONFIG_CONNECTION_STRING }} run: | - docker run --rm ${{ env.TEST_TAG }} -e METADATA_API_CONFIG_CONNECTION_STRING=${{ env.METADATA_API_CONFIG_CONNECTION_STRING }} -e METADATA_API_CONFIG_CACHE_EXPIRATION=1 --stop-timeout 30 \ No newline at end of file + docker run --rm ${{ env.TEST_TAG }} -e METADATA_API_CONFIG_CONNECTION_STRING=$METADATA_API_CONFIG_CONNECTION_STRING -e METADATA_API_CONFIG_CACHE_EXPIRATION=1 --stop-timeout 30 \ No newline at end of file diff --git a/MediaFileMetadataCheckerAPI/Dockerfile b/MediaFileMetadataCheckerAPI/Dockerfile index e113ff9..3817be3 100644 --- a/MediaFileMetadataCheckerAPI/Dockerfile +++ b/MediaFileMetadataCheckerAPI/Dockerfile @@ -10,8 +10,6 @@ RUN dotnet publish -c Release -o out # Build runtime image FROM mcr.microsoft.com/dotnet/aspnet:8.0 -ARG METADATA_API_CONFIG_CONNECTION_STRING -ARG METADATA_API_CONFIG_CACHE_EXPIRATION WORKDIR /App COPY --from=build-env /App/out . # Install ffmpeg/ffprobe dependencies From 1dc95b3995c0196006793402b7ba188eb1bc6e27 Mon Sep 17 00:00:00 2001 From: "e.rose" Date: Wed, 1 May 2024 15:53:21 -0400 Subject: [PATCH 15/19] workflow level env --- .github/workflows/docker-ci.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/docker-ci.yml b/.github/workflows/docker-ci.yml index a7b1c7f..abcb5a5 100644 --- a/.github/workflows/docker-ci.yml +++ b/.github/workflows/docker-ci.yml @@ -10,6 +10,7 @@ on: env: TEST_TAG: user/app:test LATEST_TAG: user/app:latest + METADATA_API_CONFIG_CONNECTION_STRING: ${{ secrets.APP_CONFIG_CONNECTION_STRING }} jobs: docker: @@ -28,7 +29,5 @@ jobs: cache-from: type=gha cache-to: type=gha,mode=max - name: Test running image - env: - METADATA_API_CONFIG_CONNECTION_STRING: ${{ secrets.APP_CONFIG_CONNECTION_STRING }} run: | docker run --rm ${{ env.TEST_TAG }} -e METADATA_API_CONFIG_CONNECTION_STRING=$METADATA_API_CONFIG_CONNECTION_STRING -e METADATA_API_CONFIG_CACHE_EXPIRATION=1 --stop-timeout 30 \ No newline at end of file From ea35a2d6f7ecf4b0ca13ab5e92b8f0f773eb5886 Mon Sep 17 00:00:00 2001 From: "e.rose" Date: Wed, 1 May 2024 15:57:07 -0400 Subject: [PATCH 16/19] env. syntax --- .github/workflows/docker-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-ci.yml b/.github/workflows/docker-ci.yml index abcb5a5..ed17bb0 100644 --- a/.github/workflows/docker-ci.yml +++ b/.github/workflows/docker-ci.yml @@ -30,4 +30,4 @@ jobs: cache-to: type=gha,mode=max - name: Test running image run: | - docker run --rm ${{ env.TEST_TAG }} -e METADATA_API_CONFIG_CONNECTION_STRING=$METADATA_API_CONFIG_CONNECTION_STRING -e METADATA_API_CONFIG_CACHE_EXPIRATION=1 --stop-timeout 30 \ No newline at end of file + docker run --rm ${{ env.TEST_TAG }} -e METADATA_API_CONFIG_CONNECTION_STRING=${{ env.METADATA_API_CONFIG_CONNECTION_STRING }} -e METADATA_API_CONFIG_CACHE_EXPIRATION=1 --stop-timeout 30 \ No newline at end of file From 993184e26394423d5221f33fe32ba5b7e69a3e2a Mon Sep 17 00:00:00 2001 From: "e.rose" Date: Wed, 1 May 2024 16:00:00 -0400 Subject: [PATCH 17/19] try using just env --- .github/workflows/docker-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-ci.yml b/.github/workflows/docker-ci.yml index ed17bb0..c8ef740 100644 --- a/.github/workflows/docker-ci.yml +++ b/.github/workflows/docker-ci.yml @@ -30,4 +30,4 @@ jobs: cache-to: type=gha,mode=max - name: Test running image run: | - docker run --rm ${{ env.TEST_TAG }} -e METADATA_API_CONFIG_CONNECTION_STRING=${{ env.METADATA_API_CONFIG_CONNECTION_STRING }} -e METADATA_API_CONFIG_CACHE_EXPIRATION=1 --stop-timeout 30 \ No newline at end of file + docker run --rm ${{ env.TEST_TAG }} -e METADATA_API_CONFIG_CACHE_EXPIRATION=1 --stop-timeout 30 \ No newline at end of file From 96e06c89fdc4469c74802d30a001b569c0a39534 Mon Sep 17 00:00:00 2001 From: "e.rose" Date: Wed, 1 May 2024 16:10:36 -0400 Subject: [PATCH 18/19] try quotes --- .github/workflows/docker-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-ci.yml b/.github/workflows/docker-ci.yml index c8ef740..ff7887f 100644 --- a/.github/workflows/docker-ci.yml +++ b/.github/workflows/docker-ci.yml @@ -30,4 +30,4 @@ jobs: cache-to: type=gha,mode=max - name: Test running image run: | - docker run --rm ${{ env.TEST_TAG }} -e METADATA_API_CONFIG_CACHE_EXPIRATION=1 --stop-timeout 30 \ No newline at end of file + docker run --rm ${{ env.TEST_TAG }} -e METADATA_API_CONFIG_CONNECTION_STRING="${{ env.METADATA_API_CONFIG_CONNECTION_STRING }}"" -e METADATA_API_CONFIG_CACHE_EXPIRATION="1" --stop-timeout 30 \ No newline at end of file From 93916a60cda3d1b5d78f990bc27c16ed345d299d Mon Sep 17 00:00:00 2001 From: "e.rose" Date: Wed, 1 May 2024 16:12:43 -0400 Subject: [PATCH 19/19] remove extra quote --- .github/workflows/docker-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-ci.yml b/.github/workflows/docker-ci.yml index ff7887f..ef6bc9c 100644 --- a/.github/workflows/docker-ci.yml +++ b/.github/workflows/docker-ci.yml @@ -30,4 +30,4 @@ jobs: cache-to: type=gha,mode=max - name: Test running image run: | - docker run --rm ${{ env.TEST_TAG }} -e METADATA_API_CONFIG_CONNECTION_STRING="${{ env.METADATA_API_CONFIG_CONNECTION_STRING }}"" -e METADATA_API_CONFIG_CACHE_EXPIRATION="1" --stop-timeout 30 \ No newline at end of file + docker run --rm ${{ env.TEST_TAG }} -e METADATA_API_CONFIG_CONNECTION_STRING="${{ env.METADATA_API_CONFIG_CONNECTION_STRING }}" -e METADATA_API_CONFIG_CACHE_EXPIRATION="1" --stop-timeout 30 \ No newline at end of file