소스 정보
- 저장소
- jasonraimondi/ts-oauth2-server
- 최근 소스 활동
- 2026년 6월 1일 01:49
- 감지된 SKILL.md 언어
- 영어
- 스타
- 308
- 포크
- 55
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/jasonraimondi/ts-oauth2-server --skill update-release명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | update-release |
| description | Automates the release process for the ts-oauth2-server project. |
| license | Complete terms in LICENSE |
Automates the release process for the ts-oauth2-server project by:
package.json and jsr.jsonpnpm typecheck && pnpm build && pnpm test) before release, aborting if any step fails.github/workflows/publish.yml)Use this skill when the user requests:
package.json and jsr.json files presentCHANGELOG.md file existsSupported version bump types (following semver):
Prerelease format (REQUIRED):
-rc.#. This project's prereleases are alwaysX.Y.Z-rc.N, starting atrc.0and incrementing the trailing number (rc.0→rc.1→ …). Never use bare-0or-next.Nsuffixes. The new prerelease number must be strictly greater than the previous one for the sameX.Y.Z.
import { readFileSync } from 'fs';
function getCurrentVersion(): string {
const pkg = JSON.parse(readFileSync('package.json', 'utf-8'));
return pkg.version;
}
// Prereleases use the REQUIRED `-rc.#` convention (e.g. 5.0.0-rc.0, 5.0.0-rc.1).
function bumpVersion(current: string, bumpType: string): string {
const parts = current.split('-');
const [major, minor, patch] = parts[0].split('.').map(Number);
const prerelease = parts[1]; // e.g. "rc.0"
switch (bumpType) {
case 'major':
return `${major + 1}.0.0`;
case 'minor':
return `${major}.${minor + 1}.0`;
case 'patch':
return `${major}.${minor}.${patch + 1}`;
case 'premajor':
return `${major + 1}.0.0-rc.0`;
case 'preminor':
return `${major}.${minor + }.0-rc.0`;
:
;
:
(prerelease) {
match = prerelease.();
(!match) {
();
}
;
}
;
:
();
}
}
# Get the last tag
last_tag=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
# Get commits since last tag
if [ -z "$last_tag" ]; then
# No previous tag, get all commits
commits=$(git log --pretty=format:"%s" --no-merges)
else
# Get commits since last tag
commits=$(git log ${last_tag}..HEAD --pretty=format:"%s" --no-merges)
fi
Parse commits and categorize them based on conventional commit format:
feat: or feature: → Added sectionfix: → Fixed sectionBREAKING CHANGE: or !: → Changed section (breaking)docs: → Skip (or note in documentation)chore:, refactor:, test: → Skip or group under "Changed"security: → Security sectionFollow Keep a Changelog format:
## [Version] - YYYY-MM-DD
### Added
- New feature A
- New feature B
### Changed
- **BREAKING**: Changed behavior X
- Updated Y
### Fixed
- Fixed bug in Z
- Resolved issue with W
### Security
- Security fix for vulnerability V
Update both package.json and jsr.json with the new version, and prepend the new changelog entry to CHANGELOG.md under the ## [Unreleased] section.
Always run the full pre-flight locally before pausing for confirmation. The publish workflow runs pnpm build && pnpm test in CI, but failures there fire only after the release event — too late to undo a consumed version. Catch them locally first.
Run all three, in order, and abort the release if any fails:
pnpm typecheck # tsc -p tsconfig.build.json --noEmit
pnpm build # tsdown
pnpm test # vitest run
If any step fails, do NOT proceed to commit/tag/release — surface the failure and stop. pnpm build writes to the gitignored dist/, so it does not dirty the release commit; confirm git status --short shows only CHANGELOG.md, package.json, and jsr.json before committing.
After the file edits land and the pre-flight is green, stop and ask the user for confirmation before any git mutation. Do NOT proceed automatically — the user may want to review the diff or hand-edit changelog wording first.
Once confirmed, run these in order:
# 1. Commit the version bump + changelog
git add CHANGELOG.md package.json jsr.json
git commit -m "chore: release vX.Y.Z"
# 2. Tag and push (tag push alone does NOT trigger publish)
git tag vX.Y.Z
git push && git push --tags
# 3. Create GitHub release — THIS is what triggers .github/workflows/publish.yml
# (workflow listens on `release: [released, prereleased]`, not on tag push)
gh release create vX.Y.Z --title "vX.Y.Z" --notes "<changelog body for this version>"
For the --notes body, pass the section content from CHANGELOG.md for the new version (everything between the ## [X.Y.Z] header and the next ## header), without the version header itself. Use a HEREDOC for multiline notes.
For prereleases (always -rc.#, e.g. 5.0.0-rc.0), add --prerelease to gh release create so the workflow's prerelease branch publishes to npm under the next dist-tag.
After gh release create returns the release URL, share it with the user and note that npm + JSR publishing is now running in CI.
// User request: "Create a patch release"
const currentVersion = "4.1.1";
const newVersion = "4.1.2";
// 1. Get commits since v4.1.1
// 2. Categorize commits
// 3. Generate changelog entry
// 4. Update package.json, jsr.json, CHANGELOG.md
// User request: "Bump minor version and update changelog"
const currentVersion = "4.1.1";
const newVersion = "4.2.0";
// Changelog generated from commits:
// - feat: Add new grant type support
// - feat: Enhance token validation
// - fix: Resolve refresh token issue
// User request: "Create major release for breaking changes"
const currentVersion = "4.1.1";
const newVersion = "5.0.0";
// Identify BREAKING CHANGE commits
// Place them under ### Changed section
Here's a complete implementation approach:
interface ChangelogEntry {
added: string[];
changed: string[];
deprecated: string[];
removed: string[];
fixed: string[];
security: string[];
}
async function createRelease(bumpType: string): Promise<void> {
// 1. Read current version
const currentVersion = getCurrentVersion();
console.log(`Current version: ${currentVersion}`);
// 2. Calculate new version
const newVersion = bumpVersion(currentVersion, bumpType);
console.log(`New version: ${newVersion}`);
// 3. Get last tag and commits
const lastTag = await getLastTag();
const commits = await getCommitsSinceTag(lastTag);
console.log(`Found ${commits.length} commits since ${lastTag || 'beginning'}`);
// 4. Parse and categorize commits
changelog = (commits);
changelogEntry = (newVersion, changelog);
.();
(newVersion);
(newVersion);
(changelogEntry);
.();
.();
.();
}
(): {
: = {
: [],
: [],
: [],
: [],
: [],
: [],
};
( commit commits) {
lower = commit.();
(lower.() || lower.()) {
entry..(commit.(, ));
} (lower.() || lower.()) {
entry..(commit.(, ));
} (lower.()) {
entry..(commit.(, ));
} (lower.()) {
entry..(commit.(, ));
} (lower.()) {
entry..(commit.(, ));
} (lower.()) {
entry..(commit.(, ));
}
}
entry;
}
(): {
date = ().().()[];
entry = ;
(changelog.. > ) {
entry += ;
( item changelog.) {
entry += ;
}
entry += ;
}
(changelog.. > ) {
entry += ;
( item changelog.) {
entry += ;
}
entry += ;
}
(changelog.. > ) {
entry += ;
( item changelog.) {
entry += ;
}
entry += ;
}
(changelog.. > ) {
entry += ;
( item changelog.) {
entry += ;
}
entry += ;
}
(changelog.. > ) {
entry += ;
( item changelog.) {
entry += ;
}
entry += ;
}
(changelog.. > ) {
entry += ;
( item changelog.) {
entry += ;
}
entry += ;
}
entry;
}
The skill should provide clear feedback:
Current version: 4.1.1
Bumping version: patch
New version: 4.1.2
Found 5 commits since v4.1.1
Updated package.json, jsr.json, CHANGELOG.md
Pre-flight: typecheck ✓ build ✓ test ✓
Files prepared for v4.1.2.
Confirm to proceed with: commit + tag + push + GitHub release
(GitHub release triggers npm + JSR publish via .github/workflows/publish.yml)
After user confirmation, run the git+gh commands and report the release URL.
This skill respects the project's:
gh release create in sequence — the GitHub release is what triggers .github/workflows/publish.yml to publish to npm and JSR (a tag push alone does NOT trigger publish)