mirror of
https://github.com/apricote/releaser-pleaser.git
synced 2026-02-11 20:27:02 +00:00
feat: update version references in any files
This commit is contained in:
parent
7b84b3cdcc
commit
f753fbc32d
4 changed files with 107 additions and 18 deletions
|
|
@ -3,7 +3,9 @@ package rp
|
|||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"log/slog"
|
||||
"os"
|
||||
|
||||
"github.com/go-git/go-git/v5"
|
||||
"github.com/go-git/go-git/v5/config"
|
||||
|
|
@ -20,15 +22,19 @@ type ReleaserPleaser struct {
|
|||
targetBranch string
|
||||
commitParser CommitParser
|
||||
nextVersion VersioningStrategy
|
||||
extraFiles []string
|
||||
updaters []Updater
|
||||
}
|
||||
|
||||
func New(forge Forge, logger *slog.Logger, targetBranch string, commitParser CommitParser, versioningStrategy VersioningStrategy) *ReleaserPleaser {
|
||||
func New(forge Forge, logger *slog.Logger, targetBranch string, commitParser CommitParser, versioningStrategy VersioningStrategy, extraFiles []string, updaters []Updater) *ReleaserPleaser {
|
||||
return &ReleaserPleaser{
|
||||
forge: forge,
|
||||
logger: logger,
|
||||
targetBranch: targetBranch,
|
||||
commitParser: commitParser,
|
||||
nextVersion: versioningStrategy,
|
||||
extraFiles: extraFiles,
|
||||
updaters: updaters,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -236,21 +242,47 @@ func (rp *ReleaserPleaser) runReconcileReleasePR(ctx context.Context) error {
|
|||
return fmt.Errorf("failed to check out branch: %w", err)
|
||||
}
|
||||
|
||||
err = RunUpdater(ctx, nextVersion, worktree)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to update files with new version: %w", err)
|
||||
}
|
||||
|
||||
changelogEntry, err := NewChangelogEntry(analyzedCommits, nextVersion, rp.forge.ReleaseURL(nextVersion), releaseOverrides.Prefix, releaseOverrides.Suffix)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to build changelog entry: %w", err)
|
||||
}
|
||||
|
||||
// TODO: Fold UpdateChangelogFile into generalized Updater
|
||||
err = UpdateChangelogFile(worktree, changelogEntry)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to update changelog file: %w", err)
|
||||
}
|
||||
|
||||
for _, extraFile := range rp.extraFiles {
|
||||
_, err := worktree.Filesystem.Stat(extraFile)
|
||||
if err != nil {
|
||||
// TODO: Check for non existing file or dirs
|
||||
return fmt.Errorf("failed to run file updater: %w", err)
|
||||
}
|
||||
|
||||
file, err := worktree.Filesystem.OpenFile(extraFile, os.O_RDWR, 0)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
content, err := io.ReadAll(file)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
updatedContent := string(content)
|
||||
|
||||
for _, updater := range rp.updaters {
|
||||
updatedContent = updater.UpdateContent(updatedContent, nextVersion)
|
||||
}
|
||||
|
||||
_, err = worktree.Add(extraFile)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to add updated file to git worktree: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
releaseCommitMessage := fmt.Sprintf("chore(%s): release %s", rp.targetBranch, nextVersion)
|
||||
releaseCommitHash, err := worktree.Commit(releaseCommitMessage, &git.CommitOptions{
|
||||
Author: GitSignature(),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue