From 1e1ff8c0a18acd9cb3342eb2168a6b2816df1609 Mon Sep 17 00:00:00 2001 From: Manuel Trezza <5673677+mtrezza@users.noreply.github.com> Date: Thu, 19 Dec 2024 19:02:45 +0100 Subject: [PATCH 01/15] fix --- .github/workflows/ci.yml | 2 +- .github/workflows/release-automated.yml | 4 +- Parse.Tests/Parse.Tests.csproj | 2 +- Parse/Parse.csproj | 8 ++-- README.md | 51 +++++++++++-------------- 5 files changed, 30 insertions(+), 37 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 636bb2c0..865f7314 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,7 +11,7 @@ jobs: check-dotnet: strategy: matrix: - DOTNET_VERSION: ['6.0', '7.0', '8.0', '9.0'] + DOTNET_VERSION: ['8.0', '9.0'] fail-fast: false name: .NET ${{ matrix.DOTNET_VERSION }} runs-on: windows-latest diff --git a/.github/workflows/release-automated.yml b/.github/workflows/release-automated.yml index 3b9f558d..213345eb 100644 --- a/.github/workflows/release-automated.yml +++ b/.github/workflows/release-automated.yml @@ -15,11 +15,11 @@ jobs: - name: Set up .NET uses: actions/setup-dotnet@v1 with: - dotnet-version: '6.x' + dotnet-version: '8.x' - name: Set up Node.js uses: actions/setup-node@v2 with: - node-version: 18 + node-version: 20 - name: Install Node dependencies run: npm ci - name: Build and publish release diff --git a/Parse.Tests/Parse.Tests.csproj b/Parse.Tests/Parse.Tests.csproj index ace87ae1..3e1da635 100644 --- a/Parse.Tests/Parse.Tests.csproj +++ b/Parse.Tests/Parse.Tests.csproj @@ -1,6 +1,6 @@ - net6.0 + net8.0 false latest diff --git a/Parse/Parse.csproj b/Parse/Parse.csproj index d223087d..1d8e5474 100644 --- a/Parse/Parse.csproj +++ b/Parse/Parse.csproj @@ -1,8 +1,8 @@ - net6.0 - bin\Release\netstandard2.0\Parse.xml + net8.0 + bin\Release\net8.0\Parse.xml 4.0.0 latest @@ -11,10 +11,10 @@ https://github.com/parse-community/Parse-SDK-dotNET/ GitHub - This is the official package for the Parse .NET Standard SDK. Add a cloud backend to any platform supporting .NET Standard 2.0. + The Parse .NET SDK for Parse Platform Copyright © Parse Platform - Parse;parse-platform;parse-server;netstandard;netstandard2.0;backend;sdk;app + Parse;parse-platform;parse-server;backend;sdk;app false true parse-logo.png diff --git a/README.md b/README.md index 56374b42..351357d3 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Parse SDK for .NET +![parse-repository-header-sdk-dotnet](https://github.com/user-attachments/assets/f4672e91-2b80-45a2-8619-7c9511e93d65) --- @@ -17,33 +17,22 @@ --- -A library that gives you access to the powerful Parse Server backend from any platform supporting .NET Standard 2.0. For more information about Parse and its features, visit [parseplatform.org](https://parseplatform.org/). +This library gives you access to the powerful Parse Server backend from your .NET app. For more information on Parse Platform and its features, visit [parseplatform.org](https://parseplatform.org). --- -- [Parse SDK for .NET](#parse-sdk-for-net) - - [Getting Started](#getting-started) - - [Compatibility](#compatibility) - - [.NET](#net) - - [Using the Code](#using-the-code) - - [Common Definitions](#common-definitions) - - [Client-Side Use](#client-side-use) - - [Use In Unity Client](#use-in-unity-client) - - [Unity3D on iOS](#unity3d-on-ios) - - [Unity3D on Android](#unity3d-on-android) - - [Server-Side Use](#server-side-use) - - [Basic Demonstration](#basic-demonstration) - - [Local Builds](#local-builds) - - [.NET Core CLI](#net-core-cli) - - -## Getting Started -The previous stable release version 1.7.0 is available as [a NuGet package][nuget-link]. - -The latest development release is also available as [a NuGet package (Prerelease)][nuget-link-prerelease]. - -Note that the previous stable package currently available on the official distribution channel is quite old. -To use the most up-to-date code, either build this project and reference the generated NuGet package, download the pre-built assembly from [releases][releases-link] or check the [NuGet package (Prerelease)][nuget-link-prerelease] on NuGet. +- [Compatibility](#compatibility) + - [.NET](#net) +- [Using the Code](#using-the-code) + - [Common Definitions](#common-definitions) + - [Client-Side Use](#client-side-use) + - [Use In Unity Client](#use-in-unity-client) + - [Unity3D on iOS](#unity3d-on-ios) + - [Unity3D on Android](#unity3d-on-android) + - [Server-Side Use](#server-side-use) + - [Basic Demonstration](#basic-demonstration) +- [Local Builds](#local-builds) +- [.NET Core CLI](#net-core-cli) ## Compatibility @@ -53,10 +42,14 @@ Parse .NET SDK is continuously tested with the most recent releases of .NET to e | .NET Version | End-of-Life | Parse .NET SDK Version | |--------------|---------------|------------------------| -| 6.0 | November 2024 | >= 1.0 | -| 7.0 | May 2024 | >= 1.0 | -| 8.0 | November 2026 | >= 1.0 | -| 9.0 | May 2026 | >= 1.0 | +| Standard 2.0 | November 2024 | >=1.0.0 <4.0.0 | +| 6.0 | November 2024 | >=1.0.0 <5.0.0 | +| 7.0 | May 2024 | >=1.0.0 <5.0.0 | +| 8.0 | November 2026 | >=1.0.0 | +| 9.0 | May 2026 | >=1.0.0 | + +> [!NOTE] +> We have removed support for [NET Standard 2.0](https://devblogs.microsoft.com/dotnet/the-future-of-net-standard/) with Parse .NET SDK 4.0. Xamarin developers should migrate to .NET MAUI to use the latest version of the Parse .NET SDK. Unity developers should use Parse .NET SDK <4.0 until Unity supports .NET and then migrate to the latest version of the Parse .NET SDK. ## Using the Code Make sure you are using the project's root namespace. From 858e97929088f7986570dabb7a670438d082b3c3 Mon Sep 17 00:00:00 2001 From: Manuel Trezza <5673677+mtrezza@users.noreply.github.com> Date: Thu, 19 Dec 2024 19:07:05 +0100 Subject: [PATCH 02/15] remove unity docs --- README.md | 56 +------------------------------------------------------ 1 file changed, 1 insertion(+), 55 deletions(-) diff --git a/README.md b/README.md index 351357d3..d047ad4d 100644 --- a/README.md +++ b/README.md @@ -26,9 +26,6 @@ This library gives you access to the powerful Parse Server backend from your .NE - [Using the Code](#using-the-code) - [Common Definitions](#common-definitions) - [Client-Side Use](#client-side-use) - - [Use In Unity Client](#use-in-unity-client) - - [Unity3D on iOS](#unity3d-on-ios) - - [Unity3D on Android](#unity3d-on-android) - [Server-Side Use](#server-side-use) - [Basic Demonstration](#basic-demonstration) - [Local Builds](#local-builds) @@ -80,8 +77,7 @@ ParseClient client = new ParseClient(new ServerConnectionData `ServerConnectionData` is available in the `Parse.Infrastructure` namespace. -The two non-cloning `ParseClient` constructors contain optional parameters for an `IServiceHub` implementation instance and an array of `IServiceHubMutator`s. These should only be used when the behaviour of the SDK needs to be changed such as [when it is used with the Unity game engine](#use-in-unity-client). - +The two non-cloning `ParseClient` constructors contain optional parameters for an `IServiceHub` implementation instance and an array of `IServiceHubMutator`s. These should only be used when the behavior of the SDK needs to be changed. To find full usage instructions for the latest stable release, please visit the [Parse docs website][parse-docs-link]. Please note that the latest stable release is quite old and does not reflect the work being done at the moment. @@ -104,56 +100,6 @@ In your program's entry point, instantiate a `ParseClient` with all the paramete new ParseClient(/* Parameters */).Publicize(); ``` -### Use In Unity Client - -In Unity, the same logic applies to use the SDK as in [any other client](#client-side-use), except that a special `IServiceHub` impelementation instance, a `MetadataMutator`, and an `AbsoluteCacheLocationMutator` need to be passed in to one of the non-cloning `ParseClient` constructors in order to specify the environment and platform metadata, as well as the absolute cache location manually. This step is needed because the logic that creates these values automatically will fail and create incorrect values. The functionality to do this automatically may eventually be provided as a Unity package in the future, but for now, the following code can be used. - -```csharp -using System; -using UnityEngine; -using Parse.Infrastructure; -``` - -```csharp -new ParseClient(/* Parameters */, - new LateInitializedMutableServiceHub { }, - new MetadataMutator - { - EnvironmentData = new EnvironmentData { OSVersion = SystemInfo.operatingSystem, Platform = $"Unity {Application.unityVersion} on {SystemInfo.operatingSystemFamily}", TimeZone = TimeZoneInfo.Local.StandardName }, - HostManifestData = new HostManifestData { Name = Application.productName, Identifier = Application.productName, ShortVersion = Application.version, Version = Application.version } - }, - new AbsoluteCacheLocationMutator - { - CustomAbsoluteCacheFilePath = $"{Application.persistentDataPath.Replace('/', Path.DirectorySeparatorChar)}{Path.DirectorySeparatorChar}Parse.cache" - } - ).Publicize(); -``` - -Other `IServiceHubMutator` implementations are available that do different things, such as the `RelativeCacheLocationMutator`, which allows a custom cache location relative to the default base folder (`System.Environment.SpecialFolder.LocalApplicationData`) to be specified. - -If you are having trouble getting the SDK to work on other platforms, try to use the above code to control what values for various metadata information items the SDK will use, to see if that fixes the issue. - -#### Unity3D on iOS - -When using the Parse SDK on iOS/iPadOS target platforms you may encounter issues during runtime where the creation of ParseObjects using subclassing or other Parse methods fail. This occurs due to the fact that Unity strips code from the project and it will most likely do so for some parts of the Parse.dll assembly file. - -To prevent Unity to remove necessary code from the assembly it is necessary to include a link.xml file in your project which tells Unity to not touch anything from the Parse.dll. - -```xml - - - -``` -Save the above xml code to a file called 'link.xml' and place it in the Assets folder of your project. - -#### Unity3D on Android - -When using the Parse SDK on Android target platform you may encounter an issue related to network communication and resolution of host addresses when using the Parse SDK. This occurs in situations where you might use the Parse SDK but did not configure your Android app to require internet access. Whenever a project does not explicitly state it requires internet access Unity will try to remove classes and system assemblies during the build process, causing Parse-calls to fail with different exceptions. -This may not be the case if your project uses any Unity specific web/networking code, as this will be detected by the engine and the code stripping will not be done. - -To set your project, navigate to `Project Settings -> Player -> Other Settings -> Internet Access` and switch it to Require. -Depending on the version of Unity you are using this setting may be found in a slightly different location or with slightly different naming, use the above path as a guidance. - ### Server-Side Use The SDK can be set up in a way such that every new `ParseClient` instance can authenticate a different user concurrently. This is enabled by an `IServiceHubMutator` implementation which adds itself as an `IServiceHubCloner` implementation to the service hub which, making it so that consecutive calls to the cloning `ParseClient` constructor (the one without parameters) will clone the publicized `ParseClient` instance, exposed by `ParseClient.Instance`, replacing the `IParseCurrentUserController` implementation instance with a fresh one with no caching every time. This allows you to configure the original instance, and have the clones retain the general behaviour, while also allowing the differnt users to be signed into the their respective clones and execute requests concurrently, without causing race conditions. To use this feature of the SDK, the first `ParseClient` instance must be constructued and publicized as follows once, before any other `ParseClient` instantiations. Any classes that need to be registered must be done so with the original instance. From 3be18e90e057577ec3a453b6b4718ba79ac366f7 Mon Sep 17 00:00:00 2001 From: Manuel Trezza <5673677+mtrezza@users.noreply.github.com> Date: Thu, 19 Dec 2024 19:07:49 +0100 Subject: [PATCH 03/15] netstandard test --- Parse.Tests/Parse.Tests.csproj | 2 +- Parse/Parse.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Parse.Tests/Parse.Tests.csproj b/Parse.Tests/Parse.Tests.csproj index 3e1da635..d505382c 100644 --- a/Parse.Tests/Parse.Tests.csproj +++ b/Parse.Tests/Parse.Tests.csproj @@ -1,6 +1,6 @@ - net8.0 + netstandard2.0 false latest diff --git a/Parse/Parse.csproj b/Parse/Parse.csproj index 1d8e5474..8217ec87 100644 --- a/Parse/Parse.csproj +++ b/Parse/Parse.csproj @@ -1,7 +1,7 @@ - net8.0 + netstandard2.0 bin\Release\net8.0\Parse.xml 4.0.0 latest From 79c9024f3911ef766e557182aa043b8ed6ce42f0 Mon Sep 17 00:00:00 2001 From: Manuel Trezza <5673677+mtrezza@users.noreply.github.com> Date: Thu, 19 Dec 2024 19:11:33 +0100 Subject: [PATCH 04/15] Revert "netstandard test" This reverts commit 3be18e90e057577ec3a453b6b4718ba79ac366f7. --- Parse.Tests/Parse.Tests.csproj | 2 +- Parse/Parse.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Parse.Tests/Parse.Tests.csproj b/Parse.Tests/Parse.Tests.csproj index d505382c..3e1da635 100644 --- a/Parse.Tests/Parse.Tests.csproj +++ b/Parse.Tests/Parse.Tests.csproj @@ -1,6 +1,6 @@ - netstandard2.0 + net8.0 false latest diff --git a/Parse/Parse.csproj b/Parse/Parse.csproj index 8217ec87..1d8e5474 100644 --- a/Parse/Parse.csproj +++ b/Parse/Parse.csproj @@ -1,7 +1,7 @@ - netstandard2.0 + net8.0 bin\Release\net8.0\Parse.xml 4.0.0 latest From dbe3bc0e1a09e9e408bb1001af44cb4426bab5be Mon Sep 17 00:00:00 2001 From: Manuel Trezza <5673677+mtrezza@users.noreply.github.com> Date: Thu, 19 Dec 2024 19:21:17 +0100 Subject: [PATCH 05/15] add README for nuget add README for nuget --- Parse/Parse.csproj | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Parse/Parse.csproj b/Parse/Parse.csproj index 1d8e5474..36cb4622 100644 --- a/Parse/Parse.csproj +++ b/Parse/Parse.csproj @@ -13,6 +13,7 @@ GitHub The Parse .NET SDK for Parse Platform Copyright © Parse Platform + README.md Parse;parse-platform;parse-server;backend;sdk;app false @@ -49,6 +50,10 @@ + + + + True From 34db67231fcced025a372314a8407e8beef854e2 Mon Sep 17 00:00:00 2001 From: Manuel Trezza <5673677+mtrezza@users.noreply.github.com> Date: Thu, 19 Dec 2024 19:31:21 +0100 Subject: [PATCH 06/15] update logo --- Parse/parse-logo.png | Bin 5982 -> 59196 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Parse/parse-logo.png b/Parse/parse-logo.png index 87526d324c2ef61e58d1262d952cdd8bcc0298ae..4f586f7ce193e8bf8d5ac8c75aa80e1dc992e427 100644 GIT binary patch literal 59196 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 IBir+T0J2mdc>n+a literal 5982 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 S*}nU?xQT(8ez~r5 Date: Fri, 20 Dec 2024 01:24:26 +0100 Subject: [PATCH 07/15] Revert "add README for nuget" This reverts commit dbe3bc0e1a09e9e408bb1001af44cb4426bab5be. --- Parse/Parse.csproj | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Parse/Parse.csproj b/Parse/Parse.csproj index 36cb4622..1d8e5474 100644 --- a/Parse/Parse.csproj +++ b/Parse/Parse.csproj @@ -13,7 +13,6 @@ GitHub The Parse .NET SDK for Parse Platform Copyright © Parse Platform - README.md Parse;parse-platform;parse-server;backend;sdk;app false @@ -50,10 +49,6 @@ - - - - True From a59325f8cd7e4edf25a235da165ea1ecfcfb9609 Mon Sep 17 00:00:00 2001 From: Manuel Trezza <5673677+mtrezza@users.noreply.github.com> Date: Fri, 20 Dec 2024 02:01:26 +0100 Subject: [PATCH 08/15] add readme --- .github/workflows/ci.yml | 2 ++ Parse/Parse.csproj | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 865f7314..db97ef2f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,6 +39,8 @@ jobs: args: 'install opencover.portable codecov -y' - name: Build run: dotnet build Parse.sln --configuration Debug --no-restore + - name: 'Debug: List files' + run: dir /s - name: Run tests with coverage run: | OpenCover.Console.exe -target:dotnet.exe -targetargs:"test --framework net${{ matrix.DOTNET_VERSION }} --configuration Debug --test-adapter-path:. --logger:console /p:DebugType=full .\Parse.Tests\Parse.Tests.csproj" -filter:"+[Parse*]* -[Parse.Tests*]*" -oldstyle -output:parse_sdk_dotnet_coverage.xml -register:user diff --git a/Parse/Parse.csproj b/Parse/Parse.csproj index 1d8e5474..36cb4622 100644 --- a/Parse/Parse.csproj +++ b/Parse/Parse.csproj @@ -13,6 +13,7 @@ GitHub The Parse .NET SDK for Parse Platform Copyright © Parse Platform + README.md Parse;parse-platform;parse-server;backend;sdk;app false @@ -49,6 +50,10 @@ + + + + True From 6b3cf5758a4d042ba7fa331ff42317d2e2c29277 Mon Sep 17 00:00:00 2001 From: Manuel Trezza <5673677+mtrezza@users.noreply.github.com> Date: Fri, 20 Dec 2024 02:10:02 +0100 Subject: [PATCH 09/15] Update ci.yml --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index db97ef2f..db3f85b5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -41,6 +41,7 @@ jobs: run: dotnet build Parse.sln --configuration Debug --no-restore - name: 'Debug: List files' run: dir /s + shell: cmd - name: Run tests with coverage run: | OpenCover.Console.exe -target:dotnet.exe -targetargs:"test --framework net${{ matrix.DOTNET_VERSION }} --configuration Debug --test-adapter-path:. --logger:console /p:DebugType=full .\Parse.Tests\Parse.Tests.csproj" -filter:"+[Parse*]* -[Parse.Tests*]*" -oldstyle -output:parse_sdk_dotnet_coverage.xml -register:user From cfc56a6cb61f5f5440efe21af9bfe2c881c43d1d Mon Sep 17 00:00:00 2001 From: Manuel Trezza <5673677+mtrezza@users.noreply.github.com> Date: Fri, 20 Dec 2024 02:22:33 +0100 Subject: [PATCH 10/15] Update Parse.csproj --- Parse/Parse.csproj | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Parse/Parse.csproj b/Parse/Parse.csproj index 36cb4622..e574bcb4 100644 --- a/Parse/Parse.csproj +++ b/Parse/Parse.csproj @@ -51,7 +51,10 @@ - + + True + \ + From f5f05fd6dcf2cecbe4644b29021105e9fe1389d5 Mon Sep 17 00:00:00 2001 From: Manuel Trezza <5673677+mtrezza@users.noreply.github.com> Date: Fri, 20 Dec 2024 02:35:18 +0100 Subject: [PATCH 11/15] Update ci.yml --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index db3f85b5..2fc840d9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,7 +44,7 @@ jobs: shell: cmd - name: Run tests with coverage run: | - OpenCover.Console.exe -target:dotnet.exe -targetargs:"test --framework net${{ matrix.DOTNET_VERSION }} --configuration Debug --test-adapter-path:. --logger:console /p:DebugType=full .\Parse.Tests\Parse.Tests.csproj" -filter:"+[Parse*]* -[Parse.Tests*]*" -oldstyle -output:parse_sdk_dotnet_coverage.xml -register:user + OpenCover.Console.exe -returntargetcode -target:dotnet.exe -targetargs:"test --framework net${{ matrix.DOTNET_VERSION }} --configuration Debug --test-adapter-path:. --logger:console /p:DebugType=full .\Parse.Tests\Parse.Tests.csproj" -filter:"+[Parse*]* -[Parse.Tests*]*" -oldstyle -output:parse_sdk_dotnet_coverage.xml -register:user - name: Upload code coverage uses: codecov/codecov-action@v4 with: From ecd8ef5df8e019de2ae266c728cc5c26e3d139ac Mon Sep 17 00:00:00 2001 From: Manuel Trezza <5673677+mtrezza@users.noreply.github.com> Date: Fri, 20 Dec 2024 02:38:04 +0100 Subject: [PATCH 12/15] Update ci.yml --- .github/workflows/ci.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2fc840d9..b8e0fe57 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,9 +39,6 @@ jobs: args: 'install opencover.portable codecov -y' - name: Build run: dotnet build Parse.sln --configuration Debug --no-restore - - name: 'Debug: List files' - run: dir /s - shell: cmd - name: Run tests with coverage run: | OpenCover.Console.exe -returntargetcode -target:dotnet.exe -targetargs:"test --framework net${{ matrix.DOTNET_VERSION }} --configuration Debug --test-adapter-path:. --logger:console /p:DebugType=full .\Parse.Tests\Parse.Tests.csproj" -filter:"+[Parse*]* -[Parse.Tests*]*" -oldstyle -output:parse_sdk_dotnet_coverage.xml -register:user From a752a410d338a090a2955ce51a020bb576441773 Mon Sep 17 00:00:00 2001 From: Manuel Trezza <5673677+mtrezza@users.noreply.github.com> Date: Fri, 20 Dec 2024 02:38:26 +0100 Subject: [PATCH 13/15] Update ci.yml --- .github/workflows/ci.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b8e0fe57..f8af79cb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -47,12 +47,6 @@ jobs: with: fail_ci_if_error: true token: ${{ secrets.CODECOV_TOKEN }} - # - name: Upload artifacts - # if: always() - # uses: actions/upload-artifact@v2 - # with: - # name: Parse NuGet Package - # path: '**/*.nupkg' concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true From 02aab6c9129072d97a084f23a276d63f176e13b3 Mon Sep 17 00:00:00 2001 From: Manuel Trezza <5673677+mtrezza@users.noreply.github.com> Date: Fri, 20 Dec 2024 02:38:47 +0100 Subject: [PATCH 14/15] Update ci.yml --- .github/workflows/ci.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f8af79cb..b8e0fe57 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -47,6 +47,12 @@ jobs: with: fail_ci_if_error: true token: ${{ secrets.CODECOV_TOKEN }} + # - name: Upload artifacts + # if: always() + # uses: actions/upload-artifact@v2 + # with: + # name: Parse NuGet Package + # path: '**/*.nupkg' concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true From 7f1e148b207c02f5fe19a2ed33c169f69a342f8e Mon Sep 17 00:00:00 2001 From: Manuel Trezza <5673677+mtrezza@users.noreply.github.com> Date: Fri, 20 Dec 2024 02:47:58 +0100 Subject: [PATCH 15/15] Update Parse.Tests.csproj --- Parse.Tests/Parse.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Parse.Tests/Parse.Tests.csproj b/Parse.Tests/Parse.Tests.csproj index 3e1da635..8998d2cc 100644 --- a/Parse.Tests/Parse.Tests.csproj +++ b/Parse.Tests/Parse.Tests.csproj @@ -1,6 +1,6 @@ - net8.0 + net8.0;net9.0 false latest