diff --git a/.gitignore b/.gitignore index 67400651..5101f145 100644 --- a/.gitignore +++ b/.gitignore @@ -35,4 +35,7 @@ package-lock.json .claude/active-plan # Logs directory -logs/ \ No newline at end of file +logs/ + +# CI-generated files +.dev-release-info.json \ No newline at end of file diff --git a/scripts/dev-release.sh b/scripts/dev-release.sh index 90b5334b..1fb74bc3 100755 --- a/scripts/dev-release.sh +++ b/scripts/dev-release.sh @@ -106,6 +106,16 @@ gh release create "v${VERSION}" \ log_info "Created GitHub prerelease" +# Save release info for Discord notification +# This file is read by send-discord-release.cjs for dev releases +cat > .dev-release-info.json << EOF +{ + "version": "${VERSION}", + "notes": $(echo "$NOTES" | jq -Rs .) +} +EOF +log_info "Saved release info for Discord notification" + # Output for GitHub Actions echo "version=${VERSION}" >> "${GITHUB_OUTPUT:-/dev/null}" echo "released=true" >> "${GITHUB_OUTPUT:-/dev/null}" diff --git a/scripts/send-discord-release.cjs b/scripts/send-discord-release.cjs index b22da048..c1e2c970 100644 --- a/scripts/send-discord-release.cjs +++ b/scripts/send-discord-release.cjs @@ -34,7 +34,7 @@ try { } /** - * Extract latest release from CHANGELOG.md + * Extract latest release from CHANGELOG.md (for production releases) */ function extractLatestRelease() { const changelogPath = 'CHANGELOG.md'; @@ -92,6 +92,40 @@ function extractLatestRelease() { return { version, date, sections }; } +/** + * Extract dev release info from .dev-release-info.json (for dev releases) + * Falls back to CHANGELOG.md if file not found + */ +function extractDevRelease() { + const devInfoPath = '.dev-release-info.json'; + + if (!fs.existsSync(devInfoPath)) { + console.log('[!] .dev-release-info.json not found, falling back to CHANGELOG.md'); + return extractLatestRelease(); + } + + try { + const content = fs.readFileSync(devInfoPath, 'utf8'); + const info = JSON.parse(content); + + // Parse commit messages into a simple Changes section + const changes = info.notes + .split('\n') + .filter((line) => line.trim().startsWith('-')) + .map((line) => line.trim().substring(1).trim()) + .filter((item) => item); + + return { + version: info.version, + date: new Date().toISOString().split('T')[0], + sections: changes.length > 0 ? { Changes: changes } : {}, + }; + } catch (error) { + console.error('[!] Error reading .dev-release-info.json:', error.message); + return extractLatestRelease(); + } +} + /** * Create Discord embed */ @@ -203,7 +237,8 @@ function sendToDiscord(embed) { // Main try { - const release = extractLatestRelease(); + const isDev = releaseType === 'dev'; + const release = isDev ? extractDevRelease() : extractLatestRelease(); console.log(`[i] Preparing ${releaseType} notification for v${release.version}`); const embed = createEmbed(release);