Compare commits

43 Commits

Author SHA1 Message Date
copilot-swe-agent[bot] b988789452 Initial plan 2025-12-23 16:33:19 +00:00
omegaleo 74760e087b Update README.md
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-12-23 16:32:46 +00:00
omegaleo ba25af4f56 Merge branch 'main' into dev 2025-12-23 16:30:53 +00:00
omegaleo 7ba32716f6 Updated README.md 2025-12-23 16:28:22 +00:00
omegaleo a8a7cbb210 Merge remote-tracking branch 'origin/dev' into dev 2025-12-14 17:45:26 +00:00
omegaleo 09149c9e83 fixed documentation 2025-12-14 17:45:21 +00:00
omegaleo d11e496495 Merge branch 'dev' of https://github.com/omegaleo/HelperLib into dev 2025-12-14 17:38:40 +00:00
omegaleo 57b8e7c73e Added logging for cache 2025-12-14 17:38:37 +00:00
omegaleo 2622112562 Fixed documentation 2025-12-14 17:38:07 +00:00
omegaleo fb7830bf75 Added logging 2025-12-14 17:25:38 +00:00
omegaleo 33a47f48c1 Added Serilog 2025-12-14 17:24:00 +00:00
omegaleo 2fbab9a7b7 Fixed DocumentationHelper package dependencies 2025-12-14 16:27:48 +00:00
omegaleo 3a95cf6c29 fix packages 2025-12-14 16:09:11 +00:00
omegaleo a296ff2615 Merge remote-tracking branch 'origin/dev' into dev 2025-12-14 15:36:45 +00:00
omegaleo 9fb87079a3 new documentation changes 2025-12-14 15:36:34 +00:00
omegaleo 5c82fff5ed Merge branch 'dev' of https://github.com/omegaleo/HelperLib into dev 2025-12-10 21:24:26 +00:00
omegaleo fd96271bbe Fixed web project 2025-12-10 21:24:19 +00:00
omegaleo 1694747bf7 Added Contributing and Code of Conduct 2025-12-09 23:51:43 +00:00
omegaleo 12d127ad96 Fixed missing library in Changelog 2025-12-09 23:46:39 +00:00
omegaleo 0ed53c72c7 Merge remote-tracking branch 'origin/dev' into dev 2025-12-09 23:35:58 +00:00
omegaleo d4e41c9747 Updated Website to reflect all libraries 2025-12-09 23:35:27 +00:00
omegaleo 7f774e88c2 Add README for OmegaLeo's Helper Library 2025-12-09 23:06:17 +00:00
omegaleo 0a6b927023 Add workflow for publishing game library NuGet package 2025-12-09 22:48:37 +00:00
omegaleo c8f071c350 Added Nuget package configs 2025-12-09 22:46:06 +00:00
omegaleo cad9d76612 Added Web Project 2025-12-09 22:40:40 +00:00
omegaleo e0e191dc6b Added new Game logic library to assist with game projects 2025-12-09 22:34:26 +00:00
omegaleo 7870cf623e Merge branch 'main' into dev
# Conflicts:
#	.github/workflows/changelog.yml
#	.github/workflows/nuget-publish.yml
#	OmegaLeo.HelperLib.Changelog/OmegaLeo.HelperLib.Changelog.csproj
#	OmegaLeo.HelperLib.ChangelogHandler/OmegaLeo.HelperLib.ChangelogHandler.csproj
#	OmegaLeo.HelperLib.ChangelogHandler/Program.cs
2025-02-18 21:53:57 +00:00
omegaleo ac4862a6b3 Added new Changelog generator 2025-02-18 21:08:16 +00:00
omegaleo 1443ddda68 fixed return type 2025-01-25 23:23:53 +00:00
omegaleo 1e0990fe6a Added a new shuffle method for lists 2025-01-25 22:55:53 +00:00
omegaleo f765becf06 added an instacedobject class 2025-01-17 15:05:52 +00:00
omegaleo 9acc18e1fa Added new method for BenchmarkUtility.cs 2025-01-13 12:16:18 +00:00
omegaleo 7125bbc537 Added IndexOf to NeoDictionary.cs 2025-01-09 23:33:36 +00:00
omegaleo 1f893c30bb Added a Benchmarking Tool to be used mostly in game engines 2025-01-09 14:30:00 +00:00
omegaleo 2ba101f261 Fixed issue with previous new method 2025-01-03 21:53:13 +00:00
omegaleo 45671889c3 Added select for NeoDictionary.cs 2025-01-03 21:44:03 +00:00
omegaleo 28be9bc539 New changes 2024-12-30 21:02:21 +00:00
omegaleo da1028388a Added commit functionality to the git library 2024-11-15 15:50:29 +00:00
omegaleo 7c4909b485 Started working on a Git implementation to integrate into Game Engines in the future 2024-11-15 15:36:23 +00:00
omegaleo 4523bf0d79 Merge branch 'main' into dev 2024-07-27 10:52:16 +01:00
omegaleo 5c9c75e5ea Changes to NeoDictionary 2024-07-27 10:50:18 +01:00
omegaleo e6b57bb346 Updates to NeoDictionary 2024-07-03 21:56:33 +01:00
omegaleo eabfbae92d Fixed dependency 2024-07-03 17:24:23 +01:00
163 changed files with 143 additions and 1162 deletions
-15
View File
@@ -1,15 +0,0 @@
# These are supported funding model platforms
github: omegaleo # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: omegaleo # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
polar: # Replace with a single Polar username
buy_me_a_coffee: # Replace with a single Buy Me a Coffee username
thanks_dev: # Replace with a single thanks.dev username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
-38
View File
@@ -1,38 +0,0 @@
---
name: Bug report
about: Create a report to help us improve
title: "[BUG]"
labels: bug
assignees: omegaleo
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
**Smartphone (please complete the following information):**
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]
**Additional context**
Add any other context about the problem here.
-20
View File
@@ -1,20 +0,0 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: enhancement
assignees: omegaleo
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
Executable → Regular
+12 -32
View File
@@ -6,55 +6,35 @@ on:
description: 'Tag name:' description: 'Tag name:'
type: string type: string
required: true required: true
run-name: "Generating changelog and Creating Tag for Release v${{github.event.inputs.tagName}}" run-name: "Generating changelog for Release v${{github.event.inputs.tagName}}"
jobs: jobs:
generate_changelog: generate_changelog:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@v2
with: with:
ref: ${{ github.ref }} ref: ${{ github.head_ref }}
token: ${{ secrets.TOKEN }} token: ${{ secrets.TOKEN }}
fetch-depth: 0
- name: Setup .NET - name: Setup .NET
uses: actions/setup-dotnet@v4 uses: actions/setup-dotnet@v1
with: with:
dotnet-version: '9.0.x' dotnet-version: '8.0.x'
- name: Update Project Versions
- name: Update OmegaLeo.HelperLib Version
run: sed -i "s/\(<Version>\)[0-9]\+\.[0-9]\+\.[0-9]\+/\1${{github.event.inputs.tagName}}/" "./OmegaLeo.HelperLib/OmegaLeo.HelperLib.csproj" run: sed -i "s/\(<Version>\)[0-9]\+\.[0-9]\+\.[0-9]\+/\1${{github.event.inputs.tagName}}/" "./OmegaLeo.HelperLib/OmegaLeo.HelperLib.csproj"
- name: Update OmegaLeo.HelperLib.Changelog Version - name: Update Project Versions
run: sed -i "s/\(<Version>\)[0-9]\+\.[0-9]\+\.[0-9]\+/\1${{github.event.inputs.tagName}}/" "./OmegaLeo.HelperLib.Changelog/OmegaLeo.HelperLib.Changelog.csproj" run: sed -i "s/\(<Version>\)[0-9]\+\.[0-9]\+\.[0-9]\+/\1${{github.event.inputs.tagName}}/" "./OmegaLeo.HelperLib.Changelog/OmegaLeo.HelperLib.Changelog.csproj"
- name: Update OmegaLeo.HelperLib.Documentation Version - name: Build and Run Changelog Generator
run: sed -i "s/\(<Version>\)[0-9]\+\.[0-9]\+\.[0-9]\+/\1${{github.event.inputs.tagName}}/" "./OmegaLeo.HelperLib.Documentation/OmegaLeo.HelperLib.Documentation.csproj" run: dotnet run --project "./OmegaLeo.HelperLib.ChangelogHandler/OmegaLeo.HelperLib.ChangelogHandler.csproj"
- name: Update OmegaLeo.HelperLib.Game Version
run: sed -i "s/\(<Version>\)[0-9]\+\.[0-9]\+\.[0-9]\+/\1${{github.event.inputs.tagName}}/" "./OmegaLeo.HelperLib.Game/OmegaLeo.HelperLib.Game.csproj"
- name: Update OmegaLeo.HelperLib.Shared Version
run: sed -i "s/\(<Version>\)[0-9]\+\.[0-9]\+\.[0-9]\+/\1${{github.event.inputs.tagName}}/" "./OmegaLeo.HelperLib.Shared/OmegaLeo.HelperLib.Shared.csproj"
- name: Build Solution
run: dotnet build --configuration Release
- name: Run Changelog Generator
run: dotnet run --project "./OmegaLeo.HelperLib.ChangelogHandler/OmegaLeo.HelperLib.ChangelogHandler.csproj" --configuration Release
env: env:
TAG_VERSION: ${{ github.event.inputs.tagName }} UNITYFLOW_SECRET: ${{ secrets.TOKEN }}
- name: Create Tag
- name: Commit and Push Changes
run: | run: |
git config --local user.email "nunodiogo@omegaleo.pt" git config --local user.email "nunodiogo@omegaleo.pt"
git config --local user.name "Nuno Diogo" git config --local user.name "Nuno Diogo"
git add . git add .
git diff --staged --quiet || git commit -m "chore: update changelog and version to v${{github.event.inputs.tagName}}" git commit -m "Automatically generated changelog for v${{github.event.inputs.tagName}}"
git push origin ${{ github.ref }}
- name: Create and Push Tag
run: |
git tag -a "${{ github.event.inputs.tagName }}" -m "Release ${{ github.event.inputs.tagName }}" git tag -a "${{ github.event.inputs.tagName }}" -m "Release ${{ github.event.inputs.tagName }}"
git push origin "${{ github.event.inputs.tagName }}" git push origin "${{ github.event.inputs.tagName }}"
Executable → Regular
View File
-48
View File
@@ -89,51 +89,3 @@ jobs:
asset_path: ./OmegaLeo.HelperLib.Game/bin/Release/OmegaLeo.HelperLib.Game.${{ github.event.release.tag_name }}.nupkg asset_path: ./OmegaLeo.HelperLib.Game/bin/Release/OmegaLeo.HelperLib.Game.${{ github.event.release.tag_name }}.nupkg
asset_name: OmegaLeo.HelperLib.Game.${{ github.event.release.tag_name }}.nupkg asset_name: OmegaLeo.HelperLib.Game.${{ github.event.release.tag_name }}.nupkg
asset_content_type: application/zip asset_content_type: application/zip
publish-doc-lib:
runs-on: ubuntu-latest
needs: [ get-release ]
steps:
- uses: actions/checkout@v2
- name: Setup .Net Core
uses: actions/setup-dotnet@v1
with:
dotnet-version: '8.0.x'
- name: Update Project Version
run: sed -i "s/\(<Version>\([0-9]\+\.\)\{2\}\)\([0-9]\+\)/\1${{ github.event.release.tag_name }}/" "./OmegaLeo.HelperLib.Documentation/OmegaLeo.HelperLib.Documentation.csproj"
- name: Create Nuget Package
run: dotnet pack "./OmegaLeo.HelperLib.Documentation/OmegaLeo.HelperLib.Documentation.csproj" -c Release /p:Version=${{ github.event.release.tag_name }} /p:PackageReleaseNotes="See https://github.com/omegaleo/OmegaLeo.HelperLib/releases/tag/${{ github.event.release.tag_name }}"
- name: Publish Nuget Package
run: dotnet nuget push ./OmegaLeo.HelperLib.Documentation/bin/Release/OmegaLeo.HelperLib.Documentation.${{ github.event.release.tag_name }}.nupkg --api-key ${{ secrets.nuget_api_key }} --source https://api.nuget.org/v3/index.json --skip-duplicate
- name: Upload assets to release
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.TOKEN }}
with:
upload_url: ${{ needs.get-release.outputs.upload_url }}
asset_path: ./OmegaLeo.HelperLib.Documentation/bin/Release/OmegaLeo.HelperLib.Documentation.${{ github.event.release.tag_name }}.nupkg
asset_name: OmegaLeo.HelperLib.Documentation.${{ github.event.release.tag_name }}.nupkg
asset_content_type: application/zip
publish-shared-lib:
runs-on: ubuntu-latest
needs: [ get-release ]
steps:
- uses: actions/checkout@v2
- name: Setup .Net Core
uses: actions/setup-dotnet@v1
with:
dotnet-version: '8.0.x'
- name: Update Project Version
run: sed -i "s/\(<Version>\([0-9]\+\.\)\{2\}\)\([0-9]\+\)/\1${{ github.event.release.tag_name }}/" "./OmegaLeo.HelperLib.Shared/OmegaLeo.HelperLib.Shared.csproj"
- name: Create Nuget Package
run: dotnet pack "./OmegaLeo.HelperLib.Shared/OmegaLeo.HelperLib.Shared.csproj" -c Release /p:Version=${{ github.event.release.tag_name }} /p:PackageReleaseNotes="See https://github.com/omegaleo/OmegaLeo.HelperLib/releases/tag/${{ github.event.release.tag_name }}"
- name: Publish Nuget Package
run: dotnet nuget push ./OmegaLeo.HelperLib.Shared/bin/Release/OmegaLeo.HelperLib.Shared.${{ github.event.release.tag_name }}.nupkg --api-key ${{ secrets.nuget_api_key }} --source https://api.nuget.org/v3/index.json --skip-duplicate
- name: Upload assets to release
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.TOKEN }}
with:
upload_url: ${{ needs.get-release.outputs.upload_url }}
asset_path: ./OmegaLeo.HelperLib.Shared/bin/Release/OmegaLeo.HelperLib.Shared.${{ github.event.release.tag_name }}.nupkg
asset_name: OmegaLeo.HelperLib.Shared.${{ github.event.release.tag_name }}.nupkg
asset_content_type: application/zip
-43
View File
@@ -1,43 +0,0 @@
# Simple workflow for deploying static content to GitHub Pages
name: Deploy static content to Pages
on:
# Runs on pushes targeting the default branch
push:
branches: ["main"]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
group: "pages"
cancel-in-progress: false
jobs:
# Single deploy job since we're just deploying
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Pages
uses: actions/configure-pages@v5
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
# Upload entire repository
path: '.'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
Executable → Regular
View File
Generated Executable → Regular
View File
Generated Executable → Regular
View File
Generated Executable → Regular
View File
View File
View File
View File
View File
View File
View File
Generated Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
@@ -0,0 +1,20 @@
using System;
using NetFlow.DocumentationHelper.Library.Attributes;
namespace OmegaLeo.HelperLib.Changelog.Attributes
{
[Changelog("v1.0.0", "Created ChangelogAttribute to be used to register changes in the code.")]
[Documentation(nameof(ChangelogAttribute), "Attribute to annotate classes, methods, or properties with changelog information.")]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true)]
public class ChangelogAttribute : Attribute
{
public string Version { get; }
public string Description { get; }
public ChangelogAttribute(string version, string description)
{
Version = version;
Description = description;
}
}
}
+3 -9
View File
@@ -1,13 +1,7 @@
# Changelog # Changelog
## Version 1.2.0
**OmegaLeo.HelperLib.Changelog.Helpers** ## Version v1.0.0
- **ChangelogHelper**:
- Created ChangelogHelper to generate markdown from changelog attributes.
## Version 1.0.0 - **Class: ChangelogTool**: Created the class ChangelogTool to extract changelogs via attributes
- **Class: ChangelogAttribute**: Created ChangelogAttribute to be used to register changes in the code.
**OmegaLeo.HelperLib.Changelog.Tools**
- **ChangelogTool**:
- Created the class ChangelogTool to extract changelogs via attributes
@@ -1,114 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using OmegaLeo.HelperLib.Shared.Attributes;
namespace OmegaLeo.HelperLib.Changelog.Helpers
{
[Documentation(nameof(ChangelogHelper),
"Helper class to generate changelog markdown from ChangelogAttributes in the provided Assemblies.")]
[Changelog("1.2.0", "Created ChangelogHelper to generate markdown from changelog attributes.")]
public static class ChangelogHelper
{
[Documentation(nameof(GetChangelogMarkdown),
"Generates a markdown formatted changelog from the changelog attributes in the provided assemblies.")]
public static string GetChangelogMarkdown(IEnumerable<Assembly> assemblies)
{
var changelog = new StringBuilder();
var entriesByVersionDate =
new Dictionary<(string Version, string Date),
Dictionary<string, List<(string ClassName, string Description)>>>();
foreach (var assembly in assemblies)
{
try
{
foreach (var type in assembly.GetTypes())
{
// Get type-level changelog attributes
var typeAttrs = type.GetCustomAttributes<ChangelogAttribute>().ToList();
// Get member-level changelog attributes (methods, properties, fields, etc.)
var memberAttrs = type.GetMembers(BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Static | BindingFlags.Instance)
.SelectMany(m => m.GetCustomAttributes<ChangelogAttribute>()
.Select(attr => (Member: m, Attribute: attr)))
.ToList();
if (typeAttrs.Any() || memberAttrs.Any())
{
var namespaceName = type.Namespace ?? "Global";
var className = type.Name.Split('`')[0];
// Process type-level attributes
foreach (var attr in typeAttrs)
{
AddEntry(entriesByVersionDate, namespaceName, className, attr.Version, attr.Date,
attr.Description);
}
// Process member-level attributes
foreach (var (member, attr) in memberAttrs)
{
var memberName = $"{className}.{member.Name}";
AddEntry(entriesByVersionDate, namespaceName, memberName, attr.Version, attr.Date,
attr.Description);
}
}
}
}
catch (ReflectionTypeLoadException)
{
// Skip assemblies that can't be fully loaded
}
}
foreach (var versionGroup in entriesByVersionDate.OrderByDescending(x => x.Key.Version))
{
changelog.AppendLine($"## Version {versionGroup.Key.Version}");
if (!string.IsNullOrEmpty(versionGroup.Key.Date))
{
changelog.AppendLine($"### {versionGroup.Key.Date}");
}
changelog.AppendLine();
foreach (var namespaceGroup in versionGroup.Value.OrderBy(x => x.Key))
{
changelog.AppendLine($"**{namespaceGroup.Key}**");
foreach (var entry in namespaceGroup.Value.OrderBy(x => x.ClassName))
{
changelog.AppendLine($@"- **{entry.ClassName}**:
- {entry.Description}");
}
changelog.AppendLine();
}
}
return changelog.ToString();
}
private static void AddEntry(
Dictionary<(string Version, string Date), Dictionary<string, List<(string ClassName, string Description)>>>
entriesByVersionDate,
string namespaceName,
string className,
string version,
string date,
string description)
{
var key = (version, date ?? string.Empty);
if (!entriesByVersionDate.ContainsKey(key))
entriesByVersionDate[key] = new Dictionary<string, List<(string, string)>>();
if (!entriesByVersionDate[key].ContainsKey(namespaceName))
entriesByVersionDate[key][namespaceName] = new List<(string, string)>();
entriesByVersionDate[key][namespaceName].Add((className, description));
}
}
}
View File
View File
+9 -15
View File
@@ -4,38 +4,32 @@
<TargetFramework>netstandard2.1</TargetFramework> <TargetFramework>netstandard2.1</TargetFramework>
<ImplicitUsings>disable</ImplicitUsings> <ImplicitUsings>disable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Version>1.2.1</Version>
<Title>Omega Leo's Helper Library - Changelog</Title> <Title>Omega Leo's Helper Library - Changelog</Title>
<Authors>Nuno "Omega Leo" Diogo</Authors> <Authors>Nuno "Omega Leo" Diogo</Authors>
<Description>Package to help with Changelog generation</Description> <Description>Package to help with Changelog generation</Description>
<PackageProjectUrl>https://github.com/omegaleo/HelperLib</PackageProjectUrl> <PackageProjectUrl>https://github.com/omegaleo/HelperLib</PackageProjectUrl>
<PackageReadmeFile>README.md</PackageReadmeFile> <PackageReadmeFile>README.md</PackageReadmeFile>
<RepositoryUrl>https://github.com/omegaleo/HelperLib</RepositoryUrl> <RepositoryUrl>https://github.com/omegaleo/HelperLib</RepositoryUrl>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<PackageLicenseExpression>AGPL-3.0-only</PackageLicenseExpression>
<PackageTags>csharp;dotnet;utility;helper;benchmark</PackageTags>
<RepositoryType>git</RepositoryType>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<None Include="README.md" Pack="true" PackagePath="\"> <None Include="README.md" Pack="true" PackagePath="\" />
<CopyToOutputDirectory>Never</CopyToOutputDirectory> <None Include="CHANGELOG.md" Pack="true" PackagePath="\" />
</None>
<None Include="CHANGELOG.md" Pack="true" PackagePath="\">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</None>
<None Include="LICENSE.md" Pack="true" PackagePath="\" /> <None Include="LICENSE.md" Pack="true" PackagePath="\" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Reference Include="OmegaLeo.HelperLib.Documentation"> <PackageReference Include="NetFlow.DocumentationHelper.Library" Version="1.1.3" />
<HintPath>..\..\..\..\..\..\home\omegaleo\.nuget\packages\OmegaLeo.HelperLib.Documentation\1.1.2\lib\netstandard2.1\OmegaLeo.HelperLib.Documentation.dll</HintPath> </ItemGroup>
<ItemGroup>
<Reference Include="NetFlow.DocumentationHelper.Library">
<HintPath>..\..\..\..\..\..\home\omegaleo\.nuget\packages\netflow.documentationhelper.library\1.1.2\lib\netstandard2.1\NetFlow.DocumentationHelper.Library.dll</HintPath>
</Reference> </Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\OmegaLeo.HelperLib.Documentation\OmegaLeo.HelperLib.Documentation.csproj" /> <PackageReference Include="NetFlow.DocumentationHelper.Library" Version="1.1.2" />
<ProjectReference Include="..\OmegaLeo.HelperLib.Shared\OmegaLeo.HelperLib.Shared.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>
+1 -1
View File
@@ -3,7 +3,7 @@ Package to help with Changelog generation by providing a new Changelog attribute
Example attribute usage: Example attribute usage:
```cs ```cs
[Changelog("1.0.0", "This is a test")] [Changelog("v1.0.0", "This is a test")]
[Changelog("v1.0.1", "This is another test")] [Changelog("v1.0.1", "This is another test")]
public class Test public class Test
{ {
+3 -2
View File
@@ -2,11 +2,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Text; using System.Text;
using OmegaLeo.HelperLib.Shared.Attributes; using NetFlow.DocumentationHelper.Library.Attributes;
using OmegaLeo.HelperLib.Changelog.Attributes;
namespace OmegaLeo.HelperLib.Changelog.Tools namespace OmegaLeo.HelperLib.Changelog.Tools
{ {
[Changelog("1.0.0", "Created the class ChangelogTool to extract changelogs via attributes")] [Changelog("v1.0.0", "Created the class ChangelogTool to extract changelogs via attributes")]
[Documentation("ChangelogTool", "Provides methods to extract changelog information from assembly attributes.")] [Documentation("ChangelogTool", "Provides methods to extract changelog information from assembly attributes.")]
public class ChangelogTool public class ChangelogTool
{ {
+5 -1
View File
@@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>net9.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>disable</ImplicitUsings> <ImplicitUsings>disable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
</PropertyGroup> </PropertyGroup>
@@ -13,4 +13,8 @@
<ProjectReference Include="..\OmegaLeo.HelperLib\OmegaLeo.HelperLib.csproj" /> <ProjectReference Include="..\OmegaLeo.HelperLib\OmegaLeo.HelperLib.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<PackageReference Include="NetFlow.DocumentationHelper.Library" Version="1.1.3" />
</ItemGroup>
</Project> </Project>
+2 -6
View File
@@ -4,8 +4,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Reflection; using System.Reflection;
using OmegaLeo.HelperLib.Changelog.Helpers; using GameDevLibrary.Helpers;
using OmegaLeo.HelperLib.Helpers;
using OmegaLeo.HelperLib.Changelog.Models; using OmegaLeo.HelperLib.Changelog.Models;
using OmegaLeo.HelperLib.Changelog.Tools; using OmegaLeo.HelperLib.Changelog.Tools;
@@ -16,8 +15,6 @@ var changelogs = new Dictionary<string, Assembly>()
{Path.Join(root, "OmegaLeo.HelperLib.Changelog", "CHANGELOG.md"), typeof(Changelog).Assembly}, {Path.Join(root, "OmegaLeo.HelperLib.Changelog", "CHANGELOG.md"), typeof(Changelog).Assembly},
{Path.Join(root, "OmegaLeo.HelperLib", "CHANGELOG.md"), typeof(BenchmarkUtility).Assembly}, {Path.Join(root, "OmegaLeo.HelperLib", "CHANGELOG.md"), typeof(BenchmarkUtility).Assembly},
{Path.Join(root, "OmegaLeo.HelperLib.Game", "CHANGELOG.md"), typeof(OmegaLeo.HelperLib.Game.Models.ConsoleCommand).Assembly}, {Path.Join(root, "OmegaLeo.HelperLib.Game", "CHANGELOG.md"), typeof(OmegaLeo.HelperLib.Game.Models.ConsoleCommand).Assembly},
{Path.Join(root, "OmegaLeo.HelperLib.Documentation", "CHANGELOG.md"), typeof(OmegaLeo.HelperLib.Documentation.Helpers.DocumentationHelperTool).Assembly},
{Path.Join(root, "OmegaLeo.HelperLib.Shared", "CHANGELOG.md"), typeof(OmegaLeo.HelperLib.Shared.Attributes.ChangelogAttribute).Assembly},
}; };
foreach (var changelog in changelogs) foreach (var changelog in changelogs)
@@ -28,8 +25,7 @@ foreach (var changelog in changelogs)
void GenerateChangelog(string path, Assembly libraryAssembly) void GenerateChangelog(string path, Assembly libraryAssembly)
{ {
var changelogMarkdown = $@"# Changelog var changelogMarkdown = ChangelogTool.GetMarkdown(libraryAssembly);
{ChangelogHelper.GetChangelogMarkdown(new []{libraryAssembly})}";
File.WriteAllText(path,changelogMarkdown); File.WriteAllText(path,changelogMarkdown);
} }
+4
View File
@@ -13,4 +13,8 @@
<ProjectReference Include="..\OmegaLeo.HelperLib\OmegaLeo.HelperLib.csproj" /> <ProjectReference Include="..\OmegaLeo.HelperLib\OmegaLeo.HelperLib.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<PackageReference Include="NetFlow.DocumentationHelper.Library" Version="1.1.3" />
</ItemGroup>
</Project> </Project>
+2 -2
View File
@@ -3,8 +3,8 @@
// /media/omegaleo/Development/Library Dev/HelperLib // /media/omegaleo/Development/Library Dev/HelperLib
using System.Reflection; using System.Reflection;
using OmegaLeo.HelperLib.Extensions; using GameDevLibrary.Extensions;
using OmegaLeo.HelperLib.Helpers; using GameDevLibrary.Helpers;
using LibGit2Sharp; using LibGit2Sharp;
using OmegaLeo.HelperLib.Changelog.Tools; using OmegaLeo.HelperLib.Changelog.Tools;
using OmegaLeo.HelperLib.Git; using OmegaLeo.HelperLib.Git;
@@ -0,0 +1,10 @@
using OmegaLeo.HelperLib.Changelog.Attributes;
namespace OmegaLeo.HelperLib.ConsoleApp;
[Changelog("v1.0.0", "Test")]
[Changelog("v1.0.1", "Test 1")]
public class TestClass
{
}
@@ -1,8 +0,0 @@
# Changelog
## Version 1.2.0
### January 26, 2026
**OmegaLeo.HelperLib.Documentation.Helpers**
- **DocumentationHelperTool**:
- Migrated DocumentationHelper library from NetFlow.DocumentationHelper.Library to it's own package in OmegaLeo.HelperLib
@@ -1,193 +0,0 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Xml;
using Microsoft.Extensions.DependencyModel;
using OmegaLeo.HelperLib.Shared.Attributes;
using OmegaLeo.HelperLib.Documentation.Models;
namespace OmegaLeo.HelperLib.Documentation.Helpers
{
[Changelog("1.2.0", "Migrated DocumentationHelper library from NetFlow.DocumentationHelper.Library to it's own package in OmegaLeo.HelperLib", "January 26, 2026")]
public static class DocumentationHelperTool
{
[Documentation("GenerateDocumentation (bool generateForPackageAssembly)",
@"Generates a List of objects of type DocumentationStructure that contain the following fields:
**AssemblyName**: Name of the main Assembly, used to identify the root namespace
**ClassName**: Name of the class, used to identify the upper level object
**Title**: Title what we're generating documentation for
**Description**: Description of what we're generating documentation for, this can contain usage examples and can use the args array to pass names(e.g.: This method uses this methodology)
**Args**: Array of strings that describe the parameters of the method or class
**CodeExample**: A code example of how to use the method or class
*Note: If generateForPackageAssembly is set to true, this will generate documentation for the library as well.*",
new []
{
"generateForPackageAssembly - Generate documentation for the DocumentationHelper library as well?"
},
@"```csharp
DocumentationHelperTool.GenerateDocumentation(true); // Generates documentation for all assemblies including the DocumentationHelper.Library package assembly
DocumentationHelperTool.GenerateDocumentation(false); // Generates documentation for all assemblies excluding the DocumentationHelper.Library package assembly
```")]
public static IEnumerable<DocumentationStructure> GenerateDocumentation(bool generateForPackageAssembly = false)
{
EnsureReferencedAssembliesLoaded();
var assemblies = AppDomain.CurrentDomain.GetAssemblies()
.Where(a => !a.IsDynamic)
.Select(a =>
new DocumentationAssembly()
{
AssemblyName = a.GetName(false)?.Name ?? nameof(a),
Types = GetTypesWithDocumentationAttribute(a)
}).Where(x => x.Types.Any()).ToList();
if (!generateForPackageAssembly)
{
assemblies =
assemblies.Where(x => x.AssemblyName != typeof(DocumentationHelperTool).Assembly.GetName().Name)
.ToList();
}
foreach (var assembly in assemblies)
{
foreach (var type in assembly.Types)
{
var doc = GetDocumentation(type, assembly.AssemblyName);
yield return doc;
}
}
}
static void EnsureReferencedAssembliesLoaded()
{
try
{
var loadedNames = AppDomain.CurrentDomain.GetAssemblies()
.Where(a => a.GetName(false) != null)
.Select(a => a.GetName(false).Name)
.ToHashSet(StringComparer.OrdinalIgnoreCase);
var deps = DependencyContext.Default?.RuntimeLibraries;
if (deps == null) return;
foreach (var lib in deps)
{
if (!loadedNames.Contains(lib.Name))
{
try
{
Assembly.Load(new AssemblyName(lib.Name));
}
catch (Exception ex)
{
Console.Error.WriteLine($"warning OMEGA001: Failed to load assembly '{lib.Name}': {ex.Message}");
}
}
}
}
catch (Exception ex)
{
// best-effort only
Console.Error.WriteLine($"warning OMEGA001: EnsureReferencedAssembliesLoaded failed: {ex.Message}");
}
}
static IEnumerable<Type> GetTypesWithDocumentationAttribute(Assembly assembly)
{
Type[] types;
try
{
types = assembly.GetTypes();
}
catch (ReflectionTypeLoadException ex)
{
types = ex.Types.Where(t => t != null).ToArray();
}
foreach (Type type in types)
{
if (type == null) continue;
var classHasDoc = type.GetCustomAttributes(typeof(DocumentationAttribute), true).Any();
var fieldsHaveDoc = type.GetFields()
.Any(f => f.GetCustomAttributes(typeof(DocumentationAttribute), true).Any());
var typesHaveDoc = type.GetProperties()
.Any(p => p.GetCustomAttributes(typeof(DocumentationAttribute), true).Any());
var methodsHaveDoc = type.GetMethods()
.Any(m => m.GetCustomAttributes(typeof(DocumentationAttribute), true).Any());
if (classHasDoc || fieldsHaveDoc || typesHaveDoc || methodsHaveDoc)
{
yield return type;
}
}
}
[Documentation(nameof(GetDocumentation), "Generates a DocumentationStructure object for the given Type and Assembly Name",
new []
{
"type - The Type to generate documentation for",
"assemblyName - The name of the assembly the Type belongs to"
},
@"```csharp
var doc = GetDocumentation(typeof(MyClass), ""MyAssembly"");
```")]
static DocumentationStructure GetDocumentation(Type type, string assemblyName)
{
var classDocs = type.GetCustomAttributes(typeof(DocumentationAttribute), true)
.Select(x => (DocumentationAttribute)x);
var fieldDocs = type.GetFields().SelectMany(f =>
f.GetCustomAttributes(typeof(DocumentationAttribute), true).Select(x => (DocumentationAttribute)x));
var propertyDocs = type.GetProperties().SelectMany(p =>
p.GetCustomAttributes(typeof(DocumentationAttribute), true).Select(x => (DocumentationAttribute)x));
var methodDocs = type.GetMethods().SelectMany(m =>
m.GetCustomAttributes(typeof(DocumentationAttribute), true).Select(x => (DocumentationAttribute)x));
var docStructure = new DocumentationStructure(assemblyName, type.Name);
foreach (var doc in classDocs)
{
docStructure.AddDescription(new DocumentationDescription(doc.Title, doc.Description, doc.Args, doc.CodeExample));
}
foreach (var doc in fieldDocs)
{
docStructure.AddDescription(new DocumentationDescription(doc.Title, doc.Description, doc.Args, doc.CodeExample));
}
foreach (var doc in propertyDocs)
{
docStructure.AddDescription(new DocumentationDescription(doc.Title, doc.Description, doc.Args, doc.CodeExample));
}
foreach (var doc in methodDocs)
{
docStructure.AddDescription(new DocumentationDescription(doc.Title, doc.Description, doc.Args, doc.CodeExample));
}
return docStructure;
}
static Dictionary<string, string> loadedXmlDocumentation =
new Dictionary<string, string>();
public static void LoadXmlDocumentation(string xmlDocumentation)
{
using (XmlReader xmlReader = XmlReader.Create(new StringReader(xmlDocumentation)))
{
while (xmlReader.Read())
{
if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name == "member")
{
string raw_name = xmlReader["name"];
loadedXmlDocumentation[raw_name] = xmlReader.ReadInnerXml();
}
}
}
}
}
}
@@ -1,11 +0,0 @@
using System;
using System.Collections.Generic;
namespace OmegaLeo.HelperLib.Documentation.Models
{
public class DocumentationAssembly
{
public string AssemblyName;
public IEnumerable<Type> Types;
}
}
@@ -1,49 +0,0 @@
using System;
using System.Collections.Generic;
using OmegaLeo.HelperLib.Shared.Attributes;
namespace OmegaLeo.HelperLib.Documentation.Models
{
public class DocumentationStructure
{
public string AssemblyName;
public string ClassName;
public List<DocumentationDescription> Descriptions;
public DocumentationStructure(string assemblyName, string className)
{
AssemblyName = assemblyName;
ClassName = className;
Descriptions = new List<DocumentationDescription>();
}
public void AddDescription(DocumentationDescription description)
{
Descriptions.Add(description);
}
}
public class DocumentationDescription
{
public string Title;
public string Description;
public string[] Parameters;
public string CodeExample = string.Empty;
[Documentation(nameof(DocumentationDescription), "Description of the current Documented object", new []
{
"title - Name of the object",
"description - Description of what the object does",
"parameters - The parameters for the object (in case of a method with parameters)",
"codeExample - Code example of how to use the object"
})]
public DocumentationDescription(string title, string description, string[] parameters = default, string codeExample = "")
{
Title = title;
Description = description;
Parameters = parameters ?? Array.Empty<string>();
CodeExample = codeExample;
}
}
}
@@ -1,39 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
<Nullable>enable</Nullable>
<RootNamespace>OmegaLeo.HelperLib.Documentation</RootNamespace>
<Version>1.2.1</Version>
<Title>Omega Leo's Helper Library</Title>
<Authors>Nuno "Omega Leo" Diogo</Authors>
<PackageReadmeFile>README.md</PackageReadmeFile>
<PackageProjectUrl>https://github.com/omegaleo/HelperLib</PackageProjectUrl>
<RepositoryUrl>https://github.com/omegaleo/HelperLib</RepositoryUrl>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<PackageLicenseExpression>AGPL-3.0-only</PackageLicenseExpression>
<PackageTags>csharp;dotnet;utility;helper;documentation;</PackageTags>
<RepositoryType>git</RepositoryType>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyModel" Version="10.0.2" />
</ItemGroup>
<ItemGroup>
<Folder Include="Attributes\" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\OmegaLeo.HelperLib.Shared\OmegaLeo.HelperLib.Shared.csproj" />
</ItemGroup>
<ItemGroup>
<None Include="README.md" Pack="true" PackagePath="\" />
<None Include="CHANGELOG.md" Pack="true" PackagePath="\" />
<None Update="README.md">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</None>
<None Update="CHANGELOG.md">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
@@ -1,30 +0,0 @@
# Omega Leo's Helper Library - Documentation
Package to help with generating and managing documentation for your C# projects.
## Features
- Attribute-based documentation: Use custom attributes to annotate your classes, methods, and properties with documentation comments.
- Documentation extraction tool: A tool to extract and format documentation into various formats (Markdown, HTML, etc.).
- Integration with build processes: Easily integrate documentation generation into your CI/CD pipelines.
## Example attribute usage:
```cs
[Documentation("GenerateDocumentation (bool generateForPackageAssembly)",
@"Generates a List of objects of type DocumentationStructure that contain the following fields:
**AssemblyName**: Name of the main Assembly, used to identify the root namespace
**ClassName**: Name of the class, used to identify the upper level object
**Title**: Title what we're generating documentation for
**Description**: Description of what we're generating documentation for, this can contain usage examples and can use the args array to pass names(e.g.: This method uses this methodology)
**Args**: Array of strings that describe the parameters of the method or class
**CodeExample**: A code example of how to use the method or class
*Note: If generateForPackageAssembly is set to true, this will generate documentation for the library as well.*",
new []
{
"generateForPackageAssembly - Generate documentation for the DocumentationHelper library as well?"
},
@"```csharp
DocumentationHelperTool.GenerateDocumentation(true); // Generates documentation for all assemblies including the DocumentationHelper.Library package assembly
DocumentationHelperTool.GenerateDocumentation(false); // Generates documentation for all assemblies excluding the DocumentationHelper.Library package assembly
```")]
public static IEnumerable<DocumentationStructure> GenerateDocumentation(bool generateForPackageAssembly = false)
```
-1
View File
@@ -1 +0,0 @@
# Changelog
+1 -1
View File
@@ -1,5 +1,5 @@
using System.Collections.Generic; using System.Collections.Generic;
using OmegaLeo.HelperLib.Shared.Attributes; using NetFlow.DocumentationHelper.Library.Attributes;
using OmegaLeo.HelperLib.Game.Models; using OmegaLeo.HelperLib.Game.Models;
namespace OmegaLeo.HelperLib.Game.Extensions namespace OmegaLeo.HelperLib.Game.Extensions
+1 -1
View File
@@ -1,4 +1,4 @@
using OmegaLeo.HelperLib.Shared.Attributes; using NetFlow.DocumentationHelper.Library.Attributes;
using OmegaLeo.HelperLib.Game.Models; using OmegaLeo.HelperLib.Game.Models;
namespace OmegaLeo.HelperLib.Game.Handlers namespace OmegaLeo.HelperLib.Game.Handlers
View File
View File
View File
View File
View File
View File
View File
+3 -14
View File
@@ -4,14 +4,11 @@
<TargetFramework>netstandard2.1</TargetFramework> <TargetFramework>netstandard2.1</TargetFramework>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Title>Omega Leo's Helper Library - Game Logic</Title> <Title>Omega Leo's Helper Library - Game Logic</Title>
<Version>1.2.1</Version> <Version>0.0.2</Version>
<Authors>Nuno "Omega Leo" Diogo</Authors> <Authors>Nuno "Omega Leo" Diogo</Authors>
<PackageProjectUrl>https://github.com/omegaleo/HelperLib</PackageProjectUrl> <PackageProjectUrl>https://github.com/omegaleo/HelperLib</PackageProjectUrl>
<PackageLicenseUrl>https://github.com/omegaleo/HelperLib/blob/main/LICENSE</PackageLicenseUrl>
<RepositoryUrl>https://github.com/omegaleo/HelperLib</RepositoryUrl> <RepositoryUrl>https://github.com/omegaleo/HelperLib</RepositoryUrl>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<PackageLicenseExpression>AGPL-3.0-only</PackageLicenseExpression>
<PackageTags>csharp;dotnet;utility;helper;benchmark</PackageTags>
<RepositoryType>git</RepositoryType>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
@@ -19,16 +16,8 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="NetFlow.DocumentationHelper.Library" Version="1.1.3" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Update="README.md">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</None>
<None Update="CHANGELOG.md">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project> </Project>
View File
View File
View File
View File
+1
View File
@@ -0,0 +1 @@
# OmegaLeo's Helper Library - Game Logic
-8
View File
@@ -1,8 +0,0 @@
# OmegaLeo's Helper Library - Game Logic
Lightweight utility library for C# projects and game development helpers.
## Features
- Game development specific helpers and utilities
- Helpers for common game development tasks
- Easy to integrate into existing projects
- Open source under the AGPL v3 License
+1 -1
View File
@@ -1,7 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using OmegaLeo.HelperLib.Shared.Attributes; using NetFlow.DocumentationHelper.Library.Attributes;
using OmegaLeo.HelperLib.Game.Models; using OmegaLeo.HelperLib.Game.Models;
namespace OmegaLeo.HelperLib.Game.Services namespace OmegaLeo.HelperLib.Game.Services
+1 -1
View File
@@ -1,6 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using OmegaLeo.HelperLib.Shared.Attributes; using NetFlow.DocumentationHelper.Library.Attributes;
using OmegaLeo.HelperLib.Game.Handlers; using OmegaLeo.HelperLib.Game.Handlers;
using OmegaLeo.HelperLib.Game.Models; using OmegaLeo.HelperLib.Game.Models;
+1 -1
View File
@@ -1,6 +1,6 @@
using System; using System;
using System.IO; using System.IO;
using OmegaLeo.HelperLib.Shared.Attributes; using NetFlow.DocumentationHelper.Library.Attributes;
using Newtonsoft.Json; using Newtonsoft.Json;
using OmegaLeo.HelperLib.Game.Interfaces; using OmegaLeo.HelperLib.Game.Interfaces;
View File
View File
+1 -1
View File
@@ -1,6 +1,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using OmegaLeo.HelperLib.Shared.Attributes; using NetFlow.DocumentationHelper.Library.Attributes;
using OmegaLeo.HelperLib.Game.Models; using OmegaLeo.HelperLib.Game.Models;
namespace OmegaLeo.HelperLib.Game.Utilities namespace OmegaLeo.HelperLib.Game.Utilities
+1 -1
View File
@@ -2,7 +2,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using OmegaLeo.HelperLib.Extensions; using GameDevLibrary.Extensions;
using LibGit2Sharp; using LibGit2Sharp;
using OmegaLeo.HelperLib.Git.Models; using OmegaLeo.HelperLib.Git.Models;
View File
+2 -1
View File
@@ -3,7 +3,7 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework> <TargetFramework>netstandard2.1</TargetFramework>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<RootNamespace>OmegaLeo.HelperLib.Git</RootNamespace> <RootNamespace>GameDevLibrary.Git</RootNamespace>
<Version>0.0.2</Version> <Version>0.0.2</Version>
<Title>Omega Leo's Helper Library - LibGit2Sharp Implementation</Title> <Title>Omega Leo's Helper Library - LibGit2Sharp Implementation</Title>
<Authors>Nuno "Omega Leo" Diogo</Authors> <Authors>Nuno "Omega Leo" Diogo</Authors>
@@ -13,6 +13,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="LibGit2Sharp" Version="0.30.0"/> <PackageReference Include="LibGit2Sharp" Version="0.30.0"/>
<PackageReference Include="NetFlow.DocumentationHelper.Library" Version="1.1.3" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -1,32 +0,0 @@
using System;
namespace OmegaLeo.HelperLib.Shared.Attributes
{
[Documentation(nameof(ChangelogAttribute), "Attribute to annotate classes, methods, or properties with changelog information.",
new []
{
"Version - Changelog version",
"Description - Description of what was changed",
"Date - Date of the changes (Optional)"
},
@"```cs
[Changelog(""1.0.0"", ""Created ChangelogAttribute to be used to register changes in the code."")]
public class ChangelogAttribute : Attribute" )]
[Changelog("1.0.0", "Created ChangelogAttribute to be used to register changes in the code.")]
[Changelog("1.2.1", "Created documentation for ChangelogAttribute.", "January 28, 2026")]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true)]
public class ChangelogAttribute : Attribute
{
public string Version { get; }
public string Description { get; }
public string Date { get; set; }
public ChangelogAttribute(string version, string description, string date = "")
{
Version = version;
Description = description;
Date = date;
}
}
}
@@ -1,45 +0,0 @@
using System;
namespace OmegaLeo.HelperLib.Shared.Attributes
{
[System.AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
[Changelog("1.2.1", "Created documentation for DocumentationAttribute.", "January 28, 2026")]
[Documentation("DocumentationAttribute",
"Attribute to annotate classes, methods, or properties with documentation information.",
new string[]
{
"title: The title of the documentation.",
"description: A brief description.",
"args: An array of argument descriptions.",
"codeExample: An optional code example."
},
@"```csharp
[Documentation(
""MyMethod"",
""This method does something important."",
new string[] { ""param1: The first parameter."", ""param2: The second parameter."" },
""MyMethod(param1, param2);""
)]
public void MyMethod(string param1, int param2)
{
// Method implementation
}
```
"
)]
public class DocumentationAttribute : Attribute
{
public string Title;
public string Description;
public string[] Args;
public string CodeExample = string.Empty;
public DocumentationAttribute(string title, string description, string[] args = null, string codeExample = "")
{
Title = title;
Description = description;
Args = args ?? Array.Empty<string>();
CodeExample = codeExample;
}
}
}
-16
View File
@@ -1,16 +0,0 @@
# Changelog
## Version 1.2.1
### January 28, 2026
**OmegaLeo.HelperLib.Shared.Attributes**
- **ChangelogAttribute**:
- Created documentation for ChangelogAttribute.
- **DocumentationAttribute**:
- Created documentation for DocumentationAttribute.
## Version 1.0.0
**OmegaLeo.HelperLib.Shared.Attributes**
- **ChangelogAttribute**:
- Created ChangelogAttribute to be used to register changes in the code.
@@ -1,33 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
<Nullable>enable</Nullable>
<RootNamespace>OmegaLeo.HelperLib.Shared</RootNamespace>
<Version>1.2.1</Version>
<Title>Omega Leo's Helper Library - Shared Components</Title>
<Authors>Nuno "Omega Leo" Diogo</Authors>
<PackageReadmeFile>README.md</PackageReadmeFile>
<PackageProjectUrl>https://github.com/omegaleo/HelperLib</PackageProjectUrl>
<RepositoryUrl>https://github.com/omegaleo/HelperLib</RepositoryUrl>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<PackageLicenseExpression>AGPL-3.0-only</PackageLicenseExpression>
<PackageTags>csharp;dotnet;</PackageTags>
<RepositoryType>git</RepositoryType>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<None Include="README.md" Pack="true" PackagePath="\">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</None>
<None Include="CHANGELOG.md" Pack="true" PackagePath="\">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
-4
View File
@@ -1,4 +0,0 @@
# Omega Leo's Helper Library - Shared Components
Lightweight utility library for C# projects.
This library contains shared components and utilities that are used by other packages in the Omega Leo's Helper Library suite.
+16 -30
View File
@@ -3,11 +3,10 @@
using System.Diagnostics; using System.Diagnostics;
using System.Reflection; using System.Reflection;
using System.Runtime.ExceptionServices; using System.Runtime.ExceptionServices;
using OmegaLeo.HelperLib.Helpers; using GameDevLibrary.Helpers;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using OmegaLeo.HelperLib.Changelog.Helpers; using NetFlow.DocumentationHelper.Library.Helpers;
using OmegaLeo.HelperLib.Documentation.Helpers; using NetFlow.DocumentationHelper.Library.Models;
using OmegaLeo.HelperLib.Documentation.Models;
using OmegaLeo.HelperLib.Changelog.Tools; using OmegaLeo.HelperLib.Changelog.Tools;
using OmegaLeo.HelperLib.Web.Models; using OmegaLeo.HelperLib.Web.Models;
@@ -53,22 +52,7 @@ public class HomeController : Controller
"Game Development Library", "Game Development Library",
"Game development utilities for Unity and Godot", "Game development utilities for Unity and Godot",
"OmegaLeo.HelperLib.Game" "OmegaLeo.HelperLib.Game"
), )
["documentation"] = GenerateLibraryDocs(
typeof(OmegaLeo.HelperLib.Documentation.Helpers.DocumentationHelperTool).Assembly,
Path.Combine(root, "changelogs", "OmegaLeo.HelperLib.Documentation.CHANGELOG.md"),
"Documentation Library",
"Tools for generating documentation from code attributes",
"OmegaLeo.HelperLib.Documentation",
true
),
["shared"] = GenerateLibraryDocs(
typeof(OmegaLeo.HelperLib.Shared.Attributes.ChangelogAttribute).Assembly,
Path.Combine(root, "shared", "OmegaLeo.HelperLib.Shared.CHANGELOG.md"),
"Shared Library",
"Library of shared attributes and utilities used across other OmegaLeo.HelperLib packages",
"OmegaLeo.HelperLib.Shared"
),
}; };
_logger.LogInformation("Initialized {Count} libraries", _libraryCache.Count); _logger.LogInformation("Initialized {Count} libraries", _libraryCache.Count);
@@ -115,11 +99,11 @@ public class HomeController : Controller
{ {
var assemblies = AppDomain.CurrentDomain.GetAssemblies(); var assemblies = AppDomain.CurrentDomain.GetAssemblies();
var target = assemblies.FirstOrDefault(a => var target = assemblies.FirstOrDefault(a =>
a.GetName().Name.Equals("OmegaLeo.HelperLib.Documentation", StringComparison.OrdinalIgnoreCase)); a.GetName().Name.Equals("NetFlow.DocumentationHelper.Library", StringComparison.OrdinalIgnoreCase));
if (target == null) if (target == null)
{ {
_logger.LogWarning("OmegaLeo.HelperLib.Documentation not loaded. Loaded assemblies ({Count}):", _logger.LogWarning("NetFlow.DocumentationHelper.Library not loaded. Loaded assemblies ({Count}):",
assemblies.Length); assemblies.Length);
foreach (var a in assemblies.OrderBy(a => a.GetName().Name)) foreach (var a in assemblies.OrderBy(a => a.GetName().Name))
{ {
@@ -136,7 +120,7 @@ public class HomeController : Controller
Type attrType = null; Type attrType = null;
try try
{ {
attrType = target.GetType("OmegaLeo.HelperLib.Documentation.Attributes.DocumentationAttribute", attrType = target.GetType("NetFlow.DocumentationHelper.Library.Attributes.DocumentationAttribute",
false, true); false, true);
} }
catch (Exception ex) catch (Exception ex)
@@ -254,7 +238,7 @@ public class HomeController : Controller
} }
private LibraryDocumentationViewModel GenerateLibraryDocs(Assembly assembly, string changelogPath, private LibraryDocumentationViewModel GenerateLibraryDocs(Assembly assembly, string changelogPath,
string displayName, string description, string nugetPackageId, bool generateForDocumentationAssembly = false) string displayName, string description, string nugetPackageId)
{ {
_logger.LogInformation("=== Starting GenerateLibraryDocs for {Assembly} ===", assembly.GetName().Name); _logger.LogInformation("=== Starting GenerateLibraryDocs for {Assembly} ===", assembly.GetName().Name);
_logger.LogInformation("Assembly location: {Location}", assembly.Location ?? "<in-memory>"); _logger.LogInformation("Assembly location: {Location}", assembly.Location ?? "<in-memory>");
@@ -294,7 +278,7 @@ public class HomeController : Controller
try try
{ {
// Pass the specific assembly to only scan that assembly // Pass the specific assembly to only scan that assembly
var result = DocumentationHelperTool.GenerateDocumentation(generateForDocumentationAssembly); var result = DocumentationHelperTool.GenerateDocumentation();
allDocumentation = result? allDocumentation = result?
.Where(d => d.AssemblyName?.Equals(assembly.GetName().Name ,StringComparison.OrdinalIgnoreCase) == true) .Where(d => d.AssemblyName?.Equals(assembly.GetName().Name ,StringComparison.OrdinalIgnoreCase) == true)
.ToList() ?? Enumerable.Empty<DocumentationStructure>(); .ToList() ?? Enumerable.Empty<DocumentationStructure>();
@@ -323,14 +307,16 @@ public class HomeController : Controller
throw; throw;
} }
/*var changelogMarkdown = string.Empty; Dictionary<string, List<Changelog.Models.Changelog>> changelog =
new Dictionary<string, List<Changelog.Models.Changelog>>();
var changelogMarkdown = string.Empty;
if (System.IO.File.Exists(changelogPath)) if (System.IO.File.Exists(changelogPath))
{ {
try try
{ {
ChangelogTool.ExtractChangelog(assembly); changelog = ChangelogTool.ExtractChangelog(assembly);
changelogMarkdown = ChangelogTool.GetMarkdown(assembly); changelogMarkdown = ChangelogTool.GetMarkdown(assembly);
_logger.LogInformation("Parsed changelog for {Assembly}", assembly.GetName().Name); _logger.LogInformation("Parsed changelog with {Count} versions", changelog.Count);
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -340,14 +326,14 @@ public class HomeController : Controller
else else
{ {
_logger.LogWarning("Changelog file not found at {Path}", changelogPath); _logger.LogWarning("Changelog file not found at {Path}", changelogPath);
}*/ }
var viewModel = new LibraryDocumentationViewModel var viewModel = new LibraryDocumentationViewModel
{ {
LibraryName = displayName, LibraryName = displayName,
Description = description, Description = description,
NuGetPackageId = nugetPackageId, NuGetPackageId = nugetPackageId,
ChangelogMarkdown = ChangelogHelper.GetChangelogMarkdown(new []{assembly}), ChangelogMarkdown = changelogMarkdown,
Documentation = allDocumentation.ToList() Documentation = allDocumentation.ToList()
}; };
View File
+1 -1
View File
@@ -1,5 +1,5 @@
// File: `OmegaLeo.HelperLib.Web/Models/LibraryDocumentationViewModel.cs` // File: `OmegaLeo.HelperLib.Web/Models/LibraryDocumentationViewModel.cs`
using OmegaLeo.HelperLib.Documentation.Models; using NetFlow.DocumentationHelper.Library.Models;
namespace OmegaLeo.HelperLib.Web.Models namespace OmegaLeo.HelperLib.Web.Models
{ {
+1
View File
@@ -16,6 +16,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Markdig" Version="0.40.0" /> <PackageReference Include="Markdig" Version="0.40.0" />
<PackageReference Include="MarkdigExtensions.SyntaxHighlighting" Version="1.0.3" /> <PackageReference Include="MarkdigExtensions.SyntaxHighlighting" Version="1.0.3" />
<PackageReference Include="NetFlow.DocumentationHelper.Library" Version="1.1.3" />
<PackageReference Include="Serilog.AspNetCore" Version="10.0.0" /> <PackageReference Include="Serilog.AspNetCore" Version="10.0.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="6.1.1" /> <PackageReference Include="Serilog.Sinks.Console" Version="6.1.1" />
<PackageReference Include="Serilog.Sinks.File" Version="7.0.0" /> <PackageReference Include="Serilog.Sinks.File" Version="7.0.0" />
View File
View File
View File
+2 -2
View File
@@ -1,6 +1,6 @@
@* File: `OmegaLeo.HelperLib.Web/Views/Home/Library.cshtml` *@ @* File: `OmegaLeo.HelperLib.Web/Views/Home/Library.cshtml` *@
@using ColorCode.Styling @using ColorCode.Styling
@using OmegaLeo.HelperLib.Extensions @using GameDevLibrary.Extensions
@using Markdig @using Markdig
@model OmegaLeo.HelperLib.Web.Models.LibraryDocumentationViewModel @model OmegaLeo.HelperLib.Web.Models.LibraryDocumentationViewModel
@{ @{
@@ -83,7 +83,7 @@
{ {
<tr> <tr>
<td><code>@desc.Title</code></td> <td><code>@desc.Title</code></td>
<td>@Html.Raw(Markdig.Markdown.ToHtml(desc.Description))<br/> <td>@Html.Raw(desc.Description)<br/>
@if (desc.CodeExample.IsNotNullOrEmpty()) @if (desc.CodeExample.IsNotNullOrEmpty())
{ {
<strong>Example:</strong><br/> <strong>Example:</strong><br/>
View File
View File
-6
View File
@@ -33,12 +33,6 @@
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" asp-area="" asp-controller="Home" asp-action="Library" asp-route-id="game">Game Dev</a> <a class="nav-link" asp-area="" asp-controller="Home" asp-action="Library" asp-route-id="game">Game Dev</a>
</li> </li>
<li class="nav-item">
<a class="nav-link" asp-area="" asp-controller="Home" asp-action="Library" asp-route-id="documentation">Documentation</a>
</li>
<li class="nav-item">
<a class="nav-link" asp-area="" asp-controller="Home" asp-action="Library" asp-route-id="shared">Shared Components</a>
</li>
</ul> </ul>
<ul class="navbar-nav ms-auto"> <ul class="navbar-nav ms-auto">
View File
View File
View File
View File
View File
View File
View File
View File

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

View File
View File
View File
View File
View File
View File
View File
View File
View File

Some files were not shown because too many files have changed in this diff Show More