diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 1a0fdd7a..23914c0d 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -8,6 +8,17 @@ building durable orchestrations. The repo contains two packages: - `durabletask` — core SDK (in `durabletask/`) - `durabletask.azuremanaged` — Azure Durable Task Scheduler provider (in `durabletask-azuremanaged/`) +## Changelog Requirements + +- ALWAYS document user-facing changes in the appropriate changelog under + `## Unreleased`. +- Update `CHANGELOG.md` for core SDK changes and + `durabletask-azuremanaged/CHANGELOG.md` for provider changes. +- If a change affects both packages, update both changelogs. +- Do NOT document internal-only changes in changelogs, including CI/workflow + updates, test-only changes, refactors with no user-visible behavior change, + and implementation details that do not affect public behavior or API. + ## Language and Style - Python 3.10+ is required. diff --git a/.github/skills/release-prep/SKILL.md b/.github/skills/release-prep/SKILL.md new file mode 100644 index 00000000..e2680c73 --- /dev/null +++ b/.github/skills/release-prep/SKILL.md @@ -0,0 +1,112 @@ +--- +name: release-prep +description: >- + Prepare a release for durabletask and durabletask.azuremanaged. Use when the + user asks for release prep, version bumping, changelog updates, or release + body drafting. Trigger phrases include: release prep, prepare vX.Y.Z, + changelog for release, and draft GitHub release notes. +--- + +# Release Prep + +This skill prepares a coordinated release for both packages in this repository: + +- `durabletask` +- `durabletask.azuremanaged` + +The skill accepts a target version (for example `1.4.0`) and performs the +required changes consistently. + +## Inputs + +- `version`: Target semantic version (for example `1.4.0`) +- Optional: `baseTag` overrides for comparison if tags are non-standard + +If `version` is not provided, ask the user before continuing. + +## Steps + +### 1. Determine source range and collect commits + +- Root package range: `v..HEAD` +- Azure managed package range: `azuremanaged-v..HEAD` +- Use commit subjects and touched files to classify each change as: + - `durabletask` only + - `durabletask.azuremanaged` only + - shared/infra/docs changes + +### 2. Update package versions + +Update both project versions: + +- `pyproject.toml` -> `version = ""` +- `durabletask-azuremanaged/pyproject.toml` -> `version = ""` + +Update azuremanaged dependency floors: + +- `durabletask>=` +- `durabletask[azure-blob-payloads]>=` + +### 3. Update changelogs + +- Add a new `## v` section directly under `## Unreleased` in: + - `CHANGELOG.md` + - `durabletask-azuremanaged/CHANGELOG.md` +- Ensure user-facing changes since the previous release tags are represented. +- Keep entries concise and grouped by type (`ADDED`, `CHANGED`, `FIXED`, `REMOVED`) where + applicable. +- Exclude internal-only changes from changelogs (for example CI/workflow-only + updates, test-only changes, and implementation refactors with no public + behavior or API impact). + +### 4. Validate + +- Run diagnostics on changed markdown and TOML files. +- Fix formatting or heading issues introduced by release prep changes. +- Verify the final diff only contains release-prep updates. + +### 5. Wait for merge and tags before release drafting + +Before creating draft releases in GitHub UI, require explicit user +confirmation of both conditions: + +- The version-bump/release-prep PR is merged +- Tags `v` and `azuremanaged-v` already exist in the target + repository + +If either condition is not met, stop after preparing release body text and ask +the user to confirm once merge and tags are complete. + +### 6. Draft GitHub release bodies + +Draft two release body texts for the GitHub Releases UI (do not add files to +the repository): + +- Tag: `v` +- Tag: `azuremanaged-v` + +Match existing release structure: + +- Title (`# v` or `# azuremanaged-v`) +- `## What's Changed` +- `## External Links` +- `### Contributors` + +Include: + +- PyPI link for the exact release version +- Full changelog compare link +- Contributor handles from the commit range +- Keep drafts in the assistant response (or PR comment) so they can be pasted + directly into the Releases section +- Keep the release body focused on user-facing changes and avoid internal-only + details (CI/test updates or implementation-only notes) + + +## Output + +Return a short summary with: + +- Updated files +- Commit coverage confirmation +- Any manual follow-ups (for example, tag creation or publishing) diff --git a/CHANGELOG.md b/CHANGELOG.md index d715e5b4..2e51ec3c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +## v1.4.0 + ADDED - Added large payload externalization support for automatically @@ -22,16 +24,21 @@ ADDED - Added `AsyncTaskHubGrpcClient` for asyncio-based applications using `grpc.aio` - Added `DefaultAsyncClientInterceptorImpl` for async gRPC metadata interceptors - Added `get_async_grpc_channel` helper for creating async gRPC channels +- Added orchestration restart client support +- Added batch client actions for purge and query operations across orchestrations and entities +- Added worker work item filtering support +- Added new `work_item_filtering` sample - Improved distributed tracing support with full span coverage for orchestrations, activities, sub-orchestrations, timers, and events CHANGED -- Refactored `TaskHubGrpcClient` to share request-building and validation logic - with `AsyncTaskHubGrpcClient` via module-level helper functions +- Improved timer scheduling behavior for orchestrator timers FIXED: - Fix unbound variable in entity V1 processing +- Fixed `compute_next_delay` returning `None` when `max_retry_interval` is not set +- Fixed multiple entity-related bugs across ID parsing and failure handling ## v1.3.0 @@ -103,72 +110,72 @@ FIXED: ## v0.3.0 -### New +ADDED - Added `ConcurrencyOptions` class for fine-grained concurrency control with separate limits for activities and orchestrations. The thread pool worker count can also be configured. -### Fixed +FIXED - Fixed an issue where a worker could not recover after its connection was interrupted or severed ## v0.2.1 -### New +ADDED - Added `set_custom_status` orchestrator API ([#31](https://github.com/microsoft/durabletask-python/pull/31)) - contributed by [@famarting](https://github.com/famarting) - Added `purge_orchestration` client API ([#34](https://github.com/microsoft/durabletask-python/pull/34)) - contributed by [@famarting](https://github.com/famarting) - Added new `durabletask-azuremanaged` package for use with the [Durable Task Scheduler](https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler) - by [@RyanLettieri](https://github.com/RyanLettieri) -### Changes +CHANGED - Protos are compiled with gRPC 1.62.3 / protobuf 3.25.X instead of the latest release. This ensures compatibility with a wider range of grpcio versions for better compatibility with other packages / libraries ([#36](https://github.com/microsoft/durabletask-python/pull/36)) - by [@berndverst](https://github.com/berndverst) - Http and grpc protocols and their secure variants are stripped from the host name parameter if provided. Secure mode is enabled if the protocol provided is https or grpcs ([#38](https://github.com/microsoft/durabletask-python/pull/38) - by [@berndverst)(https://github.com/berndverst) - Improve ProtoGen by downloading proto file directly instead of using submodule ([#39](https://github.com/microsoft/durabletask-python/pull/39) - by [@berndverst](https://github.com/berndverst) -### Updates +CHANGED - Updated `durabletask-protobuf` submodule reference to latest ## v0.1.1a1 -### New +ADDED - Add recursive flag in terminate_orchestration to support cascade terminate ([#27](https://github.com/microsoft/durabletask-python/pull/27)) - contributed by [@shivamkm07](https://github.com/shivamkm07) ## v0.1.0 -### New +ADDED - Retry policies for activities and sub-orchestrations ([#11](https://github.com/microsoft/durabletask-python/pull/11)) - contributed by [@DeepanshuA](https://github.com/DeepanshuA) -### Fixed +FIXED - Fix try/except in orchestrator functions not being handled correctly ([#21](https://github.com/microsoft/durabletask-python/pull/21)) - by [@cgillum](https://github.com/cgillum) - Updated `durabletask-protobuf` submodule reference to latest distributed tracing commit - by [@cgillum](https://github.com/cgillum) ## v0.1.0a5 -### New +ADDED - Adds support for secure channels ([#18](https://github.com/microsoft/durabletask-python/pull/18)) - contributed by [@elena-kolevska](https://github.com/elena-kolevska) -### Fixed +FIXED - Fix zero argument values sent to activities as None ([#13](https://github.com/microsoft/durabletask-python/pull/13)) - contributed by [@DeepanshuA](https://github.com/DeepanshuA) ## v0.1.0a3 -### New +ADDED - Add gRPC metadata option ([#16](https://github.com/microsoft/durabletask-python/pull/16)) - contributed by [@DeepanshuA](https://github.com/DeepanshuA) -### Changes +CHANGED - Removed Python 3.7 support due to EOL ([#14](https://github.com/microsoft/durabletask-python/pull/14)) - contributed by [@berndverst](https://github.com/berndverst) ## v0.1.0a2 -### New +ADDED - Continue-as-new ([#9](https://github.com/microsoft/durabletask-python/pull/9)) - Support for Python 3.7+ ([#10](https://github.com/microsoft/durabletask-python/pull/10)) - contributed by [@DeepanshuA](https://github.com/DeepanshuA) diff --git a/durabletask-azuremanaged/CHANGELOG.md b/durabletask-azuremanaged/CHANGELOG.md index 2d8774c6..f24f6a72 100644 --- a/durabletask-azuremanaged/CHANGELOG.md +++ b/durabletask-azuremanaged/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +## v1.4.0 + +- Updates base dependency to durabletask v1.4.0 + - Includes restart support, batch actions, work item filtering, timer improvements, + distributed tracing improvements, and entity bug fixes - Added `AsyncDurableTaskSchedulerClient` for async/await usage with `grpc.aio` - Added `DTSAsyncDefaultClientInterceptorImpl` async gRPC interceptor for DTS authentication - Added `payload_store` parameter to `DurableTaskSchedulerWorker`, @@ -15,6 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added `azure-blob-payloads` optional dependency that installs `durabletask[azure-blob-payloads]` — install with `pip install durabletask.azuremanaged[azure-blob-payloads]` +- Improved worker timer handling to align with durabletask timer updates ## v1.3.0 diff --git a/durabletask-azuremanaged/pyproject.toml b/durabletask-azuremanaged/pyproject.toml index 54407d95..ee23588e 100644 --- a/durabletask-azuremanaged/pyproject.toml +++ b/durabletask-azuremanaged/pyproject.toml @@ -9,7 +9,7 @@ build-backend = "setuptools.build_meta" [project] name = "durabletask.azuremanaged" -version = "1.3.0" +version = "1.4.0" description = "Durable Task Python SDK provider implementation for the Azure Durable Task Scheduler" keywords = [ "durable", @@ -26,13 +26,13 @@ requires-python = ">=3.10" license = {file = "LICENSE"} readme = "README.md" dependencies = [ - "durabletask>=1.3.0", + "durabletask>=1.4.0", "azure-identity>=1.19.0" ] [project.optional-dependencies] azure-blob-payloads = [ - "durabletask[azure-blob-payloads]>=1.3.0" + "durabletask[azure-blob-payloads]>=1.4.0" ] [project.urls] diff --git a/pyproject.toml b/pyproject.toml index b5a923da..145b9304 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,7 @@ build-backend = "setuptools.build_meta" [project] name = "durabletask" -version = "1.3.0" +version = "1.4.0" description = "A Durable Task Client SDK for Python" keywords = [ "durable",