diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index 831d039..da200cd 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -3,7 +3,7 @@ "isRoot": true, "tools": { "cake.tool": { - "version": "3.0.0", + "version": "4.0.0", "commands": [ "dotnet-cake" ] diff --git a/Source/HttpMultipartParser.Benchmark/HttpMultipartParser.Benchmark.csproj b/Source/HttpMultipartParser.Benchmark/HttpMultipartParser.Benchmark.csproj index 84e9779..f0b5551 100644 --- a/Source/HttpMultipartParser.Benchmark/HttpMultipartParser.Benchmark.csproj +++ b/Source/HttpMultipartParser.Benchmark/HttpMultipartParser.Benchmark.csproj @@ -6,7 +6,7 @@ - + diff --git a/Source/HttpMultipartParser.UnitTests/HttpMultipartFormParserUnitTests.cs b/Source/HttpMultipartParser.UnitTests/HttpMultipartFormParserUnitTests.cs index 99474b2..2674893 100644 --- a/Source/HttpMultipartParser.UnitTests/HttpMultipartFormParserUnitTests.cs +++ b/Source/HttpMultipartParser.UnitTests/HttpMultipartFormParserUnitTests.cs @@ -46,7 +46,7 @@ public void ConstructingWithNullStreamFails() [Fact] public async Task ConstructingWithNullStreamFailsAsync() { - await Assert.ThrowsAsync(() => MultipartFormDataParser.ParseAsync(Stream.Null)).ConfigureAwait(false); + await Assert.ThrowsAsync(() => MultipartFormDataParser.ParseAsync(Stream.Null)); } /// @@ -89,7 +89,7 @@ line 3 using (Stream stream = TestUtil.StringToStream(request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream, Encoding.UTF8).ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream, Encoding.UTF8); Assert.Equal($"line 1{Environment.NewLine}line 2{Environment.NewLine}line 3", parser.GetParameterValue("multilined")); Assert.Equal($"line 1{Environment.NewLine}line 2{Environment.NewLine}line 3", parser.GetParameterValues("multilined").First()); } @@ -139,7 +139,7 @@ public async Task HandlesFileWithLastCrLfAtBufferLengthAsync() using (Stream stream = TestUtil.StringToStream(request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream, Encoding.UTF8).ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream, Encoding.UTF8); } } @@ -187,7 +187,7 @@ public async Task HandlesFileWithLastCrLfImmediatlyAfterBufferLengthAsync() using (Stream stream = TestUtil.StringToStream(request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream, Encoding.UTF8).ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream, Encoding.UTF8); } } @@ -211,7 +211,7 @@ public async Task HandlesFileWithoutFilename() using (Stream stream = TestUtil.StringToStream(request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream, Encoding.UTF8).ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream, Encoding.UTF8); Assert.Single(parser.Files); } } diff --git a/Source/HttpMultipartParser.UnitTests/HttpMultipartParser.UnitTests.csproj b/Source/HttpMultipartParser.UnitTests/HttpMultipartParser.UnitTests.csproj index e2a59f7..9a92979 100644 --- a/Source/HttpMultipartParser.UnitTests/HttpMultipartParser.UnitTests.csproj +++ b/Source/HttpMultipartParser.UnitTests/HttpMultipartParser.UnitTests.csproj @@ -7,13 +7,13 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Source/HttpMultipartParser.UnitTests/ParserScenarios/BlankLinesBeforeFirstBoundary.cs b/Source/HttpMultipartParser.UnitTests/ParserScenarios/BlankLinesBeforeFirstBoundary.cs index 2d6597b..6fcf0d2 100644 --- a/Source/HttpMultipartParser.UnitTests/ParserScenarios/BlankLinesBeforeFirstBoundary.cs +++ b/Source/HttpMultipartParser.UnitTests/ParserScenarios/BlankLinesBeforeFirstBoundary.cs @@ -56,7 +56,7 @@ public async Task CanAutoDetectBoundaryAsync() { using (Stream stream = TestUtil.StringToStream(_testCase.Request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream, Encoding.UTF8).ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream, Encoding.UTF8); Assert.True(_testCase.Validate(parser)); } } diff --git a/Source/HttpMultipartParser.UnitTests/ParserScenarios/EmptyForm.cs b/Source/HttpMultipartParser.UnitTests/ParserScenarios/EmptyForm.cs index af366ef..c53f5a6 100644 --- a/Source/HttpMultipartParser.UnitTests/ParserScenarios/EmptyForm.cs +++ b/Source/HttpMultipartParser.UnitTests/ParserScenarios/EmptyForm.cs @@ -51,7 +51,7 @@ public async Task Parse_empty_form_boundary_specified_async() { using (Stream stream = TestUtil.StringToStream(_testCase.Request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream, "----WebKitFormBoundaryb4SfPlH9Bv7c2PKS").ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream, "----WebKitFormBoundaryb4SfPlH9Bv7c2PKS"); Assert.True(_testCase.Validate(parser)); } } @@ -61,7 +61,7 @@ public async Task Parse_empty_form_boundary_omitted_async() { using (Stream stream = TestUtil.StringToStream(_testCase.Request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream).ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream); Assert.True(_testCase.Validate(parser)); } } diff --git a/Source/HttpMultipartParser.UnitTests/ParserScenarios/ExactBufferTruncate.cs b/Source/HttpMultipartParser.UnitTests/ParserScenarios/ExactBufferTruncate.cs index 5ca0ab4..1c99ef6 100644 --- a/Source/HttpMultipartParser.UnitTests/ParserScenarios/ExactBufferTruncate.cs +++ b/Source/HttpMultipartParser.UnitTests/ParserScenarios/ExactBufferTruncate.cs @@ -67,7 +67,7 @@ public async Task CanHandleFinalDashesInSeperateBufferFromEndBinaryAsync() { using (Stream stream = TestUtil.StringToStream(_testCase.Request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream, "boundary", Encoding.UTF8, 16).ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream, "boundary", Encoding.UTF8, 16); Assert.True(_testCase.Validate(parser)); } } diff --git a/Source/HttpMultipartParser.UnitTests/ParserScenarios/FileIsLast.cs b/Source/HttpMultipartParser.UnitTests/ParserScenarios/FileIsLast.cs index a1fbfe2..1fa167c 100644 --- a/Source/HttpMultipartParser.UnitTests/ParserScenarios/FileIsLast.cs +++ b/Source/HttpMultipartParser.UnitTests/ParserScenarios/FileIsLast.cs @@ -57,7 +57,7 @@ public async Task CanHandleFileAsLastSectionAsync() { using (Stream stream = TestUtil.StringToStream(_testCase.Request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream, Encoding.UTF8).ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream, Encoding.UTF8); Assert.True(_testCase.Validate(parser)); } } diff --git a/Source/HttpMultipartParser.UnitTests/ParserScenarios/FileWithAdditionalParameter.cs b/Source/HttpMultipartParser.UnitTests/ParserScenarios/FileWithAdditionalParameter.cs index 404fa57..06a1349 100644 --- a/Source/HttpMultipartParser.UnitTests/ParserScenarios/FileWithAdditionalParameter.cs +++ b/Source/HttpMultipartParser.UnitTests/ParserScenarios/FileWithAdditionalParameter.cs @@ -56,7 +56,7 @@ public async Task FileWithAdditionalParameterTest_Async() { using (Stream stream = TestUtil.StringToStream(_testCase.Request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream, Encoding.UTF8).ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream, Encoding.UTF8); Assert.True(_testCase.Validate(parser)); } } diff --git a/Source/HttpMultipartParser.UnitTests/ParserScenarios/FullPathAsFileName.cs b/Source/HttpMultipartParser.UnitTests/ParserScenarios/FullPathAsFileName.cs index bab5d44..0917c21 100644 --- a/Source/HttpMultipartParser.UnitTests/ParserScenarios/FullPathAsFileName.cs +++ b/Source/HttpMultipartParser.UnitTests/ParserScenarios/FullPathAsFileName.cs @@ -48,7 +48,7 @@ public async Task HandlesFullPathAsFileNameWithSemicolonCorrectlyAsync() { using (Stream stream = TestUtil.StringToStream(_testCase.Request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream, Encoding.UTF8).ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream, Encoding.UTF8); Assert.True(_testCase.Validate(parser)); } } diff --git a/Source/HttpMultipartParser.UnitTests/ParserScenarios/InvalidPart.cs b/Source/HttpMultipartParser.UnitTests/ParserScenarios/InvalidPart.cs index 5fb2c7e..1bb320f 100644 --- a/Source/HttpMultipartParser.UnitTests/ParserScenarios/InvalidPart.cs +++ b/Source/HttpMultipartParser.UnitTests/ParserScenarios/InvalidPart.cs @@ -44,7 +44,7 @@ public async Task Exception_is_thrown_when_attempting_to_parse_async() // The default behavior is to throw an exception when the form contains an invalid section. using (Stream stream = TestUtil.StringToStream(_testCase.Request, Encoding.UTF8)) { - await Assert.ThrowsAsync(() => MultipartFormDataParser.ParseAsync(stream)).ConfigureAwait(false); + await Assert.ThrowsAsync(() => MultipartFormDataParser.ParseAsync(stream)); } } @@ -54,8 +54,8 @@ public void Invalid_part_is_ignored() using (Stream stream = TestUtil.StringToStream(_testCase.Request, Encoding.UTF8)) { var parser = MultipartFormDataParser.Parse(stream, ignoreInvalidParts: true); - Assert.Equal(0, parser.Files.Count); - Assert.Equal(0, parser.Parameters.Count); + Assert.Empty(parser.Files); + Assert.Empty(parser.Parameters); } } @@ -64,9 +64,9 @@ public async Task Invalid_part_is_ignored_async() { using (Stream stream = TestUtil.StringToStream(_testCase.Request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream, ignoreInvalidParts: true).ConfigureAwait(false); - Assert.Equal(0, parser.Files.Count); - Assert.Equal(0, parser.Parameters.Count); + var parser = await MultipartFormDataParser.ParseAsync(stream, ignoreInvalidParts: true); + Assert.Empty(parser.Files); + Assert.Empty(parser.Parameters); } } } diff --git a/Source/HttpMultipartParser.UnitTests/ParserScenarios/MixedSingleByteAndMultiByteWidth.cs b/Source/HttpMultipartParser.UnitTests/ParserScenarios/MixedSingleByteAndMultiByteWidth.cs index be0956f..3f0fc16 100644 --- a/Source/HttpMultipartParser.UnitTests/ParserScenarios/MixedSingleByteAndMultiByteWidth.cs +++ b/Source/HttpMultipartParser.UnitTests/ParserScenarios/MixedSingleByteAndMultiByteWidth.cs @@ -58,7 +58,7 @@ public async Task CanHandleMixedSingleByteAndMultiByteWidthCharactersAsync() Stream stream = TestUtil.StringToStream(_testCase.Request, Encoding.UTF8) ) { - var parser = await MultipartFormDataParser.ParseAsync(stream, Encoding.UTF8).ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream, Encoding.UTF8); Assert.True(_testCase.Validate(parser)); } } diff --git a/Source/HttpMultipartParser.UnitTests/ParserScenarios/MixedUnicodeWidthAndAsciiWidthCharacters.cs b/Source/HttpMultipartParser.UnitTests/ParserScenarios/MixedUnicodeWidthAndAsciiWidthCharacters.cs index 87d35d3..fae54fd 100644 --- a/Source/HttpMultipartParser.UnitTests/ParserScenarios/MixedUnicodeWidthAndAsciiWidthCharacters.cs +++ b/Source/HttpMultipartParser.UnitTests/ParserScenarios/MixedUnicodeWidthAndAsciiWidthCharacters.cs @@ -49,7 +49,7 @@ public async Task CanHandleUnicodeWidthAndAsciiWidthCharactersAsync() using ( Stream stream = TestUtil.StringToStream(_testCase.Request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream, Encoding.UTF8).ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream, Encoding.UTF8); Assert.True(_testCase.Validate(parser)); } } diff --git a/Source/HttpMultipartParser.UnitTests/ParserScenarios/MjpegStream.cs b/Source/HttpMultipartParser.UnitTests/ParserScenarios/MjpegStream.cs index 0e06910..f0e8169 100644 --- a/Source/HttpMultipartParser.UnitTests/ParserScenarios/MjpegStream.cs +++ b/Source/HttpMultipartParser.UnitTests/ParserScenarios/MjpegStream.cs @@ -64,7 +64,7 @@ public async Task MjpegStreamTest_Async() { using (Stream stream = TestUtil.StringToStream(_testCase.Request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream, "MOBOTIX_Fast_Serverpush", Encoding.UTF8, 32).ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream, "MOBOTIX_Fast_Serverpush", Encoding.UTF8, 32); Assert.True(_testCase.Validate(parser)); } } diff --git a/Source/HttpMultipartParser.UnitTests/ParserScenarios/MultipleFilesWithEmptyName.cs b/Source/HttpMultipartParser.UnitTests/ParserScenarios/MultipleFilesWithEmptyName.cs index d82b3ec..e9a25b7 100644 --- a/Source/HttpMultipartParser.UnitTests/ParserScenarios/MultipleFilesWithEmptyName.cs +++ b/Source/HttpMultipartParser.UnitTests/ParserScenarios/MultipleFilesWithEmptyName.cs @@ -64,7 +64,7 @@ public async Task MultipleFilesWithNoNameAsync() { using (Stream stream = TestUtil.StringToStream(_testCase.Request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream, "boundary", Encoding.UTF8, 16).ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream, "boundary", Encoding.UTF8, 16); Assert.True(_testCase.Validate(parser)); } } diff --git a/Source/HttpMultipartParser.UnitTests/ParserScenarios/MultipleFilesWithOmittedName.cs b/Source/HttpMultipartParser.UnitTests/ParserScenarios/MultipleFilesWithOmittedName.cs index 713463e..ff10e81 100644 --- a/Source/HttpMultipartParser.UnitTests/ParserScenarios/MultipleFilesWithOmittedName.cs +++ b/Source/HttpMultipartParser.UnitTests/ParserScenarios/MultipleFilesWithOmittedName.cs @@ -64,7 +64,7 @@ public async Task MultipleFilesWithOmittedNameAsync() { using (Stream stream = TestUtil.StringToStream(_testCase.Request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream, "boundary", Encoding.UTF8, 16).ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream, "boundary", Encoding.UTF8, 16); Assert.True(_testCase.Validate(parser)); } } diff --git a/Source/HttpMultipartParser.UnitTests/ParserScenarios/MultipleFilesWithSameName.cs b/Source/HttpMultipartParser.UnitTests/ParserScenarios/MultipleFilesWithSameName.cs index 354b8ea..b2ee78b 100644 --- a/Source/HttpMultipartParser.UnitTests/ParserScenarios/MultipleFilesWithSameName.cs +++ b/Source/HttpMultipartParser.UnitTests/ParserScenarios/MultipleFilesWithSameName.cs @@ -64,7 +64,7 @@ public async Task MultipleFilesWithSameNameTestAsync() { using (Stream stream = TestUtil.StringToStream(_testCase.Request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream, "boundary", Encoding.UTF8, 16).ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream, "boundary", Encoding.UTF8, 16); Assert.True(_testCase.Validate(parser)); } } diff --git a/Source/HttpMultipartParser.UnitTests/ParserScenarios/MultipleParamsAndFiles.cs b/Source/HttpMultipartParser.UnitTests/ParserScenarios/MultipleParamsAndFiles.cs index f0da85b..1d6716c 100644 --- a/Source/HttpMultipartParser.UnitTests/ParserScenarios/MultipleParamsAndFiles.cs +++ b/Source/HttpMultipartParser.UnitTests/ParserScenarios/MultipleParamsAndFiles.cs @@ -78,7 +78,7 @@ public async Task MultipleFilesAndParamsTestAsync() { using (Stream stream = TestUtil.StringToStream(_testCase.Request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream, "boundary", Encoding.UTF8, 16).ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream, "boundary", Encoding.UTF8, 16); Assert.True(_testCase.Validate(parser)); } } diff --git a/Source/HttpMultipartParser.UnitTests/ParserScenarios/SeveralValuesWithSameProperty.cs b/Source/HttpMultipartParser.UnitTests/ParserScenarios/SeveralValuesWithSameProperty.cs index 583e961..12df270 100644 --- a/Source/HttpMultipartParser.UnitTests/ParserScenarios/SeveralValuesWithSameProperty.cs +++ b/Source/HttpMultipartParser.UnitTests/ParserScenarios/SeveralValuesWithSameProperty.cs @@ -57,7 +57,7 @@ public async Task AcceptSeveralValuesWithSamePropertyAsync() { using (Stream stream = TestUtil.StringToStream(_testCase.Request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream, Encoding.UTF8).ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream, Encoding.UTF8); Assert.True(_testCase.Validate(parser)); } } diff --git a/Source/HttpMultipartParser.UnitTests/ParserScenarios/SingleFile.cs b/Source/HttpMultipartParser.UnitTests/ParserScenarios/SingleFile.cs index 8b1e2b5..a57e86c 100644 --- a/Source/HttpMultipartParser.UnitTests/ParserScenarios/SingleFile.cs +++ b/Source/HttpMultipartParser.UnitTests/ParserScenarios/SingleFile.cs @@ -55,7 +55,7 @@ public async Task SingleFileTest_Async() { using (Stream stream = TestUtil.StringToStream(_testCase.Request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream, "boundary", Encoding.UTF8, 16).ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream, "boundary", Encoding.UTF8, 16); Assert.True(_testCase.Validate(parser)); } } diff --git a/Source/HttpMultipartParser.UnitTests/ParserScenarios/SmallData.cs b/Source/HttpMultipartParser.UnitTests/ParserScenarios/SmallData.cs index 4c218a4..26f405a 100644 --- a/Source/HttpMultipartParser.UnitTests/ParserScenarios/SmallData.cs +++ b/Source/HttpMultipartParser.UnitTests/ParserScenarios/SmallData.cs @@ -73,8 +73,8 @@ public async Task SmallDataTestAsync() { // The boundary is missing the first two -- in accordance with the multipart // spec. (A -- is added by the parser, this boundary is what would be sent in the - // requset header) - var parser = await MultipartFormDataParser.ParseAsync(stream, "---------------------------265001916915724").ConfigureAwait(false); + // request header) + var parser = await MultipartFormDataParser.ParseAsync(stream, "---------------------------265001916915724"); Assert.True(_testCase.Validate(parser)); } } diff --git a/Source/HttpMultipartParser.UnitTests/ParserScenarios/StreamPositionHasBeenMoved.cs b/Source/HttpMultipartParser.UnitTests/ParserScenarios/StreamPositionHasBeenMoved.cs index d73101f..bb0ff9a 100644 --- a/Source/HttpMultipartParser.UnitTests/ParserScenarios/StreamPositionHasBeenMoved.cs +++ b/Source/HttpMultipartParser.UnitTests/ParserScenarios/StreamPositionHasBeenMoved.cs @@ -96,12 +96,12 @@ public async Task End_of_stream_and_boundary_is_known_async() { // Move the Position to the end of the stream var sr = new StreamReader(stream); - var content = await sr.ReadToEndAsync().ConfigureAwait(false); + var content = await sr.ReadToEndAsync(); // When the developer provides the boundary, the parser does not have to determine the boundary // and therefore the DetectBoundary method is not invoked which avoids the problem altogether. // However, the parser is unable to find the provided boundary and throws a meaningful exception. - await Assert.ThrowsAsync(() => MultipartFormDataParser.ParseAsync(stream, "MyBoundary")).ConfigureAwait(false); + await Assert.ThrowsAsync(() => MultipartFormDataParser.ParseAsync(stream, "MyBoundary")); } } @@ -112,10 +112,10 @@ public async Task End_of_stream_and_boundary_is_unknown_async() { // Move the Position to the end of the stream var sr = new StreamReader(stream); - var content = await sr.ReadToEndAsync().ConfigureAwait(false); + var content = await sr.ReadToEndAsync(); // As of March 2022, the problem was resolved by throwing a more descriptive exception - await Assert.ThrowsAsync(() => MultipartFormDataParser.ParseAsync(stream)).ConfigureAwait(false); + await Assert.ThrowsAsync(() => MultipartFormDataParser.ParseAsync(stream)); } } @@ -130,7 +130,7 @@ public async Task Middle_of_stream_and_boundary_is_known_async() // When the developer provides the boundary, the parser does not have to determine the boundary // and therefore the DetectBoundary method is not invoked which avoids the problem altogether. // However, the parser is unable to find the provided boundary and throws a meaningful exception. - await Assert.ThrowsAsync(() => MultipartFormDataParser.ParseAsync(stream, "MyBoundary")).ConfigureAwait(false); + await Assert.ThrowsAsync(() => MultipartFormDataParser.ParseAsync(stream, "MyBoundary")); } } @@ -143,7 +143,7 @@ public async Task Middle_of_stream_and_boundary_is_unknown_async() stream.Position = 3; // As of March 2022, the problem was resolved by throwing a more descriptive exception - await Assert.ThrowsAsync(() => MultipartFormDataParser.ParseAsync(stream)).ConfigureAwait(false); + await Assert.ThrowsAsync(() => MultipartFormDataParser.ParseAsync(stream)); } } } diff --git a/Source/HttpMultipartParser.UnitTests/ParserScenarios/TinyData.cs b/Source/HttpMultipartParser.UnitTests/ParserScenarios/TinyData.cs index e5104b3..dac5432 100644 --- a/Source/HttpMultipartParser.UnitTests/ParserScenarios/TinyData.cs +++ b/Source/HttpMultipartParser.UnitTests/ParserScenarios/TinyData.cs @@ -67,7 +67,7 @@ public async Task CanAutoDetectBoundaryAsync() { using (Stream stream = TestUtil.StringToStream(_testCase.Request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream).ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream); Assert.True(_testCase.Validate(parser)); } } @@ -95,7 +95,7 @@ public async Task CanDetectBoundariesCrossBufferAsync() { using (Stream stream = TestUtil.StringToStream(_testCase.Request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream, "boundary", Encoding.UTF8, 16).ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream, "boundary", Encoding.UTF8, 16); Assert.True(_testCase.Validate(parser)); } } @@ -127,7 +127,7 @@ public async Task CorrectlyHandleMixedNewlineFormatsAsync() string request = regex.Replace(_testCase.Request, "\r\n", 1); using (Stream stream = TestUtil.StringToStream(request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream, "boundary", Encoding.UTF8).ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream, "boundary", Encoding.UTF8); Assert.True(_testCase.Validate(parser)); } } @@ -155,7 +155,7 @@ public async Task CorrectlyHandlesCRLFAsync() string request = _testCase.Request.Replace("\n", "\r\n"); using (Stream stream = TestUtil.StringToStream(request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream, "boundary", Encoding.UTF8).ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream, "boundary", Encoding.UTF8); Assert.True(_testCase.Validate(parser)); } } @@ -181,7 +181,7 @@ public async Task TinyDataTestAsync() { using (Stream stream = TestUtil.StringToStream(_testCase.Request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream, "boundary", Encoding.UTF8).ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream, "boundary", Encoding.UTF8); Assert.True(_testCase.Validate(parser)); } } @@ -204,7 +204,7 @@ public async Task DoesNotCloseTheStreamAsync() { using (Stream stream = TestUtil.StringToStream(_testCase.Request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream, "boundary", Encoding.UTF8).ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream, "boundary", Encoding.UTF8); Assert.True(_testCase.Validate(parser)); stream.Position = 0; @@ -227,7 +227,7 @@ public async Task GetParameterValueReturnsNullIfNoParameterFoundAsync() { using (Stream stream = TestUtil.StringToStream(_testCase.Request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream, "boundary", Encoding.UTF8).ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream, "boundary", Encoding.UTF8); Assert.Null(parser.GetParameterValue("does not exist")); } } @@ -296,7 +296,7 @@ public async Task CanDetectBoundriesWithNewLineInNextBufferAsync() { using (Stream stream = TestUtil.StringToStream(_testCase.Request, Encoding.UTF8)) { - var parser = await MultipartFormDataParser.ParseAsync(stream, "boundary", Encoding.UTF8, i).ConfigureAwait(false); + var parser = await MultipartFormDataParser.ParseAsync(stream, "boundary", Encoding.UTF8, i); Assert.True(_testCase.Validate(parser), $"Failure in buffer length {i}"); } } diff --git a/Source/HttpMultipartParser.UnitTests/ParserScenarios/UnclosedBoundary.cs b/Source/HttpMultipartParser.UnitTests/ParserScenarios/UnclosedBoundary.cs index b963732..d865aeb 100644 --- a/Source/HttpMultipartParser.UnitTests/ParserScenarios/UnclosedBoundary.cs +++ b/Source/HttpMultipartParser.UnitTests/ParserScenarios/UnclosedBoundary.cs @@ -48,7 +48,7 @@ public async Task DoesntInfiniteLoopOnUnclosedInputAsync() using (Stream stream = TestUtil.StringToStream(_testCase.Request, Encoding.UTF8)) { // We expect this to throw! - await Assert.ThrowsAsync(() => MultipartFormDataParser.ParseAsync(stream, Encoding.UTF8)).ConfigureAwait(false); + await Assert.ThrowsAsync(() => MultipartFormDataParser.ParseAsync(stream, Encoding.UTF8)); } } } diff --git a/Source/HttpMultipartParser.UnitTests/RebufferableBinaryReaderUnitTests.cs b/Source/HttpMultipartParser.UnitTests/RebufferableBinaryReaderUnitTests.cs index 111028a..dceb7ae 100644 --- a/Source/HttpMultipartParser.UnitTests/RebufferableBinaryReaderUnitTests.cs +++ b/Source/HttpMultipartParser.UnitTests/RebufferableBinaryReaderUnitTests.cs @@ -76,9 +76,9 @@ public async Task CanReadSingleCharacterBufferAsync() { var reader = new RebufferableBinaryReader(TestUtil.StringToStreamNoBom("abc"), Encoding.UTF8); - Assert.Equal('a', await reader.ReadAsync().ConfigureAwait(false)); - Assert.Equal('b', await reader.ReadAsync().ConfigureAwait(false)); - Assert.Equal('c', await reader.ReadAsync().ConfigureAwait(false)); + Assert.Equal('a', await reader.ReadAsync()); + Assert.Equal('b', await reader.ReadAsync()); + Assert.Equal('c', await reader.ReadAsync()); } [Fact] @@ -87,12 +87,12 @@ public async Task CanReadSingleCharacterOverBuffersAsync() var reader = new RebufferableBinaryReader(TestUtil.StringToStreamNoBom("def"), Encoding.UTF8); reader.Buffer(TestUtil.StringToByteNoBom("abc")); - Assert.Equal('a', await reader.ReadAsync().ConfigureAwait(false)); - Assert.Equal('b', await reader.ReadAsync().ConfigureAwait(false)); - Assert.Equal('c', await reader.ReadAsync().ConfigureAwait(false)); - Assert.Equal('d', await reader.ReadAsync().ConfigureAwait(false)); - Assert.Equal('e', await reader.ReadAsync().ConfigureAwait(false)); - Assert.Equal('f', await reader.ReadAsync().ConfigureAwait(false)); + Assert.Equal('a', await reader.ReadAsync()); + Assert.Equal('b', await reader.ReadAsync()); + Assert.Equal('c', await reader.ReadAsync()); + Assert.Equal('d', await reader.ReadAsync()); + Assert.Equal('e', await reader.ReadAsync()); + Assert.Equal('f', await reader.ReadAsync()); } [Fact] @@ -100,13 +100,13 @@ public async Task CanReadMixedAsciiAndUTFCharactersAsync() { var reader = new RebufferableBinaryReader(TestUtil.StringToStreamNoBom("abcdèfg"), Encoding.UTF8); - Assert.Equal('a', await reader.ReadAsync().ConfigureAwait(false)); - Assert.Equal('b', await reader.ReadAsync().ConfigureAwait(false)); - Assert.Equal('c', await reader.ReadAsync().ConfigureAwait(false)); - Assert.Equal('d', await reader.ReadAsync().ConfigureAwait(false)); - Assert.Equal('è', await reader.ReadAsync().ConfigureAwait(false)); - Assert.Equal('f', await reader.ReadAsync().ConfigureAwait(false)); - Assert.Equal('g', await reader.ReadAsync().ConfigureAwait(false)); + Assert.Equal('a', await reader.ReadAsync()); + Assert.Equal('b', await reader.ReadAsync()); + Assert.Equal('c', await reader.ReadAsync()); + Assert.Equal('d', await reader.ReadAsync()); + Assert.Equal('è', await reader.ReadAsync()); + Assert.Equal('f', await reader.ReadAsync()); + Assert.Equal('g', await reader.ReadAsync()); } [Fact] @@ -115,13 +115,13 @@ public async Task CanReadMixedAsciiAndUTFCharactersOverBuffersAsync() var reader = new RebufferableBinaryReader(TestUtil.StringToStreamNoBom("dèfg"), Encoding.UTF8); reader.Buffer(TestUtil.StringToByteNoBom("abc")); - Assert.Equal('a', await reader.ReadAsync().ConfigureAwait(false)); - Assert.Equal('b', await reader.ReadAsync().ConfigureAwait(false)); - Assert.Equal('c', await reader.ReadAsync().ConfigureAwait(false)); - Assert.Equal('d', await reader.ReadAsync().ConfigureAwait(false)); - Assert.Equal('è', await reader.ReadAsync().ConfigureAwait(false)); - Assert.Equal('f', await reader.ReadAsync().ConfigureAwait(false)); - Assert.Equal('g', await reader.ReadAsync().ConfigureAwait(false)); + Assert.Equal('a', await reader.ReadAsync()); + Assert.Equal('b', await reader.ReadAsync()); + Assert.Equal('c', await reader.ReadAsync()); + Assert.Equal('d', await reader.ReadAsync()); + Assert.Equal('è', await reader.ReadAsync()); + Assert.Equal('f', await reader.ReadAsync()); + Assert.Equal('g', await reader.ReadAsync()); } #endregion @@ -251,7 +251,7 @@ public async Task CanReadSingleBufferAsync() var reader = new RebufferableBinaryReader(TestUtil.StringToStreamNoBom("6chars"), Encoding.UTF8); var buffer = new byte[Encoding.UTF8.GetByteCount("6chars")]; - await reader.ReadAsync(buffer, 0, buffer.Length).ConfigureAwait(false); + await reader.ReadAsync(buffer, 0, buffer.Length); string result = Encoding.UTF8.GetString(buffer); Assert.Equal("6chars", result); } @@ -263,7 +263,7 @@ public async Task CanReadAcrossMultipleBuffersAsync() reader.Buffer(TestUtil.StringToByteNoBom("6ch")); var buffer = new byte[6]; - await reader.ReadAsync(buffer, 0, buffer.Length).ConfigureAwait(false); + await reader.ReadAsync(buffer, 0, buffer.Length); Assert.Equal("6chars", Encoding.UTF8.GetString(buffer)); } @@ -273,7 +273,7 @@ public async Task CanReadMixedAsciiAndUTF8Async() var reader = new RebufferableBinaryReader(TestUtil.StringToStreamNoBom("5èats"), Encoding.UTF8); var buffer = new byte[Encoding.UTF8.GetByteCount("5èats")]; - await reader.ReadAsync(buffer, 0, buffer.Length).ConfigureAwait(false); + await reader.ReadAsync(buffer, 0, buffer.Length); string result = Encoding.UTF8.GetString(buffer); Assert.Equal("5èats", result); } @@ -285,7 +285,7 @@ public async Task CanReadMixedAsciiAndUTF8AcrossMultipleBuffersAsync() reader.Buffer(TestUtil.StringToByteNoBom(("5èa"))); var buffer = new byte[Encoding.UTF8.GetByteCount("5èats")]; - await reader.ReadAsync(buffer, 0, buffer.Length).ConfigureAwait(false); + await reader.ReadAsync(buffer, 0, buffer.Length); string result = Encoding.UTF8.GetString(buffer); Assert.Equal("5èats", result); } @@ -296,11 +296,11 @@ public async Task ReadCorrectlyHandlesSmallerBufferThenStreamAsync() var reader = new RebufferableBinaryReader(TestUtil.StringToStreamNoBom("6chars"), Encoding.UTF8); var buffer = new byte[4]; - await reader.ReadAsync(buffer, 0, buffer.Length).ConfigureAwait(false); + await reader.ReadAsync(buffer, 0, buffer.Length); Assert.Equal("6cha", Encoding.UTF8.GetString(buffer)); buffer = new byte[2]; - await reader.ReadAsync(buffer, 0, buffer.Length).ConfigureAwait(false); + await reader.ReadAsync(buffer, 0, buffer.Length); Assert.Equal("rs", Encoding.UTF8.GetString(buffer)); } @@ -310,7 +310,7 @@ public async Task ReadCorrectlyHandlesLargerBufferThenStreamAsync() var reader = new RebufferableBinaryReader(TestUtil.StringToStreamNoBom("6chars"), Encoding.UTF8); var buffer = new byte[10]; - int amountRead = await reader.ReadAsync(buffer, 0, buffer.Length).ConfigureAwait(false); + int amountRead = await reader.ReadAsync(buffer, 0, buffer.Length); Assert.Equal("6chars\0\0\0\0", Encoding.UTF8.GetString(buffer)); Assert.Equal(6, amountRead); } @@ -321,7 +321,7 @@ public async Task ReadReturnsZeroOnNoDataAsync() var reader = new RebufferableBinaryReader(new MemoryStream(), Encoding.UTF8); var buffer = new byte[6]; - int amountRead = await reader.ReadAsync(buffer, 0, buffer.Length).ConfigureAwait(false); + int amountRead = await reader.ReadAsync(buffer, 0, buffer.Length); Assert.Equal("\0\0\0\0\0\0", Encoding.UTF8.GetString(buffer)); Assert.Equal(0, amountRead); } @@ -331,9 +331,9 @@ public async Task ReadLineReturnsNullOnNoDataAsync() { var reader = new RebufferableBinaryReader(new MemoryStream(new byte[6]), Encoding.UTF8); - var s = await reader.ReadLineAsync().ConfigureAwait(false); + var s = await reader.ReadLineAsync(); Assert.Equal("\0\0\0\0\0\0", s); - Assert.Null(await reader.ReadLineAsync().ConfigureAwait(false)); + Assert.Null(await reader.ReadLineAsync()); } [Fact] @@ -342,18 +342,18 @@ public async Task ReadCanResumeInterruptedStreamAsync() var reader = new RebufferableBinaryReader(TestUtil.StringToStreamNoBom("6chars"), Encoding.UTF8); var buffer = new byte[4]; - int amountRead = await reader.ReadAsync(buffer, 0, buffer.Length).ConfigureAwait(false); + int amountRead = await reader.ReadAsync(buffer, 0, buffer.Length); Assert.Equal("6cha", Encoding.UTF8.GetString(buffer)); Assert.Equal(4, amountRead); reader.Buffer(TestUtil.StringToByteNoBom("14intermission")); buffer = new byte[14]; - amountRead = await reader.ReadAsync(buffer, 0, buffer.Length).ConfigureAwait(false); + amountRead = await reader.ReadAsync(buffer, 0, buffer.Length); Assert.Equal("14intermission", Encoding.UTF8.GetString(buffer)); Assert.Equal(14, amountRead); buffer = new byte[2]; - amountRead = await reader.ReadAsync(buffer, 0, buffer.Length).ConfigureAwait(false); + amountRead = await reader.ReadAsync(buffer, 0, buffer.Length); Assert.Equal("rs", Encoding.UTF8.GetString(buffer)); Assert.Equal(2, amountRead); } @@ -383,7 +383,7 @@ public void CanReadByteLineOnMixedAsciiAndUTF8Text() public async Task CanReadByteLineOnMixedAsciiAndUTF8TextAsync() { var reader = new RebufferableBinaryReader(TestUtil.StringToStreamNoBom("Bonjour poignée"), Encoding.UTF8); - byte[] bytes = await reader.ReadByteLineAsync().ConfigureAwait(false); + byte[] bytes = await reader.ReadByteLineAsync(); var expected = new byte[] { 66, 111, 110, 106, 111, 117, 114, 32, 112, 111, 105, 103, 110, 195, 169, 101 }; foreach (var pair in expected.Zip(bytes, Tuple.Create)) diff --git a/Source/HttpMultipartParser/HttpMultipartParser.csproj b/Source/HttpMultipartParser/HttpMultipartParser.csproj index baf12d0..e423228 100644 --- a/Source/HttpMultipartParser/HttpMultipartParser.csproj +++ b/Source/HttpMultipartParser/HttpMultipartParser.csproj @@ -41,7 +41,7 @@ - + diff --git a/appveyor.psm1 b/appveyor.psm1 index aa39548..40eb9f0 100644 --- a/appveyor.psm1 +++ b/appveyor.psm1 @@ -42,6 +42,11 @@ function Invoke-AppVeyorInstall { # I spent a whole day trying to find a solution but ultimately the only reliable solution # I was able to come up with is to install in the default location (which is /usr/share/dotnet) # using 'sudo' because you need admin privileges to access the default install location. + # + # November 2022: I tried removing this workaround since GetVersion.Tool was updated more + # than 2 years ago but it led to another problem: https://ci.appveyor.com/project/Jericho/zoomnet/builds/48579496/job/pymt60j9b53ayxta#L78 + # + # Therefore this workaround seems like a permanent solution. sudo bash dotnet-install.sh --version $desiredDotNetCoreSDKVersion --install-dir /usr/share/dotnet } diff --git a/appveyor.yml b/appveyor.yml index a0f1b09..93c0eef 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -17,7 +17,7 @@ before_build: # to run your custom scripts instead of automatic MSBuild build_script: - - ps: .\build.ps1 --target=AppVeyor + - ps: .\build.ps1 build.cake --target=AppVeyor # scripts to run after build after_build: diff --git a/build.cake b/build.cake index 0be4ba7..74ca0e8 100644 --- a/build.cake +++ b/build.cake @@ -1,10 +1,10 @@ // Install tools. #tool dotnet:?package=GitVersion.Tool&version=5.12.0 #tool dotnet:?package=coveralls.net&version=4.0.1 -#tool nuget:?package=GitReleaseManager&version=0.13.0 -#tool nuget:?package=ReportGenerator&version=5.1.22 -#tool nuget:?package=xunit.runner.console&version=2.4.2 -#tool nuget:?package=CodecovUploader&version=0.5.0 +#tool nuget:https://f.feedz.io/jericho/jericho/nuget/?package=GitReleaseManager&version=0.17.0-collaborators0003 +#tool nuget:?package=ReportGenerator&version=5.2.0 +#tool nuget:?package=xunit.runner.console&version=2.6.5 +#tool nuget:?package=CodecovUploader&version=0.7.1 // Install addins. #addin nuget:?package=Cake.Coveralls&version=1.1.0 @@ -51,9 +51,6 @@ var testCoverageExcludeFiles = new[] var nuGetApiUrl = Argument("NUGET_API_URL", EnvironmentVariable("NUGET_API_URL")); var nuGetApiKey = Argument("NUGET_API_KEY", EnvironmentVariable("NUGET_API_KEY")); -var myGetApiUrl = Argument("MYGET_API_URL", EnvironmentVariable("MYGET_API_URL")); -var myGetApiKey = Argument("MYGET_API_KEY", EnvironmentVariable("MYGET_API_KEY")); - var gitHubToken = Argument("GITHUB_TOKEN", EnvironmentVariable("GITHUB_TOKEN")); var gitHubUserName = Argument("GITHUB_USERNAME", EnvironmentVariable("GITHUB_USERNAME")); var gitHubPassword = Argument("GITHUB_PASSWORD", EnvironmentVariable("GITHUB_PASSWORD")); @@ -74,12 +71,16 @@ var integrationTestsProject = $"{sourceFolder}{libraryName}.IntegrationTests/{li var unitTestsProject = $"{sourceFolder}{libraryName}.UnitTests/{libraryName}.UnitTests.csproj"; var benchmarkProject = $"{sourceFolder}{libraryName}.Benchmark/{libraryName}.Benchmark.csproj"; -var versionInfo = GitVersion(new GitVersionSettings() { OutputType = GitVersionOutput.Json }); -var milestone = versionInfo.MajorMinorPatch; +var buildBranch = Context.GetBuildBranch(); +var repoName = Context.GetRepoName(); + +var versionInfo = (GitVersion)null; // Will be calculated in SETUP +var milestone = string.Empty; // Will be calculated in SETUP + var cakeVersion = typeof(ICakeContext).Assembly.GetName().Version.ToString(); var isLocalBuild = BuildSystem.IsLocalBuild; -var isMainBranch = StringComparer.OrdinalIgnoreCase.Equals("main", BuildSystem.AppVeyor.Environment.Repository.Branch); -var isMainRepo = StringComparer.OrdinalIgnoreCase.Equals($"{gitHubRepoOwner}/{gitHubRepo}", BuildSystem.AppVeyor.Environment.Repository.Name); +var isMainBranch = StringComparer.OrdinalIgnoreCase.Equals("main", buildBranch); +var isMainRepo = StringComparer.OrdinalIgnoreCase.Equals($"{gitHubRepoOwner}/{gitHubRepo}", repoName); var isPullRequest = BuildSystem.AppVeyor.Environment.PullRequest.IsPullRequest; var isTagged = BuildSystem.AppVeyor.Environment.Repository.Tag.IsTag && !string.IsNullOrWhiteSpace(BuildSystem.AppVeyor.Environment.Repository.Tag.Name); var isIntegrationTestsProjectPresent = FileExists(integrationTestsProject); @@ -116,6 +117,10 @@ Setup(context => context.Log.Verbosity = Verbosity.Diagnostic; } + Information("Calculating version info..."); + versionInfo = GitVersion(new GitVersionSettings() { OutputType = GitVersionOutput.Json }); + milestone = versionInfo.MajorMinorPatch; + Information("Building version {0} of {1} ({2}, {3}) using version {4} of Cake", versionInfo.LegacySemVerPadded, libraryName, @@ -132,11 +137,6 @@ Setup(context => isTagged ); - Information("Myget Info:\r\n\tApi Url: {0}\r\n\tApi Key: {1}", - myGetApiUrl, - string.IsNullOrEmpty(myGetApiKey) ? "[NULL]" : new string('*', myGetApiKey.Length) - ); - Information("Nuget Info:\r\n\tApi Url: {0}\r\n\tApi Key: {1}", nuGetApiUrl, string.IsNullOrEmpty(nuGetApiKey) ? "[NULL]" : new string('*', nuGetApiKey.Length) @@ -308,14 +308,13 @@ Task("Upload-Coverage-Result-Coveralls") .WithCriteria(() => isMainRepo) .Does(() => { - using (DiagnosticVerbosity()) + if(string.IsNullOrEmpty(coverallsToken)) throw new InvalidOperationException("Could not resolve Coveralls token."); + + CoverallsNet(new FilePath(coverageFile), CoverallsNetReportType.OpenCover, new CoverallsNetSettings() { - CoverallsNet(new FilePath(coverageFile), CoverallsNetReportType.OpenCover, new CoverallsNetSettings() - { - RepoToken = coverallsToken, - UseRelativePaths = true - }); - } + RepoToken = coverallsToken, + UseRelativePaths = true + }); }).OnError (exception => { Information(exception.Message); @@ -331,16 +330,13 @@ Task("Upload-Coverage-Result-Codecov") .WithCriteria(() => isMainRepo) .Does(() => { - var codecovSettings = new CodecovSettings + if(string.IsNullOrEmpty(codecovToken)) throw new InvalidOperationException("Could not resolve CodeCov token."); + + Codecov(new CodecovSettings { Files = new[] { coverageFile }, Token = codecovToken - }; - - using (DiagnosticVerbosity()) - { - Codecov(codecovSettings); - } + }); }).OnError (exception => { Information(exception.Message); @@ -413,33 +409,15 @@ Task("Publish-NuGet") if(string.IsNullOrEmpty(nuGetApiKey)) throw new InvalidOperationException("Could not resolve NuGet API key."); if(string.IsNullOrEmpty(nuGetApiUrl)) throw new InvalidOperationException("Could not resolve NuGet API url."); - foreach(var package in GetFiles(outputDir + "*.nupkg")) + var settings = new DotNetNuGetPushSettings { - // Push the package. - NuGetPush(package, new NuGetPushSettings { - ApiKey = nuGetApiKey, - Source = nuGetApiUrl - }); - } -}); - -Task("Publish-MyGet") - .IsDependentOn("Create-NuGet-Package") - .WithCriteria(() => !isLocalBuild) - .WithCriteria(() => !isPullRequest) - .WithCriteria(() => isMainRepo) - .Does(() => -{ - if(string.IsNullOrEmpty(myGetApiKey)) throw new InvalidOperationException("Could not resolve MyGet API key."); - if(string.IsNullOrEmpty(myGetApiUrl)) throw new InvalidOperationException("Could not resolve MyGet API url."); + Source = nuGetApiUrl, + ApiKey = nuGetApiKey + }; foreach(var package in GetFiles(outputDir + "*.nupkg")) { - // Push the package. - NuGetPush(package, new NuGetPushSettings { - ApiKey = myGetApiKey, - Source = myGetApiUrl - }); + DotNetNuGetPush(package, settings); } }); @@ -545,7 +523,6 @@ Task("AppVeyor") .IsDependentOn("Upload-Coverage-Result-Codecov") .IsDependentOn("Create-NuGet-Package") .IsDependentOn("Upload-AppVeyor-Artifacts") - .IsDependentOn("Publish-MyGet") .IsDependentOn("Publish-NuGet") .IsDependentOn("Publish-GitHub-Release") .Finally(() => @@ -588,3 +565,49 @@ private static string TrimStart(this string source, string value, StringComparis return source.Substring(startIndex); } + +private static List ExecuteCommand(this ICakeContext context, FilePath exe, string args) +{ + context.StartProcess(exe, new ProcessSettings { Arguments = args, RedirectStandardOutput = true }, out var redirectedOutput); + + return redirectedOutput.ToList(); +} + +private static List ExecGitCmd(this ICakeContext context, string cmd) +{ + var gitExe = context.Tools.Resolve(context.IsRunningOnWindows() ? "git.exe" : "git"); + return context.ExecuteCommand(gitExe, cmd); +} + +private static string GetBuildBranch(this ICakeContext context) +{ + var buildSystem = context.BuildSystem(); + string repositoryBranch = null; + + if (buildSystem.IsRunningOnAppVeyor) repositoryBranch = buildSystem.AppVeyor.Environment.Repository.Branch; + else if (buildSystem.IsRunningOnAzurePipelines) repositoryBranch = buildSystem.AzurePipelines.Environment.Repository.SourceBranchName; + else if (buildSystem.IsRunningOnBamboo) repositoryBranch = buildSystem.Bamboo.Environment.Repository.Branch; + else if (buildSystem.IsRunningOnBitbucketPipelines) repositoryBranch = buildSystem.BitbucketPipelines.Environment.Repository.Branch; + else if (buildSystem.IsRunningOnBitrise) repositoryBranch = buildSystem.Bitrise.Environment.Repository.GitBranch; + else if (buildSystem.IsRunningOnGitHubActions) repositoryBranch = buildSystem.GitHubActions.Environment.Workflow.Ref.Replace("refs/heads/", ""); + else if (buildSystem.IsRunningOnGitLabCI) repositoryBranch = buildSystem.GitLabCI.Environment.Build.RefName; + else if (buildSystem.IsRunningOnTeamCity) repositoryBranch = buildSystem.TeamCity.Environment.Build.BranchName; + else if (buildSystem.IsRunningOnTravisCI) repositoryBranch = buildSystem.TravisCI.Environment.Build.Branch; + else repositoryBranch = ExecGitCmd(context, "rev-parse --abbrev-ref HEAD").Single(); + + return repositoryBranch; +} + +public static string GetRepoName(this ICakeContext context) +{ + var buildSystem = context.BuildSystem(); + + if (buildSystem.IsRunningOnAppVeyor) return buildSystem.AppVeyor.Environment.Repository.Name; + else if (buildSystem.IsRunningOnAzurePipelines) return buildSystem.AzurePipelines.Environment.Repository.RepoName; + else if (buildSystem.IsRunningOnTravisCI) return buildSystem.TravisCI.Environment.Repository.Slug; + else if (buildSystem.IsRunningOnGitHubActions) return buildSystem.GitHubActions.Environment.Workflow.Repository; + + var originUrl = ExecGitCmd(context, "config --get remote.origin.url").Single(); + var parts = originUrl.Split('/', StringSplitOptions.RemoveEmptyEntries); + return $"{parts[parts.Length - 2]}/{parts[parts.Length - 1].Replace(".git", "")}"; +} diff --git a/global.json b/global.json index eb5317a..8e621ca 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "7.0.304", + "version": "8.0.100", "rollForward": "patch", "allowPrerelease": false }