From f4e779b97f7967941000057ea03c7ff394130b51 Mon Sep 17 00:00:00 2001 From: Teesofttech Date: Sat, 13 Jun 2026 20:08:08 +0100 Subject: [PATCH] Prepare NuGet package metadata --- .github/workflows/ci.yml | 4 ++- .github/workflows/release.yml | 61 +++++++++++++++++++++++++++++++++++ Directory.Build.props | 7 ++++ LICENSE | 21 ++++++++++++ README.md | 12 +++++++ docs/API_COVERAGE.md | 10 +++--- docs/RELEASING.md | 27 ++++++++++++++++ src/Termii/Termii.csproj | 9 +++++- 8 files changed, 144 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/release.yml create mode 100644 LICENSE create mode 100644 docs/RELEASING.md diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3062bbf..fe51272 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -52,4 +52,6 @@ jobs: uses: actions/upload-artifact@v4 with: name: nuget-package - path: artifacts/packages/*.nupkg + path: | + artifacts/packages/*.nupkg + artifacts/packages/*.snupkg diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..97d6a96 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,61 @@ +name: Release + +on: + push: + tags: + - 'v*.*.*' + workflow_dispatch: + inputs: + publish: + description: Publish to NuGet when NUGET_API_KEY is configured. + required: true + default: false + type: boolean + +permissions: + contents: read + +jobs: + package: + name: Build, test, pack, and publish + runs-on: ubuntu-latest + env: + NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }} + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.0.x + + - name: Restore + run: dotnet restore Termii.SDK.sln + + - name: Build + run: dotnet build Termii.SDK.sln --configuration Release --no-restore + + - name: Unit tests + run: dotnet test tests/Termii.Tests/Termii.Tests.csproj --configuration Release --no-build --logger "trx;LogFileName=unit-tests.trx" + + - name: Integration tests + run: dotnet test tests/Termii.IntegrationTests/Termii.IntegrationTests.csproj --configuration Release --no-build --logger "trx;LogFileName=integration-tests.trx" + + - name: Pack + run: dotnet pack src/Termii/Termii.csproj --configuration Release --no-build --output artifacts/packages + + - name: Upload package artifact + uses: actions/upload-artifact@v4 + with: + name: nuget-package + path: | + artifacts/packages/*.nupkg + artifacts/packages/*.snupkg + + - name: Publish to NuGet + if: ${{ (github.event_name == 'push' || inputs.publish) && env.NUGET_API_KEY != '' }} + run: dotnet nuget push "artifacts/packages/*.nupkg" --source https://api.nuget.org/v3/index.json --api-key "$NUGET_API_KEY" --skip-duplicate diff --git a/Directory.Build.props b/Directory.Build.props index bdc37b5..3c476b7 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -8,6 +8,13 @@ git https://github.com/teesofttech/Termii.SDK MIT + README.md + false + true + true + true + snupkg + true Teesoft Tech Teesoft Tech diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..4015f4d --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Teesoft Tech + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index d76eda1..6935849 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Termii .NET SDK +[![CI](https://github.com/teesofttech/Termii.SDK/actions/workflows/ci.yml/badge.svg)](https://github.com/teesofttech/Termii.SDK/actions/workflows/ci.yml) + A .NET SDK for the Termii messaging, token, and insights APIs. > This SDK is in early development. The first milestones establish the client, tests, examples, API coverage matrix, and package structure before endpoint support is added feature by feature. @@ -15,6 +17,12 @@ The initial repository setup includes: ## Usage +Install the package: + +```bash +dotnet add package Termii.SDK +``` + ```csharp using Termii; @@ -88,3 +96,7 @@ Development is tracked through GitHub issues: - CI, documentation, NuGet packaging, and GitHub Releases. Official Termii documentation: https://developer.termii.com/ + +## License + +This project is licensed under the MIT License. diff --git a/docs/API_COVERAGE.md b/docs/API_COVERAGE.md index 5351925..e153d47 100644 --- a/docs/API_COVERAGE.md +++ b/docs/API_COVERAGE.md @@ -32,8 +32,8 @@ The Termii docs describe a REST/JSON API and state that each account has its own | Error handling and request validation | Implemented | #6, PR #19 | | Reusable fake HTTP test helpers and opt-in live test conventions | Implemented | #10, PR #20 | | README endpoint examples | Planned | #12 | -| CI build/test/package validation | In progress | #11 | -| NuGet package metadata and publishing workflow | Planned | #8 | +| CI build/test/package validation | Implemented | #11, PR #22 | +| NuGet package metadata and publishing workflow | In progress | #8 | | First GitHub Release and NuGet publish | Planned | #13 | ## Endpoint Coverage @@ -42,9 +42,9 @@ The Termii docs describe a REST/JSON API and state that each account has its own | --- | --- | --- | --- | --- | --- | --- | --- | --- | | Messaging | Fetch sender IDs | GET | `/api/sender-id` | Query | `TermiiClient.SenderIds` | Planned | #3 | Planned unit + optional integration | | Messaging | Request sender ID | POST | `/api/sender-id/request` | JSON body | `TermiiClient.SenderIds` | Planned | #3 | Planned unit + optional integration | -| Messaging | Send SMS/channel message | POST | `/api/sms/send` | JSON body | `TermiiClient.Messaging` | In progress | #7 | Unit tests added | -| Messaging | Send WhatsApp conversational message | POST | `/api/sms/send` | JSON body | `TermiiClient.Messaging` | In progress | #7 | Unit tests added | -| Messaging | Send bulk message | POST | `/api/sms/send/bulk` | JSON body | `TermiiClient.Messaging` | In progress | #7 | Unit tests added | +| Messaging | Send SMS/channel message | POST | `/api/sms/send` | JSON body | `TermiiClient.Messaging` | Implemented | #7, PR #21 | Unit tests added | +| Messaging | Send WhatsApp conversational message | POST | `/api/sms/send` | JSON body | `TermiiClient.Messaging` | Implemented | #7, PR #21 | Unit tests added | +| Messaging | Send bulk message | POST | `/api/sms/send/bulk` | JSON body | `TermiiClient.Messaging` | Implemented | #7, PR #21 | Unit tests added | | Messaging | Send via Number API | POST | `/api/sms/number/send` | Query or JSON body, docs/examples vary | `TermiiClient.Messaging` or `TermiiClient.Numbers` | Planned | #5 | Planned unit + optional integration | | Token | Send OTP token | POST | `/api/sms/otp/send` | JSON body | `TermiiClient.Token` | Planned | #4 | Planned unit + optional integration | | Token | Verify OTP token | POST | `/api/sms/otp/verify` | JSON body | `TermiiClient.Token` | Planned | #4 | Planned unit + optional integration | diff --git a/docs/RELEASING.md b/docs/RELEASING.md new file mode 100644 index 0000000..52d189e --- /dev/null +++ b/docs/RELEASING.md @@ -0,0 +1,27 @@ +# Releasing + +This project publishes the SDK as a NuGet package from version tags. + +## Versioning + +- Use semantic versioning. +- Keep `VersionPrefix` in `src/Termii/Termii.csproj` aligned with the release tag. +- Use preview suffixes for pre-release packages, for example `0.1.0-preview.1`. + +## Release Checklist + +1. Confirm all intended issues for the release are merged. +2. Confirm CI is green on `main`. +3. Update package metadata and README examples if needed. +4. Update `VersionPrefix` in `src/Termii/Termii.csproj`. +5. Create and push a tag like `v0.1.0`. +6. Confirm the release workflow creates the package artifact. +7. Confirm NuGet publishing succeeds when the `NUGET_API_KEY` secret is configured. + +## Required Secrets + +| Secret | Purpose | +| --- | --- | +| `NUGET_API_KEY` | API key used by the release workflow to publish to NuGet.org. | + +The release workflow skips the publish step when `NUGET_API_KEY` is not set, but still builds, tests, packs, and uploads the package artifact. diff --git a/src/Termii/Termii.csproj b/src/Termii/Termii.csproj index 4f665f2..1ed4ac4 100644 --- a/src/Termii/Termii.csproj +++ b/src/Termii/Termii.csproj @@ -3,8 +3,10 @@ netstandard2.0;net8.0 Termii Termii - Termii + Termii.SDK + 0.1.0 A .NET SDK for the Termii messaging, token, and insights APIs. + Initial SDK package metadata and release workflow preparation. termii;sms;otp;messaging;dotnet;sdk true $(NoWarn);1591 @@ -12,6 +14,11 @@ + + + + +