@@ -605,23 +605,85 @@ jobs:
605605 VERSION="${{ github.event.inputs.version }}"
606606 echo "version=$VERSION" >> $GITHUB_OUTPUT
607607
608- - name : 📝 Generate Changelog ( Release Drafter)
609- id : changelog
610- uses : release-drafter/release-drafter@v5
608+ - name : 📝 Generate Automatic Release Notes
609+ id : generate_notes
610+ uses : actions/github-script@v7
611611 with :
612- config-name : release-drafter.yml
613- name : Thunder ${{ github.event.inputs.version }}
614- tag : ${{ github.event.inputs.version }}
615- prerelease : ${{ github.event.inputs.prerelease }}
616- publish : false
617- env :
618- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
612+ script : |
613+ const currentTag = '${{ github.event.inputs.version }}';
614+
615+ try {
616+ // Get only the 2 most recent releases (current + previous)
617+ const { data: releases } = await github.rest.repos.listReleases({
618+ owner: context.repo.owner,
619+ repo: context.repo.repo,
620+ per_page: 2
621+ });
622+
623+ console.log(`Found ${releases.length} recent release(s)`);
624+
625+ // Find the previous release (skip the current one if it exists)
626+ let previousTag = null;
627+
628+ if (releases.length === 0) {
629+ console.log('No previous releases found - this is the first release');
630+ } else if (releases.length === 1) {
631+ // Only one release exists
632+ if (releases[0].tag_name === currentTag) {
633+ console.log('Current release found, but no previous release exists');
634+ } else {
635+ previousTag = releases[0].tag_name;
636+ console.log(`Previous release tag: ${previousTag}`);
637+ }
638+ } else {
639+ // Two or more releases exist
640+ if (releases[0].tag_name === currentTag) {
641+ // Current release is the most recent, use the second one
642+ previousTag = releases[1].tag_name;
643+ console.log(`Current release found at position 0, using position 1: ${previousTag}`);
644+ } else {
645+ // Current release doesn't exist yet or is not the most recent
646+ previousTag = releases[0].tag_name;
647+ console.log(`Using most recent release: ${previousTag}`);
648+ }
649+ }
619650
620- - name : ⏳ Wait for Release Drafter to Complete
621- run : |
622- echo "⏳ Waiting for release-drafter to fully create the draft release..."
623- sleep 10
624- echo "✅ Proceeding with release creation"
651+ if (previousTag !== null && previousTag !== undefined) {
652+ console.log(`Will compare ${previousTag}...${currentTag}`);
653+ }
654+
655+ // Generate release notes
656+ // Build the request parameters conditionally
657+ const releaseNotesParams = {
658+ owner: context.repo.owner,
659+ repo: context.repo.repo,
660+ tag_name: currentTag,
661+ };
662+
663+ // Only include previous_tag_name if it exists
664+ if (previousTag !== null && previousTag !== undefined) {
665+ releaseNotesParams.previous_tag_name = previousTag;
666+ }
667+
668+ const { data } = await github.rest.repos.generateReleaseNotes(releaseNotesParams);
669+
670+ // Only save to file if we have actual content
671+ const releaseNotesBody = data.body || '';
672+ if (releaseNotesBody.trim().length > 0) {
673+ const fs = require('fs');
674+ fs.writeFileSync('release-notes.md', releaseNotesBody);
675+ console.log('✅ Generated release notes successfully');
676+ console.log(`Release notes length: ${releaseNotesBody.length} characters`);
677+ } else {
678+ console.log('⚠️ Generated release notes are empty, skipping file creation');
679+ }
680+
681+ return releaseNotesBody;
682+ } catch (error) {
683+ console.log('⚠️ Could not generate release notes:', error.message);
684+ // Return empty string if generation fails (e.g., for first release)
685+ return '';
686+ }
625687
626688 - name : 📝 Extract README Content for Release
627689 id : readme_extract
@@ -696,16 +758,26 @@ jobs:
696758 { print }
697759 ')
698760
699- # Get changelog from Release Drafter
700- CHANGELOG="${{ steps.changelog.outputs.body }}"
761+ # Read the generated release notes if they exist
762+ CHANGELOG=""
763+ if [ -f "release-notes.md" ]; then
764+ CHANGELOG=$(cat release-notes.md)
765+ echo "✅ Found generated release notes"
766+ else
767+ echo "⚠️ No release notes file found, skipping changelog"
768+ fi
701769
702- # Combine for release description
770+ # Combine for release description with changelog before Quickstart
703771 echo "RELEASE_BODY<<EOF" >> $GITHUB_ENV
704772 echo "$INTRO" >> $GITHUB_ENV
705773 echo "" >> $GITHUB_ENV
706- echo "## 🔀 What's Changed" >> $GITHUB_ENV
707- echo "$CHANGELOG" >> $GITHUB_ENV
708- echo "" >> $GITHUB_ENV
774+
775+ # Insert changelog here (before Quickstart)
776+ if [ -n "$CHANGELOG" ]; then
777+ echo "$CHANGELOG" >> $GITHUB_ENV
778+ echo "" >> $GITHUB_ENV
779+ fi
780+
709781 echo "$QUICKSTART" >> $GITHUB_ENV
710782 echo "" >> $GITHUB_ENV
711783 echo "$LICENSE" >> $GITHUB_ENV
0 commit comments