From 0100b193d18b005e2dcd3b6fe68aadc9938ecd49 Mon Sep 17 00:00:00 2001 From: Max Wang Date: Thu, 22 Jan 2026 12:33:10 -0800 Subject: [PATCH 1/3] added versioning and changelog standards --- CHANGELOG.md | 55 ++++++++++------------------------------------- CONTRIBUTING.md | 57 ++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 67 insertions(+), 45 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4fcf8b8..5092be5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,52 +2,19 @@ All notable changes to this project will be documented in this file. +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + ## [0.1.0b1] - 2025-11-14 ### Added -**Initial beta release** of Microsoft Dataverse SDK for Python - -**Core Client & Authentication:** -- Core `DataverseClient` with Azure Identity authentication support -- Secure authentication using Azure Identity credentials (Service Principal, Managed Identity, Interactive Browser) -- TLS 1.2+ encryption for all API communications -- Proper credential handling without exposing secrets in logs - -**Data Operations:** -- Complete CRUD operations (create, read, update, delete) for Dataverse records +- Initial beta release of Microsoft Dataverse SDK for Python +- Core `DataverseClient` with Azure Identity authentication support (Service Principal, Managed Identity, Interactive Browser) (#1) +- Complete CRUD operations (create, read, update, delete) for Dataverse records (#1) - Advanced OData query support with filtering, sorting, and expansion -- SQL query execution via `query_sql()` method with result pagination -- Support for batch operations and transaction handling -- File upload capabilities for file and image columns - -**Table Management:** +- SQL query execution via `query_sql()` method with result pagination (#14) +- Bulk operations including `CreateMultiple`, `UpdateMultiple`, and `BulkDelete` (#6, #8, #34) +- File upload capabilities for file and image columns (#17) - Table metadata operations (create, inspect, delete custom tables) - -**Reliability & Error Handling:** -- Comprehensive error handling with specific exception types (`DataverseError`, `AuthenticationError`, etc.) -- HTTP retry logic with exponential backoff for resilient operations - -**Developer Experience:** -- Example scripts demonstrating common integration patterns -- Complete documentation with quickstart guides and API reference -- Modern Python packaging using `pyproject.toml` configuration - -**Quality Assurance:** -- Comprehensive test suite with unit and integration tests -- GitHub Actions CI/CD pipeline for automated testing and validation -- Azure DevOps PR validation pipeline - -### Changed -- N/A - -### Deprecated -- N/A - -### Removed -- N/A - -### Fixed -- N/A - -### Security -- N/A +- Comprehensive error handling with specific exception types (`DataverseError`, `AuthenticationError`, etc.) (#22, #24) +- HTTP retry logic with exponential backoff for resilient operations (#72) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7fe6e6c..3e8697e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -10,4 +10,59 @@ provided by the bot. You will only need to do this once across all repos using o This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or -contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. \ No newline at end of file +contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. + +## Development Guidelines + +### Versioning + +This project follows open-source industry standard [Semantic Versioning](https://semver.org/): + +**Version Format:** `MAJOR.MINOR.PATCH` (e.g., `1.2.3`) + +**When to bump:** +- **MAJOR** (e.g., 1.0.0 → 2.0.0): Breaking changes that require users to update their code + - Removing public methods, classes, or modules + - Changing method signatures (parameters, return types) + - Changing default behavior that breaks existing code + - Dropping Python version support + +- **MINOR** (e.g., 1.0.0 → 1.1.0): New features that are backwards-compatible + - Adding new public methods or classes + - Adding optional parameters (with defaults) + - New features that don't break existing code + - Adding Python version support + +- **PATCH** (e.g., 1.0.0 → 1.0.1): Bug fixes that are backwards-compatible + - Fixing bugs without changing the API + - Documentation updates + - Security fixes (non-breaking) + - Internal refactoring + +### Changelog + +We maintain a [CHANGELOG.md](CHANGELOG.md) following the [Keep a Changelog](https://keepachangelog.com/) format. + +**For Contributors:** You don't need to update the changelog with your PRs. Maintainers will update it at release time. + +**For Maintainers (Release Process):** + +Before each release, review merged PRs and update the changelog with: + +**What to include:** +- ✅ New features (→ **Added**) +- ✅ Changes to existing functionality (→ **Changed**) +- ✅ Soon-to-be removed features (→ **Deprecated**) +- ✅ Removed features (→ **Removed**) +- ✅ Bug fixes (→ **Fixed**) +- ✅ Security fixes (→ **Security**) +- ❌ Internal refactoring (unless it affects performance/behavior) +- ❌ Test-only changes +- ❌ CI/CD changes +- ❌ Documentation-only updates + +**Process:** +1. Review all PRs merged since last release +2. Add user-facing changes to CHANGELOG.md under appropriate categories +3. Include PR numbers for reference (e.g., `(#123)`) +4. Focus on **why it matters to users**, not implementation details \ No newline at end of file From 082e8268e19389f08339d04631d82ac753bcadfb Mon Sep 17 00:00:00 2001 From: Max Wang Date: Thu, 22 Jan 2026 12:48:11 -0800 Subject: [PATCH 2/3] release notes and tags --- CHANGELOG.md | 4 ++++ CONTRIBUTING.md | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5092be5..bd03923 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,3 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Table metadata operations (create, inspect, delete custom tables) - Comprehensive error handling with specific exception types (`DataverseError`, `AuthenticationError`, etc.) (#22, #24) - HTTP retry logic with exponential backoff for resilient operations (#72) + +[0.1.0b3]: https://github.com/microsoft/PowerPlatform-DataverseClient-Python/compare/v0.1.0b2...v0.1.0b3 +[0.1.0b2]: https://github.com/microsoft/PowerPlatform-DataverseClient-Python/compare/v0.1.0b1...v0.1.0b2 +[0.1.0b1]: https://github.com/microsoft/PowerPlatform-DataverseClient-Python/releases/tag/v0.1.0b1 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3e8697e..e74467c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -65,4 +65,49 @@ Before each release, review merged PRs and update the changelog with: 1. Review all PRs merged since last release 2. Add user-facing changes to CHANGELOG.md under appropriate categories 3. Include PR numbers for reference (e.g., `(#123)`) -4. Focus on **why it matters to users**, not implementation details \ No newline at end of file +4. Focus on **why it matters to users**, not implementation details + +**Adding version links to CHANGELOG.md:** + +After creating tags, add version comparison links at the bottom of CHANGELOG.md: + +```markdown +[0.1.0b4]: https://github.com/microsoft/PowerPlatform-DataverseClient-Python/compare/v0.1.0b3...v0.1.0b4 +[0.1.0b3]: https://github.com/microsoft/PowerPlatform-DataverseClient-Python/compare/v0.1.0b2...v0.1.0b3 +[0.1.0b2]: https://github.com/microsoft/PowerPlatform-DataverseClient-Python/compare/v0.1.0b1...v0.1.0b2 +[0.1.0b1]: https://github.com/microsoft/PowerPlatform-DataverseClient-Python/releases/tag/v0.1.0b1 +``` + +### Git Tags and Releases + +We use git tags to mark release points and GitHub Releases for announcements. + +**Creating Git Tags:** + +Git tags should be created for every release published to PyPI: + +```bash +# Create annotated tag for version X.Y.Z +git tag -a vX.Y.Z -m "Release vX.Y.Z" + +# Push tag to remote +git push origin --tags +``` + +**GitHub Releases:** + +After publishing to PyPI, create a GitHub Release based on CHANGELOG.md + +**Release notes format:** + +```markdown +Brief summary of the release + +### Added +- Feature 1 (#123) +- Feature 2 (#124) + +### Fixed +- Bug fix 1 (#125) +- Bug fix 2 (#126) +``` \ No newline at end of file From cf5ec507a3710e88c044585ed0ea41eec32b8e53 Mon Sep 17 00:00:00 2001 From: Max Wang Date: Thu, 22 Jan 2026 15:32:42 -0800 Subject: [PATCH 3/3] remove 0b4 --- CONTRIBUTING.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e74467c..75612b8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -72,7 +72,6 @@ Before each release, review merged PRs and update the changelog with: After creating tags, add version comparison links at the bottom of CHANGELOG.md: ```markdown -[0.1.0b4]: https://github.com/microsoft/PowerPlatform-DataverseClient-Python/compare/v0.1.0b3...v0.1.0b4 [0.1.0b3]: https://github.com/microsoft/PowerPlatform-DataverseClient-Python/compare/v0.1.0b2...v0.1.0b3 [0.1.0b2]: https://github.com/microsoft/PowerPlatform-DataverseClient-Python/compare/v0.1.0b1...v0.1.0b2 [0.1.0b1]: https://github.com/microsoft/PowerPlatform-DataverseClient-Python/releases/tag/v0.1.0b1