---
name: sdk-release-checklist
description: >-
Checklist for adding a new SDK or releasing a new SDK version. Covers code,
tests, website integration (docs page, version badge, changelog sidebar,
i18n keys), and CI wiring. Use when creating a new runtime SDK, bumping an
SDK version, or auditing that all integration points are connected.
---
# SDK Release Checklist
Mandatory steps when adding a **new SDK** or **releasing a new version** of an
existing SDK. Prevents drift between code, website, changelogs, and CI.
## When to Use
- Creating a new runtime SDK (e.g., Go, Java, Ruby)
- Releasing a new version of any existing SDK (.NET, Python, Node.js)
- Auditing that an SDK is fully wired into the website and build system
- After a version bump to verify all integration points are updated
## New SDK: Full Checklist
When adding a brand-new SDK to the project, complete **every** item:
### 1. Code & Tests
- [ ] SDK source under `src/sdks/{runtime}/`
- [ ] Unit tests under `tests/sdks/{runtime}/`
- [ ] Acceptance tests with LocalStack + Lowkey Vault containers
(see `sdk-acceptance-testing` skill)
- [ ] README.md in SDK root with install, quick start, and API reference
### 2. Version Source File
Every SDK must have a canonical version source read at build time:
| Runtime | File | Field / Tag |
|------------|------------------------------------|------------------------|
| .NET | `src/sdks/dotnet/Envilder.csproj` | `X.Y.Z` |
| Python | `src/sdks/python/pyproject.toml` | `version = "X.Y.Z"` |
| Node.js | `src/sdks/nodejs/package.json` | `"version": "X.Y.Z"` |
| Go | Git tag / `go.mod` convention | `vX.Y.Z` tag |
| Java | `pom.xml` or `build.gradle` | `` / `version =` |
### 3. Website: Version Badge Wiring
The website reads SDK versions at **build time** via `astro.config.mjs`:
- [ ] Add version extraction in `src/website/astro.config.mjs`:
- For `package.json`: read + `JSON.parse` (see Node.js SDK pattern)
- For `.csproj`: use `extractCsprojVersion()` helper (regex on ``)
- For `pyproject.toml`: use `extractPyprojectVersion()` helper (regex)
- [ ] Add Vite `define` global: `__SDK_{RUNTIME}_VERSION__`
- [ ] Declare in `src/website/src/env.d.ts`: `declare const __SDK_{RUNTIME}_VERSION__: string;`
- [ ] Use dynamic variable in `DocsContent.astro` badge (never hardcode versions)
### 4. Website: Documentation Page Section
- [ ] Add SDK section in `src/website/src/components/DocsContent.astro`
(install command, quick start code, badge, link to full docs)
- [ ] Add i18n keys to `src/website/src/i18n/types.ts` for all new strings
- [ ] Add translations to every locale file: `en.ts`, `ca.ts`, `es.ts`
### 5. Website: Changelog Integration
- [ ] Create `docs/changelogs/sdk-{runtime}.md` with initial release entry
- [ ] Read changelog in `astro.config.mjs` via `readChangelog()` helper
- [ ] Add Vite `define` global: `__CHANGELOG_SDK_{RUNTIME}__`
- [ ] Declare in `env.d.ts`: `declare const __CHANGELOG_SDK_{RUNTIME}__: string;`
- [ ] Add product entry to `products` array in **all 3** changelog pages:
- `src/website/src/pages/changelog.astro`
- `src/website/src/pages/ca/changelog.astro`
- `src/website/src/pages/es/changelog.astro`
- [ ] Add sidebar nav block (button + version list) in the SDKs group for
**all 3** changelog pages: maintain correct `parsed[N]` indices
- [ ] Add i18n key `categorySdk{Runtime}` to `types.ts` and all locale files
- [ ] Add to mobile product selector dropdown (automatic if in `products` array)
### 6. Website: SDK Cards Component
- [ ] Add card in `src/website/src/components/Sdks.astro` with install
command and package manager link
### 7. Copilot Instructions & Build Config
- [ ] Update `.github/copilot-instructions.md` with SDK architecture notes
- [ ] Add to `pnpm-workspace.yaml` if TypeScript/Node-based
- [ ] Add build/test commands to CI workflow
### 8. Documentation Cross-References
- [ ] Add SDK to root `README.md` SDK section
- [ ] Add SDK to `ROADMAP.md` if tracked there
- [ ] Add to `docs/changelogs/` index if one exists
- [ ] Run `doc-sync` skill to verify alignment
## Existing SDK: Version Bump Checklist
When releasing a new version of an already-wired SDK:
- [ ] Bump version in the canonical source file (csproj / pyproject.toml / package.json)
- [ ] Add changelog entry to `docs/changelogs/sdk-{runtime}.md`
- [ ] Verify `pnpm build` in `src/website/` picks up the new version automatically
- [ ] No manual edits needed in `DocsContent.astro` (version is dynamic)
## Validation
After completing the checklist:
```bash
# Build website and verify all versions render
cd src/website && pnpm build
# Grep built HTML for version badges
node -e "const h=require('fs').readFileSync('dist/docs/index.html','utf-8'); \
console.log(h.match(/NuGet v[\d.]+/)?.[0]); \
console.log(h.match(/PyPI v[\d.]+/)?.[0]); \
console.log(h.match(/npm v[\d.]+/)?.[0])"
# Verify changelog page includes all SDKs
node -e "const h=require('fs').readFileSync('dist/changelog/index.html','utf-8'); \
console.log('dotnet:', h.includes('sdk-dotnet')); \
console.log('python:', h.includes('sdk-python')); \
console.log('nodejs:', h.includes('sdk-nodejs'))"
```
## Common Pitfalls
| Pitfall | Prevention |
|---------|------------|
| Hardcoded version in badge | Always use `__SDK_*_VERSION__` globals |
| Missing changelog sidebar entry | Check all 3 locale pages, not just `en` |
| Wrong `parsed[N]` index after adding SDK | Count products array entries carefully |
| Forgot i18n key in one locale | Add to `types.ts` first: TypeScript errors catch missing keys |
| Version not updating after bump | Restart dev server (Vite caches `define` values) |