diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..495ca8f --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,15 @@ +# 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'] diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..2980e1b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,38 @@ +--- +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. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..7438c0d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +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. diff --git a/.github/workflows/changelog.yml b/.github/workflows/changelog.yml old mode 100644 new mode 100755 index 8249f45..f75cf36 --- a/.github/workflows/changelog.yml +++ b/.github/workflows/changelog.yml @@ -6,35 +6,55 @@ on: description: 'Tag name:' type: string required: true -run-name: "Generating changelog for Release v${{github.event.inputs.tagName}}" +run-name: "Generating changelog and Creating Tag for Release v${{github.event.inputs.tagName}}" jobs: generate_changelog: runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: - ref: ${{ github.head_ref }} + ref: ${{ github.ref }} token: ${{ secrets.TOKEN }} + fetch-depth: 0 + - name: Setup .NET - uses: actions/setup-dotnet@v1 + uses: actions/setup-dotnet@v4 with: - dotnet-version: '8.0.x' - - name: Update Project Versions + dotnet-version: '9.0.x' + + - name: Update OmegaLeo.HelperLib Version run: sed -i "s/\(\)[0-9]\+\.[0-9]\+\.[0-9]\+/\1${{github.event.inputs.tagName}}/" "./OmegaLeo.HelperLib/OmegaLeo.HelperLib.csproj" - - name: Update Project Versions + - name: Update OmegaLeo.HelperLib.Changelog Version run: sed -i "s/\(\)[0-9]\+\.[0-9]\+\.[0-9]\+/\1${{github.event.inputs.tagName}}/" "./OmegaLeo.HelperLib.Changelog/OmegaLeo.HelperLib.Changelog.csproj" - - - name: Build and Run Changelog Generator - run: dotnet run --project "./OmegaLeo.HelperLib.ChangelogHandler/OmegaLeo.HelperLib.ChangelogHandler.csproj" + + - name: Update OmegaLeo.HelperLib.Documentation Version + run: sed -i "s/\(\)[0-9]\+\.[0-9]\+\.[0-9]\+/\1${{github.event.inputs.tagName}}/" "./OmegaLeo.HelperLib.Documentation/OmegaLeo.HelperLib.Documentation.csproj" + + - name: Update OmegaLeo.HelperLib.Game Version + run: sed -i "s/\(\)[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/\(\)[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: - UNITYFLOW_SECRET: ${{ secrets.TOKEN }} - - name: Create Tag + TAG_VERSION: ${{ github.event.inputs.tagName }} + + - name: Commit and Push Changes run: | git config --local user.email "nunodiogo@omegaleo.pt" git config --local user.name "Nuno Diogo" git add . - git commit -m "Automatically generated changelog for v${{github.event.inputs.tagName}}" + git diff --staged --quiet || git commit -m "chore: update changelog and version to 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 push origin "${{ github.event.inputs.tagName }}" \ No newline at end of file + git push origin "${{ github.event.inputs.tagName }}" diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml old mode 100644 new mode 100755 diff --git a/.github/workflows/github-publish.yml b/.github/workflows/github-publish.yml new file mode 100644 index 0000000..78ba36d --- /dev/null +++ b/.github/workflows/github-publish.yml @@ -0,0 +1,77 @@ +name: Publish to GitHub Packages +on: + workflow_dispatch: + inputs: + tag_name: + description: 'Version tag (e.g., 1.0.0)' + required: true + type: string +run-name: "Publish version v${{ inputs.tag_name }} to GitHub Packages" +permissions: + contents: read + packages: write +jobs: + publish-helper-lib: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Setup .Net Core + uses: actions/setup-dotnet@v1 + with: + dotnet-version: '8.0.x' + - name: Create Nuget Package + run: dotnet pack "./OmegaLeo.HelperLib/OmegaLeo.HelperLib.csproj" -c Release /p:Version=${{ inputs.tag_name }} + - name: Publish to GitHub Packages + run: dotnet nuget push ./OmegaLeo.HelperLib/bin/Release/OmegaLeo.HelperLib.${{ inputs.tag_name }}.nupkg --api-key ${{ secrets.GITHUB_TOKEN }} --source https://nuget.pkg.github.com/omegaleo/index.json --skip-duplicate + + publish-changelog-lib: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Setup .Net Core + uses: actions/setup-dotnet@v1 + with: + dotnet-version: '8.0.x' + - name: Create Nuget Package + run: dotnet pack "./OmegaLeo.HelperLib.Changelog/OmegaLeo.HelperLib.Changelog.csproj" -c Release /p:Version=${{ inputs.tag_name }} + - name: Publish to GitHub Packages + run: dotnet nuget push ./OmegaLeo.HelperLib.Changelog/bin/Release/OmegaLeo.HelperLib.Changelog.${{ inputs.tag_name }}.nupkg --api-key ${{ secrets.GITHUB_TOKEN }} --source https://nuget.pkg.github.com/omegaleo/index.json --skip-duplicate + + publish-game-lib: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Setup .Net Core + uses: actions/setup-dotnet@v1 + with: + dotnet-version: '8.0.x' + - name: Create Nuget Package + run: dotnet pack "./OmegaLeo.HelperLib.Game/OmegaLeo.HelperLib.Game.csproj" -c Release /p:Version=${{ inputs.tag_name }} + - name: Publish to GitHub Packages + run: dotnet nuget push ./OmegaLeo.HelperLib.Game/bin/Release/OmegaLeo.HelperLib.Game.${{ inputs.tag_name }}.nupkg --api-key ${{ secrets.GITHUB_TOKEN }} --source https://nuget.pkg.github.com/omegaleo/index.json --skip-duplicate + + publish-doc-lib: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Setup .Net Core + uses: actions/setup-dotnet@v1 + with: + dotnet-version: '8.0.x' + - name: Create Nuget Package + run: dotnet pack "./OmegaLeo.HelperLib.Documentation/OmegaLeo.HelperLib.Documentation.csproj" -c Release /p:Version=${{ inputs.tag_name }} + - name: Publish to GitHub Packages + run: dotnet nuget push ./OmegaLeo.HelperLib.Documentation/bin/Release/OmegaLeo.HelperLib.Documentation.${{ inputs.tag_name }}.nupkg --api-key ${{ secrets.GITHUB_TOKEN }} --source https://nuget.pkg.github.com/omegaleo/index.json --skip-duplicate + + publish-shared-lib: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Setup .Net Core + uses: actions/setup-dotnet@v1 + with: + dotnet-version: '8.0.x' + - name: Create Nuget Package + run: dotnet pack "./OmegaLeo.HelperLib.Shared/OmegaLeo.HelperLib.Shared.csproj" -c Release /p:Version=${{ inputs.tag_name }} + - name: Publish to GitHub Packages + run: dotnet nuget push ./OmegaLeo.HelperLib.Shared/bin/Release/OmegaLeo.HelperLib.Shared.${{ inputs.tag_name }}.nupkg --api-key ${{ secrets.GITHUB_TOKEN }} --source https://nuget.pkg.github.com/omegaleo/index.json --skip-duplicate diff --git a/.github/workflows/nuget-publish.yml b/.github/workflows/nuget-publish.yml old mode 100644 new mode 100755 index 2bee9c8..3c6b637 --- a/.github/workflows/nuget-publish.yml +++ b/.github/workflows/nuget-publish.yml @@ -32,6 +32,8 @@ jobs: run: dotnet pack "./OmegaLeo.HelperLib/OmegaLeo.HelperLib.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/bin/Release/OmegaLeo.HelperLib.${{ github.event.release.tag_name }}.nupkg --api-key ${{ secrets.nuget_api_key }} --source https://api.nuget.org/v3/index.json --skip-duplicate + - name: Publish to GitHub Packages + run: dotnet nuget push ./OmegaLeo.HelperLib/bin/Release/OmegaLeo.HelperLib.${{ github.event.release.tag_name }}.nupkg --api-key ${{ secrets.GITHUB_TOKEN }} --source https://nuget.pkg.github.com/omegaleo/index.json --skip-duplicate - name: Upload assets to release uses: actions/upload-release-asset@v1 env: @@ -56,6 +58,8 @@ jobs: run: dotnet pack "./OmegaLeo.HelperLib.Changelog/OmegaLeo.HelperLib.Changelog.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.Changelog/bin/Release/OmegaLeo.HelperLib.Changelog.${{ github.event.release.tag_name }}.nupkg --api-key ${{ secrets.nuget_api_key }} --source https://api.nuget.org/v3/index.json --skip-duplicate + - name: Publish to GitHub Packages + run: dotnet nuget push ./OmegaLeo.HelperLib.Changelog/bin/Release/OmegaLeo.HelperLib.Changelog.${{ github.event.release.tag_name }}.nupkg --api-key ${{ secrets.GITHUB_TOKEN }} --source https://nuget.pkg.github.com/omegaleo/index.json --skip-duplicate - name: Upload assets to release uses: actions/upload-release-asset@v1 env: @@ -80,6 +84,8 @@ jobs: run: dotnet pack "./OmegaLeo.HelperLib.Game/OmegaLeo.HelperLib.Game.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.Game/bin/Release/OmegaLeo.HelperLib.Game.${{ github.event.release.tag_name }}.nupkg --api-key ${{ secrets.nuget_api_key }} --source https://api.nuget.org/v3/index.json --skip-duplicate + - name: Publish to GitHub Packages + run: dotnet nuget push ./OmegaLeo.HelperLib.Game/bin/Release/OmegaLeo.HelperLib.Game.${{ github.event.release.tag_name }}.nupkg --api-key ${{ secrets.GITHUB_TOKEN }} --source https://nuget.pkg.github.com/omegaleo/index.json --skip-duplicate - name: Upload assets to release uses: actions/upload-release-asset@v1 env: @@ -89,3 +95,55 @@ jobs: 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_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/\(\([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: Publish to GitHub Packages + run: dotnet nuget push ./OmegaLeo.HelperLib.Documentation/bin/Release/OmegaLeo.HelperLib.Documentation.${{ github.event.release.tag_name }}.nupkg --api-key ${{ secrets.GITHUB_TOKEN }} --source https://nuget.pkg.github.com/omegaleo/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/\(\([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: Publish to GitHub Packages + run: dotnet nuget push ./OmegaLeo.HelperLib.Shared/bin/Release/OmegaLeo.HelperLib.Shared.${{ github.event.release.tag_name }}.nupkg --api-key ${{ secrets.GITHUB_TOKEN }} --source https://nuget.pkg.github.com/omegaleo/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 \ No newline at end of file diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/.idea/.idea.GameDevLibrary/.idea/workspace.xml b/.idea/.idea.GameDevLibrary/.idea/workspace.xml old mode 100644 new mode 100755 diff --git a/.idea/.idea.OmegaLeo.HelperLib/.idea/.gitignore b/.idea/.idea.OmegaLeo.HelperLib/.idea/.gitignore old mode 100644 new mode 100755 diff --git a/.idea/.idea.OmegaLeo.HelperLib/.idea/.name b/.idea/.idea.OmegaLeo.HelperLib/.idea/.name old mode 100644 new mode 100755 diff --git a/.idea/.idea.OmegaLeo.HelperLib/.idea/copilot.data.migration.agent.xml b/.idea/.idea.OmegaLeo.HelperLib/.idea/copilot.data.migration.agent.xml old mode 100644 new mode 100755 diff --git a/.idea/.idea.OmegaLeo.HelperLib/.idea/copilot.data.migration.ask.xml b/.idea/.idea.OmegaLeo.HelperLib/.idea/copilot.data.migration.ask.xml old mode 100644 new mode 100755 diff --git a/.idea/.idea.OmegaLeo.HelperLib/.idea/copilot.data.migration.ask2agent.xml b/.idea/.idea.OmegaLeo.HelperLib/.idea/copilot.data.migration.ask2agent.xml old mode 100644 new mode 100755 diff --git a/.idea/.idea.OmegaLeo.HelperLib/.idea/copilot.data.migration.edit.xml b/.idea/.idea.OmegaLeo.HelperLib/.idea/copilot.data.migration.edit.xml old mode 100644 new mode 100755 diff --git a/.idea/.idea.OmegaLeo.HelperLib/.idea/encodings.xml b/.idea/.idea.OmegaLeo.HelperLib/.idea/encodings.xml old mode 100644 new mode 100755 diff --git a/.idea/.idea.OmegaLeo.HelperLib/.idea/indexLayout.xml b/.idea/.idea.OmegaLeo.HelperLib/.idea/indexLayout.xml old mode 100644 new mode 100755 diff --git a/.idea/.idea.OmegaLeo.HelperLib/.idea/vcs.xml b/.idea/.idea.OmegaLeo.HelperLib/.idea/vcs.xml old mode 100644 new mode 100755 diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md old mode 100644 new mode 100755 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md old mode 100644 new mode 100755 diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 diff --git a/OmegaLeo.HelperLib.Changelog/Attributes/ChangelogAttribute.cs b/OmegaLeo.HelperLib.Changelog/Attributes/ChangelogAttribute.cs deleted file mode 100644 index d049169..0000000 --- a/OmegaLeo.HelperLib.Changelog/Attributes/ChangelogAttribute.cs +++ /dev/null @@ -1,20 +0,0 @@ -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; - } - } -} diff --git a/OmegaLeo.HelperLib.Changelog/CHANGELOG.md b/OmegaLeo.HelperLib.Changelog/CHANGELOG.md old mode 100644 new mode 100755 index d853d46..6ebecfc --- a/OmegaLeo.HelperLib.Changelog/CHANGELOG.md +++ b/OmegaLeo.HelperLib.Changelog/CHANGELOG.md @@ -1,7 +1,13 @@ -# Changelog +# Changelog +## Version 1.2.0 -## Version v1.0.0 +**OmegaLeo.HelperLib.Changelog.Helpers** +- **ChangelogHelper**: + - Created ChangelogHelper to generate markdown from changelog attributes. -- **Class: ChangelogTool**: Created the class ChangelogTool to extract changelogs via attributes -- **Class: ChangelogAttribute**: Created ChangelogAttribute to be used to register changes in the code. +## Version 1.0.0 + +**OmegaLeo.HelperLib.Changelog.Tools** +- **ChangelogTool**: + - Created the class ChangelogTool to extract changelogs via attributes diff --git a/OmegaLeo.HelperLib.Changelog/Helpers/ChangelogHelper.cs b/OmegaLeo.HelperLib.Changelog/Helpers/ChangelogHelper.cs new file mode 100644 index 0000000..2deb36a --- /dev/null +++ b/OmegaLeo.HelperLib.Changelog/Helpers/ChangelogHelper.cs @@ -0,0 +1,114 @@ +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 assemblies) + { + var changelog = new StringBuilder(); + var entriesByVersionDate = + new Dictionary<(string Version, string Date), + Dictionary>>(); + + foreach (var assembly in assemblies) + { + try + { + foreach (var type in assembly.GetTypes()) + { + // Get type-level changelog attributes + var typeAttrs = type.GetCustomAttributes().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() + .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>> + 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>(); + + if (!entriesByVersionDate[key].ContainsKey(namespaceName)) + entriesByVersionDate[key][namespaceName] = new List<(string, string)>(); + + entriesByVersionDate[key][namespaceName].Add((className, description)); + } + } +} \ No newline at end of file diff --git a/OmegaLeo.HelperLib.Changelog/LICENSE.md b/OmegaLeo.HelperLib.Changelog/LICENSE.md old mode 100644 new mode 100755 diff --git a/OmegaLeo.HelperLib.Changelog/Models/Changelog.cs b/OmegaLeo.HelperLib.Changelog/Models/Changelog.cs old mode 100644 new mode 100755 diff --git a/OmegaLeo.HelperLib.Changelog/OmegaLeo.HelperLib.Changelog.csproj b/OmegaLeo.HelperLib.Changelog/OmegaLeo.HelperLib.Changelog.csproj old mode 100644 new mode 100755 index fc7dedc..1ae4e34 --- a/OmegaLeo.HelperLib.Changelog/OmegaLeo.HelperLib.Changelog.csproj +++ b/OmegaLeo.HelperLib.Changelog/OmegaLeo.HelperLib.Changelog.csproj @@ -4,6 +4,7 @@ netstandard2.1 disable enable + 1.2.1.1 Omega Leo's Helper Library - Changelog Nuno "Omega Leo" Diogo Package to help with Changelog generation @@ -11,29 +12,30 @@ README.md https://github.com/omegaleo/HelperLib true - AGPL-3.0 + AGPL-3.0-only csharp;dotnet;utility;helper;benchmark git - - + + Never + + + Never + - - - - - - ..\..\..\..\..\..\home\omegaleo\.nuget\packages\netflow.documentationhelper.library\1.1.2\lib\netstandard2.1\NetFlow.DocumentationHelper.Library.dll + + ..\..\..\..\..\..\home\omegaleo\.nuget\packages\OmegaLeo.HelperLib.Documentation\1.1.2\lib\netstandard2.1\OmegaLeo.HelperLib.Documentation.dll - + + diff --git a/OmegaLeo.HelperLib.Changelog/README.md b/OmegaLeo.HelperLib.Changelog/README.md old mode 100644 new mode 100755 index 082b9f4..2799d04 --- a/OmegaLeo.HelperLib.Changelog/README.md +++ b/OmegaLeo.HelperLib.Changelog/README.md @@ -3,7 +3,7 @@ Package to help with Changelog generation by providing a new Changelog attribute Example attribute usage: ```cs -[Changelog("v1.0.0", "This is a test")] +[Changelog("1.0.0", "This is a test")] [Changelog("v1.0.1", "This is another test")] public class Test { diff --git a/OmegaLeo.HelperLib.Changelog/Tools/ChangelogTool.cs b/OmegaLeo.HelperLib.Changelog/Tools/ChangelogTool.cs old mode 100644 new mode 100755 index 5e6a444..e0312d3 --- a/OmegaLeo.HelperLib.Changelog/Tools/ChangelogTool.cs +++ b/OmegaLeo.HelperLib.Changelog/Tools/ChangelogTool.cs @@ -2,12 +2,11 @@ using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; -using NetFlow.DocumentationHelper.Library.Attributes; -using OmegaLeo.HelperLib.Changelog.Attributes; +using OmegaLeo.HelperLib.Shared.Attributes; namespace OmegaLeo.HelperLib.Changelog.Tools { - [Changelog("v1.0.0", "Created the class ChangelogTool to extract changelogs via attributes")] + [Changelog("1.0.0", "Created the class ChangelogTool to extract changelogs via attributes")] [Documentation("ChangelogTool", "Provides methods to extract changelog information from assembly attributes.")] public class ChangelogTool { diff --git a/OmegaLeo.HelperLib.ChangelogHandler/OmegaLeo.HelperLib.ChangelogHandler.csproj b/OmegaLeo.HelperLib.ChangelogHandler/OmegaLeo.HelperLib.ChangelogHandler.csproj old mode 100644 new mode 100755 index 762352a..07046d5 --- a/OmegaLeo.HelperLib.ChangelogHandler/OmegaLeo.HelperLib.ChangelogHandler.csproj +++ b/OmegaLeo.HelperLib.ChangelogHandler/OmegaLeo.HelperLib.ChangelogHandler.csproj @@ -2,7 +2,7 @@ Exe - net8.0 + net9.0 disable enable @@ -13,8 +13,4 @@ - - - - diff --git a/OmegaLeo.HelperLib.ChangelogHandler/Program.cs b/OmegaLeo.HelperLib.ChangelogHandler/Program.cs old mode 100644 new mode 100755 index ec00c21..29ba424 --- a/OmegaLeo.HelperLib.ChangelogHandler/Program.cs +++ b/OmegaLeo.HelperLib.ChangelogHandler/Program.cs @@ -4,7 +4,8 @@ using System; using System.Collections.Generic; using System.IO; using System.Reflection; -using GameDevLibrary.Helpers; +using OmegaLeo.HelperLib.Changelog.Helpers; +using OmegaLeo.HelperLib.Helpers; using OmegaLeo.HelperLib.Changelog.Models; using OmegaLeo.HelperLib.Changelog.Tools; @@ -15,6 +16,8 @@ var changelogs = new Dictionary() {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.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) @@ -25,7 +28,8 @@ foreach (var changelog in changelogs) void GenerateChangelog(string path, Assembly libraryAssembly) { - var changelogMarkdown = ChangelogTool.GetMarkdown(libraryAssembly); + var changelogMarkdown = $@"# Changelog +{ChangelogHelper.GetChangelogMarkdown(new []{libraryAssembly})}"; File.WriteAllText(path,changelogMarkdown); } diff --git a/OmegaLeo.HelperLib.ConsoleApp/OmegaLeo.HelperLib.ConsoleApp.csproj b/OmegaLeo.HelperLib.ConsoleApp/OmegaLeo.HelperLib.ConsoleApp.csproj old mode 100644 new mode 100755 index 9332042..ca1ddff --- a/OmegaLeo.HelperLib.ConsoleApp/OmegaLeo.HelperLib.ConsoleApp.csproj +++ b/OmegaLeo.HelperLib.ConsoleApp/OmegaLeo.HelperLib.ConsoleApp.csproj @@ -13,8 +13,4 @@ - - - - diff --git a/OmegaLeo.HelperLib.ConsoleApp/Program.cs b/OmegaLeo.HelperLib.ConsoleApp/Program.cs old mode 100644 new mode 100755 index d4f2ccc..e56ba62 --- a/OmegaLeo.HelperLib.ConsoleApp/Program.cs +++ b/OmegaLeo.HelperLib.ConsoleApp/Program.cs @@ -3,8 +3,8 @@ // /media/omegaleo/Development/Library Dev/HelperLib using System.Reflection; -using GameDevLibrary.Extensions; -using GameDevLibrary.Helpers; +using OmegaLeo.HelperLib.Extensions; +using OmegaLeo.HelperLib.Helpers; using LibGit2Sharp; using OmegaLeo.HelperLib.Changelog.Tools; using OmegaLeo.HelperLib.Git; diff --git a/OmegaLeo.HelperLib.ConsoleApp/TestClass.cs b/OmegaLeo.HelperLib.ConsoleApp/TestClass.cs deleted file mode 100644 index 65d9104..0000000 --- a/OmegaLeo.HelperLib.ConsoleApp/TestClass.cs +++ /dev/null @@ -1,10 +0,0 @@ -using OmegaLeo.HelperLib.Changelog.Attributes; - -namespace OmegaLeo.HelperLib.ConsoleApp; - -[Changelog("v1.0.0", "Test")] -[Changelog("v1.0.1", "Test 1")] -public class TestClass -{ - -} \ No newline at end of file diff --git a/OmegaLeo.HelperLib.Documentation/CHANGELOG.md b/OmegaLeo.HelperLib.Documentation/CHANGELOG.md new file mode 100644 index 0000000..94ad99e --- /dev/null +++ b/OmegaLeo.HelperLib.Documentation/CHANGELOG.md @@ -0,0 +1,8 @@ +# 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 + diff --git a/OmegaLeo.HelperLib.Documentation/Helpers/DocumentationHelper.cs b/OmegaLeo.HelperLib.Documentation/Helpers/DocumentationHelper.cs new file mode 100755 index 0000000..3a34b13 --- /dev/null +++ b/OmegaLeo.HelperLib.Documentation/Helpers/DocumentationHelper.cs @@ -0,0 +1,193 @@ +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 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 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 loadedXmlDocumentation = + new Dictionary(); + 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(); + } + } + } + } + } +} \ No newline at end of file diff --git a/OmegaLeo.HelperLib.Documentation/Models/DocumentationAssembly.cs b/OmegaLeo.HelperLib.Documentation/Models/DocumentationAssembly.cs new file mode 100755 index 0000000..7d77973 --- /dev/null +++ b/OmegaLeo.HelperLib.Documentation/Models/DocumentationAssembly.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; + +namespace OmegaLeo.HelperLib.Documentation.Models +{ + public class DocumentationAssembly + { + public string AssemblyName; + public IEnumerable Types; + } +} \ No newline at end of file diff --git a/OmegaLeo.HelperLib.Documentation/Models/DocumentationStructure.cs b/OmegaLeo.HelperLib.Documentation/Models/DocumentationStructure.cs new file mode 100755 index 0000000..8bbef75 --- /dev/null +++ b/OmegaLeo.HelperLib.Documentation/Models/DocumentationStructure.cs @@ -0,0 +1,49 @@ +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 Descriptions; + + public DocumentationStructure(string assemblyName, string className) + { + AssemblyName = assemblyName; + ClassName = className; + Descriptions = new List(); + } + + 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(); + CodeExample = codeExample; + } + } +} \ No newline at end of file diff --git a/OmegaLeo.HelperLib.Documentation/OmegaLeo.HelperLib.Documentation.csproj b/OmegaLeo.HelperLib.Documentation/OmegaLeo.HelperLib.Documentation.csproj new file mode 100755 index 0000000..892da6c --- /dev/null +++ b/OmegaLeo.HelperLib.Documentation/OmegaLeo.HelperLib.Documentation.csproj @@ -0,0 +1,39 @@ + + + + netstandard2.1 + enable + OmegaLeo.HelperLib.Documentation + 1.2.1.1 + Omega Leo's Helper Library + Nuno "Omega Leo" Diogo + README.md + https://github.com/omegaleo/HelperLib + https://github.com/omegaleo/HelperLib + true + AGPL-3.0-only + csharp;dotnet;utility;helper;documentation; + git + true + + + + + + + + + + + + + + + Never + + + Never + + + + diff --git a/OmegaLeo.HelperLib.Documentation/README.md b/OmegaLeo.HelperLib.Documentation/README.md new file mode 100644 index 0000000..b44d287 --- /dev/null +++ b/OmegaLeo.HelperLib.Documentation/README.md @@ -0,0 +1,30 @@ +# 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 GenerateDocumentation(bool generateForPackageAssembly = false) +``` \ No newline at end of file diff --git a/OmegaLeo.HelperLib.Game/CHANGELOG.md b/OmegaLeo.HelperLib.Game/CHANGELOG.md new file mode 100644 index 0000000..dd75332 --- /dev/null +++ b/OmegaLeo.HelperLib.Game/CHANGELOG.md @@ -0,0 +1 @@ +# Changelog diff --git a/OmegaLeo.HelperLib.Game/Extensions/ListExtensions.cs b/OmegaLeo.HelperLib.Game/Extensions/ListExtensions.cs old mode 100644 new mode 100755 index 21dc8db..39fd8c6 --- a/OmegaLeo.HelperLib.Game/Extensions/ListExtensions.cs +++ b/OmegaLeo.HelperLib.Game/Extensions/ListExtensions.cs @@ -1,5 +1,5 @@ using System.Collections.Generic; -using NetFlow.DocumentationHelper.Library.Attributes; +using OmegaLeo.HelperLib.Shared.Attributes; using OmegaLeo.HelperLib.Game.Models; namespace OmegaLeo.HelperLib.Game.Extensions diff --git a/OmegaLeo.HelperLib.Game/Handlers/DelayedActionHandler.cs b/OmegaLeo.HelperLib.Game/Handlers/DelayedActionHandler.cs old mode 100644 new mode 100755 index f59fc03..f035cf3 --- a/OmegaLeo.HelperLib.Game/Handlers/DelayedActionHandler.cs +++ b/OmegaLeo.HelperLib.Game/Handlers/DelayedActionHandler.cs @@ -1,4 +1,4 @@ -using NetFlow.DocumentationHelper.Library.Attributes; +using OmegaLeo.HelperLib.Shared.Attributes; using OmegaLeo.HelperLib.Game.Models; namespace OmegaLeo.HelperLib.Game.Handlers diff --git a/OmegaLeo.HelperLib.Game/Interfaces/ISaveFileProvider.cs b/OmegaLeo.HelperLib.Game/Interfaces/ISaveFileProvider.cs old mode 100644 new mode 100755 diff --git a/OmegaLeo.HelperLib.Game/Models/ConsoleCommand.cs b/OmegaLeo.HelperLib.Game/Models/ConsoleCommand.cs old mode 100644 new mode 100755 diff --git a/OmegaLeo.HelperLib.Game/Models/DelayedAction.cs b/OmegaLeo.HelperLib.Game/Models/DelayedAction.cs old mode 100644 new mode 100755 diff --git a/OmegaLeo.HelperLib.Game/Models/Loot.cs b/OmegaLeo.HelperLib.Game/Models/Loot.cs old mode 100644 new mode 100755 diff --git a/OmegaLeo.HelperLib.Game/Models/LootTable.cs b/OmegaLeo.HelperLib.Game/Models/LootTable.cs old mode 100644 new mode 100755 diff --git a/OmegaLeo.HelperLib.Game/Models/RNG.cs b/OmegaLeo.HelperLib.Game/Models/RNG.cs old mode 100644 new mode 100755 diff --git a/OmegaLeo.HelperLib.Game/Models/SaveData.cs b/OmegaLeo.HelperLib.Game/Models/SaveData.cs old mode 100644 new mode 100755 diff --git a/OmegaLeo.HelperLib.Game/OmegaLeo.HelperLib.Game.csproj b/OmegaLeo.HelperLib.Game/OmegaLeo.HelperLib.Game.csproj old mode 100644 new mode 100755 index d43a4b0..b5f7ba9 --- a/OmegaLeo.HelperLib.Game/OmegaLeo.HelperLib.Game.csproj +++ b/OmegaLeo.HelperLib.Game/OmegaLeo.HelperLib.Game.csproj @@ -4,13 +4,12 @@ netstandard2.1 enable Omega Leo's Helper Library - Game Logic - 0.0.2 + 1.2.1.1 Nuno "Omega Leo" Diogo https://github.com/omegaleo/HelperLib - https://github.com/omegaleo/HelperLib/blob/main/LICENSE https://github.com/omegaleo/HelperLib true - AGPL-3.0 + AGPL-3.0-only csharp;dotnet;utility;helper;benchmark git @@ -20,8 +19,16 @@ - + + + Never + + + Never + + + diff --git a/OmegaLeo.HelperLib.Game/Providers/GodotDelayedActionRunner.cs b/OmegaLeo.HelperLib.Game/Providers/GodotDelayedActionRunner.cs old mode 100644 new mode 100755 diff --git a/OmegaLeo.HelperLib.Game/Providers/GodotSaveFileProvider.cs b/OmegaLeo.HelperLib.Game/Providers/GodotSaveFileProvider.cs old mode 100644 new mode 100755 diff --git a/OmegaLeo.HelperLib.Game/Providers/UnityDelayedActionRunner.cs b/OmegaLeo.HelperLib.Game/Providers/UnityDelayedActionRunner.cs old mode 100644 new mode 100755 diff --git a/OmegaLeo.HelperLib.Game/Providers/UnitySaveFileProvider.cs b/OmegaLeo.HelperLib.Game/Providers/UnitySaveFileProvider.cs old mode 100644 new mode 100755 diff --git a/OmegaLeo.HelperLib.Game/README b/OmegaLeo.HelperLib.Game/README deleted file mode 100644 index 9226c29..0000000 --- a/OmegaLeo.HelperLib.Game/README +++ /dev/null @@ -1 +0,0 @@ -# OmegaLeo's Helper Library - Game Logic diff --git a/OmegaLeo.HelperLib.Game/README.md b/OmegaLeo.HelperLib.Game/README.md new file mode 100755 index 0000000..b468c09 --- /dev/null +++ b/OmegaLeo.HelperLib.Game/README.md @@ -0,0 +1,8 @@ +# 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 \ No newline at end of file diff --git a/OmegaLeo.HelperLib.Game/Services/CommandConsole.cs b/OmegaLeo.HelperLib.Game/Services/CommandConsole.cs old mode 100644 new mode 100755 index b3f4ca3..a2ff172 --- a/OmegaLeo.HelperLib.Game/Services/CommandConsole.cs +++ b/OmegaLeo.HelperLib.Game/Services/CommandConsole.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; -using NetFlow.DocumentationHelper.Library.Attributes; +using OmegaLeo.HelperLib.Shared.Attributes; using OmegaLeo.HelperLib.Game.Models; namespace OmegaLeo.HelperLib.Game.Services diff --git a/OmegaLeo.HelperLib.Game/Services/DelayedActionManager.cs b/OmegaLeo.HelperLib.Game/Services/DelayedActionManager.cs old mode 100644 new mode 100755 index dcb1f0d..a638e7c --- a/OmegaLeo.HelperLib.Game/Services/DelayedActionManager.cs +++ b/OmegaLeo.HelperLib.Game/Services/DelayedActionManager.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using NetFlow.DocumentationHelper.Library.Attributes; +using OmegaLeo.HelperLib.Shared.Attributes; using OmegaLeo.HelperLib.Game.Handlers; using OmegaLeo.HelperLib.Game.Models; diff --git a/OmegaLeo.HelperLib.Game/Services/SaveManager.cs b/OmegaLeo.HelperLib.Game/Services/SaveManager.cs old mode 100644 new mode 100755 index 5dc6edf..7dd69d1 --- a/OmegaLeo.HelperLib.Game/Services/SaveManager.cs +++ b/OmegaLeo.HelperLib.Game/Services/SaveManager.cs @@ -1,6 +1,6 @@ using System; using System.IO; -using NetFlow.DocumentationHelper.Library.Attributes; +using OmegaLeo.HelperLib.Shared.Attributes; using Newtonsoft.Json; using OmegaLeo.HelperLib.Game.Interfaces; diff --git a/OmegaLeo.HelperLib.Game/UI/GodotConsoleUI.cs b/OmegaLeo.HelperLib.Game/UI/GodotConsoleUI.cs old mode 100644 new mode 100755 diff --git a/OmegaLeo.HelperLib.Game/UI/UnityConsoleUI.cs b/OmegaLeo.HelperLib.Game/UI/UnityConsoleUI.cs old mode 100644 new mode 100755 diff --git a/OmegaLeo.HelperLib.Game/Utilities/WeightedPicker.cs b/OmegaLeo.HelperLib.Game/Utilities/WeightedPicker.cs old mode 100644 new mode 100755 index 81b75fb..8e1d3ae --- a/OmegaLeo.HelperLib.Game/Utilities/WeightedPicker.cs +++ b/OmegaLeo.HelperLib.Game/Utilities/WeightedPicker.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; using System.Linq; -using NetFlow.DocumentationHelper.Library.Attributes; +using OmegaLeo.HelperLib.Shared.Attributes; using OmegaLeo.HelperLib.Game.Models; namespace OmegaLeo.HelperLib.Game.Utilities diff --git a/OmegaLeo.HelperLib.Git/GitClient.cs b/OmegaLeo.HelperLib.Git/GitClient.cs old mode 100644 new mode 100755 index ac12680..498769e --- a/OmegaLeo.HelperLib.Git/GitClient.cs +++ b/OmegaLeo.HelperLib.Git/GitClient.cs @@ -2,7 +2,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; -using GameDevLibrary.Extensions; +using OmegaLeo.HelperLib.Extensions; using LibGit2Sharp; using OmegaLeo.HelperLib.Git.Models; diff --git a/OmegaLeo.HelperLib.Git/Models/ChangeFolder.cs b/OmegaLeo.HelperLib.Git/Models/ChangeFolder.cs old mode 100644 new mode 100755 diff --git a/OmegaLeo.HelperLib.Git/OmegaLeo.HelperLib.Git.csproj b/OmegaLeo.HelperLib.Git/OmegaLeo.HelperLib.Git.csproj old mode 100644 new mode 100755 index 03d8ca0..944857b --- a/OmegaLeo.HelperLib.Git/OmegaLeo.HelperLib.Git.csproj +++ b/OmegaLeo.HelperLib.Git/OmegaLeo.HelperLib.Git.csproj @@ -3,7 +3,7 @@ netstandard2.1 enable - GameDevLibrary.Git + OmegaLeo.HelperLib.Git 0.0.2 Omega Leo's Helper Library - LibGit2Sharp Implementation Nuno "Omega Leo" Diogo @@ -13,7 +13,6 @@ - diff --git a/OmegaLeo.HelperLib.Shared/Attributes/ChangelogAttribute.cs b/OmegaLeo.HelperLib.Shared/Attributes/ChangelogAttribute.cs new file mode 100755 index 0000000..d8f188a --- /dev/null +++ b/OmegaLeo.HelperLib.Shared/Attributes/ChangelogAttribute.cs @@ -0,0 +1,32 @@ +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; + } + } +} diff --git a/OmegaLeo.HelperLib.Shared/Attributes/DocumentationAttribute.cs b/OmegaLeo.HelperLib.Shared/Attributes/DocumentationAttribute.cs new file mode 100755 index 0000000..6d96f48 --- /dev/null +++ b/OmegaLeo.HelperLib.Shared/Attributes/DocumentationAttribute.cs @@ -0,0 +1,45 @@ +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(); + CodeExample = codeExample; + } + } +} \ No newline at end of file diff --git a/OmegaLeo.HelperLib.Shared/CHANGELOG.md b/OmegaLeo.HelperLib.Shared/CHANGELOG.md new file mode 100644 index 0000000..4b3eb16 --- /dev/null +++ b/OmegaLeo.HelperLib.Shared/CHANGELOG.md @@ -0,0 +1,16 @@ +# 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. + diff --git a/OmegaLeo.HelperLib.Shared/OmegaLeo.HelperLib.Shared.csproj b/OmegaLeo.HelperLib.Shared/OmegaLeo.HelperLib.Shared.csproj new file mode 100644 index 0000000..d452b2d --- /dev/null +++ b/OmegaLeo.HelperLib.Shared/OmegaLeo.HelperLib.Shared.csproj @@ -0,0 +1,33 @@ + + + + netstandard2.1 + enable + OmegaLeo.HelperLib.Shared + 1.2.1.1 + Omega Leo's Helper Library - Shared Components + Nuno "Omega Leo" Diogo + README.md + https://github.com/omegaleo/HelperLib + https://github.com/omegaleo/HelperLib + true + AGPL-3.0-only + csharp;dotnet; + git + true + + + + netstandard2.1 + enable + + + + + Never + + + Never + + + diff --git a/OmegaLeo.HelperLib.Shared/README.md b/OmegaLeo.HelperLib.Shared/README.md new file mode 100644 index 0000000..13e945e --- /dev/null +++ b/OmegaLeo.HelperLib.Shared/README.md @@ -0,0 +1,4 @@ +# 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. \ No newline at end of file diff --git a/OmegaLeo.HelperLib.Web/Controllers/HomeController.cs b/OmegaLeo.HelperLib.Web/Controllers/HomeController.cs old mode 100644 new mode 100755 index 225847a..12def41 --- a/OmegaLeo.HelperLib.Web/Controllers/HomeController.cs +++ b/OmegaLeo.HelperLib.Web/Controllers/HomeController.cs @@ -3,10 +3,11 @@ using System.Diagnostics; using System.Reflection; using System.Runtime.ExceptionServices; -using GameDevLibrary.Helpers; +using OmegaLeo.HelperLib.Helpers; using Microsoft.AspNetCore.Mvc; -using NetFlow.DocumentationHelper.Library.Helpers; -using NetFlow.DocumentationHelper.Library.Models; +using OmegaLeo.HelperLib.Changelog.Helpers; +using OmegaLeo.HelperLib.Documentation.Helpers; +using OmegaLeo.HelperLib.Documentation.Models; using OmegaLeo.HelperLib.Changelog.Tools; using OmegaLeo.HelperLib.Web.Models; @@ -52,7 +53,22 @@ public class HomeController : Controller "Game Development Library", "Game development utilities for Unity and Godot", "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); @@ -99,11 +115,11 @@ public class HomeController : Controller { var assemblies = AppDomain.CurrentDomain.GetAssemblies(); var target = assemblies.FirstOrDefault(a => - a.GetName().Name.Equals("NetFlow.DocumentationHelper.Library", StringComparison.OrdinalIgnoreCase)); + a.GetName().Name.Equals("OmegaLeo.HelperLib.Documentation", StringComparison.OrdinalIgnoreCase)); if (target == null) { - _logger.LogWarning("NetFlow.DocumentationHelper.Library not loaded. Loaded assemblies ({Count}):", + _logger.LogWarning("OmegaLeo.HelperLib.Documentation not loaded. Loaded assemblies ({Count}):", assemblies.Length); foreach (var a in assemblies.OrderBy(a => a.GetName().Name)) { @@ -120,7 +136,7 @@ public class HomeController : Controller Type attrType = null; try { - attrType = target.GetType("NetFlow.DocumentationHelper.Library.Attributes.DocumentationAttribute", + attrType = target.GetType("OmegaLeo.HelperLib.Documentation.Attributes.DocumentationAttribute", false, true); } catch (Exception ex) @@ -238,7 +254,7 @@ public class HomeController : Controller } private LibraryDocumentationViewModel GenerateLibraryDocs(Assembly assembly, string changelogPath, - string displayName, string description, string nugetPackageId) + string displayName, string description, string nugetPackageId, bool generateForDocumentationAssembly = false) { _logger.LogInformation("=== Starting GenerateLibraryDocs for {Assembly} ===", assembly.GetName().Name); _logger.LogInformation("Assembly location: {Location}", assembly.Location ?? ""); @@ -278,7 +294,7 @@ public class HomeController : Controller try { // Pass the specific assembly to only scan that assembly - var result = DocumentationHelperTool.GenerateDocumentation(); + var result = DocumentationHelperTool.GenerateDocumentation(generateForDocumentationAssembly); allDocumentation = result? .Where(d => d.AssemblyName?.Equals(assembly.GetName().Name ,StringComparison.OrdinalIgnoreCase) == true) .ToList() ?? Enumerable.Empty(); @@ -307,7 +323,7 @@ public class HomeController : Controller throw; } - var changelogMarkdown = string.Empty; + /*var changelogMarkdown = string.Empty; if (System.IO.File.Exists(changelogPath)) { try @@ -324,14 +340,14 @@ public class HomeController : Controller else { _logger.LogWarning("Changelog file not found at {Path}", changelogPath); - } + }*/ var viewModel = new LibraryDocumentationViewModel { LibraryName = displayName, Description = description, NuGetPackageId = nugetPackageId, - ChangelogMarkdown = changelogMarkdown, + ChangelogMarkdown = ChangelogHelper.GetChangelogMarkdown(new []{assembly}), Documentation = allDocumentation.ToList() }; diff --git a/OmegaLeo.HelperLib.Web/Models/ErrorViewModel.cs b/OmegaLeo.HelperLib.Web/Models/ErrorViewModel.cs old mode 100644 new mode 100755 diff --git a/OmegaLeo.HelperLib.Web/Models/LibraryDocumentationViewModel.cs b/OmegaLeo.HelperLib.Web/Models/LibraryDocumentationViewModel.cs old mode 100644 new mode 100755 index 5e890e2..b45c6f3 --- a/OmegaLeo.HelperLib.Web/Models/LibraryDocumentationViewModel.cs +++ b/OmegaLeo.HelperLib.Web/Models/LibraryDocumentationViewModel.cs @@ -1,5 +1,5 @@ // File: `OmegaLeo.HelperLib.Web/Models/LibraryDocumentationViewModel.cs` -using NetFlow.DocumentationHelper.Library.Models; +using OmegaLeo.HelperLib.Documentation.Models; namespace OmegaLeo.HelperLib.Web.Models { diff --git a/OmegaLeo.HelperLib.Web/OmegaLeo.HelperLib.Web.csproj b/OmegaLeo.HelperLib.Web/OmegaLeo.HelperLib.Web.csproj old mode 100644 new mode 100755 index 96a5f1f..1928e83 --- a/OmegaLeo.HelperLib.Web/OmegaLeo.HelperLib.Web.csproj +++ b/OmegaLeo.HelperLib.Web/OmegaLeo.HelperLib.Web.csproj @@ -16,7 +16,6 @@ - diff --git a/OmegaLeo.HelperLib.Web/Program.cs b/OmegaLeo.HelperLib.Web/Program.cs old mode 100644 new mode 100755 diff --git a/OmegaLeo.HelperLib.Web/Properties/launchSettings.json b/OmegaLeo.HelperLib.Web/Properties/launchSettings.json old mode 100644 new mode 100755 diff --git a/OmegaLeo.HelperLib.Web/Views/Home/Index.cshtml b/OmegaLeo.HelperLib.Web/Views/Home/Index.cshtml old mode 100644 new mode 100755 diff --git a/OmegaLeo.HelperLib.Web/Views/Home/Library.cshtml b/OmegaLeo.HelperLib.Web/Views/Home/Library.cshtml old mode 100644 new mode 100755 index 8e5d3b8..d896565 --- a/OmegaLeo.HelperLib.Web/Views/Home/Library.cshtml +++ b/OmegaLeo.HelperLib.Web/Views/Home/Library.cshtml @@ -1,6 +1,6 @@ @* File: `OmegaLeo.HelperLib.Web/Views/Home/Library.cshtml` *@ @using ColorCode.Styling -@using GameDevLibrary.Extensions +@using OmegaLeo.HelperLib.Extensions @using Markdig @model OmegaLeo.HelperLib.Web.Models.LibraryDocumentationViewModel @{ @@ -83,7 +83,7 @@ { @desc.Title - @Html.Raw(desc.Description)
+ @Html.Raw(Markdig.Markdown.ToHtml(desc.Description))
@if (desc.CodeExample.IsNotNullOrEmpty()) { Example:
diff --git a/OmegaLeo.HelperLib.Web/Views/Home/Privacy.cshtml b/OmegaLeo.HelperLib.Web/Views/Home/Privacy.cshtml old mode 100644 new mode 100755 diff --git a/OmegaLeo.HelperLib.Web/Views/Shared/Error.cshtml b/OmegaLeo.HelperLib.Web/Views/Shared/Error.cshtml old mode 100644 new mode 100755 diff --git a/OmegaLeo.HelperLib.Web/Views/Shared/_Layout.cshtml b/OmegaLeo.HelperLib.Web/Views/Shared/_Layout.cshtml old mode 100644 new mode 100755 index 3e42232..5cce3cb --- a/OmegaLeo.HelperLib.Web/Views/Shared/_Layout.cshtml +++ b/OmegaLeo.HelperLib.Web/Views/Shared/_Layout.cshtml @@ -33,6 +33,12 @@ + +