From 11295ea24704a049169decf2750809e995438e95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Wed, 6 Aug 2025 21:09:54 +0200 Subject: [PATCH] Added automatic documentation generation on Release --- .gitignore | 3 + .gitlab-ci.yml | 26 +++++ CHANGELOG.md | 8 +- README.md | 7 +- docs/articles/getting-started.md | 1 + docs/articles/introduction.md | 1 + docs/articles/toc.yml | 4 + docs/docfx.json | 63 +++++++++++ docs/images/favicon.ico | Bin 0 -> 165662 bytes docs/images/logo.svg | 168 ++++++++++++++++++++++++++++ docs/index.md | 26 +++++ docs/templates/amwd/public/main.css | 3 + docs/toc.yml | 4 + 13 files changed, 309 insertions(+), 5 deletions(-) create mode 100644 docs/articles/getting-started.md create mode 100644 docs/articles/introduction.md create mode 100644 docs/articles/toc.yml create mode 100644 docs/docfx.json create mode 100644 docs/images/favicon.ico create mode 100644 docs/images/logo.svg create mode 100644 docs/index.md create mode 100644 docs/templates/amwd/public/main.css create mode 100644 docs/toc.yml diff --git a/.gitignore b/.gitignore index 0443cdf..b531afb 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,9 @@ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. +docs/api +docs/_site + # User-specific files *.suo *.user diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9c04672..7f7e84e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -129,3 +129,29 @@ deploy-release: - if: $CI_COMMIT_TAG != null script: - dotnet nuget push -k $NUGET_APIKEY -s https://api.nuget.org/v3/index.json --skip-duplicate artifacts/*.nupkg + + + +publish-docs: + variables: + DOCFX_SOURCE_REPOSITORY_URL: "https://github.com/AM-WD/AMWD.Protocols.Modbus" + stage: deploy + tags: + - docker + - lnx + - server + rules: + - if: $CI_COMMIT_TAG != null + before_script: + - apt-get update + - apt-get -y install zip unzip + - dotnet tool install docfx --tool-path /dotnet-tools + script: + # Build the docs + - dotnet build -c Release --nologo + - /dotnet-tools/docfx metadata docs/docfx.json + - /dotnet-tools/docfx build docs/docfx.json + # Deploy the docs + - cd docs/_site + - zip -r ../docs.zip * + - curl --user "$DOCS_DEPLOY_USER:$DOCS_DEPLOY_PASS" -F docs=modbus -F dump=@../docs.zip "$DOCS_DEPLOY_URL" \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 0581b69..a68b3d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] -_nothing changed yet_ +### Added + +- New automatic documentation generation using docfx. + +### Changed + +- Reorganized folder structure to allow documentation generation. ## [v0.4.2] (2025-02-07) diff --git a/README.md b/README.md index 236f5c8..981bf95 100644 --- a/README.md +++ b/README.md @@ -39,13 +39,12 @@ It uses a specific TCP connection implementation and plugs all things from the C Published under [MIT License] (see [choose a license]) [![Buy me a Coffee](https://shields.io/badge/PayPal-Buy_me_a_Coffee-yellow?style=flat&logo=paypal)](https://link.am-wd.de/donate) -[![built with Codeium](https://codeium.com/badges/main)](https://link.am-wd.de/codeium) [see here]: https://github.com/andreasAMmueller/Modbus -[Common]: AMWD.Protocols.Modbus.Common/README.md -[Serial]: AMWD.Protocols.Modbus.Serial/README.md -[TCP]: AMWD.Protocols.Modbus.Tcp/README.md +[Common]: src/AMWD.Protocols.Modbus.Common/README.md +[Serial]: src/AMWD.Protocols.Modbus.Serial/README.md +[TCP]: src/AMWD.Protocols.Modbus.Tcp/README.md [MIT License]: LICENSE.txt [choose a license]: https://choosealicense.com/licenses/mit/ diff --git a/docs/articles/getting-started.md b/docs/articles/getting-started.md new file mode 100644 index 0000000..8b3a794 --- /dev/null +++ b/docs/articles/getting-started.md @@ -0,0 +1 @@ +# Getting Started \ No newline at end of file diff --git a/docs/articles/introduction.md b/docs/articles/introduction.md new file mode 100644 index 0000000..f6ecaa6 --- /dev/null +++ b/docs/articles/introduction.md @@ -0,0 +1 @@ +# Introduction \ No newline at end of file diff --git a/docs/articles/toc.yml b/docs/articles/toc.yml new file mode 100644 index 0000000..d3663b9 --- /dev/null +++ b/docs/articles/toc.yml @@ -0,0 +1,4 @@ +- name: Introduction + href: introduction.md +- name: Getting Started + href: getting-started.md \ No newline at end of file diff --git a/docs/docfx.json b/docs/docfx.json new file mode 100644 index 0000000..7b0d1d6 --- /dev/null +++ b/docs/docfx.json @@ -0,0 +1,63 @@ +{ + "$schema": "https://raw.githubusercontent.com/dotnet/docfx/main/schemas/docfx.schema.json", + "metadata": [ + { + "src": [ + { + "src": "../", + "files": [ + "src/AMWD.Protocols.Modbus.Common/bin/Release/netstandard2.0/amwd-modbus-common.dll", + "src/AMWD.Protocols.Modbus.Serial/bin/Release/netstandard2.0/amwd-modbus-serial.dll", + "src/AMWD.Protocols.Modbus.Tcp/bin/Release/netstandard2.0/amwd-modbus-tcp.dll" + ] + } + ], + "dest": "api", + "outputFormat": "apiPage" + } + ], + "build": { + "content": [ + { + "files": [ "**/*.{md,yml}" ], + "exclude": [ "_site/**", "obj/**" ] + } + ], + "resource": [ + { + "files": [ "images/**" ], + "exclude": [ "_site/**", "obj/**" ] + } + ], + "output": "_site", + "template": [ "default", "modern", "templates/amwd" ], + "postProcessors": ["ExtractSearchIndex"], + "globalMetadata": { + "_appName": "Protocol for .NET", + "_appTitle": "Modbus Protocol for .NET", + "_appFooter": "© AM.WD — Docs generated using docfx.", + "_appLogoPath": "images/logo.svg", + "_appFaviconPath": "images/favicon.ico", + "_disableBreadcrumb": true, + "_disableContribution": true, + "_enableSearch": true, + "_enableNewTab": true, + "pdf": false + }, + "markdownEngineName": "markdig", + "markdownEngineProperties": { + "alerts": { + "TODO": "alert alert-secondary" + } + }, + "sitemap": { + "baseUrl": "https://docs.am-wd.de/modbus", + "priority": 0.5, + "changefreq": "weekly" + }, + "noLangKeyword": false, + "keepFileLink": false, + "cleanupCacheHistory": false, + "disableGitFeatures": true + } +} \ No newline at end of file diff --git a/docs/images/favicon.ico b/docs/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..0ccb7d779a66dab332f374e2c0d82dd7e89cdfcd GIT binary patch literal 165662 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..c7ee121 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,26 @@ +--- +_layout: landing +--- + +# Modbus Protocol for .NET + +This library implements the basic Modbus protocol specified at [modbus.org](https://modbus.org/tech.php). + +The aim was to include all necessary steps to have a fully working client, which is capable of the common protocol versions. + + +## NuGet packages + +Here is an overview of the latest packages. + +| Package Url | Version | Short description | +|-------------|---------|-------------------| +| [AMWD.Protocols.Modbus.Common] | ![NuGet Version: Common](https://img.shields.io/nuget/v/AMWD.Protocols.Modbus.Common?style=flat-square&logo=nuget) | Common data for Modbus protocol. | +| [AMWD.Protocols.Modbus.Serial] | ![NuGet Version: Serial](https://img.shields.io/nuget/v/AMWD.Protocols.Modbus.Serial?style=flat-square&logo=nuget) | Implementation of the Modbus protocol communicating via serial line using RTU or ASCII encoding. | +| [AMWD.Protocols.Modbus.Tcp] | ![NuGet Version: TCP](https://img.shields.io/nuget/v/AMWD.Protocols.Modbus.Tcp?style=flat-square&logo=nuget) | Implementation of the Modbus protocol communicating via TCP. | + + + +[AMWD.Protocols.Modbus.Common]: https://www.nuget.org/packages/AMWD.Protocols.Modbus.Common +[AMWD.Protocols.Modbus.Serial]: https://www.nuget.org/packages/AMWD.Protocols.Modbus.Serial +[AMWD.Protocols.Modbus.Tcp]: https://www.nuget.org/packages/AMWD.Protocols.Modbus.Tcp diff --git a/docs/templates/amwd/public/main.css b/docs/templates/amwd/public/main.css new file mode 100644 index 0000000..057f8d0 --- /dev/null +++ b/docs/templates/amwd/public/main.css @@ -0,0 +1,3 @@ +#logo { + margin-right: 8px; +} \ No newline at end of file diff --git a/docs/toc.yml b/docs/toc.yml new file mode 100644 index 0000000..b7532c4 --- /dev/null +++ b/docs/toc.yml @@ -0,0 +1,4 @@ +- name: API + href: api/ +- name: Articles + href: articles/