From 11f840324160b64a61a0588d7e93fe172a5536d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20T=C3=B6lle?= Date: Fri, 15 Nov 2024 18:07:59 +0100 Subject: [PATCH] fix: create CHANGELOG.md if it does not exist (#108) During a previous refactoring (#15) the Changelog generation logic stopped creating the file if it did not exist. This makes sure that the file actually gets created. This is primarily required while onboarding new repositories. Closes #85 --- internal/git/git.go | 12 +++++++++--- releaserpleaser.go | 4 ++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/internal/git/git.go b/internal/git/git.go index 09fd5c9..128f94c 100644 --- a/internal/git/git.go +++ b/internal/git/git.go @@ -18,7 +18,8 @@ import ( ) const ( - remoteName = "origin" + remoteName = "origin" + newFilePermissions = 0o644 ) type Commit struct { @@ -97,13 +98,18 @@ func (r *Repository) Checkout(_ context.Context, branch string) error { return nil } -func (r *Repository) UpdateFile(_ context.Context, path string, updaters []updater.Updater) error { +func (r *Repository) UpdateFile(_ context.Context, path string, create bool, updaters []updater.Updater) error { worktree, err := r.r.Worktree() if err != nil { return err } - file, err := worktree.Filesystem.OpenFile(path, os.O_RDWR, 0) + fileFlags := os.O_RDWR + if create { + fileFlags |= os.O_CREATE + } + + file, err := worktree.Filesystem.OpenFile(path, fileFlags, newFilePermissions) if err != nil { return err } diff --git a/releaserpleaser.go b/releaserpleaser.go index 2b1754f..0b1b846 100644 --- a/releaserpleaser.go +++ b/releaserpleaser.go @@ -253,14 +253,14 @@ func (rp *ReleaserPleaser) runReconcileReleasePR(ctx context.Context) error { // Info for updaters info := updater.ReleaseInfo{Version: nextVersion, ChangelogEntry: changelogEntry} - err = repo.UpdateFile(ctx, updater.ChangelogFile, updater.WithInfo(info, updater.Changelog)) + err = repo.UpdateFile(ctx, updater.ChangelogFile, true, updater.WithInfo(info, updater.Changelog)) if err != nil { return fmt.Errorf("failed to update changelog file: %w", err) } for _, path := range rp.extraFiles { // TODO: Check for missing files - err = repo.UpdateFile(ctx, path, updater.WithInfo(info, rp.updaters...)) + err = repo.UpdateFile(ctx, path, false, updater.WithInfo(info, rp.updaters...)) if err != nil { return fmt.Errorf("failed to run file updater: %w", err) }