Skip to content

Adding a New Deployable Project

Isthimius edited this page Jun 23, 2026 · 10 revisions

When a new .csproj is added to Gondwana.sln and should be included in NuGet deployments, update the following files.

✅ Required — project file / NuGet package metadata

<ProjectName>/<ProjectName>.csproj

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>
</PropertyGroup>

If the package uses the shared Gondwana icon, include it in the package:

<ItemGroup>
  <None Include="..\gondwana-logo.png" Link="gondwana-logo.png">
    <PackagePath></PackagePath>
    <Pack>true</Pack>
  </None>
</ItemGroup>

Also confirm the project has a package README at:

<ProjectName>/README.md

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.


✅ Required — CI pipeline

.github/workflows/ci-master.yml

  1. "Publish projects needed for staged binaries" step — add a mkdir -p publish/<ProjectName> line and a corresponding dotnet publish line.
  2. "Stage exact downloadable binaries" step — add a cp publish/<ProjectName>/<ProjectName>.dll artifacts/ line, or use cp -r / .exe for apps and tools.

.github/workflows/release.yml

  1. "Publish projects" step — same pattern: add mkdir -p publish/<ProjectName> and dotnet publish.
  2. "Stage release assets" step — add the matching cp line into release-assets/.

Note for apps/tools
For apps/tools such as WinForms executables, use -r win-x64 --self-contained false in dotnet publish and cp -r when staging, so runtime assets are included.


✅ Required — PR labels and generated release notes

.github/labeler.yml

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/**'

.github/release.yml

Add a changelog category so generated GitHub release notes group pull requests for the new project.

Example:

    - title: Gondwana.NewProject
      labels:
        - gondwana-newproject
        - Gondwana.NewProject

Place 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 both enhancement and gondwana-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.


✅ Recommended — changelog grouping

Tooling/scripts/release.ps1$ProjectChangelogGroups list

Add a new entry:

[pscustomobject]@{
    Name         = "Your.Project.Name"
    IncludePaths = @("Your/Project/Path/**/*")
}

Example:

[pscustomobject]@{
    Name         = "Gondwana.NewProject"
    IncludePaths = @("Gondwana.NewProject/**/*")
}

Tooling/scripts/Generate-Project-Changelogs.ps1$DefaultProjects list

Add the repo-root-relative folder path.

Examples:

"Gondwana.NewProject"

or:

"Tooling/Gondwana.NewProject"

ℹ️ Example — Gondwana.Widgets

For Gondwana.Widgets, the expected additions would be:

Gondwana.Widgets/Gondwana.Widgets.csproj

<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>
</PropertyGroup>

<ItemGroup>
  <None Include="..\gondwana-logo.png" Link="gondwana-logo.png">
    <PackagePath></PackagePath>
    <Pack>true</Pack>
  </None>
</ItemGroup>

.github/workflows/ci-master.yml

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.Widgets

In the "Stage exact downloadable binaries" step, add:

cp publish/Gondwana.Widgets/Gondwana.Widgets.dll artifacts/

.github/workflows/release.yml

In the "Publish projects" step, add:

mkdir -p publish/Gondwana.Widgets
dotnet publish Gondwana.Widgets/Gondwana.Widgets.csproj -c Release -o publish/Gondwana.Widgets

In the "Stage release assets" step, add:

cp publish/Gondwana.Widgets/Gondwana.Widgets.dll release-assets/

.github/labeler.yml

gondwana-widgets:
  - changed-files:
    - any-glob-to-any-file: 'Gondwana.Widgets/**'

.github/release.yml

    - title: Gondwana.Widgets
      labels:
        - gondwana-widgets
        - Gondwana.Widgets

Tooling/scripts/release.ps1

[pscustomobject]@{
    Name         = "Gondwana.Widgets"
    IncludePaths = @("Gondwana.Widgets/**/*")
}

Tooling/scripts/Generate-Project-Changelogs.ps1

"Gondwana.Widgets"

Clone this wiki locally