-
Notifications
You must be signed in to change notification settings - Fork 2
Adding a New Deployable Project
When a new .csproj is added to Gondwana.sln and should be included in NuGet deployments, update the following files.
Confirm the project has the required NuGet packaging metadata in its .csproj file.
At minimum, deployable package projects should include:
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<OutputType>Library</OutputType>
<RootNamespace>Your.Project.Name</RootNamespace>
<AssemblyName>Your.Project.Name</AssemblyName>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<!-- URLs / repository -->
<PackageProjectUrl>https://github.com/Isthimius/Gondwana</PackageProjectUrl>
<!-- NuGet packaging -->
<IsPackable>true</IsPackable>
<PackageId>Your.Project.Name</PackageId>
<Title>Your Project Name</Title>
<Description>Short package-specific description for NuGet.</Description>
<PackageTags>gondwana gamedev csharp dotnet 2d 2.5d skia skiasharp relevant-project-tags</PackageTags>
<PackageReadmeFile>README.md</PackageReadmeFile>
<PackageIcon>gondwana-logo.png</PackageIcon>
<PackageReleaseNotes>Full changelog: https://github.com/Isthimius/Gondwana/blob/master/CHANGELOG.md</PackageReleaseNotes>
</PropertyGroup>Confirm the project has a package README.md at the csproj root and is referenced in the package. If the package uses the shared Gondwana icon, include it in the package as well. Combined, your csproj should include something similar to this:
<ItemGroup>
<None Include="README.md" Pack="true" PackagePath="" />
<None Include="CHANGELOG.md" Pack="true" PackagePath="" />
<None Include="..\gondwana-logo.png" Link="gondwana-logo.png">
<PackagePath></PackagePath>
<Pack>true</Pack>
</None>
</ItemGroup>Package description rule
Keep<Description>specific to the package. Do not reuse the core engine description unless the package actually contains the core engine.
Package tags rule
Include general Gondwana tags plus package-specific tags. For example, platform adapters should include their platform name, tooling projects should include tooling/template/CLI tags, and widget/UI packages should include UI/HUD/menu/dialog-related tags.
-
"Publish projects needed for staged binaries" step — add a
mkdir -p publish/<ProjectName>line and a correspondingdotnet publishline. -
"Stage exact downloadable binaries" step — add a
cp publish/<ProjectName>/<ProjectName>.dll artifacts/line, or usecp -r/.exefor apps and tools.
-
"Publish projects" step — same pattern: add
mkdir -p publish/<ProjectName>anddotnet publish. -
"Stage release assets" step — add the matching
cpline intorelease-assets/.
Note for apps/tools
For apps/tools such as WinForms executables, use-r win-x64 --self-contained falseindotnet publishandcp -rwhen staging, so runtime assets are included.
Add a label rule so pull requests touching the new project are automatically labeled.
Example:
gondwana-newproject:
- changed-files:
- any-glob-to-any-file: 'Gondwana.NewProject/**'For projects under Tooling/, use the tooling path:
gondwana-newproject:
- changed-files:
- any-glob-to-any-file: 'Tooling/Gondwana.NewProject/**'If the project has a companion hosting package, include both paths under the same label:
gondwana-newproject:
- changed-files:
- any-glob-to-any-file:
- 'Gondwana.NewProject/**'
- 'Gondwana.NewProject.Hosting/**'Add a changelog category so generated GitHub release notes group pull requests for the new project.
Example:
- title: Gondwana.NewProject
labels:
- gondwana-newproject
- Gondwana.NewProjectPlace the new category near related packages.
For example, a core-adjacent package should go near Gondwana (Core), while a platform adapter should go near the other adapter packages.
Ordering note
Categories are matched in order. If a pull request has bothenhancementandgondwana-newproject, it will appear under whichever matching category comes first. Keep the broad change-type categories first if you want release notes grouped by change type; place project categories first if you want them grouped by package.
Add a new entry:
[pscustomobject]@{
Name = "Your.Project.Name"
IncludePaths = @("Your/Project/Path/**/*")
}Example:
[pscustomobject]@{
Name = "Gondwana.NewProject"
IncludePaths = @("Gondwana.NewProject/**/*")
}Add the repo-root-relative folder path.
Examples:
"Gondwana.NewProject"or:
"Tooling/Gondwana.NewProject"For Gondwana.Widgets, the expected additions would be:
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<OutputType>Library</OutputType>
<RootNamespace>Gondwana.Widgets</RootNamespace>
<AssemblyName>Gondwana.Widgets</AssemblyName>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<!-- URLs / repository -->
<PackageProjectUrl>https://github.com/Isthimius/Gondwana</PackageProjectUrl>
<!-- NuGet packaging -->
<IsPackable>true</IsPackable>
<PackageId>Gondwana.Widgets</PackageId>
<Title>Gondwana Widgets</Title>
<Description>Reusable UI and gameplay widgets for the Gondwana game engine, including menus, dialogs, labels, buttons, overlays, HUD elements, and DirectDrawing-friendly 2D/2.5D game controls.</Description>
<PackageTags>gondwana widgets ui game-ui gamedev csharp dotnet 2d 2.5d directdrawing hud menus dialogs buttons overlays skia skiasharp</PackageTags>
<PackageReadmeFile>README.md</PackageReadmeFile>
<PackageIcon>gondwana-logo.png</PackageIcon>
<PackageReleaseNotes>Full changelog: https://github.com/Isthimius/Gondwana/blob/master/CHANGELOG.md</PackageReleaseNotes>
</PropertyGroup>
<ItemGroup>
<None Include="README.md" Pack="true" PackagePath="" />
<None Include="CHANGELOG.md" Pack="true" PackagePath="" />
<None Include="..\gondwana-logo.png" Link="gondwana-logo.png">
<PackagePath></PackagePath>
<Pack>true</Pack>
</None>
</ItemGroup>In the "Publish projects needed for staged binaries" step, add:
mkdir -p publish/Gondwana.Widgets
dotnet publish Gondwana.Widgets/Gondwana.Widgets.csproj -c Release -o publish/Gondwana.WidgetsIn the "Stage exact downloadable binaries" step, add:
cp publish/Gondwana.Widgets/Gondwana.Widgets.dll artifacts/In the "Publish projects" step, add:
mkdir -p publish/Gondwana.Widgets
dotnet publish Gondwana.Widgets/Gondwana.Widgets.csproj -c Release -o publish/Gondwana.WidgetsIn the "Stage release assets" step, add:
cp publish/Gondwana.Widgets/Gondwana.Widgets.dll release-assets/gondwana-widgets:
- changed-files:
- any-glob-to-any-file: 'Gondwana.Widgets/**' - title: Gondwana.Widgets
labels:
- gondwana-widgets
- Gondwana.Widgets[pscustomobject]@{
Name = "Gondwana.Widgets"
IncludePaths = @("Gondwana.Widgets/**/*")
}"Gondwana.Widgets"