From 5d8c867b04e68dec0d7bcf409e75aac25c45f8a2 Mon Sep 17 00:00:00 2001 From: Michael Mortensen Date: Thu, 14 Nov 2024 16:05:32 +0100 Subject: [PATCH 01/12] :white_check_mark: add test class from yamldotnet repo to avoid circular dependency challenge --- ...emon.Extensions.Globalization.Tests.csproj | 1 + .../YamlSerializerTest.cs | 448 ++++++++++++++++++ 2 files changed, 449 insertions(+) create mode 100644 test/Cuemon.Extensions.Globalization.Tests/YamlSerializerTest.cs diff --git a/test/Cuemon.Extensions.Globalization.Tests/Cuemon.Extensions.Globalization.Tests.csproj b/test/Cuemon.Extensions.Globalization.Tests/Cuemon.Extensions.Globalization.Tests.csproj index 217ed8211..3ae2139fa 100644 --- a/test/Cuemon.Extensions.Globalization.Tests/Cuemon.Extensions.Globalization.Tests.csproj +++ b/test/Cuemon.Extensions.Globalization.Tests/Cuemon.Extensions.Globalization.Tests.csproj @@ -5,6 +5,7 @@ + diff --git a/test/Cuemon.Extensions.Globalization.Tests/YamlSerializerTest.cs b/test/Cuemon.Extensions.Globalization.Tests/YamlSerializerTest.cs new file mode 100644 index 000000000..ac8f0ee5b --- /dev/null +++ b/test/Cuemon.Extensions.Globalization.Tests/YamlSerializerTest.cs @@ -0,0 +1,448 @@ +using System; +using System.Globalization; +using System.Linq; +using System.Runtime.InteropServices; +using Codebelt.Extensions.Xunit; +using Codebelt.Extensions.YamlDotNet; +using Codebelt.Extensions.YamlDotNet.Formatters; +using Cuemon.Extensions.IO; +using Xunit; +using Xunit.Abstractions; +using YamlDotNet.Core; +using YamlDotNet.Serialization.NamingConventions; + +namespace Cuemon.Extensions.Globalization +{ + public class YamlSerializerTest : Test + { + private readonly CultureInfo _cultureInfo; + + public YamlSerializerTest(ITestOutputHelper output) : base(output) + { + try + { + _cultureInfo = new CultureInfo("da-DK").UseNationalLanguageSupport(); // from .NET6+ this is needed for both Windows and Linux; at least from pipeline (worked locally for Windows without Merge ...) + } + catch (Exception e) + { + TestOutput.WriteLine(e.ToString()); + } + } + + [Fact] + public void Serialize_ShouldSerializeDateFormatInfo() + { + var sut2 = _cultureInfo; + var sut3 = YamlFormatter.SerializeObject(sut2.DateTimeFormat, o => + { + o.Settings.NamingConvention = PascalCaseNamingConvention.Instance; + o.Settings.ScalarStyle = ScalarStyle.Plain; + o.Settings.IndentSequences = false; + o.Settings.FormatProvider = _cultureInfo; + o.Settings.Converters.Add(YamlConverterFactory.Create((writer, dt, _) => writer.WriteValue(dt.ToString(_cultureInfo)))); + }); + var sut4 = sut3.ToEncodedString(); + + TestOutput.WriteLine(sut4); + + var expected = @"AMDesignator: '' +Calendar: + MinSupportedDateTime: 01-01-0001 00:00:00 + MaxSupportedDateTime: 31-12-9999 23:59:59 + AlgorithmType: SolarCalendar + CalendarType: Localized + Eras: + - 1 + TwoDigitYearMax: {0} +DateSeparator: '-' +FirstDayOfWeek: Monday +CalendarWeekRule: FirstFourDayWeek +FullDateTimePattern: d. MMMM yyyy HH:mm:ss +LongDatePattern: d. MMMM yyyy +LongTimePattern: HH:mm:ss +MonthDayPattern: d. MMMM +PMDesignator: '' +RFC1123Pattern: ddd, dd MMM yyyy HH':'mm':'ss 'GMT' +ShortDatePattern: dd-MM-yyyy +ShortTimePattern: HH:mm +SortableDateTimePattern: yyyy'-'MM'-'dd'T'HH':'mm':'ss +TimeSeparator: ':' +UniversalSortableDateTimePattern: yyyy'-'MM'-'dd HH':'mm':'ss'Z' +YearMonthPattern: MMMM yyyy +AbbreviatedDayNames: +- sø +- ma +- ti +- on +- to +- fr +- lø +ShortestDayNames: +- sø +- ma +- ti +- on +- to +- fr +- lø +DayNames: +- søndag +- mandag +- tirsdag +- onsdag +- torsdag +- fredag +- lørdag +AbbreviatedMonthNames: +- jan +- feb +- mar +- apr +- maj +- jun +- jul +- aug +- sep +- okt +- nov +- dec +- '' +MonthNames: +- januar +- februar +- marts +- april +- maj +- juni +- juli +- august +- september +- oktober +- november +- december +- '' +NativeCalendarName: gregoriansk kalender +AbbreviatedMonthGenitiveNames: +- jan +- feb +- mar +- apr +- maj +- jun +- jul +- aug +- sep +- okt +- nov +- dec +- '' +MonthGenitiveNames: +- januar +- februar +- marts +- april +- maj +- juni +- juli +- august +- september +- oktober +- november +- december +- '' +".ReplaceLineEndings(); + +#if NET8_0_OR_GREATER + expected = string.Format(expected, "2049"); +#elif NET48_OR_GREATER + if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + { + expected = expected.ReplaceAll("gregoriansk kalender", "dansk (Danmark)", StringComparison.Ordinal); + expected = string.Format(expected, "2029"); + } + else + { + expected = expected.ReplaceAll("gregoriansk", "Gregoriansk", StringComparison.Ordinal); + expected = string.Format(expected, "2049"); + } +#endif + + Assert.Equal(expected, sut4); + } + + [Fact] + public void Serialize_ShouldSerializeNumberFormatInfo() + { + var sut2 = _cultureInfo; + var sut3 = YamlFormatter.SerializeObject(sut2.NumberFormat, o => + { + o.Settings.ScalarStyle = ScalarStyle.DoubleQuoted; + o.Settings.IndentSequences = false; + o.Settings.FormatProvider = _cultureInfo; + o.Settings.NamingConvention = PascalCaseNamingConvention.Instance; + }); + var sut4 = sut3.ToEncodedString(); + + TestOutput.WriteLine(sut4); + + Assert.Equal(@"CurrencyDecimalDigits: 2 +CurrencyDecimalSeparator: "","" +CurrencyGroupSizes: +- 3 +NumberGroupSizes: +- 3 +PercentGroupSizes: +- 3 +CurrencyGroupSeparator: ""."" +CurrencySymbol: ""kr."" +NaNSymbol: ""NaN"" +CurrencyNegativePattern: 8 +NumberNegativePattern: 1 +PercentPositivePattern: 0 +PercentNegativePattern: 0 +NegativeInfinitySymbol: ""-∞"" +NegativeSign: ""-"" +NumberDecimalDigits: 2 +NumberDecimalSeparator: "","" +NumberGroupSeparator: ""."" +CurrencyPositivePattern: 3 +PositiveInfinitySymbol: ""∞"" +PositiveSign: ""+"" +PercentDecimalDigits: 2 +PercentDecimalSeparator: "","" +PercentGroupSeparator: ""."" +PercentSymbol: ""%"" +PerMilleSymbol: ""‰"" +NativeDigits: +- ""0"" +- ""1"" +- ""2"" +- ""3"" +- ""4"" +- ""5"" +- ""6"" +- ""7"" +- ""8"" +- ""9"" +DigitSubstitution: ""None"" +".ReplaceLineEndings(), sut4); + } + + + [Fact] + public void Serialize_ShouldSerializeCultureInfo() + { + var sut2 = _cultureInfo; + var sut3 = YamlFormatter.SerializeObject(sut2, o => + { + o.Settings.IndentSequences = false; + o.Settings.NamingConvention = PascalCaseNamingConvention.Instance; + o.Settings.Converters.Add(YamlConverterFactory.Create((writer, dt, _) => writer.WriteValue(dt.ToString(_cultureInfo)))); + }); + var sut4 = sut3.ToEncodedString().ReplaceLineEndings().Split(new[] { Environment.NewLine }, StringSplitOptions.None).ToList(); + + sut4.RemoveRange(sut4.FindIndex(s => s.StartsWith("CompareInfo")), 6); + sut4.RemoveRange(sut4.FindIndex(s => s.StartsWith("CultureTypes")), 1); + + var expected = @"LCID: 1030 +KeyboardLayoutId: 1030 +Name: da-DK +IetfLanguageTag: da-DK +DisplayName: Danish (Denmark) +NativeName: dansk (Danmark) +EnglishName: Danish (Denmark) +TwoLetterISOLanguageName: da +ThreeLetterISOLanguageName: dan +ThreeLetterWindowsLanguageName: DAN +TextInfo: + ANSICodePage: 1252 + OEMCodePage: 850 + MacCodePage: 10000 + EBCDICCodePage: 20277 + LCID: 1030 + CultureName: da-DK + ListSeparator: ; + IsRightToLeft: false +IsNeutralCulture: false +NumberFormat: + CurrencyDecimalDigits: 2 + CurrencyDecimalSeparator: ',' + CurrencyGroupSizes: + - 3 + NumberGroupSizes: + - 3 + PercentGroupSizes: + - 3 + CurrencyGroupSeparator: . + CurrencySymbol: kr. + NaNSymbol: NaN + CurrencyNegativePattern: 8 + NumberNegativePattern: 1 + PercentPositivePattern: 0 + PercentNegativePattern: 0 + NegativeInfinitySymbol: -∞ + NegativeSign: '-' + NumberDecimalDigits: 2 + NumberDecimalSeparator: ',' + NumberGroupSeparator: . + CurrencyPositivePattern: 3 + PositiveInfinitySymbol: ∞ + PositiveSign: + + PercentDecimalDigits: 2 + PercentDecimalSeparator: ',' + PercentGroupSeparator: . + PercentSymbol: '%' + PerMilleSymbol: ‰ + NativeDigits: + - 0 + - 1 + - 2 + - 3 + - 4 + - 5 + - 6 + - 7 + - 8 + - 9 + DigitSubstitution: None +DateTimeFormat: + AMDesignator: '' + Calendar: + MinSupportedDateTime: 01-01-0001 00:00:00 + MaxSupportedDateTime: 31-12-9999 23:59:59 + AlgorithmType: SolarCalendar + CalendarType: Localized + Eras: + - 1 + TwoDigitYearMax: {0} + DateSeparator: '-' + FirstDayOfWeek: Monday + CalendarWeekRule: FirstFourDayWeek + FullDateTimePattern: d. MMMM yyyy HH:mm:ss + LongDatePattern: d. MMMM yyyy + LongTimePattern: HH:mm:ss + MonthDayPattern: d. MMMM + PMDesignator: '' + RFC1123Pattern: ddd, dd MMM yyyy HH':'mm':'ss 'GMT' + ShortDatePattern: dd-MM-yyyy + ShortTimePattern: HH:mm + SortableDateTimePattern: yyyy'-'MM'-'dd'T'HH':'mm':'ss + TimeSeparator: ':' + UniversalSortableDateTimePattern: yyyy'-'MM'-'dd HH':'mm':'ss'Z' + YearMonthPattern: MMMM yyyy + AbbreviatedDayNames: + - sø + - ma + - ti + - on + - to + - fr + - lø + ShortestDayNames: + - sø + - ma + - ti + - on + - to + - fr + - lø + DayNames: + - søndag + - mandag + - tirsdag + - onsdag + - torsdag + - fredag + - lørdag + AbbreviatedMonthNames: + - jan + - feb + - mar + - apr + - maj + - jun + - jul + - aug + - sep + - okt + - nov + - dec + - '' + MonthNames: + - januar + - februar + - marts + - april + - maj + - juni + - juli + - august + - september + - oktober + - november + - december + - '' + NativeCalendarName: gregoriansk kalender + AbbreviatedMonthGenitiveNames: + - jan + - feb + - mar + - apr + - maj + - jun + - jul + - aug + - sep + - okt + - nov + - dec + - '' + MonthGenitiveNames: + - januar + - februar + - marts + - april + - maj + - juni + - juli + - august + - september + - oktober + - november + - december + - '' +Calendar: + MinSupportedDateTime: 01-01-0001 00:00:00 + MaxSupportedDateTime: 31-12-9999 23:59:59 + AlgorithmType: SolarCalendar + CalendarType: Localized + Eras: + - 1 + TwoDigitYearMax: {0} +OptionalCalendars: +- MinSupportedDateTime: 01-01-0001 00:00:00 + MaxSupportedDateTime: 31-12-9999 23:59:59 + AlgorithmType: SolarCalendar + CalendarType: Localized + Eras: + - 1 + TwoDigitYearMax: {0} +UseUserOverride: true +"; + +#if NET8_0_OR_GREATER || NET48_OR_GREATER + expected = string.Format(expected, "2049"); +#else + expected = string.Format(expected, "2029"); +#endif + +#if NET48_OR_GREATER + expected = expected.ReplaceAll("gregoriansk", "Gregoriansk", StringComparison.Ordinal); +#endif + + TestOutput.WriteLines(sut4); + + Assert.Equal(expected.ReplaceLineEndings().Split(new[] { Environment.NewLine }, StringSplitOptions.None).ToList(), sut4); + } + } +} From e7bdfc03a78d973715dfc41b1ceb0308be193452 Mon Sep 17 00:00:00 2001 From: Michael Mortensen Date: Thu, 14 Nov 2024 16:06:01 +0100 Subject: [PATCH 02/12] :construction_worker: fix restore-cache so always latest version is fixed --- .github/workflows/delayed-pipelines.yml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/.github/workflows/delayed-pipelines.yml b/.github/workflows/delayed-pipelines.yml index 486193699..be6ed5677 100644 --- a/.github/workflows/delayed-pipelines.yml +++ b/.github/workflows/delayed-pipelines.yml @@ -23,8 +23,6 @@ jobs: name: 🐧 Prepare Linux runs-on: ubuntu-22.04 timeout-minutes: 15 - outputs: - restoreCacheKey: ${{ steps.dotnet-restore.outputs.restoreCacheKey }} steps: - name: Checkout uses: codebeltnet/git-checkout@v1 @@ -37,15 +35,11 @@ jobs: - id: dotnet-restore name: Restore Dependencies uses: codebeltnet/dotnet-restore@v2 - with: - useRestoreCache: true prepare_windows: name: 🪟 Prepare Windows runs-on: windows-2022 timeout-minutes: 15 - outputs: - restoreCacheKey: ${{ steps.dotnet-restore.outputs.restoreCacheKey }} steps: - name: Checkout uses: codebeltnet/git-checkout@v1 @@ -58,8 +52,6 @@ jobs: - id: dotnet-restore name: Restore Dependencies uses: codebeltnet/dotnet-restore@v2 - with: - useRestoreCache: true build: name: 🛠️ Build @@ -120,7 +112,6 @@ jobs: projects: ${{ steps.projects.outputs.result }} configuration: ${{ matrix.configuration }} framework: ${{ matrix.framework }} - restoreCacheKey: ${{ needs.prepare_linux.outputs.restoreCacheKey }} uploadBuildArtifactName: 'DelayedBuild.${{ matrix.framework }}.${{ matrix.configuration }}' pack: @@ -146,7 +137,6 @@ jobs: configuration: ${{ matrix.configuration }} uploadPackedArtifact: true version: ${{ needs.build.outputs.version }} - restoreCacheKey: ${{ needs.prepare_linux.outputs.restoreCacheKey }} downloadBuildArtifactPattern: 'DelayedBuild.*.${{ matrix.configuration }}' uploadPackedArtifactName: 'NuGet-Delayed-${{ matrix.configuration }}' projects: ${{ needs.build.outputs.projects }} From 42dec01d6a24cdd234da9e214b73f7e239576c8d Mon Sep 17 00:00:00 2001 From: Michael Mortensen Date: Thu, 14 Nov 2024 16:50:22 +0100 Subject: [PATCH 03/12] fix for build --- .github/workflows/delayed-pipelines.yml | 40 +++---------------------- 1 file changed, 4 insertions(+), 36 deletions(-) diff --git a/.github/workflows/delayed-pipelines.yml b/.github/workflows/delayed-pipelines.yml index be6ed5677..fd87f366b 100644 --- a/.github/workflows/delayed-pipelines.yml +++ b/.github/workflows/delayed-pipelines.yml @@ -19,40 +19,6 @@ on: - Release jobs: - prepare_linux: - name: 🐧 Prepare Linux - runs-on: ubuntu-22.04 - timeout-minutes: 15 - steps: - - name: Checkout - uses: codebeltnet/git-checkout@v1 - - - name: Install .NET - uses: codebeltnet/install-dotnet@v1 - with: - includePreview: true - - - id: dotnet-restore - name: Restore Dependencies - uses: codebeltnet/dotnet-restore@v2 - - prepare_windows: - name: 🪟 Prepare Windows - runs-on: windows-2022 - timeout-minutes: 15 - steps: - - name: Checkout - uses: codebeltnet/git-checkout@v1 - - - name: Install .NET - uses: codebeltnet/install-dotnet@v1 - with: - includePreview: true - - - id: dotnet-restore - name: Restore Dependencies - uses: codebeltnet/dotnet-restore@v2 - build: name: 🛠️ Build runs-on: ubuntu-22.04 @@ -61,7 +27,6 @@ jobs: matrix: configuration: [Debug, Release] framework: [net9.0, net8.0, netstandard2.0] - needs: [prepare_linux] outputs: version: ${{ steps.minver-calculate.outputs.version }} projects: ${{ steps.projects.outputs.result }} @@ -105,6 +70,9 @@ jobs: fi shell: bash + - name: Restore Dependencies + uses: codebeltnet/dotnet-restore@v2 + - id: dotnet-build name: Build for ${{ matrix.framework }} (${{ matrix.configuration }}) uses: codebeltnet/dotnet-build@v2 @@ -121,7 +89,7 @@ jobs: strategy: matrix: configuration: [Debug, Release] - needs: [prepare_linux, build] + needs: [build] steps: - name: Checkout uses: codebeltnet/git-checkout@v1 From f77e7398ebefb4e65c4ca896cafe7dcc3d55ff25 Mon Sep 17 00:00:00 2001 From: Michael Mortensen Date: Thu, 14 Nov 2024 17:53:55 +0100 Subject: [PATCH 04/12] fix version and delayed pipeline --- .github/workflows/delayed-pipelines.yml | 4 +++- Directory.Packages.props | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/delayed-pipelines.yml b/.github/workflows/delayed-pipelines.yml index fd87f366b..0fc898552 100644 --- a/.github/workflows/delayed-pipelines.yml +++ b/.github/workflows/delayed-pipelines.yml @@ -107,7 +107,9 @@ jobs: version: ${{ needs.build.outputs.version }} downloadBuildArtifactPattern: 'DelayedBuild.*.${{ matrix.configuration }}' uploadPackedArtifactName: 'NuGet-Delayed-${{ matrix.configuration }}' - projects: ${{ needs.build.outputs.projects }} + projects: > + "src/**/Cuemon.Core.App.csproj" + "src/**/Cuemon.Extensions.Globalization.csproj" deploy: if: github.event_name != 'pull_request' diff --git a/Directory.Packages.props b/Directory.Packages.props index e391f3224..6318a7a12 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -8,7 +8,7 @@ - + From 4f4945aa0dd6a6fabbf8dabeda52839aabff0d38 Mon Sep 17 00:00:00 2001 From: Michael Mortensen Date: Thu, 14 Nov 2024 18:10:42 +0100 Subject: [PATCH 05/12] fix for normal pipeline (pack) --- .github/workflows/pipelines.yml | 43 ++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pipelines.yml b/.github/workflows/pipelines.yml index 6c74ad378..addc1afb2 100644 --- a/.github/workflows/pipelines.yml +++ b/.github/workflows/pipelines.yml @@ -221,7 +221,48 @@ jobs: uploadPackedArtifact: true version: ${{ needs.build.outputs.version }} restoreCacheKey: ${{ needs.prepare_linux.outputs.restoreCacheKey }} - projects: ${{ needs.build.outputs.projects }} + projects: > + "src/**/Cuemon.AspNetCore.csproj" + "src/**/Cuemon.AspNetCore.App.csproj" + "src/**/Cuemon.AspNetCore.Authentication.csproj" + "src/**/Cuemon.AspNetCore.Mvc.csproj" + "src/**/Cuemon.AspNetCore.Razor.TagHelpers.csproj" + "src/**/Cuemon.Core.csproj" + "src/**/Cuemon.Data.csproj" + "src/**/Cuemon.Data.Integrity.csproj" + "src/**/Cuemon.Data.SqlClient.csproj" + "src/**/Cuemon.Diagnostics.csproj" + "src/**/Cuemon.Extensions.AspNetCore.csproj" + "src/**/Cuemon.Extensions.AspNetCore.Authentication.csproj" + "src/**/Cuemon.Extensions.AspNetCore.Mvc.csproj" + "src/**/Cuemon.Extensions.AspNetCore.Mvc.Formatters.Text.Json.csproj" + "src/**/Cuemon.Extensions.AspNetCore.Mvc.Formatters.Xml.csproj" + "src/**/Cuemon.Extensions.AspNetCore.Mvc.RazorPages.csproj" + "src/**/Cuemon.Extensions.AspNetCore.Text.Json.csproj" + "src/**/Cuemon.Extensions.AspNetCore.Xml.csproj" + "src/**/Cuemon.Extensions.Collections.Generic.csproj" + "src/**/Cuemon.Extensions.Collections.Specialized.csproj" + "src/**/Cuemon.Extensions.Core.csproj" + "src/**/Cuemon.Extensions.Data.csproj" + "src/**/Cuemon.Extensions.Data.Integrity.csproj" + "src/**/Cuemon.Extensions.DependencyInjection.csproj" + "src/**/Cuemon.Extensions.Diagnostics.csproj" + "src/**/Cuemon.Extensions.Hosting.csproj" + "src/**/Cuemon.Extensions.IO.csproj" + "src/**/Cuemon.Extensions.Net.csproj" + "src/**/Cuemon.Extensions.Reflection.csproj" + "src/**/Cuemon.Extensions.Runtime.Caching.csproj" + "src/**/Cuemon.Extensions.Text.csproj" + "src/**/Cuemon.Extensions.Text.Json.csproj" + "src/**/Cuemon.Extensions.Threading.csproj" + "src/**/Cuemon.Extensions.Xml.csproj" + "src/**/Cuemon.IO.csproj" + "src/**/Cuemon.Net.csproj" + "src/**/Cuemon.Resilience.csproj" + "src/**/Cuemon.Runtime.Caching.csproj" + "src/**/Cuemon.Security.Cryptography.csproj" + "src/**/Cuemon.Threading.csproj" + "src/**/Cuemon.Xml.csproj"" test: name: 🧪 Test From 99c629bc4e1c83766f095bdebc425489158a32dd Mon Sep 17 00:00:00 2001 From: Michael Mortensen Date: Thu, 14 Nov 2024 19:25:21 +0100 Subject: [PATCH 06/12] fix for globalization (transitive vs non-transitive) --- .../Cuemon.Extensions.Globalization.csproj | 5 +++++ .../YamlSerializerTest.cs | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Cuemon.Extensions.Globalization/Cuemon.Extensions.Globalization.csproj b/src/Cuemon.Extensions.Globalization/Cuemon.Extensions.Globalization.csproj index 40dd52c32..60d6a4383 100644 --- a/src/Cuemon.Extensions.Globalization/Cuemon.Extensions.Globalization.csproj +++ b/src/Cuemon.Extensions.Globalization/Cuemon.Extensions.Globalization.csproj @@ -1203,4 +1203,9 @@ + + + + + diff --git a/test/Cuemon.Extensions.Globalization.Tests/YamlSerializerTest.cs b/test/Cuemon.Extensions.Globalization.Tests/YamlSerializerTest.cs index ac8f0ee5b..934ec0356 100644 --- a/test/Cuemon.Extensions.Globalization.Tests/YamlSerializerTest.cs +++ b/test/Cuemon.Extensions.Globalization.Tests/YamlSerializerTest.cs @@ -6,6 +6,7 @@ using Codebelt.Extensions.YamlDotNet; using Codebelt.Extensions.YamlDotNet.Formatters; using Cuemon.Extensions.IO; +using Cuemon.Extensions.Reflection; using Xunit; using Xunit.Abstractions; using YamlDotNet.Core; @@ -19,13 +20,14 @@ public class YamlSerializerTest : Test public YamlSerializerTest(ITestOutputHelper output) : base(output) { + output.WriteLine("Assembly version: " + typeof(CultureInfoExtensions).Assembly.GetAssemblyVersion().ToString()); try { _cultureInfo = new CultureInfo("da-DK").UseNationalLanguageSupport(); // from .NET6+ this is needed for both Windows and Linux; at least from pipeline (worked locally for Windows without Merge ...) } catch (Exception e) { - TestOutput.WriteLine(e.ToString()); + output.WriteLine(e.ToString()); } } From 4ff34997cc3089f46dd9737b7b87a10118033c4b Mon Sep 17 00:00:00 2001 From: Michael Mortensen Date: Thu, 14 Nov 2024 19:30:10 +0100 Subject: [PATCH 07/12] fix yaml double-double quotes --- .github/workflows/delayed-pipelines.yml | 4 +- .github/workflows/pipelines.yml | 82 ++++++++++++------------- 2 files changed, 43 insertions(+), 43 deletions(-) diff --git a/.github/workflows/delayed-pipelines.yml b/.github/workflows/delayed-pipelines.yml index 0fc898552..ce80693b4 100644 --- a/.github/workflows/delayed-pipelines.yml +++ b/.github/workflows/delayed-pipelines.yml @@ -108,8 +108,8 @@ jobs: downloadBuildArtifactPattern: 'DelayedBuild.*.${{ matrix.configuration }}' uploadPackedArtifactName: 'NuGet-Delayed-${{ matrix.configuration }}' projects: > - "src/**/Cuemon.Core.App.csproj" - "src/**/Cuemon.Extensions.Globalization.csproj" + src/**/Cuemon.Core.App.csproj + src/**/Cuemon.Extensions.Globalization.csproj deploy: if: github.event_name != 'pull_request' diff --git a/.github/workflows/pipelines.yml b/.github/workflows/pipelines.yml index addc1afb2..605d6a241 100644 --- a/.github/workflows/pipelines.yml +++ b/.github/workflows/pipelines.yml @@ -222,47 +222,47 @@ jobs: version: ${{ needs.build.outputs.version }} restoreCacheKey: ${{ needs.prepare_linux.outputs.restoreCacheKey }} projects: > - "src/**/Cuemon.AspNetCore.csproj" - "src/**/Cuemon.AspNetCore.App.csproj" - "src/**/Cuemon.AspNetCore.Authentication.csproj" - "src/**/Cuemon.AspNetCore.Mvc.csproj" - "src/**/Cuemon.AspNetCore.Razor.TagHelpers.csproj" - "src/**/Cuemon.Core.csproj" - "src/**/Cuemon.Data.csproj" - "src/**/Cuemon.Data.Integrity.csproj" - "src/**/Cuemon.Data.SqlClient.csproj" - "src/**/Cuemon.Diagnostics.csproj" - "src/**/Cuemon.Extensions.AspNetCore.csproj" - "src/**/Cuemon.Extensions.AspNetCore.Authentication.csproj" - "src/**/Cuemon.Extensions.AspNetCore.Mvc.csproj" - "src/**/Cuemon.Extensions.AspNetCore.Mvc.Formatters.Text.Json.csproj" - "src/**/Cuemon.Extensions.AspNetCore.Mvc.Formatters.Xml.csproj" - "src/**/Cuemon.Extensions.AspNetCore.Mvc.RazorPages.csproj" - "src/**/Cuemon.Extensions.AspNetCore.Text.Json.csproj" - "src/**/Cuemon.Extensions.AspNetCore.Xml.csproj" - "src/**/Cuemon.Extensions.Collections.Generic.csproj" - "src/**/Cuemon.Extensions.Collections.Specialized.csproj" - "src/**/Cuemon.Extensions.Core.csproj" - "src/**/Cuemon.Extensions.Data.csproj" - "src/**/Cuemon.Extensions.Data.Integrity.csproj" - "src/**/Cuemon.Extensions.DependencyInjection.csproj" - "src/**/Cuemon.Extensions.Diagnostics.csproj" - "src/**/Cuemon.Extensions.Hosting.csproj" - "src/**/Cuemon.Extensions.IO.csproj" - "src/**/Cuemon.Extensions.Net.csproj" - "src/**/Cuemon.Extensions.Reflection.csproj" - "src/**/Cuemon.Extensions.Runtime.Caching.csproj" - "src/**/Cuemon.Extensions.Text.csproj" - "src/**/Cuemon.Extensions.Text.Json.csproj" - "src/**/Cuemon.Extensions.Threading.csproj" - "src/**/Cuemon.Extensions.Xml.csproj" - "src/**/Cuemon.IO.csproj" - "src/**/Cuemon.Net.csproj" - "src/**/Cuemon.Resilience.csproj" - "src/**/Cuemon.Runtime.Caching.csproj" - "src/**/Cuemon.Security.Cryptography.csproj" - "src/**/Cuemon.Threading.csproj" - "src/**/Cuemon.Xml.csproj"" + src/**/Cuemon.AspNetCore.csproj + src/**/Cuemon.AspNetCore.App.csproj + src/**/Cuemon.AspNetCore.Authentication.csproj + src/**/Cuemon.AspNetCore.Mvc.csproj + src/**/Cuemon.AspNetCore.Razor.TagHelpers.csproj + src/**/Cuemon.Core.csproj + src/**/Cuemon.Data.csproj + src/**/Cuemon.Data.Integrity.csproj + src/**/Cuemon.Data.SqlClient.csproj + src/**/Cuemon.Diagnostics.csproj + src/**/Cuemon.Extensions.AspNetCore.csproj + src/**/Cuemon.Extensions.AspNetCore.Authentication.csproj + src/**/Cuemon.Extensions.AspNetCore.Mvc.csproj + src/**/Cuemon.Extensions.AspNetCore.Mvc.Formatters.Text.Json.csproj + src/**/Cuemon.Extensions.AspNetCore.Mvc.Formatters.Xml.csproj + src/**/Cuemon.Extensions.AspNetCore.Mvc.RazorPages.csproj + src/**/Cuemon.Extensions.AspNetCore.Text.Json.csproj + src/**/Cuemon.Extensions.AspNetCore.Xml.csproj + src/**/Cuemon.Extensions.Collections.Generic.csproj + src/**/Cuemon.Extensions.Collections.Specialized.csproj + src/**/Cuemon.Extensions.Core.csproj + src/**/Cuemon.Extensions.Data.csproj + src/**/Cuemon.Extensions.Data.Integrity.csproj + src/**/Cuemon.Extensions.DependencyInjection.csproj + src/**/Cuemon.Extensions.Diagnostics.csproj + src/**/Cuemon.Extensions.Hosting.csproj + src/**/Cuemon.Extensions.IO.csproj + src/**/Cuemon.Extensions.Net.csproj + src/**/Cuemon.Extensions.Reflection.csproj + src/**/Cuemon.Extensions.Runtime.Caching.csproj + src/**/Cuemon.Extensions.Text.csproj + src/**/Cuemon.Extensions.Text.Json.csproj + src/**/Cuemon.Extensions.Threading.csproj + src/**/Cuemon.Extensions.Xml.csproj + src/**/Cuemon.IO.csproj + src/**/Cuemon.Net.csproj + src/**/Cuemon.Resilience.csproj + src/**/Cuemon.Runtime.Caching.csproj + src/**/Cuemon.Security.Cryptography.csproj + src/**/Cuemon.Threading.csproj + src/**/Cuemon.Xml.csproj" test: name: 🧪 Test From 17db95b3fe8b437789500c8ff509a53824e3a8b6 Mon Sep 17 00:00:00 2001 From: Michael Mortensen Date: Thu, 14 Nov 2024 19:44:59 +0100 Subject: [PATCH 08/12] fix yaml syntax --- .github/workflows/delayed-pipelines.yml | 2 +- .github/workflows/pipelines.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/delayed-pipelines.yml b/.github/workflows/delayed-pipelines.yml index ce80693b4..af88b86cb 100644 --- a/.github/workflows/delayed-pipelines.yml +++ b/.github/workflows/delayed-pipelines.yml @@ -107,7 +107,7 @@ jobs: version: ${{ needs.build.outputs.version }} downloadBuildArtifactPattern: 'DelayedBuild.*.${{ matrix.configuration }}' uploadPackedArtifactName: 'NuGet-Delayed-${{ matrix.configuration }}' - projects: > + projects: >- src/**/Cuemon.Core.App.csproj src/**/Cuemon.Extensions.Globalization.csproj diff --git a/.github/workflows/pipelines.yml b/.github/workflows/pipelines.yml index 605d6a241..4a0fbe1d8 100644 --- a/.github/workflows/pipelines.yml +++ b/.github/workflows/pipelines.yml @@ -221,7 +221,7 @@ jobs: uploadPackedArtifact: true version: ${{ needs.build.outputs.version }} restoreCacheKey: ${{ needs.prepare_linux.outputs.restoreCacheKey }} - projects: > + projects: >- src/**/Cuemon.AspNetCore.csproj src/**/Cuemon.AspNetCore.App.csproj src/**/Cuemon.AspNetCore.Authentication.csproj From f01b4a29e00f5c0ec5bc6184b7603811a9da3214 Mon Sep 17 00:00:00 2001 From: Michael Mortensen Date: Thu, 14 Nov 2024 19:55:46 +0100 Subject: [PATCH 09/12] fix --- .github/workflows/pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pipelines.yml b/.github/workflows/pipelines.yml index 4a0fbe1d8..60e5de6f9 100644 --- a/.github/workflows/pipelines.yml +++ b/.github/workflows/pipelines.yml @@ -262,7 +262,7 @@ jobs: src/**/Cuemon.Runtime.Caching.csproj src/**/Cuemon.Security.Cryptography.csproj src/**/Cuemon.Threading.csproj - src/**/Cuemon.Xml.csproj" + src/**/Cuemon.Xml.csproj test: name: 🧪 Test From 9697b6f7a0e73eade8916e908c37ab9fc6e447c1 Mon Sep 17 00:00:00 2001 From: Michael Mortensen Date: Thu, 14 Nov 2024 20:42:29 +0100 Subject: [PATCH 10/12] exotic fix for an exotic situation --- .github/workflows/pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pipelines.yml b/.github/workflows/pipelines.yml index 60e5de6f9..211a14cd0 100644 --- a/.github/workflows/pipelines.yml +++ b/.github/workflows/pipelines.yml @@ -303,7 +303,7 @@ jobs: projects: ${{ matrix.project }} configuration: ${{ matrix.configuration }} restoreCacheKey: ${{ runner.os == 'Linux' && needs.prepare_linux.outputs.restoreCacheKey || needs.prepare_windows.outputs.restoreCacheKey }} - buildSwitches: -p:SkipSignAssembly=true + buildSwitches: ${{ contains(matrix.project, 'Cuemon.Extensions.Globalization.Tests') && '-p:SkipSignAssembly=false' || '-p:SkipSignAssembly=true' }} testArguments: -- RunConfiguration.DisableAppDomain=true env: CONNECTIONSTRINGS__ADVENTUREWORKS: ${{ secrets.DB_ADVENTUREWORKS }} From 0f395374dbff5b02aa332282610be77185701c1b Mon Sep 17 00:00:00 2001 From: Michael Mortensen Date: Thu, 14 Nov 2024 21:25:54 +0100 Subject: [PATCH 11/12] insanity --- .github/workflows/pipelines.yml | 2 -- Directory.Build.props | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/pipelines.yml b/.github/workflows/pipelines.yml index 211a14cd0..6ea601e64 100644 --- a/.github/workflows/pipelines.yml +++ b/.github/workflows/pipelines.yml @@ -349,7 +349,6 @@ jobs: uses: codebeltnet/dotnet-build@v2 with: uploadBuildArtifact: false - buildSwitches: -p:SkipSignAssembly=true - name: Finalize SonarCloud Analysis uses: codebeltnet/sonarcloud-scan-finalize@v1 @@ -398,7 +397,6 @@ jobs: uses: codebeltnet/dotnet-build@v2 with: uploadBuildArtifact: false - buildSwitches: -p:SkipSignAssembly=true - name: Finalize CodeQL SAST Analysis uses: codebeltnet/codeql-scan-finalize@v1 diff --git a/Directory.Build.props b/Directory.Build.props index 9f4e016c2..2025b1d8b 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -5,7 +5,7 @@ $([MSBuild]::IsOSPlatform('Windows')) true false - preview + latest From 25cff6365b0695bf5679baf2f63dbe5cb93723e0 Mon Sep 17 00:00:00 2001 From: Michael Mortensen Date: Thu, 14 Nov 2024 22:36:20 +0100 Subject: [PATCH 12/12] remember snk --- .github/workflows/pipelines.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/.github/workflows/pipelines.yml b/.github/workflows/pipelines.yml index 6ea601e64..e2adaef88 100644 --- a/.github/workflows/pipelines.yml +++ b/.github/workflows/pipelines.yml @@ -337,6 +337,13 @@ jobs: useRestoreCache: true restoreCacheKey: ${{ needs.prepare_linux.outputs.restoreCacheKey }} + - name: Download cuemon.snk file + uses: codebeltnet/gcp-download-file@v1 + with: + serviceAccountKey: ${{ secrets.GCP_TOKEN }} + bucketName: ${{ secrets.GCP_BUCKETNAME }} + objectName: cuemon.snk + - name: Run SonarCloud Analysis uses: codebeltnet/sonarcloud-scan@v1 with: @@ -393,6 +400,13 @@ jobs: - name: Prepare CodeQL SAST Analysis uses: codebeltnet/codeql-scan@v1 + - name: Download cuemon.snk file + uses: codebeltnet/gcp-download-file@v1 + with: + serviceAccountKey: ${{ secrets.GCP_TOKEN }} + bucketName: ${{ secrets.GCP_BUCKETNAME }} + objectName: cuemon.snk + - name: Build uses: codebeltnet/dotnet-build@v2 with: