Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
882c8d1
chore: no package versions
brianquinlan May 8, 2026
8e4c949
Vibe 1
brianquinlan Jul 8, 2026
af7297c
Partial revert
brianquinlan Jul 8, 2026
dcb2c6c
Merge remote-tracking branch 'upstream/main' into design_doc_ideas
brianquinlan Jul 8, 2026
a773d75
work
brianquinlan Jul 8, 2026
1a91a3c
update librarian.yaml
brianquinlan Jul 9, 2026
c2542be
Update bump.go
brianquinlan Jul 9, 2026
88e2ae8
Update pubspec.yaml deps after a dep has changed.
brianquinlan Jul 14, 2026
fc6cf7d
update packages:
brianquinlan Jul 14, 2026
c82037b
change+readme+poc
brianquinlan Jul 18, 2026
b15c4bf
Fixes
brianquinlan Jul 18, 2026
415da4c
Update bump.go
brianquinlan Jul 21, 2026
a4ffccf
explicitly only allow all
brianquinlan Jul 21, 2026
67b77e7
yaml
brianquinlan Jul 21, 2026
6e7e009
Merge remote-tracking branch 'upstream/main' into design_doc_ideas
brianquinlan Jul 21, 2026
b6dcf75
Fixes
brianquinlan Jul 21, 2026
15d4887
fix
brianquinlan Jul 21, 2026
c2a3653
fix
brianquinlan Jul 21, 2026
99365a5
fix pubspec
brianquinlan Jul 21, 2026
e8f35da
Update bump.go
brianquinlan Jul 21, 2026
be4da76
restore
brianquinlan Jul 21, 2026
a889bba
fix
brianquinlan Jul 21, 2026
fac44f8
simplification
brianquinlan Jul 21, 2026
23d00f0
fix
brianquinlan Jul 21, 2026
d5890e6
Update deps.go
brianquinlan Jul 21, 2026
d9b1ecc
Update bump.go
brianquinlan Jul 21, 2026
dee41ef
fix
brianquinlan Jul 21, 2026
bd29737
fix
brianquinlan Jul 21, 2026
4cf18b8
Update bump_test.go
brianquinlan Jul 21, 2026
5a99b85
Update bump_test.go
brianquinlan Jul 21, 2026
3883455
Update bump_test.go
brianquinlan Jul 21, 2026
e57cb4c
Update bump_test.go
brianquinlan Jul 21, 2026
766e0d3
Update bump_test.go
brianquinlan Jul 21, 2026
dcef2ca
fix
brianquinlan Jul 22, 2026
91a0feb
simplify
brianquinlan Jul 22, 2026
1ef4243
move stuff
brianquinlan Jul 22, 2026
91649dd
fix
brianquinlan Jul 22, 2026
c951c63
test(internal/librarian/dart): use golden files for bump tests
brianquinlan Jul 22, 2026
880cf78
golden
brianquinlan Jul 22, 2026
f311da1
test(internal/librarian/dart): fix Dart syntax in mock file write
brianquinlan Jul 22, 2026
b3e84f0
fix
brianquinlan Jul 22, 2026
989f701
Update bump.go
brianquinlan Jul 22, 2026
17e71ba
Update bump.go
brianquinlan Jul 22, 2026
6d78e58
update golden
brianquinlan Jul 22, 2026
5537d1a
fix
brianquinlan Jul 22, 2026
67d6c0f
Fix
brianquinlan Jul 22, 2026
b395308
Update bump_test.go
brianquinlan Jul 22, 2026
f983fb5
Merge branch 'main' into design_doc_ideas
brianquinlan Jul 22, 2026
984ae96
remove .dart_tool
brianquinlan Jul 22, 2026
2563cc7
consolidate
brianquinlan Jul 22, 2026
be73563
add license
brianquinlan Jul 22, 2026
8f0db33
fix
brianquinlan Jul 22, 2026
2836dc7
Fix
brianquinlan Jul 22, 2026
25b1d4a
Update bump.go
brianquinlan Jul 22, 2026
1eb44e2
Merge branch 'main' into design_doc_ideas
brianquinlan Jul 22, 2026
7068095
Remove `oldVersion`
brianquinlan Jul 22, 2026
d91a21f
Update testhelper.go
brianquinlan Jul 22, 2026
a922905
Update testhelper.go
brianquinlan Jul 22, 2026
38dc833
Merge branch 'main' into design_doc_ideas
brianquinlan Jul 23, 2026
fd75f3b
Update bump.go
brianquinlan Jul 23, 2026
f036571
document algorithm
brianquinlan Jul 23, 2026
359cd37
Merge branch 'main' into design_doc_ideas
brianquinlan Jul 23, 2026
01a6c80
add invariant
brianquinlan Jul 24, 2026
0283a03
Update bump.go
brianquinlan Jul 24, 2026
f758625
Update internal/librarian/dart/bump.go
brianquinlan Jul 24, 2026
3bd64b5
Update bump.go
brianquinlan Jul 24, 2026
5a925d6
Merge branch 'design_doc_ideas' of https://github.com/brianquinlan/li…
brianquinlan Jul 24, 2026
208cacb
Update pubspec.go
brianquinlan Jul 24, 2026
512edfc
Merge remote-tracking branch 'upstream/main' into design_doc_ideas
brianquinlan Aug 4, 2026
2e7cef1
Merge branch 'main' into design_doc_ideas
brianquinlan Aug 6, 2026
f3fa57a
Merge branch 'main' into design_doc_ideas
brianquinlan Aug 6, 2026
d57cf1d
Merge branch 'main' into design_doc_ideas
brianquinlan Aug 6, 2026
81b6927
Merge branch 'main' into design_doc_ideas
brianquinlan Aug 6, 2026
ef67fa6
Merge branch 'main' into design_doc_ideas
brianquinlan Aug 7, 2026
dafcb1b
Update bump.go
brianquinlan Aug 7, 2026
a87c4a0
Merge branch 'main' into design_doc_ideas
brianquinlan Aug 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions internal/git/git.go
Original file line number Diff line number Diff line change
Expand Up @@ -185,3 +185,24 @@ func GetCommitSubject(ctx context.Context, gitExe, revision string) (string, err
}
return strings.TrimSuffix(output, "\n"), nil
}

// FormatTagName formats a tag name using tagFormat, name and version.
func FormatTagName(tagFormat, name, version string) string {
return strings.NewReplacer("{name}", name, "{version}", version).Replace(tagFormat)
}

// HasChangesIn checks if any of the filesChanged are inside dir (excluding exclusion if non-empty).
func HasChangesIn(dir, exclusion string, filesChanged []string) bool {
if !strings.HasSuffix(dir, "/") {
dir += "/"
}
for _, f := range filesChanged {
if strings.HasPrefix(f, dir) {
if exclusion != "" && strings.HasPrefix(f, exclusion) {
continue
}
return true
}
Comment thread
brianquinlan marked this conversation as resolved.
}
return false
}
82 changes: 82 additions & 0 deletions internal/git/git_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -599,6 +599,88 @@ func TestGetCommitSubject_Error(t *testing.T) {
}
}

func TestFormatTagName(t *testing.T) {
for _, test := range []struct {
name string
tagFormat string
pkgName string
version string
want string
}{
{
name: "standard tag",
tagFormat: "{name}/v{version}",
pkgName: "storage",
version: "1.2.3",
want: "storage/v1.2.3",
},
{
name: "different format",
tagFormat: "release-{name}-{version}",
pkgName: "pubsub",
version: "0.4.0",
want: "release-pubsub-0.4.0",
},
} {
t.Run(test.name, func(t *testing.T) {
got := FormatTagName(test.tagFormat, test.pkgName, test.version)
if got != test.want {
t.Errorf("FormatTagName(%q, %q, %q) = %q; want %q", test.tagFormat, test.pkgName, test.version, got, test.want)
}
})
}
}

func TestHasChangesIn(t *testing.T) {
for _, test := range []struct {
name string
dir string
exclusion string
filesChanged []string
want bool
}{
{
name: "match exact prefix with trailing slash",
dir: "packages/my_package/",
filesChanged: []string{"packages/my_package/lib/src/foo.dart"},
want: true,
},
{
name: "match prefix without trailing slash",
dir: "packages/my_package",
filesChanged: []string{"packages/my_package/lib/src/foo.dart"},
want: true,
},
{
name: "no match different package",
dir: "packages/my_package",
filesChanged: []string{"packages/other_package/lib/src/foo.dart"},
want: false,
},
{
name: "exclusion matches",
dir: "packages/my_package",
exclusion: "packages/my_package/ignored",
filesChanged: []string{"packages/my_package/ignored/foo.dart"},
want: false,
},
{
name: "exclusion does not match change",
dir: "packages/my_package",
exclusion: "packages/my_package/ignored",
filesChanged: []string{"packages/my_package/lib/src/foo.dart"},
want: true,
},
} {
t.Run(test.name, func(t *testing.T) {
got := HasChangesIn(test.dir, test.exclusion, test.filesChanged)
if got != test.want {
t.Errorf("HasChangesIn(%q, %q, %v) = %v; want %v", test.dir, test.exclusion, test.filesChanged, got, test.want)
}
})
}
}

