Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
112 changes: 112 additions & 0 deletions .github/skills/release-prep/SKILL.md
Original file line number Diff line number Diff line change
@@ -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<previousVersion>..HEAD`
- Azure managed package range: `azuremanaged-v<previousVersion>..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 = "<version>"`
- `durabletask-azuremanaged/pyproject.toml` -> `version = "<version>"`

Update azuremanaged dependency floors:

- `durabletask>=<version>`
- `durabletask[azure-blob-payloads]>=<version>`

### 3. Update changelogs

- Add a new `## v<version>` 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<version>` and `azuremanaged-v<version>` 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<version>`
- Tag: `azuremanaged-v<version>`

Match existing release structure:

- Title (`# v<version>` or `# azuremanaged-v<version>`)
- `## 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)
37 changes: 22 additions & 15 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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

Expand Down Expand Up @@ -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)
Expand Down
6 changes: 6 additions & 0 deletions durabletask-azuremanaged/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`,
Expand All @@ -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

Expand Down
6 changes: 3 additions & 3 deletions durabletask-azuremanaged/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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]
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
Loading