This document describes how to cut releases in this monorepo.
Most packages use the automated npm publishing workflow. The Durable Execution Telemetry VSCode extension is an exception: it is released as .vsix assets attached to GitHub Releases and does not follow the npm package release guidance.
The automated npm publishing workflow covers the following packages:
| Package | Path | Tag Prefix |
|---|---|---|
@aws/durable-execution-sdk-js |
packages/aws-durable-execution-sdk-js |
sdk |
@aws/durable-execution-sdk-js-testing |
packages/aws-durable-execution-sdk-js-testing |
test |
@aws/durable-execution-sdk-js-eslint-plugin. |
packages/aws-durable-execution-sdk-js-eslint-plugin |
eslint |
@aws/durable-execution-sdk-js-otel |
packages/aws-durable-execution-sdk-js-otel |
otel |
@aws/durable-execution-sdk-js-telemetry-exporter |
packages/aws-durable-execution-sdk-js-telemetry-exporter |
telemetry-exporter |
@aws/durable-execution-sdk-js-telemetry-mcp |
packages/aws-durable-execution-sdk-js-telemetry-mcp |
telemetry-mcp |
Extras and MicroVM Worker are excluded from automatic publishing while their first npm publication is prepared separately. Both initial publication attempts in sdk-2.7.0 failed. Before adding them to the automatic package list, prepare their first release and npm publisher setup, and remove their explicit deferral from the packaging test.
The packages/aws-durable-execution-sdk-js-telemetry-vscode package is intentionally excluded from this table. Release it with the Durable Execution Telemetry VSCode Extension process instead.
Each package maintains its own version in the version field of its package.json:
- SDK:
packages/aws-durable-execution-sdk-js/package.json - Testing:
packages/aws-durable-execution-sdk-js-testing/package.json - ESLint plugin:
packages/aws-durable-execution-sdk-js-eslint-plugin/package.json - OTel:
packages/aws-durable-execution-sdk-js-otel/package.json - Telemetry Exporter:
packages/aws-durable-execution-sdk-js-telemetry-exporter/package.json - Telemetry MCP:
packages/aws-durable-execution-sdk-js-telemetry-mcp/package.json
Bump the version in the appropriate package.json file(s) and merge to main before creating a release.
The next coordinated release publishes these versions:
| Package | Version | Publisher decision |
|---|---|---|
| SDK | 3.0.0 |
New stable version, latest |
| OTel | 2.0.0 |
New stable version, latest |
| Testing SDK | 1.3.2 |
Compatible patch with the widened Core 3 peer range, latest |
| ESLint plugin | 1.2.0 |
New minor version with the child-context rule, latest |
| Telemetry Exporter | 0.1.0-alpha.1 |
Prerelease above the published 0.1.0-alpha.0, beta |
| Telemetry MCP | 0.1.0-alpha.1 |
Prerelease above the published 0.1.0-alpha.0, beta |
Use the tag sdk-3.0.0 and the title sdk-3.0.0 / otel-2.0.0 / test-1.3.2.
Paste the release notes into the GitHub Release.
Refresh them against the selected release commit before publishing.
The published minor pairs remain Core 2.7.0 / OTel 1.2.0 and Core 2.7.1 /
OTel 1.2.1, with Testing SDK 1.3.1. They include registration exclusivity and
the patch telemetry corrections. They do not include the invocation-local LMI
carrier or the factory migration. Released OTel 1.x keeps its optional
>=2.4.0 <3.0.0 Core peer and provider API v1. Core 3 requires matching factory
packages and layers. Installed-package tests keep the released-pair controls and
verify that legacy providers are rejected.
The two Telemetry packages were published on 2026-10-22 outside this workflow,
from the #924 merge commit 6597e075. The publisher skips a version that npm
already has. So this release bumps both packages to 0.1.0-alpha.1. That bump
publishes the 3 exporter fixes and the 3 MCP fixes merged after 6597e075. It
does not take the 1.0.0 bump from #1030. The ESLint plugin is bumped to
1.2.0 for the same reason.
The manual publication left latest on 0.1.0-alpha.0 for both Telemetry
packages. The publisher puts 0.1.0-alpha.1 on beta and does not move
latest. So after the release, a maintainer must move latest by hand:
npm dist-tag add @aws/durable-execution-sdk-js-telemetry-exporter@0.1.0-alpha.1 latest
npm dist-tag add @aws/durable-execution-sdk-js-telemetry-mcp@0.1.0-alpha.1 latestThe automatic package list and the Extras and MicroVM deferrals are unchanged.
Update the version string in the relevant package.json file(s). Commit and merge to main.
- Go to the Releases page on GitHub.
- Click Draft a new release.
- Create a new tag following the tagging convention below.
- Set the release title (typically the same as the tag).
- Write release notes following the Release Notes Format.
- Click Publish release.
The tag should be the version of the package(s) being bumped, prepended with a descriptive prefix, joined with / when more than one package is released together:
- SDK only:
sdk-<version>(e.g.,sdk-2.2.0) - Testing only:
test-<version>(e.g.,test-1.1.3) - ESLint plugin only:
eslint-<version>(e.g.,eslint-1.0.0) - OTel only:
otel-<version>(e.g.,otel-0.1.1) - Telemetry Exporter only:
telemetry-exporter-<version>(e.g.,telemetry-exporter-0.1.0) - Telemetry MCP only:
telemetry-mcp-<version>(e.g.,telemetry-mcp-0.1.0) - Multiple packages in a single release: join the sub-tags with
/(e.g.,sdk-2.1.0/test-1.1.3/otel-0.1.1)
Examples:
sdk-2.2.0
otel-0.1.1
test-1.1.3
sdk-2.1.0/test-1.1.3/otel-0.1.1
sdk-2.2.0/telemetry-exporter-0.1.0
telemetry-mcp-0.1.0
If additional packages are added to the monorepo in the future, follow the same pattern: choose a short descriptive prefix for the package and use <prefix>-<version>.
Note: Automated rollout of new versions into the SDK bundled with the Lambda managed runtime relies on the release tag matching the
sdk-<version>format. For any SDK version we want in the runtime, ensure there is a release with a tag in the exactsdk-<version>format (if needed, create a new release for the same commit with a correctly formatted tag).
The release engineer owns this step for every new version release. Complete it after the published packages are available on npm.
The shared documentation lives in
aws/aws-durable-execution-docs.
Checking version strings alone is insufficient. Review the changes in every
package released, including the testing, OTel, Telemetry Exporter, Telemetry
MCP, and ESLint plugin packages when applicable, and update the documentation
to match:
- API references and guides that describe new or changed behavior
-
examples/typescript/snippets that use new or changed APIs - Dependency versions, compatibility guidance, and migration instructions
Search the entire documentation repository so references are not missed:
rg -n 'durable-execution-sdk-js' docs examples/typescriptOpen or update the documentation pull request, link this GitHub release in its description, and follow through on review and merge. If the release needs no documentation changes, add a note to the GitHub release stating that the documentation review was completed and found no changes needed.
Creating a GitHub Release triggers the npm-publish.yml workflow automatically. The workflow:
- Checks out the released tag.
- Installs dependencies, builds all packages, and runs the test suite.
- Publishes each package to npm using OIDC-based trusted publishing (no API tokens required).
The workflow runs on the release: [published] event, so it fires whenever a release is published on GitHub — no manual intervention is needed beyond creating the release.
Note: The workflow builds and publishes all packages. Ensure the version in each package's
package.jsonis correct before publishing. If only one package has a version bump, the unchanged packages are skipped (which is expected and harmless).
The Durable Execution Telemetry VSCode extension at packages/aws-durable-execution-sdk-js-telemetry-vscode has a separate release process.
Warning: Running the extension workflow publishes a GitHub Release as its final step, which emits the repo-wide
release.publishedevent and can start automation such as the npm publish workflow. When that happens, the npm workflow checks its hardcoded package list and may publish any listed npm package whose version has not already been published. The npm workflow does not include or publish this private VS Code extension package.
The VS Code extension is distributed as .vsix files attached to GitHub Releases for testers and customers. It is not published to npm or the VS Code Marketplace.
Do not use the normal GitHub publishing flow for this extension. The JS SDK repo has immutable releases enabled, so assets must be attached while the release is still a draft. The manual vscode extension release workflow creates or reuses a draft release, uploads all required .vsix files, verifies them, and only then publishes the release.
Update packages/aws-durable-execution-sdk-js-telemetry-vscode/package.json. The workflow input must exactly match this version value on the ref you run.
Review, approve, and merge the version update PR before running the release workflow. The PR is the release approval.
- Open Actions, select vscode extension release, and choose Run workflow.
- Select the default branch after the version update PR is merged.
- Enter the exact extension version from
packages/aws-durable-execution-sdk-js-telemetry-vscode/package.json. - Start the workflow.
The workflow creates the release tag telemetry-vscode-v<version> and the release title Durable Execution Telemetry VSCode <version> (Preview).
The workflow builds and uploads one .vsix per supported platform:
| Platform | Expected asset |
|---|---|
| Apple Silicon macOS | aws-durable-execution-sdk-js-telemetry-vscode-<version>-darwin-arm64.vsix |
| Windows x64 | aws-durable-execution-sdk-js-telemetry-vscode-<version>-win32-x64.vsix |
| Windows ARM64 | aws-durable-execution-sdk-js-telemetry-vscode-<version>-win32-arm64.vsix |
| Linux x64 | aws-durable-execution-sdk-js-telemetry-vscode-<version>-linux-x64.vsix |
After the workflow succeeds, install the newly built extension following the install preview build instructions.
If the workflow fails before publication, the release is left as a draft. Fix the failed matrix leg and re-run vscode extension release with the same version. The workflow reuses the existing draft release for telemetry-vscode-v<version> and uploads rebuilt .vsix assets with --clobber, so corrected assets replace earlier draft assets.
If verification finds that any expected .vsix asset is missing, the workflow exits without publishing and leaves the draft release in place. Re-run the workflow with the same version after fixing the issue.
If the release was already published with bad assets, do not try to replace assets on that release. Published releases are immutable, and the workflow refuses to modify a non-draft release. Bump the extension version, merge the version update PR, and run vscode extension release again to publish a corrected release.
Release notes should maintain separate timelines for each package. Use the following structure:
# @aws/durable-execution-sdk-js
## What's Changed
- feat(sdk): added support for X by @<author> in #<pr>
- fix(sdk): fixed issue with Y under Z conditions by @<author> in #<pr>
### Breaking Changes
- feat(sdk): removed deprecated `bar()` method by @<author> in #<pr>
**Full Changelog**: [<previous-sdk-tag>...<this-tag>](changelog-url)
# @aws/durable-execution-sdk-js-otel
## What's Changed
- feat(otel): added tracing for `map` operations by @<author> in #<pr>
- fix(otel): fixed span context propagation in child contexts by @<author> in #<pr>
**Full Changelog**: [<previous-otel-tag>...<this-tag>](changelog-url)
# @aws/durable-execution-sdk-js-testing
## What's Changed
- fix(test): fixed issue with test runner under condition Z by @<author> in #<pr>
**Full Changelog**: [<previous-test-tag>...<this-tag>](changelog-url)If only one package is being released, include only that package's section. Each package's changelog should be self-contained so users can follow the history of the package they depend on independently.
Before publishing a release:
- Version bumped in the relevant
package.jsonfile(s) - Changes merged to
main - CI checks pass on
main - Release notes written with separate sections per package
- Tag follows the naming convention (
sdk-X.Y.Z,otel-X.Y.Z,test-X.Y.Z,eslint-X.Y.Z,telemetry-exporter-X.Y.Z,telemetry-mcp-X.Y.Z, or/-joined)
After publishing a release:
- Shared documentation reviewed per Update the shared documentation, and the docs pull request opened or "no documentation changes needed" recorded on the release
The published minor releases use testing SDK 1.3.1 with core 2.x. This major
migration uses testing SDK 1.3.2 with its broadened >=1.0.1 <4.0.0 peer range,
so publication cannot skip the new range because 1.3.1 already exists. Core
3.0.0 and OTel 2.0.0 carry the explicit factory migration. Testing remains a
compatible patch. The Telemetry Exporter is 0.1.0-alpha.1 and requires core
>=3.0.0 <4.0.0 for its factory API.
Version metadata does not authorize a merge or publication.