A CLI tool to automatically generate release notes and migration guides from JSON files.
migration-release is a set of CLI tools that help manage and generate documentation for project releases. This tool:
- Reads release information from JSON files
- Automatically generates release notes in Markdown format
- Creates migration guides between versions
- Compares and tracks changes in runtime, environment variables, and scripts
- Node.js >= 14
npm install migration-releaseOr install globally:
npm install -g migration-releaseThe tool requires release files to be stored in the releases/ directory with the following format:
releases/
├── 1.0.0.json
├── 1.1.0.json
└── 2.0.0.json
{
"version": "1.0.0",
"date": "2025-01-15",
"runtime": {
"node": "18.0.0"
},
"tags": ["custom-tag"],
"features": [
"Added feature A"
],
"bugfixes": [
"Fixed critical bug in module B"
],
"improvements": [
"Improved performance for module C"
],
"security": [
"Fixed security vulnerability CVE-2025-XXXX"
],
"breakingChanges": [
"API endpoint /old-path has been removed"
],
"deprecated": [
"Function oldMethod() is deprecated, use newMethod() instead"
],
"env": [
{
"key": "DATABASE_URL",
"required": true,
"default": "postgresql://localhost:5432/mydb",
"description": "Database connection URL"
}
],
"scripts": [
{
"id": "migration-001",
"title": "Update database schema",
"steps": [
"First, backup your database",
{
"type": "bash",
"contents": [
"npm install",
"npm run migrate"
]
},
"Verify migration results"
]
}
]
}Supported Sections:
features: New features addedbugfixes: Bug fixesimprovements: Performance or quality improvementssecurity: Security updatesbreakingChanges: Breaking changesdeprecated: Deprecated featurestags: Custom tags (optional, auto-generated if not provided)- Custom fields: Any other field with an array of strings will be automatically rendered as a section (e.g.,
"redis": ["item 1", "item 2"]becomes## Redis)
Script Steps Format:
The steps array in scripts supports two formats:
- Text string: Simple step description displayed as bullet point
- Code block object:
type: Language for syntax highlighting (bash, javascript, sql, python, etc.)contents: Array of code lines
You can mix both formats freely in the same script.
Create markdown documentation for a specific version.
gen-release <version> [outDir]Examples:
# Generate release notes for v1.0.0
gen-release 1.0.0
# Generate and save to custom directory
gen-release 1.0.0 docs/releasesOutput: Creates changelog-md/1.0.0.md containing full release information.
Create documentation for upgrading from one version to another.
gen-migration <fromVersion> <toVersion> [outDir]Examples:
# Generate upgrade guide from 1.0.0 to 2.0.0
gen-migration 1.0.0 2.0.0
# Save to custom directory
gen-migration 1.0.0 2.0.0 docs/migrationsOutput: Creates changelog-md/migrations/1.0.0-to-2.0.0.md containing:
- Runtime changes (Node.js version)
- New environment variables to add
- Removed environment variables
- Modified environment variables
- Migration scripts to run
Automatically create migration guides for all possible version pairs.
gen-migrations-all [outDir]Examples:
# Generate all migrations
gen-migrations-all
# Save to custom directory
gen-migrations-all docs/migrationsOutput: Creates migration files for every version pair (1.0.0→1.1.0, 1.0.0→2.0.0, 1.1.0→2.0.0, ...)
You can import and use functions in your code:
import {
readRelease,
getAllVersions,
diffReleases,
diffToMarkdown,
releaseToMarkdown
} from 'migration-release';
// Read release information
const release = readRelease('1.0.0');
// Get all versions
const versions = getAllVersions();
// Compare 2 releases
const fromRelease = readRelease('1.0.0');
const toRelease = readRelease('2.0.0');
const diff = diffReleases(fromRelease, toRelease);
// Convert to markdown
const releaseMd = releaseToMarkdown(release);
const migrationMd = diffToMarkdown(diff);Read the JSON file of a release.
- version: Version to read (e.g., "1.0.0")
- releasesDir: Directory containing release files (default: "releases")
Get list of all versions sorted by semver.
Compare 2 releases and return an object containing changes:
runtimeChanges: Changes in Node.js versionenvAdded: New environment variablesenvRemoved: Removed environment variablesenvChanged: Modified environment variablesnewScripts: New migration scripts
Convert release object to markdown format.
Convert diff object to migration guide markdown.
Compare 2 version strings according to semantic versioning standard.
Generate tags based on release content. Auto-detects:
feature- if features existbugfix- if bugfixes existimprovement- if improvements existsecurity- if security updates existbreaking-change- if breaking changes existdeprecated- if deprecated items exist
Returns array of tags including "release" as base tag.
Generate full release notes with complete environment variable list.
Generate changelog showing only changes compared to previous version.
---
title: "v1.0.0"
date: "2025-01-15"
tags: ["release","feature","bugfix","security"]
---
## Release Information
- **Version**: `1.0.0`
- **Node**: `18.0.0`
## Features
- Added feature A
## Bug Fixes
- Fixed critical bug in module B
## Improvements
- Improved performance for module C
## Security
- Fixed security vulnerability CVE-2025-XXXX
## Environment Variables (complete list)
- `DATABASE_URL` (required) – default: `postgresql://localhost:5432/mydb` – Database connection URL---
title: "Upgrade 1.0.0 → 2.0.0"
tags: ["migration"]
---
Upgrade guide from `1.0.0` to `2.0.0`.
## Runtime
- NodeJS: `16.0.0` → `18.0.0`
## New Environment Variables
- `NEW_FEATURE_FLAG` (required) – default: `true` – Enable new feature
## Migration Scripts
### Update database schema
- Run command: npm run migrate
- Verify migration resultsISC
nghtminhdev
Công cụ tự động tạo tài liệu release notes và migration guides từ các file JSON.
migration-release là một bộ công cụ CLI giúp quản lý và tạo tài liệu cho các phiên bản phát hành (release) của dự án. Công cụ này:
- Đọc thông tin release từ các file JSON
- Tự động tạo release notes dưới dạng Markdown
- Tạo hướng dẫn migration giữa các phiên bản
- So sánh và theo dõi thay đổi về runtime, environment variables và scripts
- Node.js >= 14
npm install migration-releaseHoặc cài đặt global:
npm install -g migration-releaseCông cụ yêu cầu các file release được lưu trong thư mục releases/ với format:
releases/
├── 1.0.0.json
├── 1.1.0.json
└── 2.0.0.json
{
"version": "1.0.0",
"date": "2025-01-15",
"runtime": {
"node": "18.0.0"
},
"tags": ["custom-tag"],
"features": [
"Thêm chức năng A"
],
"bugfixes": [
"Sửa lỗi nghiêm trọng ở module B"
],
"improvements": [
"Cải thiện performance cho module C"
],
"security": [
"Sửa lỗ hổng bảo mật CVE-2025-XXXX"
],
"breakingChanges": [
"API endpoint /old-path đã bị loại bỏ"
],
"deprecated": [
"Hàm oldMethod() đã bị deprecated, sử dụng newMethod() thay thế"
],
"env": [
{
"key": "DATABASE_URL",
"required": true,
"default": "postgresql://localhost:5432/mydb",
"description": "Đường dẫn kết nối database"
}
],
"scripts": [
{
"id": "migration-001",
"title": "Cập nhật database schema",
"steps": [
"Đầu tiên, backup database",
{
"type": "bash",
"contents": [
"npm install",
"npm run migrate"
]
},
"Kiểm tra kết quả migration"
]
}
]
}Các phần hỗ trợ:
features: Tính năng mớibugfixes: Sửa lỗiimprovements: Cải tiến hiệu suất hoặc chất lượngsecurity: Cập nhật bảo mậtbreakingChanges: Thay đổi gây breakingdeprecated: Tính năng đã deprecatedtags: Tags tùy chỉnh (tùy chọn, tự động tạo nếu không cung cấp)- Các field tùy chỉnh: Bất kỳ field nào khác với array of strings sẽ tự động được render thành section (ví dụ:
"redis": ["item 1", "item 2"]sẽ thành## Redis)
Định dạng Script Steps:
Mảng steps trong scripts hỗ trợ 2 định dạng:
- Chuỗi văn bản: Mô tả bước đơn giản hiển thị dạng bullet point
- Object code block:
type: Ngôn ngữ để syntax highlighting (bash, javascript, sql, python, v.v.)contents: Mảng các dòng code
Bạn có thể kết hợp tự do cả 2 định dạng trong cùng một script.
Tạo tài liệu markdown cho một phiên bản cụ thể.
gen-release <version> [outDir]Ví dụ:
# Tạo release notes cho v1.0.0
gen-release 1.0.0
# Tạo và lưu vào thư mục tùy chỉnh
gen-release 1.0.0 docs/releasesKết quả: Tạo file changelog-md/1.0.0.md chứa thông tin đầy đủ về release.
Tạo tài liệu hướng dẫn nâng cấp từ phiên bản này sang phiên bản khác.
gen-migration <fromVersion> <toVersion> [outDir]Ví dụ:
# Tạo hướng dẫn upgrade từ 1.0.0 lên 2.0.0
gen-migration 1.0.0 2.0.0
# Lưu vào thư mục tùy chỉnh
gen-migration 1.0.0 2.0.0 docs/migrationsKết quả: Tạo file changelog-md/migrations/1.0.0-to-2.0.0.md chứa:
- Thay đổi về runtime (Node.js version)
- Environment variables mới cần thêm
- Environment variables bị xóa
- Environment variables thay đổi giá trị
- Scripts migration cần chạy
Tự động tạo migration guides cho tất cả các cặp phiên bản có thể.
gen-migrations-all [outDir]Ví dụ:
# Tạo tất cả migrations
gen-migrations-all
# Lưu vào thư mục tùy chỉnh
gen-migrations-all docs/migrationsKết quả: Tạo file migration cho mọi cặp phiên bản (1.0.0→1.1.0, 1.0.0→2.0.0, 1.1.0→2.0.0, ...)
Bạn có thể import và sử dụng các hàm trong code:
import {
readRelease,
getAllVersions,
diffReleases,
diffToMarkdown,
releaseToMarkdown
} from 'migration-release';
// Đọc thông tin release
const release = readRelease('1.0.0');
// Lấy tất cả các version
const versions = getAllVersions();
// So sánh 2 releases
const fromRelease = readRelease('1.0.0');
const toRelease = readRelease('2.0.0');
const diff = diffReleases(fromRelease, toRelease);
// Chuyển đổi sang markdown
const releaseMd = releaseToMarkdown(release);
const migrationMd = diffToMarkdown(diff);Đọc file JSON của một release.
- version: Phiên bản cần đọc (ví dụ: "1.0.0")
- releasesDir: Thư mục chứa các file release (mặc định: "releases")
Lấy danh sách tất cả các version được sắp xếp theo semver.
So sánh 2 release và trả về object chứa các thay đổi:
runtimeChanges: Thay đổi về Node.js versionenvAdded: Environment variables mớienvRemoved: Environment variables bị xóaenvChanged: Environment variables thay đổinewScripts: Scripts migration mới
Chuyển đổi object release thành markdown format.
Chuyển đổi object diff thành migration guide markdown.
So sánh 2 version strings theo chuẩn semantic versioning.
Tạo tags dựa trên nội dung release. Tự động phát hiện:
feature- nếu có featuresbugfix- nếu có bugfixesimprovement- nếu có improvementssecurity- nếu có cập nhật bảo mậtbreaking-change- nếu có breaking changesdeprecated- nếu có mục deprecated
Trả về mảng các tags bao gồm "release" làm tag cơ bản.
Tạo release notes đầy đủ với danh sách hoàn chỉnh các environment variables.
Tạo changelog chỉ hiển thị các thay đổi so với phiên bản trước.
---
title: "v1.0.0"
date: "2025-01-15"
tags: ["release","feature","bugfix","security"]
---
## Release Information
- **Version**: `1.0.0`
- **Node**: `18.0.0`
## Features
- Thêm chức năng A
## Bug Fixes
- Sửa lỗi nghiêm trọng ở module B
## Improvements
- Cải thiện performance cho module C
## Security
- Sửa lỗ hổng bảo mật CVE-2025-XXXX
## Environment Variables (complete list)
- `DATABASE_URL` (required) – default: `postgresql://localhost:5432/mydb` – Đường dẫn kết nối database---
title: "Upgrade 1.0.0 → 2.0.0"
tags: ["migration"]
---
Upgrade guide from `1.0.0` to `2.0.0`.
## Runtime
- NodeJS: `16.0.0` → `18.0.0`
## New Environment Variables
- `NEW_FEATURE_FLAG` (required) – default: `true` – Enable new feature
## Migration Scripts
### Cập nhật database schema
- Chạy lệnh: npm run migrate
- Kiểm tra kết quả migrationISC
nghtminhdev