@@ -50,8 +50,13 @@ var Steps []Step = []Step{
5050 Step {
5151 Title : "Update release notes file" ,
5252 Run : func () {
53- fmt .Printf ("Update the release notes file: docs/CHANGELOG.md\n " )
54- WaitForDone ()
53+ changelogPath := "docs/CHANGELOG.md"
54+ if err := UpdateUnreleasedChangelogFile (changelogPath , VersionFileInfo {
55+ VersionNumber : ReleaseVersion ,
56+ ReleaseDate : ReleaseDate ,
57+ }); err != nil {
58+ Stopf ("failed to update changelog file %s: %v" , changelogPath , err )
59+ }
5560 },
5661 },
5762
@@ -712,6 +717,40 @@ func UpdateDebianChangelog(changelogFilePath string, versionInfo VersionFileInfo
712717 return nil
713718}
714719
720+ func UpdateUnreleasedChangelogFile (changelogFilePath string , versionInfo VersionFileInfo ) error {
721+ originalData , err := os .ReadFile (changelogFilePath )
722+ if err != nil {
723+ return err
724+ }
725+
726+ newData , err := UpdateUnreleasedChangelog (originalData , versionInfo )
727+ if err != nil {
728+ return err
729+ }
730+
731+ fileMode := fs .FileMode (0644 ) // Unused, because the file should already exist.
732+ if err := os .WriteFile (changelogFilePath , newData , fileMode ); err != nil {
733+ return err
734+ }
735+
736+ return nil
737+ }
738+
739+ func UpdateUnreleasedChangelog (changelog []byte , versionInfo VersionFileInfo ) ([]byte , error ) {
740+ unreleasedHeadingRegexp := regexp .MustCompile ("(?m:^## Unreleased\n )" )
741+ newHeading := []byte (fmt .Sprintf (
742+ "## %s (%s)\n \n [Downloads](https://c.quick-lint-js.com/releases/%s/)\n " ,
743+ versionInfo .VersionNumber ,
744+ versionInfo .ReleaseDate .Format ("2006-01-02" ),
745+ versionInfo .VersionNumber ,
746+ ))
747+ newChangelog := unreleasedHeadingRegexp .ReplaceAllLiteral (changelog , newHeading )
748+ if bytes .Equal (newChangelog , changelog ) {
749+ return nil , fmt .Errorf ("could not find '## Unreleased' heading in changelog" )
750+ }
751+ return newChangelog , nil
752+ }
753+
715754func EnsureEmptyDirectory (path string ) {
716755Retry:
717756 err := os .Mkdir (path , 0700 )
0 commit comments