From f5cd559a1c31988ed7cb2a51131694b2fdd3298c Mon Sep 17 00:00:00 2001 From: rory-cd Date: Wed, 17 Dec 2025 20:00:08 +1100 Subject: [PATCH 1/3] Add SplashKit NuGet package guide --- .../04-nuget-package-guide.mdx | 241 ++++++++++++++++++ 1 file changed, 241 insertions(+) create mode 100644 src/content/docs/Products/SplashKit/Documentation/SplashKit Expansion/04-nuget-package-guide.mdx diff --git a/src/content/docs/Products/SplashKit/Documentation/SplashKit Expansion/04-nuget-package-guide.mdx b/src/content/docs/Products/SplashKit/Documentation/SplashKit Expansion/04-nuget-package-guide.mdx new file mode 100644 index 00000000..e9a0a8ea --- /dev/null +++ b/src/content/docs/Products/SplashKit/Documentation/SplashKit Expansion/04-nuget-package-guide.mdx @@ -0,0 +1,241 @@ +--- +title: "NuGet Package Guide" +--- + +import { FileTree, Steps } from "@astrojs/starlight/components"; + +## Introduction + +NuGet is the package manager for .NET. NuGet packages are essentially zip files containing reusable +code, libraries, and metadata. Packages can be distributed privately or publicly via NuGet +repositories. For more information, visit [nuget.org](https://www.nuget.org/). + +The SplashKit NuGet package has two primary purposes: + +- Provides C# bindings for SplashKit, translated from C++ using SplashKit Translator. The bindings + allow users to create SplashKit projects with C#. +- Provides SplashKit native libraries for Windows (x64) and macOS. These libraries allow Windows and + Mac users to create and run SplashKit projects in C# without installing the libraries separately + via SplashKit Manager (SKM). + +## Building the Package + +:::note + +Ensure [.NET SDK](https://dotnet.microsoft.com/en-us/download) is installed. + +::: + + + +1. #### Download the SplashKit native libraries + + Download the latest stable libraries from [SKM](https://github.com/splashkit/skm.git). Libraries + should be placed in `/tools/scripts/nuget-pkg/Libraries/win64` and + `/tools/scripts/nuget-pkg/Libraries/macos` respectively. This step can be automated via the use + of the bash script found at `/tools/scripts/nuget-pkg/download-libraries.sh`. + +2. #### Open the NuGet package directory + + Navigate to `/tools/scripts/nuget-pkg`. This directory contains configuration settings for the + package, along with the associated icon and description. + +3. #### Build the package + + Run one of the below commands, ensuring to replace _YOUR_VERSION_ with the relevant version + number (e.g. 1.3.0): + + **For debug** + + ```shell + dotnet build --configuration Debug -p:version=YOUR_VERSION-debug + ``` + + **For release** + + ```shell + dotnet build --configuration Release -p:version=YOUR_VERSION + ``` + + This will build the package and output to `tools/scripts/nuget-pkg/bin/` as detailed in + [Exploring the Output](#exploring-the-output). + +4. #### Check the output directories + Ensure both `Release` and `Debug` directories exist in `tools/scripts/nuget-pkg/bin/`. If either + is missing, create the empty directory as needed. This is to ensure the test programs run without + errors. + + + +### Exploring the Output + +In the `tools/scripts/nuget-pkg/bin/` directory, there will be a directory corresponding to the +built package - either `Debug` or `Release`. This directory contains the NuGet package itself +(`SplashKit.X.X.X.nupkg`), along with separate directories for each targeted .NET version. These +directories are for referencing/testing, and can be ignored - the package itself does not depend +upon them. + +## Testing + +A suite of test programs is provided in the form of a C# solution, with a separate project/directory +for each test. + + + +- tools + - scripts + - test + - Main/ + - Directory.Build.props + - Directory.Packages.props + - GlobalSettings.cs + - NuGet.config + - NuGetTests.sln + + + +The provided tests are translations of the SplashKit core integration tests. The tests can be run +individually from their respective folders, but are best launched using the test runner located in +the `Main` directory. + +### Running the Provided Tests + + + +1. #### Check local package sources + + `NuGet.config` sets the local NuGet package sources. If one of these directories does not exist, + either create it, or comment out the corresponding entry in `NuGet.config`. + +2. #### Set target package version + + `Directory.Packages.props` specifies the target NuGet package version. Update this file to match + the version being tested. + +3. #### Check target .NET versions + + `Directory.Build.props` specifies .NET versions for multi-targeting. These should match the .NET + versions being targeted by the package build. + + :::caution + + Ensure **every** listed version of .NET is installed. + + ::: + +4. #### Run the test runner + + Open the `Main` directory. Run the following command, replacing _TARGET_FRAMEWORK_ with the + framework to be tested, e.g. For .NET 9, use `dotnet run -f net9.0`. + + ```shell + dotnet run -f + ``` + + :::note + + To aid testing and ensure consistency, the test runner lists the target and runtime .NET + framework, along with the NuGet package version. These should be checked on every run to ensure + alignment with the intended targets: + + ![Run NuGet Tests](images/nuget-testing/1-test-runner.png) + + ::: + +5. #### Select test + + Input a number to build and run the corresponding test. + +6. #### Re-run as necessary + To ensure the package is fully functional, the tests should be re-run to cover each combination + of framework and architecture. Every test should produce the expected output. + + + +### Updating or Adding Tests + +As noted in [Running the Provided Tests](#running-the-provided-tests), the _NuGetTests_ solution +specifies the NuGet version and target frameworks in `Directory.Packages.props` and +`Directory.Build.props` respectively. These should be updated at a solution level, rather than +separate configurations for each test project. This ensures ease of use and reduces room for error. + +### Adding New Tests to the Solution + + + +1. Create a new directory in `/tools/scripts/test`, for example: + + ```shell + mkdir MyTest + ``` + +2. Inside the new directory, create a new project with + + ```shell + dotnet new console + ``` + +3. Edit the project's `.csproj` file to remove any `` tags, since this would + override the solution's multi-targeting. + +4. Write your new test in `Program.cs` + +5. If loading resources (e.g. images, fonts, etc.) use the following line to utilise existing + resources from the main SplashKit test suite. + + ```cs + SetResourcesPath(GlobalSettings.ResourcePath); + ``` + + + +:::note + +The test runner checks the solution directory for any `.csproj` files on input. Therefore, new tests +are detected by the runner automatically, and can even be added without closing the runner. + +::: + +### Updating Existing Tests + +Existing tests can be updated by editing `Program.cs` in the corresponding project's directory. +Since the test runner (`Main`) builds each project before running, there is no need to rebuild the +runner upon updating a test. The runner is designed to be left running during updates, to speed up +development. + +If loading resources (e.g. images, fonts, etc.) use the following line to utilise existing resources +from the main SplashKit test suite: + +```cs +SetResourcesPath(GlobalSettings.ResourcePath); +``` + +### Creating Tests Outside of the Provided Solution + +Normally, an end user would use `dotnet add package splashkit` to reference the SplashKit package. +However, this will default to the latest stable SplashKit version, skipping the locally built one. +Instead, do the following: + + + +1. Create a new project using + + ```shell + dotnet new console + ``` + +2. Create a `NuGet.config` file in the project (or solution) directory, specifying the path to the + target package. An example can be found in `/tools/scripts/test`. + +3. Add the following to the `.csproj`, replacing _TARGET_VERSION_ with the targeted NuGet package + version: + + ```xml + + + + ``` + +4. Add `using static SplashKitSDK.SplashKit;` to `Program.cs` + + From c9e27f8a8fa34b785828a25cf776fbb21ce5f702 Mon Sep 17 00:00:00 2001 From: rory-cd Date: Wed, 17 Dec 2025 21:01:39 +1100 Subject: [PATCH 2/3] Add missing image to SplashKit NuGet guide --- .../images/nuget-testing/1-test-runner.png | Bin 0 -> 13927 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/content/docs/Products/SplashKit/Documentation/SplashKit Expansion/images/nuget-testing/1-test-runner.png diff --git a/src/content/docs/Products/SplashKit/Documentation/SplashKit Expansion/images/nuget-testing/1-test-runner.png b/src/content/docs/Products/SplashKit/Documentation/SplashKit Expansion/images/nuget-testing/1-test-runner.png new file mode 100644 index 0000000000000000000000000000000000000000..6255fceca63c73421e69a6743fbd59003f1aaa0b GIT binary patch literal 13927 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 literal 0 HcmV?d00001 From 7e291283ae7ac93bf98af71bf977501c0382904d Mon Sep 17 00:00:00 2001 From: rory-cd Date: Fri, 2 Jan 2026 13:58:38 +1100 Subject: [PATCH 3/3] Improve explanations and references - Added description - Moved .NET prerequisite message to Introduction - Added link to integration test documentation - Added note explaining absence of Linux native libraries - Added note explaining expected failure for graphics test in MSYS2 environment --- .../04-nuget-package-guide.mdx | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/content/docs/Products/SplashKit/Documentation/SplashKit Expansion/04-nuget-package-guide.mdx b/src/content/docs/Products/SplashKit/Documentation/SplashKit Expansion/04-nuget-package-guide.mdx index e9a0a8ea..cbdf435d 100644 --- a/src/content/docs/Products/SplashKit/Documentation/SplashKit Expansion/04-nuget-package-guide.mdx +++ b/src/content/docs/Products/SplashKit/Documentation/SplashKit Expansion/04-nuget-package-guide.mdx @@ -1,5 +1,6 @@ --- title: "NuGet Package Guide" +description: "Guide to building and testing the SplashKit NuGet package for .NET" --- import { FileTree, Steps } from "@astrojs/starlight/components"; @@ -18,14 +19,14 @@ The SplashKit NuGet package has two primary purposes: Mac users to create and run SplashKit projects in C# without installing the libraries separately via SplashKit Manager (SKM). -## Building the Package - :::note -Ensure [.NET SDK](https://dotnet.microsoft.com/en-us/download) is installed. +**Prerequisite:** Ensure [.NET SDK](https://dotnet.microsoft.com/en-us/download) is installed. ::: +## Building the Package + 1. #### Download the SplashKit native libraries @@ -35,6 +36,13 @@ Ensure [.NET SDK](https://dotnet.microsoft.com/en-us/download) is installed. `/tools/scripts/nuget-pkg/Libraries/macos` respectively. This step can be automated via the use of the bash script found at `/tools/scripts/nuget-pkg/download-libraries.sh`. + :::note + + SKM does not include pre-compiled libraries for Linux. It instead uses a script to install + dependencies and builds based on the detected distro. + + ::: + 2. #### Open the NuGet package directory Navigate to `/tools/scripts/nuget-pkg`. This directory contains configuration settings for the @@ -98,6 +106,13 @@ The provided tests are translations of the SplashKit core integration tests. The individually from their respective folders, but are best launched using the test runner located in the `Main` directory. +:::note + +For more information on SplashKit core integration tests, see +[here](https://thoth-tech.netlify.app/products/splashkit/documentation/splashkit-expansion/#building-the-test-programs). + +::: + ### Running the Provided Tests @@ -146,6 +161,14 @@ the `Main` directory. Input a number to build and run the corresponding test. + :::caution + + **Known issue:** The included graphics test currently produces inconsistent results in a + MSYS2/Windows environment. This behaviour is consistent with SplashKit installed via SKM and is + being investigated. + + ::: + 6. #### Re-run as necessary To ensure the package is fully functional, the tests should be re-run to cover each combination of framework and architecture. Every test should produce the expected output.