func TestGitConfigIgnoreGlobalSigning(t *testing.T) {
fakeGlobalConfig := filepath.Join(t.TempDir(), ".gitconfig")
gitConfigContent := `
Expand Down
35 changes: 10 additions & 25 deletions internal/librarian/bump.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ import (
"errors"
"fmt"
"path/filepath"
"strings"

"github.com/googleapis/librarian/internal/command"
"github.com/googleapis/librarian/internal/config"
"github.com/googleapis/librarian/internal/git"
"github.com/googleapis/librarian/internal/librarian/dart"
"github.com/googleapis/librarian/internal/librarian/golang"
"github.com/googleapis/librarian/internal/librarian/python"
"github.com/googleapis/librarian/internal/librarian/rust"
Expand Down Expand Up @@ -122,6 +122,12 @@ func runBump(ctx context.Context, cfg *config.Config, all bool, libraryName, ver
if cfg.Language == config.LanguageSwift {
return legacySidekickBump(ctx, cfg, all, libraryName, versionOverride)
}
if cfg.Language == config.LanguageDart {
if err := dart.Bump(ctx, cfg, all, libraryName, versionOverride); err != nil {
return err
}
return RunTidyOnConfig(ctx, ".", cfg)
}

librariesToBump, err := findLibrariesToBump(ctx, cfg, all, libraryName)
if err != nil {
Expand Down Expand Up @@ -162,7 +168,7 @@ func findLibrariesToBump(ctx context.Context, cfg *config.Config, all bool, libr
if lib.SkipRelease || lib.Version == "" {
continue
}
lastReleaseTagName := formatTagName(cfg.Default.TagFormat, lib)
lastReleaseTagName := git.FormatTagName(cfg.Default.TagFormat, lib.Name, lib.Version)
lastReleaseTagCommit, err := git.GetCommitHash(ctx, command.Git, lastReleaseTagName)
if err != nil {
return nil, fmt.Errorf("error retrieving commit for tag %s (from library %s version %s): %w", lastReleaseTagName, lib.Name, lib.Version, err)
Expand Down Expand Up @@ -193,22 +199,7 @@ func libraryChanged(cfg *config.Config, library *config.Library, filesChanged []
default:
output = libraryOutput(cfg.Language, library, cfg.Default)
}
return hasChangesIn(output, exclusion, filesChanged)
}

func hasChangesIn(dir, exclusion string, filesChanged []string) bool {
if !strings.HasSuffix(dir, "/") {
dir += "/"
}
for _, f := range filesChanged {
if strings.HasPrefix(f, dir) {
if exclusion != "" && strings.HasPrefix(f, exclusion) {
continue
}
return true
}
}
return false
return git.HasChangesIn(output, exclusion, filesChanged)
}

// bumpLibrary determines the next version of a library (using versionOverride
Expand Down Expand Up @@ -398,7 +389,7 @@ func legacySidekickBumpAll(ctx context.Context, cfg *config.Config, lastTag stri
continue
}
output := libraryOutput(cfg.Language, lib, cfg.Default)
if !hasChangesIn(output, "", filesChanged) {
if !git.HasChangesIn(output, "", filesChanged) {
continue
}
if err := legacySidekickBumpLibrary(ctx, cfg, lib, lastTag, ""); err != nil {
Expand Down Expand Up @@ -432,9 +423,3 @@ func legacySidekickBumpLibrary(ctx context.Context, cfg *config.Config, lib *con
return fmt.Errorf("%q should not be using legacySidekickBumpLibrary", cfg.Language)
}
}

// formatTagName computes the name of the tag expected to be applied to the
// commit that released the given library.
func formatTagName(tagFormat string, lib *config.Library) string {
return strings.NewReplacer("{name}", lib.Name, "{version}", lib.Version).Replace(tagFormat)
}
2 changes: 1 addition & 1 deletion internal/librarian/bump_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -496,7 +496,7 @@ func TestFindLibrariesToBump(t *testing.T) {
// commit the config, tag it.
cfg.Libraries[1].Version = sample.NextVersion
writeConfigAndCommit(t, cfg)
tagName := formatTagName(cfg.Default.TagFormat, cfg.Libraries[1])
tagName := git.FormatTagName(cfg.Default.TagFormat, cfg.Libraries[1].Name, cfg.Libraries[1].Version)
git.Tag(t.Context(), "git", tagName, "HEAD")
},
},
Expand Down
Loading
Loading