From c981cee556e52ed23164ae78233ade608ad1137c Mon Sep 17 00:00:00 2001 From: fernandezja Date: Fri, 3 Jul 2020 19:21:18 -0300 Subject: [PATCH 01/20] Update nuget componentes test project --- src/ColorHashSharp.Tests/ColorHashSharp.Tests.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ColorHashSharp.Tests/ColorHashSharp.Tests.csproj b/src/ColorHashSharp.Tests/ColorHashSharp.Tests.csproj index 287bf41..ed00975 100644 --- a/src/ColorHashSharp.Tests/ColorHashSharp.Tests.csproj +++ b/src/ColorHashSharp.Tests/ColorHashSharp.Tests.csproj @@ -7,9 +7,9 @@ - + - + all runtime; build; native; contentfiles; analyzers From 73b7a8c802b68abbdda4f4cc218aeda890811635 Mon Sep 17 00:00:00 2001 From: fernandezja Date: Fri, 3 Jul 2020 19:34:12 -0300 Subject: [PATCH 02/20] Add test coverage with nuget component coverlet.msbuild --- .gitignore | 1 + src/ColorHashSharp.Tests/ColorHashSharp.Tests.csproj | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/.gitignore b/.gitignore index 3e759b7..51db318 100644 --- a/.gitignore +++ b/.gitignore @@ -328,3 +328,4 @@ ASALocalRun/ # MFractors (Xamarin productivity tool) working folder .mfractor/ +/src/ColorHashSharp.Tests/coverage.json diff --git a/src/ColorHashSharp.Tests/ColorHashSharp.Tests.csproj b/src/ColorHashSharp.Tests/ColorHashSharp.Tests.csproj index ed00975..1982d88 100644 --- a/src/ColorHashSharp.Tests/ColorHashSharp.Tests.csproj +++ b/src/ColorHashSharp.Tests/ColorHashSharp.Tests.csproj @@ -7,6 +7,10 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + From a37ba4d01f50c134d85cb2237db41c6c05034907 Mon Sep 17 00:00:00 2001 From: fernandezja Date: Sun, 29 Nov 2020 12:18:06 -0300 Subject: [PATCH 03/20] Create a color with custom Hue option (hex, hsl) --- assets/icon/ColorHashSharp.png | Bin 0 -> 87480 bytes .../ColorHashSharp.Tests.csproj | 6 +- src/ColorHashSharp.Tests/ColorHashTest.cs | 48 +++ src/ColorHashSharp.Tests/OptionsTest.cs | 56 +++ src/ColorHashSharp/ColorHash.cs | 5 + src/ColorHashSharp/Entities/Hue.cs | 6 + src/ColorHashSharp/Options.cs | 26 +- src/ColorHashSharp/SimpleColorTransforms.cs | 396 ++++++++++++++++++ 8 files changed, 537 insertions(+), 6 deletions(-) create mode 100644 assets/icon/ColorHashSharp.png create mode 100644 src/ColorHashSharp/SimpleColorTransforms.cs diff --git a/assets/icon/ColorHashSharp.png b/assets/icon/ColorHashSharp.png new file mode 100644 index 0000000000000000000000000000000000000000..b311eb8f6c8cdbaf2bcef4bd08708fbdf75af679 GIT binary patch literal 87480 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 literal 0 HcmV?d00001 diff --git a/src/ColorHashSharp.Tests/ColorHashSharp.Tests.csproj b/src/ColorHashSharp.Tests/ColorHashSharp.Tests.csproj index 1982d88..b98e42f 100644 --- a/src/ColorHashSharp.Tests/ColorHashSharp.Tests.csproj +++ b/src/ColorHashSharp.Tests/ColorHashSharp.Tests.csproj @@ -1,7 +1,7 @@  - netcoreapp3.0 + netcoreapp3.1 false @@ -11,9 +11,9 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + - + all runtime; build; native; contentfiles; analyzers diff --git a/src/ColorHashSharp.Tests/ColorHashTest.cs b/src/ColorHashSharp.Tests/ColorHashTest.cs index 73a770d..914c9d4 100644 --- a/src/ColorHashSharp.Tests/ColorHashTest.cs +++ b/src/ColorHashSharp.Tests/ColorHashTest.cs @@ -1,4 +1,5 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Drawing; using System.Text; @@ -42,6 +43,53 @@ public void BuildToHsl_ShouldCreateAColorInHSL( Assert.Equal(lExpected, result.L); } + + [Theory(DisplayName = "BuildToHsl_ShouldCreateAColorInHSLWithCustomHueOption")] + [InlineData("yoda", 90, 90, 0.35, 0.35)] + [InlineData("yoda", 270, 270, 0.35, 0.35)] + public void BuildToHsl_ShouldCreateAColorInHSLWithCustomHueOption( + string phrase, int hue, + int hExpected, double sExpected, double lExpected) + { + var options = new Options(); + options.SetHue(hue); + + var colorHash = new Fernandezja.ColorHashSharp.ColorHash(options); + + var result = colorHash.BuildToHsl(phrase); + + Assert.NotNull(result); + Assert.Equal(hExpected, result.H); + Assert.Equal(sExpected, result.S); + Assert.Equal(lExpected, result.L); + + + } + + + + [Theory(DisplayName = "BuildToHsl_ShouldCreateAColorInHexWithCustomHueOption")] + [InlineData("yoda", 90, "59783A")] + [InlineData("yoda", 210, "3A5978")] + [InlineData("yoda", 270, "593A78")] + [InlineData("yoda", 360, "783A3A")] + public void BuildToHsl_ShouldCreateAColorInHexWithCustomHueOption( + string phrase, int hue, string hexExpected) + { + var options = new Options(); + options.SetHue(hue); + + var colorHash = new Fernandezja.ColorHashSharp.ColorHash(options); + + var result = colorHash.BuildToHex(phrase); + + Assert.NotNull(result); + + Assert.Equal(hexExpected, result); + + + } + [Theory(DisplayName = "BuildToHex_ShouldCreateAColorInHex")] [InlineData("yoda", "68783A")] [InlineData("Yoda", "D279BE")] diff --git a/src/ColorHashSharp.Tests/OptionsTest.cs b/src/ColorHashSharp.Tests/OptionsTest.cs index 987bf71..66a7124 100644 --- a/src/ColorHashSharp.Tests/OptionsTest.cs +++ b/src/ColorHashSharp.Tests/OptionsTest.cs @@ -46,5 +46,61 @@ public void GetLS_ArrayValues() } + [Theory(DisplayName = "SetHue_SimpleValue")] + [InlineData(90)] + [InlineData(0.35)] + public void SetHue_SimpleValue(int value) + { + var options = new Fernandezja.ColorHashSharp.Options(); + options.SetHue(value); + + Assert.NotNull(options.HueRanges); + Assert.Single(options.HueRanges); + Assert.Equal(value, options.HueRanges[0].Min); + Assert.Equal(value, options.HueRanges[0].Max); + } + + + [Fact(DisplayName = "SetHue_ListValues")] + public void SetHue_ListValues() + { + var options = new Fernandezja.ColorHashSharp.Options(); + + var hueValues = new List<(int Min, int Max)>(); + hueValues.Add((90, 270)); + + options.SetHue(hueValues); + + Assert.NotNull(options.HueRanges); + Assert.Single(options.HueRanges); + Assert.Equal(90, options.HueRanges[0].Min); + Assert.Equal(270, options.HueRanges[0].Max); + } + + [Fact(DisplayName = "SetHue_ListValues2")] + public void SetHue_ListValues2() + { + var options = new Fernandezja.ColorHashSharp.Options(); + + var hueValues = new List<(int Min, int Max)>(); + hueValues.Add((30, 90)); + hueValues.Add((180, 210)); + hueValues.Add((270, 285)); + + options.SetHue(hueValues); + + Assert.NotNull(options.HueRanges); + Assert.Equal(3, options.HueRanges.Count); + + Assert.Equal(30, options.HueRanges[0].Min); + Assert.Equal(90, options.HueRanges[0].Max); + + Assert.Equal(180, options.HueRanges[1].Min); + Assert.Equal(210, options.HueRanges[1].Max); + + Assert.Equal(270, options.HueRanges[2].Min); + Assert.Equal(285, options.HueRanges[2].Max); + } + } } diff --git a/src/ColorHashSharp/ColorHash.cs b/src/ColorHashSharp/ColorHash.cs index 99e0c63..8a85060 100644 --- a/src/ColorHashSharp/ColorHash.cs +++ b/src/ColorHashSharp/ColorHash.cs @@ -18,6 +18,11 @@ public ColorHash() _options = new Options(); } + public ColorHash(Options options) + { + _options = options; + } + #region IColorHash public string Build(string value) diff --git a/src/ColorHashSharp/Entities/Hue.cs b/src/ColorHashSharp/Entities/Hue.cs index 7d44389..fa1a10f 100644 --- a/src/ColorHashSharp/Entities/Hue.cs +++ b/src/ColorHashSharp/Entities/Hue.cs @@ -18,6 +18,12 @@ public Hue() Max = 360; } + public Hue(int min, int max) + { + Min = min; + Max = max; + } + public int Min { get; set; } public int Max { get; set; } diff --git a/src/ColorHashSharp/Options.cs b/src/ColorHashSharp/Options.cs index f1bdf10..7306ece 100644 --- a/src/ColorHashSharp/Options.cs +++ b/src/ColorHashSharp/Options.cs @@ -1,4 +1,5 @@ -using System; +using Fernandezja.ColorHashSharp.Entities; +using System; using System.Collections; using System.Collections.Generic; using System.Text; @@ -7,7 +8,9 @@ namespace Fernandezja.ColorHashSharp { public class Options { - public ArrayList HueRanges { get; set; } + public List HueRanges { get; set; } + + //public List Hue { get; set; } /// /// Saturation @@ -25,7 +28,7 @@ public Options() S = GetLS(new ArrayList() { 0.35, 0.5, 0.65 }); L = GetLS(new ArrayList() { 0.35, 0.5, 0.65 }); - HueRanges = new ArrayList(); + HueRanges = new List(); } @@ -61,5 +64,22 @@ internal protected ArrayList GetLS() } + internal protected void SetHue(int value) + { + HueRanges = new List(); + HueRanges.Add(new Hue(value, value)); + } + + internal protected void SetHue(List<(int Min, int Max)> values) + { + HueRanges = new List(); + + foreach (var value in values) + { + HueRanges.Add(new Hue(value.Min, value.Max)); + } + } + + } } diff --git a/src/ColorHashSharp/SimpleColorTransforms.cs b/src/ColorHashSharp/SimpleColorTransforms.cs new file mode 100644 index 0000000..9cdd6d6 --- /dev/null +++ b/src/ColorHashSharp/SimpleColorTransforms.cs @@ -0,0 +1,396 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Text; +using SystemMath = System.Math; + +namespace Fernandezja.ColorHashSharp +{ + class SimpleColorTransforms + { + private static double tolerance + => 0.000000000000001; + + + /// + /// Defines brightness levels. + /// + public enum Brightness + : byte + { + Bright = 255, + MediumBright = 210, + Medium = 142, + Dim = 98, + XDim = 50 + } + + + /// + /// Defines alpha levels. + /// + public enum Alpha + : byte + { + Opaque = 255, + MediumHigh = 230, + Medium = 175, + MediumLow = 142, + Low = 109, + XLow = 45 + } + + + /// + /// Defines hint alpha levels. + /// + public enum HintAlpha + : byte + { + Low = 64, + XLow = 48, + XxLow = 32, + XxxLow = 16 + } + + + /// + /// Specifies a mode for argb transformations. + /// + public enum ColorTransformMode + : byte + { + Hsl, + Hsb + } + + + /// + /// Converts RGB to HSL. Alpha is ignored. + /// Output is: { H: [0, 360], S: [0, 1], L: [0, 1] }. + /// + /// The color to convert. + public static double[] RgBtoHsl(Color color) + { + double h = 0D; + double s = 0D; + double l; + + // normalize red, green, blue values + double r = color.R / 255D; + double g = color.G / 255D; + double b = color.B / 255D; + + double max = SystemMath.Max(r, SystemMath.Max(g, b)); + double min = SystemMath.Min(r, SystemMath.Min(g, b)); + + // hue + if (SystemMath.Abs(max - min) < SimpleColorTransforms.tolerance) + h = 0D; // undefined + else if ((SystemMath.Abs(max - r) < SimpleColorTransforms.tolerance) + && (g >= b)) + h = (60D * (g - b)) / (max - min); + else if ((SystemMath.Abs(max - r) < SimpleColorTransforms.tolerance) + && (g < b)) + h = ((60D * (g - b)) / (max - min)) + 360D; + else if (SystemMath.Abs(max - g) < SimpleColorTransforms.tolerance) + h = ((60D * (b - r)) / (max - min)) + 120D; + else if (SystemMath.Abs(max - b) < SimpleColorTransforms.tolerance) + h = ((60D * (r - g)) / (max - min)) + 240D; + + // luminance + l = (max + min) / 2D; + + // saturation + if ((SystemMath.Abs(l) < SimpleColorTransforms.tolerance) + || (SystemMath.Abs(max - min) < SimpleColorTransforms.tolerance)) + s = 0D; + else if ((0D < l) + && (l <= .5D)) + s = (max - min) / (max + min); + else if (l > .5D) + s = (max - min) / (2D - (max + min)); //(max-min > 0)? + + return new[] + { + SystemMath.Max(0D, SystemMath.Min(360D, double.Parse($"{h:0.##}"))), + SystemMath.Max(0D, SystemMath.Min(1D, double.Parse($"{s:0.##}"))), + SystemMath.Max(0D, SystemMath.Min(1D, double.Parse($"{l:0.##}"))) + }; + } + + + /// + /// Converts HSL to RGB, with a specified output Alpha. + /// Arguments are limited to the defined range: + /// does not raise exceptions. + /// + /// Hue, must be in [0, 360]. + /// Saturation, must be in [0, 1]. + /// Luminance, must be in [0, 1]. + /// Output Alpha, must be in [0, 255]. + public static Color HsLtoRgb(double h, double s, double l, int a = 255) + { + h = SystemMath.Max(0D, SystemMath.Min(360D, h)); + s = SystemMath.Max(0D, SystemMath.Min(1D, s)); + l = SystemMath.Max(0D, SystemMath.Min(1D, l)); + a = SystemMath.Max(0, SystemMath.Min(255, a)); + + // achromatic argb (gray scale) + if (SystemMath.Abs(s) < SimpleColorTransforms.tolerance) + { + return Color.FromArgb( + a, + SystemMath.Max(0, SystemMath.Min(255, Convert.ToInt32(double.Parse($"{l * 255D:0.00}")))), + SystemMath.Max(0, SystemMath.Min(255, Convert.ToInt32(double.Parse($"{l * 255D:0.00}")))), + SystemMath.Max(0, SystemMath.Min(255, Convert.ToInt32(double.Parse($"{l * 255D:0.00}"))))); + } + + double q = l < .5D + ? l * (1D + s) + : (l + s) - (l * s); + double p = (2D * l) - q; + + double hk = h / 360D; + double[] T = new double[3]; + T[0] = hk + (1D / 3D); // Tr + T[1] = hk; // Tb + T[2] = hk - (1D / 3D); // Tg + + for (int i = 0; i < 3; i++) + { + if (T[i] < 0D) + T[i] += 1D; + if (T[i] > 1D) + T[i] -= 1D; + + if ((T[i] * 6D) < 1D) + T[i] = p + ((q - p) * 6D * T[i]); + else if ((T[i] * 2D) < 1) + T[i] = q; + else if ((T[i] * 3D) < 2) + T[i] = p + ((q - p) * ((2D / 3D) - T[i]) * 6D); + else + T[i] = p; + } + + return Color.FromArgb( + a, + SystemMath.Max(0, SystemMath.Min(255, Convert.ToInt32(double.Parse($"{T[0] * 255D:0.00}")))), + SystemMath.Max(0, SystemMath.Min(255, Convert.ToInt32(double.Parse($"{T[1] * 255D:0.00}")))), + SystemMath.Max(0, SystemMath.Min(255, Convert.ToInt32(double.Parse($"{T[2] * 255D:0.00}"))))); + } + + + /// + /// Converts RGB to HSB. Alpha is ignored. + /// Output is: { H: [0, 360], S: [0, 1], B: [0, 1] }. + /// + /// The color to convert. + public static double[] RgBtoHsb(Color color) + { + // normalize red, green and blue values + double r = color.R / 255D; + double g = color.G / 255D; + double b = color.B / 255D; + + // conversion start + double max = SystemMath.Max(r, SystemMath.Max(g, b)); + double min = SystemMath.Min(r, SystemMath.Min(g, b)); + + double h = 0D; + if ((SystemMath.Abs(max - r) < SimpleColorTransforms.tolerance) + && (g >= b)) + h = (60D * (g - b)) / (max - min); + else if ((SystemMath.Abs(max - r) < SimpleColorTransforms.tolerance) + && (g < b)) + h = ((60D * (g - b)) / (max - min)) + 360D; + else if (SystemMath.Abs(max - g) < SimpleColorTransforms.tolerance) + h = ((60D * (b - r)) / (max - min)) + 120D; + else if (SystemMath.Abs(max - b) < SimpleColorTransforms.tolerance) + h = ((60D * (r - g)) / (max - min)) + 240D; + + double s = SystemMath.Abs(max) < SimpleColorTransforms.tolerance + ? 0D + : 1D - (min / max); + + return new[] + { + SystemMath.Max(0D, SystemMath.Min(360D, h)), + SystemMath.Max(0D, SystemMath.Min(1D, s)), + SystemMath.Max(0D, SystemMath.Min(1D, max)) + }; + } + + + /// + /// Converts HSB to RGB, with a specified output Alpha. + /// Arguments are limited to the defined range: + /// does not raise exceptions. + /// + /// Hue, must be in [0, 360]. + /// Saturation, must be in [0, 1]. + /// Brightness, must be in [0, 1]. + /// Output Alpha, must be in [0, 255]. + public static Color HsBtoRgb(double h, double s, double b, int a = 255) + { + h = SystemMath.Max(0D, SystemMath.Min(360D, h)); + s = SystemMath.Max(0D, SystemMath.Min(1D, s)); + b = SystemMath.Max(0D, SystemMath.Min(1D, b)); + a = SystemMath.Max(0, SystemMath.Min(255, a)); + + double r = 0D; + double g = 0D; + double bl = 0D; + + if (SystemMath.Abs(s) < SimpleColorTransforms.tolerance) + r = g = bl = b; + else + { + // the argb wheel consists of 6 sectors. Figure out which sector + // you're in. + double sectorPos = h / 60D; + int sectorNumber = (int)SystemMath.Floor(sectorPos); + // get the fractional part of the sector + double fractionalSector = sectorPos - sectorNumber; + + // calculate values for the three axes of the argb. + double p = b * (1D - s); + double q = b * (1D - (s * fractionalSector)); + double t = b * (1D - (s * (1D - fractionalSector))); + + // assign the fractional colors to r, g, and b based on the sector + // the angle is in. + switch (sectorNumber) + { + case 0: + r = b; + g = t; + bl = p; + break; + case 1: + r = q; + g = b; + bl = p; + break; + case 2: + r = p; + g = b; + bl = t; + break; + case 3: + r = p; + g = q; + bl = b; + break; + case 4: + r = t; + g = p; + bl = b; + break; + case 5: + r = b; + g = p; + bl = q; + break; + } + } + + return Color.FromArgb( + a, + SystemMath.Max(0, SystemMath.Min(255, Convert.ToInt32(double.Parse($"{r * 255D:0.00}")))), + SystemMath.Max(0, SystemMath.Min(255, Convert.ToInt32(double.Parse($"{g * 255D:0.00}")))), + SystemMath.Max(0, SystemMath.Min(255, Convert.ToInt32(double.Parse($"{bl * 250D:0.00}"))))); + } + + + /// + /// Multiplies the Color's Luminance or Brightness by the argument; + /// and optionally specifies the output Alpha. + /// + /// The color to transform. + /// Transform mode. + /// The transformation multiplier. + /// Can optionally specify the Alpha to directly + /// set on the output. If null, then the input + /// Alpha is used. + public static Color TransformBrightness( + Color color, + ColorTransformMode colorTransformMode, + double brightnessTransform, + byte? outputAlpha = null) + { + double[] hsl = colorTransformMode == ColorTransformMode.Hsl + ? SimpleColorTransforms.RgBtoHsl(color) + : SimpleColorTransforms.RgBtoHsb(color); + if ((SystemMath.Abs(hsl[2]) < SimpleColorTransforms.tolerance) + && (brightnessTransform > 1D)) + hsl[2] = brightnessTransform - 1D; + else + hsl[2] *= brightnessTransform; + return colorTransformMode == ColorTransformMode.Hsl + ? SimpleColorTransforms.HsLtoRgb(hsl[0], hsl[1], hsl[2], outputAlpha ?? color.A) + : SimpleColorTransforms.HsBtoRgb(hsl[0], hsl[1], hsl[2], outputAlpha ?? color.A); + } + + + /// + /// Multiplies the Color's Saturation, and Luminance or Brightness by the argument; + /// and optionally specifies the output Alpha. + /// + /// The color to transform. + /// Transform mode. + /// The transformation multiplier. + /// The transformation multiplier. + /// Can optionally specify the Alpha to directly + /// set on the output. If null, then the input + /// Alpha is used. + public static Color TransformSaturationAndBrightness( + Color color, + ColorTransformMode colorTransformMode, + double saturationTransform, + double brightnessTransform, + byte? outputAlpha = null) + { + double[] hsl = colorTransformMode == ColorTransformMode.Hsl + ? SimpleColorTransforms.RgBtoHsl(color) + : SimpleColorTransforms.RgBtoHsb(color); + if ((SystemMath.Abs(hsl[1]) < SimpleColorTransforms.tolerance) + && (saturationTransform > 1D)) + hsl[1] = saturationTransform - 1D; + else + hsl[1] *= saturationTransform; + if ((SystemMath.Abs(hsl[2]) < SimpleColorTransforms.tolerance) + && (brightnessTransform > 1D)) + hsl[2] = brightnessTransform - 1D; + else + hsl[2] *= brightnessTransform; + return colorTransformMode == ColorTransformMode.Hsl + ? SimpleColorTransforms.HsLtoRgb(hsl[0], hsl[1], hsl[2], outputAlpha ?? color.A) + : SimpleColorTransforms.HsBtoRgb(hsl[0], hsl[1], hsl[2], outputAlpha ?? color.A); + } + + + /// + /// Creates a new Color by combining R, G, and B from each Color, scaled by the Color's Alpha. + /// The R, G, B of each Color is scaled by the Color's Alpha. The R, G, B of both results is + /// then added together and divided by 2. The valuea are limited to [0, 255]. + /// The Alpha of the output Color is specified; and is also limited to [0, 255] + /// (does not raise exceptions). + /// + /// Combined by scaling RGB by the A. + /// Combined by scaling RGB by the A. + /// The Alpha of the output Color. + public static Color AlphaCombine(Color color1, Color color2, byte outputAlpha) + { + double a1 = color1.A / 255D; + double a2 = color2.A / 255D; + return Color.FromArgb( + outputAlpha, + (byte)SystemMath.Max(0D, SystemMath.Min(255D, ((color1.R * a1) + (color2.R * a2)) * .5D)), + (byte)SystemMath.Max(0D, SystemMath.Min(255D, ((color1.G * a1) + (color2.G * a2)) * .5D)), + (byte)SystemMath.Max(0D, SystemMath.Min(255D, ((color1.B * a1) + (color2.B * a2)) * .5D))); + } + + } +} From 8ece822285ecc24331a6b7d6bac1086aa60c8572 Mon Sep 17 00:00:00 2001 From: fernandezja Date: Sun, 29 Nov 2020 12:19:35 -0300 Subject: [PATCH 04/20] Update dotnet version in CI yaml to 3.1.404 --- .github/workflows/dotnet-core.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/dotnet-core.yml b/.github/workflows/dotnet-core.yml index 6470c94..0ae5595 100644 --- a/.github/workflows/dotnet-core.yml +++ b/.github/workflows/dotnet-core.yml @@ -2,9 +2,9 @@ name: .NET Core on: push: - branches: [ master ] + branches: [ master, develop ] pull_request: - branches: [ master ] + branches: [ master, develop ] jobs: build: @@ -16,7 +16,7 @@ jobs: - name: Setup .NET Core uses: actions/setup-dotnet@v1 with: - dotnet-version: 3.1.101 + dotnet-version: 3.1.404 - name: Install dependencies working-directory: src run: dotnet restore From 29d25c181c7ca2c509021925ea43128277901f6e Mon Sep 17 00:00:00 2001 From: fernandezja Date: Sun, 29 Nov 2020 12:24:46 -0300 Subject: [PATCH 05/20] Update readme with branches CI status --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 6761901..188c68c 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,14 @@ Generate color based on the given string. C# port of [ColorHash Javascript Libra ![.NET Core](https://github.com/fernandezja/ColorHashSharp/workflows/.NET%20Core/badge.svg?branch=master) [![Build status](https://fernandezja.visualstudio.com/ColorHashSharp/_apis/build/status/ColorHashSharp-CI)](https://fernandezja.visualstudio.com/ColorHashSharp/_build/latest?definitionId=4) +#### Status + + +|Actions |master |develop | +|--- |--- |--- | +|CI |![.NET Core](https://github.com/fernandezja/ColorHashSharp/workflows/.NET%20Core/badge.svg?branch=master) |![.NET Core](https://github.com/fernandezja/ColorHashSharp/workflows/.NET%20Core/badge.svg?branch=develop) | + + #### Basic ```csharp From 5615e477f63abb3c0d5d1f41841e614ea440ebae Mon Sep 17 00:00:00 2001 From: fernandezja Date: Sun, 29 Nov 2020 12:27:15 -0300 Subject: [PATCH 06/20] Change name CI pipeline in github actions to CI-NETCore --- .github/workflows/dotnet-core.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dotnet-core.yml b/.github/workflows/dotnet-core.yml index 0ae5595..6f22fc4 100644 --- a/.github/workflows/dotnet-core.yml +++ b/.github/workflows/dotnet-core.yml @@ -1,4 +1,4 @@ -name: .NET Core +name: CI-NETCore on: push: From 175596df3b67d341480b16f83dfa871f763af909 Mon Sep 17 00:00:00 2001 From: fernandezja Date: Sat, 10 Dec 2022 10:09:19 -0300 Subject: [PATCH 07/20] Benchmark NET6/NET7 --- Benchmark.md | 20 +++++++++ .../ColorHashSharp.Benchmarks.csproj | 18 ++++++++ .../ColorHashSharpBenchmarks.cs | 41 +++++++++++++++++++ src/ColorHashSharp.Benchmarks/Program.cs | 8 ++++ .../ColorHashSharp.Tests.csproj | 10 ++--- src/ColorHashSharp.sln | 10 ++++- 6 files changed, 100 insertions(+), 7 deletions(-) create mode 100644 Benchmark.md create mode 100644 src/ColorHashSharp.Benchmarks/ColorHashSharp.Benchmarks.csproj create mode 100644 src/ColorHashSharp.Benchmarks/ColorHashSharpBenchmarks.cs create mode 100644 src/ColorHashSharp.Benchmarks/Program.cs diff --git a/Benchmark.md b/Benchmark.md new file mode 100644 index 0000000..55f6744 --- /dev/null +++ b/Benchmark.md @@ -0,0 +1,20 @@ +# ColorHashSharp Benchmark + +### Benchmark NET6 & NET7 + +BenchmarkDotNet=v0.13.2, OS=Windows 11 (10.0.22000.1281/21H2) +Intel Core i7-8550U CPU 1.80GHz (Kaby Lake R), 1 CPU, 8 logical and 4 physical cores +.NET SDK=7.0.100 + [Host] : .NET 6.0.11 (6.0.1122.52304), X64 RyuJIT AVX2 [AttachedDebugger] + .NET 6.0 : .NET 6.0.11 (6.0.1122.52304), X64 RyuJIT AVX2 + .NET 7.0 : .NET 7.0.0 (7.0.22.51805), X64 RyuJIT AVX2 + + +| Method | Job | Runtime | Mean | Error | StdDev | Median | Ratio | RatioSD | Gen0 | Allocated | Alloc Ratio | +|------- |--------- |--------- |---------:|----------:|----------:|---------:|------:|--------:|-------:|----------:|------------:| +| Hsl | .NET 6.0 | .NET 6.0 | 1.289 us | 0.0292 us | 0.0789 us | 1.263 us | 1.00 | 0.00 | 0.5360 | 2.2 KB | 1.00 | +| Rgb | .NET 6.0 | .NET 6.0 | 1.296 us | 0.0256 us | 0.0639 us | 1.280 us | 1.00 | 0.08 | 0.5360 | 2.2 KB | 1.00 | +| Hex | .NET 6.0 | .NET 6.0 | 1.435 us | 0.0284 us | 0.0433 us | 1.432 us | 1.09 | 0.07 | 0.5741 | 2.35 KB | 1.07 | +| Hsl | .NET 7.0 | .NET 7.0 | 1.432 us | 0.0674 us | 0.1911 us | 1.372 us | 1.12 | 0.17 | 0.5360 | 2.2 KB | 1.00 | +| Rgb | .NET 7.0 | .NET 7.0 | 1.497 us | 0.0678 us | 0.1890 us | 1.448 us | 1.15 | 0.15 | 0.5360 | 2.2 KB | 1.00 | +| Hex | .NET 7.0 | .NET 7.0 | 1.358 us | 0.0272 us | 0.0381 us | 1.350 us | 1.03 | 0.07 | 0.5741 | 2.35 KB | 1.07 | \ No newline at end of file diff --git a/src/ColorHashSharp.Benchmarks/ColorHashSharp.Benchmarks.csproj b/src/ColorHashSharp.Benchmarks/ColorHashSharp.Benchmarks.csproj new file mode 100644 index 0000000..8ce9d3b --- /dev/null +++ b/src/ColorHashSharp.Benchmarks/ColorHashSharp.Benchmarks.csproj @@ -0,0 +1,18 @@ + + + + Exe + net6.0;net7.0 + enable + enable + + + + + + + + + + + diff --git a/src/ColorHashSharp.Benchmarks/ColorHashSharpBenchmarks.cs b/src/ColorHashSharp.Benchmarks/ColorHashSharpBenchmarks.cs new file mode 100644 index 0000000..6006d8e --- /dev/null +++ b/src/ColorHashSharp.Benchmarks/ColorHashSharpBenchmarks.cs @@ -0,0 +1,41 @@ +using BenchmarkDotNet.Attributes; +using BenchmarkDotNet.Jobs; +using Fernandezja.ColorHashSharp; +using Fernandezja.ColorHashSharp.Interfaces; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ColorHashSharp.Benchmarks +{ + [MemoryDiagnoser] + [SimpleJob(RuntimeMoniker.Net60, baseline: true)] + [SimpleJob(RuntimeMoniker.Net70)] + public class ColorHashSharpBenchmarks + { + private const string STRING_TO_HASH = "The Force will be with you always"; + + private ColorHash _colorHash = new(); + + + [Benchmark(Baseline = true)] + public void Hsl() + { + _ = _colorHash.Hsl(STRING_TO_HASH); + } + + [Benchmark] + public void Rgb() + { + _ = _colorHash.Rgb(STRING_TO_HASH); + } + + [Benchmark] + public void Hex() + { + _ = _colorHash.Hex(STRING_TO_HASH); + } + } +} diff --git a/src/ColorHashSharp.Benchmarks/Program.cs b/src/ColorHashSharp.Benchmarks/Program.cs new file mode 100644 index 0000000..e2e060f --- /dev/null +++ b/src/ColorHashSharp.Benchmarks/Program.cs @@ -0,0 +1,8 @@ +using BenchmarkDotNet.Running; +using ColorHashSharp.Benchmarks; + +Console.WriteLine("ColorHashSharp benchmarks!"); + +_ = BenchmarkRunner.Run(); + +Console.ReadKey(); \ No newline at end of file diff --git a/src/ColorHashSharp.Tests/ColorHashSharp.Tests.csproj b/src/ColorHashSharp.Tests/ColorHashSharp.Tests.csproj index b98e42f..5dc2fcb 100644 --- a/src/ColorHashSharp.Tests/ColorHashSharp.Tests.csproj +++ b/src/ColorHashSharp.Tests/ColorHashSharp.Tests.csproj @@ -1,19 +1,19 @@  - netcoreapp3.1 + net7.0 false - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + all runtime; build; native; contentfiles; analyzers diff --git a/src/ColorHashSharp.sln b/src/ColorHashSharp.sln index 3c2c754..2f25105 100644 --- a/src/ColorHashSharp.sln +++ b/src/ColorHashSharp.sln @@ -1,12 +1,14 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.28307.168 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.33103.201 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ColorHashSharp", "ColorHashSharp\ColorHashSharp.csproj", "{68766358-4CA1-4A57-94B9-0E1CF0F809BF}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ColorHashSharp.Tests", "ColorHashSharp.Tests\ColorHashSharp.Tests.csproj", "{2170724A-3466-4604-B243-D3B0936B44A3}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColorHashSharp.Benchmarks", "ColorHashSharp.Benchmarks\ColorHashSharp.Benchmarks.csproj", "{2CC808B2-AF1F-4556-B601-C755129CCEB0}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -21,6 +23,10 @@ Global {2170724A-3466-4604-B243-D3B0936B44A3}.Debug|Any CPU.Build.0 = Debug|Any CPU {2170724A-3466-4604-B243-D3B0936B44A3}.Release|Any CPU.ActiveCfg = Release|Any CPU {2170724A-3466-4604-B243-D3B0936B44A3}.Release|Any CPU.Build.0 = Release|Any CPU + {2CC808B2-AF1F-4556-B601-C755129CCEB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2CC808B2-AF1F-4556-B601-C755129CCEB0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2CC808B2-AF1F-4556-B601-C755129CCEB0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2CC808B2-AF1F-4556-B601-C755129CCEB0}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 673cc8c6392be9022cb22e29c11fdc3cac0e2585 Mon Sep 17 00:00:00 2001 From: fernandezja Date: Sat, 10 Dec 2022 10:21:29 -0300 Subject: [PATCH 08/20] Test default .editorConfig --- src/ColorHashSharp.sln | 2 ++ src/ColorHashSharp/.editorconfig | 0 src/ColorHashSharp/ColorHashSharp.csproj | 8 ++++++++ 3 files changed, 10 insertions(+) create mode 100644 src/ColorHashSharp/.editorconfig diff --git a/src/ColorHashSharp.sln b/src/ColorHashSharp.sln index 2f25105..8a7d396 100644 --- a/src/ColorHashSharp.sln +++ b/src/ColorHashSharp.sln @@ -9,6 +9,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ColorHashSharp.Tests", "Col EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColorHashSharp.Benchmarks", "ColorHashSharp.Benchmarks\ColorHashSharp.Benchmarks.csproj", "{2CC808B2-AF1F-4556-B601-C755129CCEB0}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "VS", "VS", "{811ECE6D-7BC3-458D-8B6E-09B85D0E1413}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU diff --git a/src/ColorHashSharp/.editorconfig b/src/ColorHashSharp/.editorconfig new file mode 100644 index 0000000..e69de29 diff --git a/src/ColorHashSharp/ColorHashSharp.csproj b/src/ColorHashSharp/ColorHashSharp.csproj index 856f450..35d6676 100644 --- a/src/ColorHashSharp/ColorHashSharp.csproj +++ b/src/ColorHashSharp/ColorHashSharp.csproj @@ -19,4 +19,12 @@ true + + + + + + + + From c9be2a504530a65c83de2e8340e5cb1194ae32f5 Mon Sep 17 00:00:00 2001 From: fernandezja Date: Mon, 15 May 2023 18:25:11 -0300 Subject: [PATCH 09/20] Update nugets (BenchmarkDotNet, Microsoft.NET.Test.Sdk) --- .../ColorHashSharp.Benchmarks.csproj | 4 ++-- src/ColorHashSharp.Tests/ColorHashSharp.Tests.csproj | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ColorHashSharp.Benchmarks/ColorHashSharp.Benchmarks.csproj b/src/ColorHashSharp.Benchmarks/ColorHashSharp.Benchmarks.csproj index 8ce9d3b..e0326e0 100644 --- a/src/ColorHashSharp.Benchmarks/ColorHashSharp.Benchmarks.csproj +++ b/src/ColorHashSharp.Benchmarks/ColorHashSharp.Benchmarks.csproj @@ -1,4 +1,4 @@ - + Exe @@ -8,7 +8,7 @@ - + diff --git a/src/ColorHashSharp.Tests/ColorHashSharp.Tests.csproj b/src/ColorHashSharp.Tests/ColorHashSharp.Tests.csproj index 5dc2fcb..4b1ce35 100644 --- a/src/ColorHashSharp.Tests/ColorHashSharp.Tests.csproj +++ b/src/ColorHashSharp.Tests/ColorHashSharp.Tests.csproj @@ -11,7 +11,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + all From 83df5d14e3093219b43dd9652247caf43159e501 Mon Sep 17 00:00:00 2001 From: "Jose A. Fernandez" Date: Fri, 20 Jun 2025 18:04:02 -0300 Subject: [PATCH 10/20] Added Links.md for resources related to ColorHashSharp --- Links.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 Links.md diff --git a/Links.md b/Links.md new file mode 100644 index 0000000..93dfb42 --- /dev/null +++ b/Links.md @@ -0,0 +1,7 @@ +# ColorHashSharp resources links + +#### Links +- [Packaging Icon within the nupkg](https://github.com/NuGet/Home/wiki/Packaging-Icon-within-the-nupkg) +- [Supporting Multiple Target Frameworks](https://learn.microsoft.com/en-us/nuget/create-packages/supporting-multiple-target-frameworks) +- [NuGet Package Explorer](https://apps.microsoft.com/detail/9WZDNCRDMDM3?hl=en-us&gl=AR&ocid=pdpshare) +- [NuGet Package Explorer GitHub](https://github.com/NuGetPackageExplorer/NuGetPackageExplorer) \ No newline at end of file From 1b0c7e6a6ae18eb0a6a063c4780f31ffa5f83031 Mon Sep 17 00:00:00 2001 From: "Jose A. Fernandez" Date: Fri, 20 Jun 2025 18:04:59 -0300 Subject: [PATCH 11/20] Enhanced ColorHashSharp project to support multiple target frameworks and incremented version to 1.1.0. Created a new nuspec file for package metadata. Updated ColorHashSharp-icon.png binary file. --- assets/icon/ColorHashSharp-icon.png | Bin 87480 -> 10476 bytes .../ColorHashSharp.Benchmarks.csproj | 4 +- .../ColorHashSharpBenchmarks.cs | 7 +- .../ColorHashSharp.Tests.csproj | 11 ++- src/ColorHashSharp.sln | 2 - src/ColorHashSharp/.editorconfig | 71 ++++++++++++++++++ src/ColorHashSharp/ColorHashSharp.csproj | 16 ++-- src/ColorHashSharp/ColorHashSharp.nuspec | 27 +++++++ .../Images/ColorHashSharp-icon.png | Bin 0 -> 10476 bytes 9 files changed, 119 insertions(+), 19 deletions(-) create mode 100644 src/ColorHashSharp/ColorHashSharp.nuspec create mode 100644 src/ColorHashSharp/Images/ColorHashSharp-icon.png diff --git a/assets/icon/ColorHashSharp-icon.png b/assets/icon/ColorHashSharp-icon.png index b311eb8f6c8cdbaf2bcef4bd08708fbdf75af679..a998d1ba6566cb287fa4238ddef0fb9f4f69c279 100644 GIT binary patch delta 10450 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 IM6N<$g5j`j82|tP literal 87480 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 diff --git a/src/ColorHashSharp.Benchmarks/ColorHashSharp.Benchmarks.csproj b/src/ColorHashSharp.Benchmarks/ColorHashSharp.Benchmarks.csproj index e0326e0..ffaa1a7 100644 --- a/src/ColorHashSharp.Benchmarks/ColorHashSharp.Benchmarks.csproj +++ b/src/ColorHashSharp.Benchmarks/ColorHashSharp.Benchmarks.csproj @@ -2,13 +2,13 @@ Exe - net6.0;net7.0 + net8.0;net9.0 enable enable - + diff --git a/src/ColorHashSharp.Benchmarks/ColorHashSharpBenchmarks.cs b/src/ColorHashSharp.Benchmarks/ColorHashSharpBenchmarks.cs index 6006d8e..6ef1e87 100644 --- a/src/ColorHashSharp.Benchmarks/ColorHashSharpBenchmarks.cs +++ b/src/ColorHashSharp.Benchmarks/ColorHashSharpBenchmarks.cs @@ -11,8 +11,11 @@ namespace ColorHashSharp.Benchmarks { [MemoryDiagnoser] - [SimpleJob(RuntimeMoniker.Net60, baseline: true)] - [SimpleJob(RuntimeMoniker.Net70)] + [SimpleJob(RuntimeMoniker.Net48)] + [SimpleJob(RuntimeMoniker.Net481)] + [SimpleJob(RuntimeMoniker.Net80, baseline: true)] + [SimpleJob(RuntimeMoniker.Net90)] + [SimpleJob(RuntimeMoniker.Net10_0)] public class ColorHashSharpBenchmarks { private const string STRING_TO_HASH = "The Force will be with you always"; diff --git a/src/ColorHashSharp.Tests/ColorHashSharp.Tests.csproj b/src/ColorHashSharp.Tests/ColorHashSharp.Tests.csproj index 4b1ce35..51e27a4 100644 --- a/src/ColorHashSharp.Tests/ColorHashSharp.Tests.csproj +++ b/src/ColorHashSharp.Tests/ColorHashSharp.Tests.csproj @@ -1,19 +1,18 @@  - net7.0 - + net9.0 false - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + all runtime; build; native; contentfiles; analyzers diff --git a/src/ColorHashSharp.sln b/src/ColorHashSharp.sln index 8a7d396..2f25105 100644 --- a/src/ColorHashSharp.sln +++ b/src/ColorHashSharp.sln @@ -9,8 +9,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ColorHashSharp.Tests", "Col EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColorHashSharp.Benchmarks", "ColorHashSharp.Benchmarks\ColorHashSharp.Benchmarks.csproj", "{2CC808B2-AF1F-4556-B601-C755129CCEB0}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "VS", "VS", "{811ECE6D-7BC3-458D-8B6E-09B85D0E1413}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU diff --git a/src/ColorHashSharp/.editorconfig b/src/ColorHashSharp/.editorconfig index e69de29..2a5e964 100644 --- a/src/ColorHashSharp/.editorconfig +++ b/src/ColorHashSharp/.editorconfig @@ -0,0 +1,71 @@ + +[*.{cs,vb}] +#### Naming styles #### + +# Naming rules + +dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion +dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface +dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i + +dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.types_should_be_pascal_case.symbols = types +dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case + +dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members +dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case + +# Symbol specifications + +dotnet_naming_symbols.interface.applicable_kinds = interface +dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.interface.required_modifiers = + +dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum +dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.types.required_modifiers = + +dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method +dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.non_field_members.required_modifiers = + +# Naming styles + +dotnet_naming_style.begins_with_i.required_prefix = I +dotnet_naming_style.begins_with_i.required_suffix = +dotnet_naming_style.begins_with_i.word_separator = +dotnet_naming_style.begins_with_i.capitalization = pascal_case + +dotnet_naming_style.pascal_case.required_prefix = +dotnet_naming_style.pascal_case.required_suffix = +dotnet_naming_style.pascal_case.word_separator = +dotnet_naming_style.pascal_case.capitalization = pascal_case + +dotnet_naming_style.pascal_case.required_prefix = +dotnet_naming_style.pascal_case.required_suffix = +dotnet_naming_style.pascal_case.word_separator = +dotnet_naming_style.pascal_case.capitalization = pascal_case +dotnet_style_operator_placement_when_wrapping = beginning_of_line +tab_width = 4 +indent_size = 4 +end_of_line = crlf + +[*.cs] +csharp_indent_labels = one_less_than_current +csharp_using_directive_placement = outside_namespace:silent +csharp_prefer_simple_using_statement = true:suggestion +csharp_prefer_braces = true:silent +csharp_style_namespace_declarations = block_scoped:silent +csharp_style_prefer_method_group_conversion = true:silent +csharp_style_prefer_top_level_statements = true:silent +csharp_style_prefer_primary_constructors = true:suggestion +csharp_prefer_system_threading_lock = true:suggestion +csharp_style_expression_bodied_methods = false:silent +csharp_style_expression_bodied_constructors = false:silent +csharp_style_expression_bodied_operators = false:silent +csharp_style_expression_bodied_properties = true:silent +csharp_style_expression_bodied_indexers = true:silent +csharp_style_expression_bodied_accessors = true:silent +csharp_style_expression_bodied_lambdas = true:silent +csharp_style_expression_bodied_local_functions = false:silent \ No newline at end of file diff --git a/src/ColorHashSharp/ColorHashSharp.csproj b/src/ColorHashSharp/ColorHashSharp.csproj index 35d6676..a0eeaf0 100644 --- a/src/ColorHashSharp/ColorHashSharp.csproj +++ b/src/ColorHashSharp/ColorHashSharp.csproj @@ -1,18 +1,18 @@  - netstandard2.1 + netstandard2.0;netstandard2.1;net48;net481;net8.0;net9.0 Fernandezja.ColorHashSharp false - 1.0.0.0 - 1.0.0 - 1.0.0 + 1.1.0.0 + 1.1.0 + 1.1.0 Generate color based on the given string Generate color based on the given string. C# port of ColorHash Javascript Library. Jose A. Fernandez - https://licenses.nuget.org/MIT + https://licenses.nuget.org/MIT - https://raw.githubusercontent.com/fernandezja/ColorHashSharp/master/assets/icon/ColorHashSharp-icon.png + ColorHashSharp-icon.png https://github.com/fernandezja/ColorHashSharp color hash string hsl hex hexadecimal Generate color based on the given string. C# port of ColorHash Javascript Library. See https://github.com/fernandezja/ColorHashSharp @@ -26,5 +26,7 @@ - + + + diff --git a/src/ColorHashSharp/ColorHashSharp.nuspec b/src/ColorHashSharp/ColorHashSharp.nuspec new file mode 100644 index 0000000..8a5372a --- /dev/null +++ b/src/ColorHashSharp/ColorHashSharp.nuspec @@ -0,0 +1,27 @@ + + + + ColorHashSharp + 1.1.0 + Jose A. Fernandez + Jose A. Fernandez + MIT + https://github.com/fernandezja/ColorHashSharp + ColorHashSharp-icon.png + false + Generate color based on the given string. C# port of ColorHash Javascript Library. + Generate color based on the given string. C# port of ColorHash Javascript Library. + Generate color based on the given string. C# port of ColorHash Javascript Library. See https://github.com/fernandezja/ColorHashSharp + color hash string hsl hex hexadecimal + + + + + + + + + + + + \ No newline at end of file diff --git a/src/ColorHashSharp/Images/ColorHashSharp-icon.png b/src/ColorHashSharp/Images/ColorHashSharp-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a998d1ba6566cb287fa4238ddef0fb9f4f69c279 GIT binary patch literal 10476 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 Date: Fri, 20 Jun 2025 18:33:05 -0300 Subject: [PATCH 12/20] Update README.md with NuGet downloads badge --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 188c68c..1ca3e51 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # ColorHashSharp Generate color based on the given string. C# port of [ColorHash Javascript Library](https://github.com/zenozeng/color-hash). -[![NuGet version (ColorHashSharp)](https://img.shields.io/nuget/v/ColorHashSharp.svg?style=flat-square)](https://www.nuget.org/packages/ColorHashSharp/) -![.NET Core](https://github.com/fernandezja/ColorHashSharp/workflows/.NET%20Core/badge.svg?branch=master) -[![Build status](https://fernandezja.visualstudio.com/ColorHashSharp/_apis/build/status/ColorHashSharp-CI)](https://fernandezja.visualstudio.com/ColorHashSharp/_build/latest?definitionId=4) +[![NuGet version (ColorHashSharp)](https://img.shields.io/nuget/v/ColorHashSharp.svg?style=flat-square)](https://www.nuget.org/packages/ColorHashSharp/)   [![NuGet Downloads](https://img.shields.io/nuget/dt/ColorHashSharp.svg)](https://www.nuget.org/packages/Serilog/) + +![.NET Core](https://github.com/fernandezja/ColorHashSharp/workflows/.NET%20Core/badge.svg?branch=master)   [![Build status](https://fernandezja.visualstudio.com/ColorHashSharp/_apis/build/status/ColorHashSharp-CI)](https://fernandezja.visualstudio.com/ColorHashSharp/_build/latest?definitionId=4) #### Status From 3bbbef06c3d15b00b85a65d2420126126d5ddaf8 Mon Sep 17 00:00:00 2001 From: "Jose A. Fernandez" Date: Fri, 20 Jun 2025 18:37:00 -0300 Subject: [PATCH 13/20] Add CI workflow for .NET projects using GitHub Actions using a matrix strategy on both Ubuntu and Windows runners --- src/.github/workflows/dotnet-core.yml | 41 +++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/.github/workflows/dotnet-core.yml diff --git a/src/.github/workflows/dotnet-core.yml b/src/.github/workflows/dotnet-core.yml new file mode 100644 index 0000000..1468367 --- /dev/null +++ b/src/.github/workflows/dotnet-core.yml @@ -0,0 +1,41 @@ +name: CI + +on: + push: + branches: [ master, develop ] + pull_request: + branches: [ master, develop ] + +jobs: + build-and-test: + runs-on: ${{ matrix.os }} + strategy: + matrix: + include: + - os: ubuntu-latest + dotnet-version: '8.0.x' + test-framework: 'net8.0' + - os: ubuntu-latest + dotnet-version: '9.0.x' + test-framework: 'net9.0' + - os: windows-latest + dotnet-version: '8.0.x' + test-framework: 'net48' + - os: windows-latest + dotnet-version: '8.0.x' + test-framework: 'net481' + steps: + - uses: actions/checkout@v2 + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + dotnet-version: ${{ matrix.dotnet-version }} + - name: Install dependencies + working-directory: src + run: dotnet restore + - name: Build + working-directory: src + run: dotnet build --configuration Release --no-restore + - name: Test + working-directory: src + run: dotnet test --no-restore --verbosity normal --framework ${{ matrix.test-framework }} From 9149b2aa0f9b89596f1f352601d0ad8927e33d8f Mon Sep 17 00:00:00 2001 From: "Jose A. Fernandez" Date: Fri, 20 Jun 2025 18:39:57 -0300 Subject: [PATCH 14/20] Fix error on Github Action "No usable version of libssl was found" with Install OpenSSL (Ubuntu only) --- src/.github/workflows/dotnet-core.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/.github/workflows/dotnet-core.yml b/src/.github/workflows/dotnet-core.yml index 1468367..f75fc25 100644 --- a/src/.github/workflows/dotnet-core.yml +++ b/src/.github/workflows/dotnet-core.yml @@ -26,6 +26,9 @@ jobs: test-framework: 'net481' steps: - uses: actions/checkout@v2 + - name: Install OpenSSL (Ubuntu only) + if: runner.os == 'Linux' + run: sudo apt-get update && sudo apt-get install -y libssl-dev - name: Setup .NET uses: actions/setup-dotnet@v3 with: From e9e9af77f91df7f3c6cf5666171a81992164c2c1 Mon Sep 17 00:00:00 2001 From: "Jose A. Fernandez" Date: Fri, 20 Jun 2025 18:44:19 -0300 Subject: [PATCH 15/20] Update CI workflow for .NET on Windows and simplify the strategy matrix. --- src/.github/workflows/dotnet-core.yml | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/src/.github/workflows/dotnet-core.yml b/src/.github/workflows/dotnet-core.yml index f75fc25..cdc4927 100644 --- a/src/.github/workflows/dotnet-core.yml +++ b/src/.github/workflows/dotnet-core.yml @@ -8,31 +8,18 @@ on: jobs: build-and-test: - runs-on: ${{ matrix.os }} + runs-on: windows-latest strategy: matrix: - include: - - os: ubuntu-latest - dotnet-version: '8.0.x' - test-framework: 'net8.0' - - os: ubuntu-latest - dotnet-version: '9.0.x' - test-framework: 'net9.0' - - os: windows-latest - dotnet-version: '8.0.x' - test-framework: 'net48' - - os: windows-latest - dotnet-version: '8.0.x' - test-framework: 'net481' + test-framework: [ 'net8.0', 'net9.0', 'net48', 'net481' ] steps: - uses: actions/checkout@v2 - - name: Install OpenSSL (Ubuntu only) - if: runner.os == 'Linux' - run: sudo apt-get update && sudo apt-get install -y libssl-dev - name: Setup .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: ${{ matrix.dotnet-version }} + dotnet-version: | + 8.0.x + 9.0.x - name: Install dependencies working-directory: src run: dotnet restore From a49a24b2652bd32ffd876fdcd6e2e51e0b7acafa Mon Sep 17 00:00:00 2001 From: "Jose A. Fernandez" Date: Fri, 20 Jun 2025 18:52:02 -0300 Subject: [PATCH 16/20] Update CI workflow for .NET on Windows and simplify the strategy matrix. --- .github/workflows/dotnet-core.yml | 41 ++++++++++++++------------- src/.github/workflows/dotnet-core.yml | 4 +-- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/.github/workflows/dotnet-core.yml b/.github/workflows/dotnet-core.yml index 6f22fc4..9598ac8 100644 --- a/.github/workflows/dotnet-core.yml +++ b/.github/workflows/dotnet-core.yml @@ -1,4 +1,4 @@ -name: CI-NETCore +name: CI on: push: @@ -7,22 +7,25 @@ on: branches: [ master, develop ] jobs: - build: - - runs-on: ubuntu-latest - + build-and-test: + runs-on: windows-latest + strategy: + matrix: + test-framework: [ 'net8.0', 'net9.0', 'net48', 'net481' ] steps: - - uses: actions/checkout@v2 - - name: Setup .NET Core - uses: actions/setup-dotnet@v1 - with: - dotnet-version: 3.1.404 - - name: Install dependencies - working-directory: src - run: dotnet restore - - name: Build - working-directory: src - run: dotnet build --configuration Release --no-restore - - name: Test - working-directory: src - run: dotnet test --no-restore --verbosity normal + - uses: actions/checkout@v2 + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: | + 8.0.x + 9.0.x + - name: Install dependencies + working-directory: src + run: dotnet restore + - name: Build + working-directory: src + run: dotnet build --configuration Release --no-restore + - name: Test + working-directory: src + run: dotnet test --no-restore --verbosity normal --framework ${{ matrix.test-framework }} diff --git a/src/.github/workflows/dotnet-core.yml b/src/.github/workflows/dotnet-core.yml index cdc4927..9598ac8 100644 --- a/src/.github/workflows/dotnet-core.yml +++ b/src/.github/workflows/dotnet-core.yml @@ -7,7 +7,7 @@ on: branches: [ master, develop ] jobs: - build-and-test: + build-and-test: runs-on: windows-latest strategy: matrix: @@ -15,7 +15,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Setup .NET - uses: actions/setup-dotnet@v3 + uses: actions/setup-dotnet@v4 with: dotnet-version: | 8.0.x From 4a940dc387a70f6e9afae86fa0831cbd7e6be092 Mon Sep 17 00:00:00 2001 From: "Jose A. Fernandez" Date: Sun, 22 Jun 2025 09:37:54 -0300 Subject: [PATCH 17/20] Update Links.md with new commands (pack a project and to push a package to NuGet) --- Links.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Links.md b/Links.md index 93dfb42..75bf708 100644 --- a/Links.md +++ b/Links.md @@ -4,4 +4,14 @@ - [Packaging Icon within the nupkg](https://github.com/NuGet/Home/wiki/Packaging-Icon-within-the-nupkg) - [Supporting Multiple Target Frameworks](https://learn.microsoft.com/en-us/nuget/create-packages/supporting-multiple-target-frameworks) - [NuGet Package Explorer](https://apps.microsoft.com/detail/9WZDNCRDMDM3?hl=en-us&gl=AR&ocid=pdpshare) -- [NuGet Package Explorer GitHub](https://github.com/NuGetPackageExplorer/NuGetPackageExplorer) \ No newline at end of file +- [NuGet Package Explorer GitHub](https://github.com/NuGetPackageExplorer/NuGetPackageExplorer) + +#### Command to push a package to NuGet +```bash +dotnet nuget push file.nupkg -k {YOUR_API_KEY_HERE} -s https://api.nuget.org/v3/index.json +``` + +#### Command to pack a project +```bash +dotnet pack --configuration Release +``` \ No newline at end of file From 24170cc7c1d2787c8eb39e296e211897608e64cf Mon Sep 17 00:00:00 2001 From: "Jose A. Fernandez" Date: Sun, 22 Jun 2025 09:39:17 -0300 Subject: [PATCH 18/20] Remove yml file --- src/.github/workflows/dotnet-core.yml | 31 --------------------------- 1 file changed, 31 deletions(-) delete mode 100644 src/.github/workflows/dotnet-core.yml diff --git a/src/.github/workflows/dotnet-core.yml b/src/.github/workflows/dotnet-core.yml deleted file mode 100644 index 9598ac8..0000000 --- a/src/.github/workflows/dotnet-core.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: CI - -on: - push: - branches: [ master, develop ] - pull_request: - branches: [ master, develop ] - -jobs: - build-and-test: - runs-on: windows-latest - strategy: - matrix: - test-framework: [ 'net8.0', 'net9.0', 'net48', 'net481' ] - steps: - - uses: actions/checkout@v2 - - name: Setup .NET - uses: actions/setup-dotnet@v4 - with: - dotnet-version: | - 8.0.x - 9.0.x - - name: Install dependencies - working-directory: src - run: dotnet restore - - name: Build - working-directory: src - run: dotnet build --configuration Release --no-restore - - name: Test - working-directory: src - run: dotnet test --no-restore --verbosity normal --framework ${{ matrix.test-framework }} From 322a660011db5e5703e6a210ffd6399261ae1441 Mon Sep 17 00:00:00 2001 From: "Jose A. Fernandez" Date: Sun, 22 Jun 2025 09:41:22 -0300 Subject: [PATCH 19/20] Update .yml file, test framework and .NET version in CI config. Include only net9 --- .github/workflows/dotnet-core.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/dotnet-core.yml b/.github/workflows/dotnet-core.yml index 9598ac8..e510cff 100644 --- a/.github/workflows/dotnet-core.yml +++ b/.github/workflows/dotnet-core.yml @@ -11,14 +11,14 @@ jobs: runs-on: windows-latest strategy: matrix: - test-framework: [ 'net8.0', 'net9.0', 'net48', 'net481' ] + test-framework: ['net9.0'] + #test-framework: [ 'net8.0', 'net9.0', 'net48', 'net481' ] steps: - uses: actions/checkout@v2 - name: Setup .NET uses: actions/setup-dotnet@v4 with: - dotnet-version: | - 8.0.x + dotnet-version: 9.0.x - name: Install dependencies working-directory: src From dbdd9dc8b5a62d78e190185d8d5139b021db1d47 Mon Sep 17 00:00:00 2001 From: "Jose A. Fernandez" Date: Sun, 22 Jun 2025 09:45:59 -0300 Subject: [PATCH 20/20] Update README.md badges for CI visibility --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1ca3e51..41fa831 100644 --- a/README.md +++ b/README.md @@ -3,14 +3,14 @@ Generate color based on the given string. C# port of [ColorHash Javascript Libra [![NuGet version (ColorHashSharp)](https://img.shields.io/nuget/v/ColorHashSharp.svg?style=flat-square)](https://www.nuget.org/packages/ColorHashSharp/)   [![NuGet Downloads](https://img.shields.io/nuget/dt/ColorHashSharp.svg)](https://www.nuget.org/packages/Serilog/) -![.NET Core](https://github.com/fernandezja/ColorHashSharp/workflows/.NET%20Core/badge.svg?branch=master)   [![Build status](https://fernandezja.visualstudio.com/ColorHashSharp/_apis/build/status/ColorHashSharp-CI)](https://fernandezja.visualstudio.com/ColorHashSharp/_build/latest?definitionId=4) +[![CI](https://github.com/fernandezja/ColorHashSharp/actions/workflows/dotnet-core.yml/badge.svg)](https://github.com/fernandezja/ColorHashSharp/actions/workflows/dotnet-core.yml)  [![Build status](https://fernandezja.visualstudio.com/ColorHashSharp/_apis/build/status/ColorHashSharp-CI)](https://fernandezja.visualstudio.com/ColorHashSharp/_build/latest?definitionId=4) #### Status |Actions |master |develop | |--- |--- |--- | -|CI |![.NET Core](https://github.com/fernandezja/ColorHashSharp/workflows/.NET%20Core/badge.svg?branch=master) |![.NET Core](https://github.com/fernandezja/ColorHashSharp/workflows/.NET%20Core/badge.svg?branch=develop) | +|CI |[![CI](https://github.com/fernandezja/ColorHashSharp/actions/workflows/dotnet-core.yml/badge.svg?branch=master)](https://github.com/fernandezja/ColorHashSharp/actions/workflows/dotnet-core.yml) |[![CI](https://github.com/fernandezja/ColorHashSharp/actions/workflows/dotnet-core.yml/badge.svg?branch=develop)](https://github.com/fernandezja/ColorHashSharp/actions/workflows/dotnet-core.yml) | #### Basic