infra/pdk/README.md
npm install -D pnpm-dev-kit
# Development mode
pdk dev
# Release with changelog and GitHub release
pdk release --push-tag --create-github-release
# Generate changelog
pdk changelog --use-ai --provider openai --model gpt-4o
# Fix failed release
pdk patch --version 1.0.0 --tag latest
Create pdk.config.ts in your project root:
import { defineConfig } from 'pnpm-dev-kit';
export default defineConfig({
// Core options
tagPrefix: 'v',
dryRun: false,
runInBand: false,
ignoreScripts: false,
// AI changelog
useAi: true,
model: 'gpt-4o',
provider: 'openai',
apiKey: process.env.OPENAI_API_KEY,
// Changelog filters
filterTypes: ['feat', 'fix', 'perf'],
filterScopes: ['core', 'ui', 'api'],
// Release defaults
changelog: true,
pushTag: true,
createGithubRelease: true,
autoCreateReleaseBranch: false,
// Dev mode
exclude: ['@scope/package-to-exclude'],
packages: ['@scope/package-to-start'],
});
| Option | Type | Default | Description |
|---|---|---|---|
cwd | string | process.cwd() | Working directory |
dryRun | boolean | false | Preview mode without changes |
runInBand | boolean | false | Publish packages sequentially |
ignoreScripts | boolean | false | Skip npm scripts |
tagPrefix | string | 'v' | Git tag prefix |
| Option | Type | Default | Description |
|---|---|---|---|
useAi | boolean | false | Enable AI changelog generation |
model | string | 'gpt-4o' | LLM model |
provider | string | 'openai' | LLM provider |
apiKey | string | - | API key (use env var) |
baseURL | string | - | Custom API endpoint |
| Option | Type | Default | Description |
|---|---|---|---|
filterTypes | string[] | ['feat', 'fix'] | Commit types to include |
filterScopes | string[] | [] | Scopes to include (empty = all) |
Development (dev):
exclude: Packages to exclude from startuppackages: Packages to start by defaultRelease (release):
changelog: Generate changelog (default: true)build: Build before publishing (false or script name)pushTag: Push git tags (default: false)canary: Canary release (default: false)createGithubRelease: Create GitHub release (default: false)autoCreateReleaseBranch: Auto-create release branch (default: false)Changelog (changelog):
version: Target versionbeautify: Format markdown (default: false)commit: Git commit changelog (default: false)gitPush: Push commit (default: false)attachAuthor: Include author info (default: false)authorNameType: Author format ('name' or 'email', default: 'name')Patch (patch):
version: Version to patchtag: Distribution tagGitHub Release (github-release):
version: Release versiontagPrefix, filterTypes, filterScopesuseAi, model, provider, runInBandchangelog, pushTag, createGithubReleasedryRun, cwd, versionexclude, packages, build, canaryapiKey (use environment variables)import { loadPDKConfig, dev, release } from 'pnpm-dev-kit';
// Load configuration
const config = await loadPDKConfig({ cwd: './my-project' });
// Use with commands
await dev(config.resolved);
await release(config.resolved);
{
"scripts": {
"dev": "pdk dev",
"release": "pdk release",
"release:full": "pdk release --push-tag --create-github-release",
"release:canary": "pdk release --canary",
"changelog": "pdk changelog",
"patch": "pdk patch --version $(node -p \"require('./package.json').version\") --tag latest"
}
}
# .github/workflows/release.yml
name: Release
on:
push:
tags:
- 'v*'
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm install -g pnpm
- run: pnpm install
- run: pnpm run release:full
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
main branch--dry-run for testing{version}-canary-{commitHash}-{timestamp}Apache License 2.0