From 0792b3d8b7c330a916f8758a742e714b37ffc0d7 Mon Sep 17 00:00:00 2001 From: kolaente Date: Tue, 3 Mar 2026 11:40:40 +0100 Subject: [PATCH] feat(release): update frontend package.json version on release Closes #892 --- magefile.go | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/magefile.go b/magefile.go index abe862524..e7782c89c 100644 --- a/magefile.go +++ b/magefile.go @@ -1817,10 +1817,16 @@ func (Dev) TagRelease(version string) error { return fmt.Errorf("failed to update CHANGELOG.md: %w", err) } + // Update frontend package.json version + fmt.Println("Updating frontend package.json version...") + if err := updateFrontendPackageJSON(version); err != nil { + return fmt.Errorf("failed to update frontend package.json: %w", err) + } + // Commit the changes fmt.Println("Committing changes...") commitMsg := fmt.Sprintf("chore: %s release preparations", version) - cmd := exec.Command("git", "add", "README.md", "CHANGELOG.md") + cmd := exec.Command("git", "add", "README.md", "CHANGELOG.md", "frontend/package.json") if err := cmd.Run(); err != nil { return fmt.Errorf("failed to stage files: %w", err) } @@ -1941,6 +1947,27 @@ func updateReadmeBadge(version string) error { return nil } +// updateFrontendPackageJSON updates the version field in frontend/package.json. +func updateFrontendPackageJSON(version string) error { + // npm convention: no "v" prefix + npmVersion := strings.TrimPrefix(version, "v") + + pkgPath := "frontend/package.json" + content, err := os.ReadFile(pkgPath) + if err != nil { + return fmt.Errorf("failed to read %s: %w", pkgPath, err) + } + + re := regexp.MustCompile(`("version"\s*:\s*")([^"]+)(")`) + newContent := re.ReplaceAllString(string(content), "${1}"+npmVersion+"${3}") + + if err := os.WriteFile(pkgPath, []byte(newContent), 0o644); err != nil { + return fmt.Errorf("failed to write %s: %w", pkgPath, err) + } + + return nil +} + // prependChangelog prepends the new changelog entries to CHANGELOG.md func prependChangelog(newChangelog string) error { changelogPath := "CHANGELOG.md"