Skip to content

Conversation

@cloud-sdk-librarian-robot
Copy link
Collaborator

Librarian Version: v0.0.0-20250923210339-2acb5c1bf5ab
Language Image: us-central1-docker.pkg.dev/cloud-sdk-librarian-prod/images-prod/librarian-release-container@sha256:50dd9b59bcf4f55178f9a35dcd4f81a8db20609da386357fa05a457a8da3b4e9

librarian: 0.2.0

0.2.0 (2025-09-23)

Features

  • discovery doc methods (feat(sidekick): discovery doc methods #2308) Capture path and query parameters into a synthetic message. These
    messages are unique per method, and are all children of a different kind
    of synthetic message that is unique by service. That parent message
    creates the right naming structure.

Updated the templates to demonstrate how this would be used. (7239558)

Fixes #2148 (3fe4e57)

This provides the url.template attribute for OpenTelemetry spans. See
#2212 and googleapis/google-cloud-rust#3346 and googleapis/google-cloud-rust#3368

Tested with #2247 (13bef19)

  • Mocks GitHub API calls for PR creation and labeling
  • Updates command.go and release_notes.go to support testability

Part of #1013 (4d3c118)

This change implements the "release init" command part
(release_blocked).

When library config has release_blocked field set to true, the "release
init" command skips the library processing. If the library ID is
explicitly specified, then release_blocked is ignored. (f12f284)

  • parse discovery doc path templates (feat(sidekick): parse discovery doc path templates #2241) Discovery doc path templates are specified using URI templates, that is
    RFC 6570 templates. This is not the same format as the HTTP annotations
    for Protobuf. Compute only uses a subset of the URI template spec,
    which allows us to parse the strings and use (without change) the
    api.PathTemplate structure.

If compute starts using more complex path templates we can grow the
data structures at that time. (4a33949)

When library config has generate_blocked field set to true, the generate
command skips the library processing.

If the library is explicitly specified in the argument via "--library",
then this Librarian CLI processes the library. (c3c71af)

Part of #1013. (5d05481)

# Default package dependency versions.
'package:google_cloud_gax' = '^0.1.0'
'package:http'             = '^1.3.0'

This PR honors those constraints when generating pubspec.yaml (1a3e3bb)

The most conservative approach is to make the class final - we can
relax that restriction and make it base later, if it makes sense. (2f447cc)

Check cloudBuild trigger with triggersRun variable

#2060 (1d68698)

It's possible the configured value in config.yaml is too old. We will
need to be able to compare 2 semver strings. (7702829)

Tested with

go run github.com/googleapis/librarian/cmd/librarian release tag-and-release -repo=/Users/ldetmer/workspace2/librarian -pr=https://github.com/ldetmer/librarian/pull/1

ldetmer@39ab425
contains tag release-please-1 (f114aa2)

The file was named "LICENSE.txt.mustache" because WalkTemplatesDir
elides files without an extension (after ".mustache" is removed).
generatedFiles renames this file to "LICENSE".

There were a few other approaches that we could use:

  1. WalkTemplatesDir could use a different naming convention for elided
    files (e.g. "internal_<name>.mustache")
  2. generatedFiles could walk the template directory itself. (70bb3c6)
  • The remote branch to clone (ignored when not using a remote repo)
  • The remote branch to use as the base for a PR (i.e. the branch you
    want to merge into)

The flag is used for "generate" and "release init".

Fixes #812. (3521090)

Fixes #1712. (f88a51a)

Simplifications made for this first attempt:

  • only a per-library strategy for Python/Go is implemented for now.
  • Breaking e.g., “feat!” are not presented with a designated “breaking
    changes” section. (we do this today with release please). “feat!” and
    “feat”, “fix!” and “fix” are equivalent for release notes.

Fixes #1697 (1f3b20a)

For the moment, such libraries are skipped in generate calls.

Fixes #1852. (c1f770e)

Updates #1008 (6dbc3c0)

Additional context:
go/librarian:release-please-lite

2nd part of change.

Fixes #1694 (b2e2c93)

Main changes:

  • basic logic for getting commits for path since tag/commit mostly
    ported from v0.1.0
    gitrepo.go
  • logic to parse commit message into conventional commit struct in
    internal/gitrepo/conventional_commits.go based on regex, inspired by
    this
    code

Additional context:
go/librarian:release-please-lite

For #1694 (65a9774)

go run github.com/googleapis/librarian/cmd/automation@&lt;tag-or-ref&gt; \
  --command=generate \
  --project=&lt;project-id&gt;

Fixes #1612
Fixes #1571 (2d88ae9)

Towards #1571 (709adc0)

Create a generate-request.json from state
Mount .librarian to /librarian
Mount .librarian/generator-input to /input
Mount apiRoot to /source

Fixes #769, fixes #815

--------- (ae87263)

  • port over clean logic from owl-bot
    code
  • Configurations: Use regex for preserve and remove config in
    state.yaml.
    This is the consistent with old owl-bot logic
    (ref).
  • The clean logic can deal with symlink (see added tests
    here).
    But os.CopyFS() in Go 1.24 does not support symlink and throws error.
    (Will support in next 1.25 release) Added a comment for it. (Python
    confirmed it is non-blocking for onboarding)

Will try to fix test coverage while in review
Fixes #775

--------- (3ee39a6)

  • Create build-request.json
  • Mount .librarian to /librarian
  • Mount repo root to /repo (ade9ce0)

The tests cover the following functions:

  • readAllBytesFromFile
  • appendToFile
  • createAndWriteToFile
  • createAndWriteBytesToFile

The tests use a table-driven approach to test multiple scenarios,
including success, error, and edge cases. (e370eac)

Logic related to the gcloud.yaml file is moved into a new
internal/config/gcloud/ package, since it must be part of the
config.Config struct to be passed into Generate, and to avoid a
dependency cycle, since config.Config is imported by internal/gcloud. (2ec911e)

See generator/internal/gcloud/testdata/parallelstore/README.md for details on where the testdata is copied from. (d2b2617)

Bug Fixes

Fixes #2234 (9d21e30)

Fixes #2081 (a945eb7)

The refactoring removed the command's dependency on a local repository
clone, causing the existing e2e test to fail as it was still based on a
local git setup. The command now fetches the state.yaml file directly
from the GitHub API.

This change updates the test by:

  • Removing the unnecessary local git repository setup.
  • Modifying the mock HTTP server to correctly simulate the multi-step
    API process used by the go-github client to download a file (directory
    listing followed by content download).
  • Updating the 'newTagAndReleaseRunner' to correctly use the
    'github-api-endpoint' flag, ensuring the client is properly directed to
    the mock server during tests.

Part of #1013. (b38097e)

(Additionally, fixes a panic if a test that wants an error doesn't
produce one.) (6188338)

The 'release init' process now correctly identifies commits from pull
requests (PRs)
that adhere to the conventional commit message format.

This is because the process only uses the commit message, not the PR
title, to determine conventionality.

Fixes #2079 (c609ee9)

Modify the test to check state.yaml in repo to verify the libraries
are updated.

Fixes #2030 (0dd0273)

  • use --output path directly for container mount (fix(release): use --output path directly for container mount #2015) The 'release init' command was incorrectly creating a nested 'output'
    subdirectory within the path provided by the --output flag (aliased to
    WorkRoot). This caused the container's /output volume to be mounted to
    <workroot>/output instead of <workroot>.

This commit changes the behavior to use the r.workRoot value directly as
the source for the /output volume mount, aligning with user expectations
for the --output flag.

Fixes #2014 (45aa04a)

Fixes #1957 (e536c9a)

go run ./cmd/librarian release init -repo=. -push

Release pull request created in
#1955

The release note is not well formatted, will address in
#1964.

Fixes #1932 (a00e91b)

Test Example:
In my forked repo, only
catchyzheng/google-cloud-python#4 is closed PR,
and its merged_at field is null. Other PRs were merged and has
merged_at values.
The merged_at field can be checked here:
https://api.github.com/repos/catchyzheng/google-cloud-python/pulls?per_page=100&amp;state=closed (31e3ef3)

Fixes #1726

With this fix, go run ./cmd/librarian generate -h shows:

jinseop@jinseop:/workspace/librarian$ go run ./cmd/librarian generate -h
Specify the API repository root and the path within it for the API to generate.
Optional flags can be specified to use a non-default language repository, and to indicate whether or not
to build the generated library.

The generate command handles both onboarding new libraries and regenerating existing ones.
The behavior is determined by the provided flags.

**Onboarding a new library:**
To configure and generate a new library, specify both the &#34;-api&#34; and &#34;-library&#34; flags. This process involves:
1. Running the &#34;configure&#34; command in the language container to set up the repository.
2. Adding the new library&#39;s configuration to the &#34;.librarian/state.yaml&#34; file.
3. Proceeding with the generation steps below.

**Regenerating existing libraries:**
If only &#34;-api&#34; or &#34;-library&#34; is specified, the command regenerates that single, existing library.
If neither flag is provided, it regenerates all libraries listed in &#34;.librarian/state.yaml&#34;.

The generation process for an existing library involves delegating to the language container&#39;s 
&#39;generate&#39; command. After generation, the tool cleans the destination directory and copies the 
new files into place, according to the configuration in &#39;.librarian/state.yaml&#39;. 
If the &#39;--build&#39; flag is specified, the &#39;build&#39; command is also executed.

**Output:**
After generation, if the &#34;-push&#34; flag is provided, the changes are committed to a new branch, and
a pull request is created. Otherwise, the changes are left in the local working tree for
inspection.

Usage:
  librarian generate -source=&lt;api-root&gt; -api=&lt;api-path&gt; [flags]

Flags:
  -api string
    	path to the API to be configured/generated (e.g., google/cloud/functions/v2)
  -api-source string
    	location of googleapis repository. If undefined, googleapis will be cloned to the output
  -branch string
    	remote branch to use with the code repository for cloning and pull requests. (default &#34;main&#34;)
  -build
    	whether to build the generated code
  -host-mount string
    	a mount point from Docker host and within the Docker. The format is {host-dir}:{local-dir}.
  -image string
    	Container image to run for subcommands. Defaults to the image in the pipeline state.
  -library string
    	The ID of a single library to update. This is repo-specific and defined in the state.yaml
  -output string
    	Working directory root. When this is not specified, a working directory will be created in /tmp.
  -push
    	whether to push the generated code
  -repo string
    	Code repository where the generated code will reside.
    				Can be a remote in the format of a remote URL such as 
    				https://github.com/{owner}/{repo} or a local file path like 
    				/path/to/repo. Both absolute and relative paths are supported.
    				If not specified, will try to detect if the current working 
    				directory is configured as a language repository.


2025/09/03 12:26:47 flag: help requested
exit status 1
``` ([cedfb49](https://github.com/googleapis/librarian/commit/cedfb49))

* prevent panic on release command without subcommand (#1901) Fixes #1723

When running  without a subcommand, the program
panicked due to a nil pointer dereference. This occurred because the
command has no action and no configuration.

This change adds a check to see if a command has a function. If it does
not, it prints the command&#39;s help text and exits, preventing the panic.

With the fix:

jinseop@jinseop:/workspace/librarian$ go run ./cmd/librarian release
Manages releases of libraries.

Usage:
librarian release <command> [arguments]

Commands:

init initiates a release by creating a release pull request.
tag-and-release tags and creates a GitHub release for a merged pull request.

2025/09/02 16:55:30 command "release" requires a subcommand
exit status 1


* Parse arguments as flags on hyphen prefix (#1902) Fixes [#1724](https://github.com/googleapis/librarian/issues/1724)

> go run ./cmd/librarian release -h

Manages releases of libraries.

Usage:
librarian release <command> [arguments]

Commands:

init initiates a release by creating a release pull request.
tag-and-release tags and creates a GitHub release for a merged pull request.

2025/09/02 17:36:44 flag: help requested
exit status 1


Matches the convention from `go run ./cmd/librarian generate -h` to
output with `flag: help requested` with the flag usage ([e9f2ea3](https://github.com/googleapis/librarian/commit/e9f2ea3))

* generate should fail with error if all libraries failed (#1876) Fixes #1787 ([b7b26e2](https://github.com/googleapis/librarian/commit/b7b26e2))

* for tag-and-release not reading -repo flag (#1878) fixes #1855 ([a7188e2](https://github.com/googleapis/librarian/commit/a7188e2))

* skip fetching commits if last generated commit is empty (#1870) Fixes #1869 ([8b3c743](https://github.com/googleapis/librarian/commit/8b3c743))

* get conventional commits from source repository (#1867) Function `updateChangesSinceLastGeneration` may not be needed since we
don&#39;t need to pass api changes to language container.

Fixes #1866 ([40e7bc3](https://github.com/googleapis/librarian/commit/40e7bc3))

* default to source_roots when no remove_regex (#1863) It is expected behavior to defaults to the `source_roots` as documented.
Adding missed implementation.

https://github.com/googleapis/librarian/blob/8f409cc46adc7958a9393e52bd4b272ce2d75697/internal/config/state.go#L116-L119

Fixes #1739 ([3d051f8](https://github.com/googleapis/librarian/commit/3d051f8))

* add MergeCommitSHA check, _PR substitution, PR limit in publish-release automation command (#1833) add MergeCommitSHA check, _PR substitution, PR limit in publish-release
automation command

https://github.com/googleapis/librarian/issues/1786
https://github.com/googleapis/librarian/issues/1810 ([4d2db9b](https://github.com/googleapis/librarian/commit/4d2db9b))

* bump version while updating libraries for release (#1842) Also refactored the function a little as it takes a pointer to data so
no need to return the data -- mutate it instead. ([d6fa957](https://github.com/googleapis/librarian/commit/d6fa957))

* don&#39;t clean dir for release init copies (#1824) We should intentionally copy over only the files that are in the output
directory of the release init container. We don&#39;t mandate today that all
libraries files must be copied over, so we should selectively overwrite
files when required. ([a8ddd21](https://github.com/googleapis/librarian/commit/a8ddd21))

* use a clean output directory for each API when generating (#1836) An alternative would be to clean the output directory after each library
is generated, but keeping them all (separately) will make it easier to
diagnose problems.

Fixes #1774 ([5ebd352](https://github.com/googleapis/librarian/commit/5ebd352))

* don&#39;t pass undocumented flags (#1834)  ([7ef0103](https://github.com/googleapis/librarian/commit/7ef0103))

* don&#39;t clone apisource for `release init` (#1825)  ([71a25ee](https://github.com/googleapis/librarian/commit/71a25ee))

* subcommands now process args correctly (#1826)  ([95f6736](https://github.com/googleapis/librarian/commit/95f6736))

* ignore version override if library flag is not specified (#1822) Fixes #1823 ([aa507b1](https://github.com/googleapis/librarian/commit/aa507b1))

* track the source service for mixins (#1821) We need this to generate the right gRPC calls in Rust. ([c0c043b](https://github.com/googleapis/librarian/commit/c0c043b))

* setup global config in init docker command (#1800) Fixes #1795 ([ca31f73](https://github.com/googleapis/librarian/commit/ca31f73))

* make response files optional for generate/build (#1788) readLibraryState() now returns a nil pointer (but no error) if the
container response file doesn&#39;t exist. When the response is required
(e.g. for configure) this should be checked explicitly.

Fixes #1741 ([ad446e1](https://github.com/googleapis/librarian/commit/ad446e1))

* username is required, but ignored for GitHub&#39;s https push (#1784)  ([d40c87c](https://github.com/googleapis/librarian/commit/d40c87c))

* make config.yaml optional (#1783) This file should not be required. ([eb00ef2](https://github.com/googleapis/librarian/commit/eb00ef2))

* change librarian volume to read-write in `build` command (#1772) Fixes #1771 ([c2a26dc](https://github.com/googleapis/librarian/commit/c2a26dc))

* support local language repos better (#1756)  ([c9d075e](https://github.com/googleapis/librarian/commit/c9d075e))

* generate command should parse the -push flag (#1744) Fixes #1743 ([b53dcf3](https://github.com/googleapis/librarian/commit/b53dcf3))

* fix invalidPathChars regex (#1714) Failure observed in #1713 because flaw in regex `invalidPathChars`, the
null byte (\x00) to be treated as a literal string of \, x, 0, 0, which
incorrectly flagged any path containing the number 0 as invalid (e.g.,
area120). This fix changes the constant to an interpreted string.

Test cases added.


Fixes #1713 ([dcd1f71](https://github.com/googleapis/librarian/commit/dcd1f71))

* use source repo if `api-source` flag is not specified (#1633) Fixes #1631 ([7f365a4](https://github.com/googleapis/librarian/commit/7f365a4))

* add release related fields to state (#1630) add new fields related to release according to
[go/librarian:release-command](http://goto.google.com/librarian:release-command).

Fixes #1006 ([29881b8](https://github.com/googleapis/librarian/commit/29881b8))

* update state file for each success  (#1017)  ([18457c3](https://github.com/googleapis/librarian/commit/18457c3))

* sidekick commands execute on Windows (#1577)  ([c7bf957](https://github.com/googleapis/librarian/commit/c7bf957))

* remove github.com/ghodss/yaml dependency (#1574) Replace use of github.com/ghodss/yaml with a small function since the
needed functionality is only a few lines of code.

Fixes https://github.com/googleapis/librarian/issues/1545 ([f1293f9](https://github.com/googleapis/librarian/commit/f1293f9))

* fix errors in internal/sidekick (#1575) Fix these errors detected by TestGolangCILint:

--- FAIL: TestGolangCILint (1.53s)
all_test.go:156: /Users/julieqiu/bin/homebrew/Cellar/go/1.24.4/libexec/bin/go run github.com/golangci/golangci-lint/v2/cmd/golangci-lint@latest run: exit status 1
internal/sidekick/internal/api/model.go:27:2: Comment should end in a period (godot)
// descriptorpb.FieldDescriptorProto_Type
^
internal/sidekick/internal/api/model.go:290:1: Comment should end in a period (godot)
// ```
^
internal/sidekick/internal/api/model.go:368:1: Comment should end in a period (godot)
// OperationInfo contains normalized long running operation info
^
internal/sidekick/internal/api/documentation.go:116:9: QF1004: could use strings.ReplaceAll instead (staticcheck)
new := strings.Replace(*documentation, override.Match, override.Replace, -1)
^
internal/sidekick/internal/dart/annotate.go:593:3: QF1002: could use tagged switch on field.Typez (staticcheck)
switch {
^
internal/sidekick/internal/dart/annotate.go:613:3: QF1002: could use tagged switch on valueField.Typez (staticcheck)
switch {
^
internal/sidekick/internal/dart/annotate.go:669:3: QF1002: could use tagged switch on field.Typez (staticcheck)
switch {
^
internal/sidekick/internal/dart/annotate.go:681:3: QF1002: could use tagged switch on valueField.Typez (staticcheck)
switch {
^
internal/sidekick/internal/dart/annotate.go:730:3: QF1002: could use tagged switch on field.Typez (staticcheck)
switch {
^
internal/sidekick/internal/parser/pagination.go:63:6: QF1001: could apply De Morgan's law (staticcheck)
if !(hasPageSize && hasPageToken != nil) {
^
internal/sidekick/internal/parser/pagination.go:87:6: QF1001: could apply De Morgan's law (staticcheck)
if !(hasNextPageToken && hasRepeatedItem) {
^
internal/sidekick/internal/rust/annotate.go:775:3: QF1002: could use tagged switch on segment (staticcheck)
switch {
^
internal/sidekick/internal/rust/codec.go:492:2: QF1003: could use tagged switch on f.Typez (staticcheck)
if f.Typez == api.MESSAGE_TYPE {
^
internal/sidekick/sidekick_test.go:148:30: QF1004: could use strings.ReplaceAll instead (staticcheck)
"package-name-override": strings.Replace(config.Name, "/", "-", -1) + "-golden-protobuf",
^
internal/sidekick/downloads_cache_test.go:209:49: makeTestContents - result 1 (error) is always nil (unparam)
func makeTestContents(t *testing.T) (*contents, error) {
^
internal/sidekick/internal/dart/annotate.go:202:74: (*annotateModel).annotateModel - result 0 (*github.com/googleapis/librarian/internal/sidekick/internal/dart.modelAnnotations) is never used (unparam)
func (annotate *annotateModel) annotateModel(options map[string]string) (*modelAnnotations, error) {
^
internal/sidekick/internal/golang/gotemplate.go:106:64: annotateModel - result 0 (*github.com/googleapis/librarian/internal/sidekick/internal/golang.modelAnnotations) is never used (unparam)
func annotateModel(model *api.API, options map[string]string) (*modelAnnotations, error) {
^
internal/sidekick/downloads_cache_test.go:33:14: os.MkdirTemp() could be replaced by t.TempDir() in TestExistingDirectory (usetesting)
tmp, err := os.MkdirTemp(t.TempDir(), "sidekick-test-")
^
internal/sidekick/downloads_cache_test.go:65:18: os.MkdirTemp() could be replaced by t.TempDir() in TestWithDownload (usetesting)
testDir, err := os.MkdirTemp(t.TempDir(), "sidekick-test-")
^
internal/sidekick/downloads_cache_test.go:112:18: os.MkdirTemp() could be replaced by t.TempDir() in TestTargetExists (usetesting)
testDir, err := os.MkdirTemp(t.TempDir(), "sidekick-test-")
^
internal/sidekick/downloads_cache_test.go:147:18: os.MkdirTemp() could be replaced by t.TempDir() in TestDownloadGoogleapisRootTgzExists (usetesting)
testDir, err := os.MkdirTemp(t.TempDir(), "sidekick-test-")
^
internal/sidekick/downloads_cache_test.go:170:18: os.MkdirTemp() could be replaced by t.TempDir() in TestDownloadGoogleapisRootNeedsDownload (usetesting)
testDir, err := os.MkdirTemp(t.TempDir(), "sidekick-test-")
^
internal/sidekick/sidekick_dart_test.go:26:17: os.MkdirTemp() could be replaced by t.TempDir() in TestDartFromProtobuf (usetesting)
outDir, err := os.MkdirTemp(t.TempDir(), "golden")
^
internal/sidekick/sidekick_rust_prost_convert_test.go:25:17: os.MkdirTemp() could be replaced by t.TempDir() in TestRustProstConvert (usetesting)
outDir, err := os.MkdirTemp(t.TempDir(), "golden")
^
internal/sidekick/sidekick_rust_prost_test.go:25:17: os.MkdirTemp() could be replaced by t.TempDir() in TestRustProstFromProtobuf (usetesting)
outDir, err := os.MkdirTemp(t.TempDir(), "golden")
^
internal/sidekick/sidekick_sample_test.go:25:17: os.MkdirTemp() could be replaced by t.TempDir() in TestSampleFromProtobuf (usetesting)
outDir, err := os.MkdirTemp(t.TempDir(), "golden")
^
internal/sidekick/sidekick_test.go:43:17: os.MkdirTemp() could be replaced by t.TempDir() in TestRustFromOpenAPI (usetesting)
outDir, err := os.MkdirTemp(t.TempDir(), "golden")
^
internal/sidekick/sidekick_test.go:84:17: os.MkdirTemp() could be replaced by t.TempDir() in TestRustFromProtobuf (usetesting)
outDir, err := os.MkdirTemp(t.TempDir(), "golden")
^
internal/sidekick/sidekick_test.go:176:17: os.MkdirTemp() could be replaced by t.TempDir() in TestRustModuleFromProtobuf (usetesting)
outDir, err := os.MkdirTemp(t.TempDir(), "golden")
^
internal/sidekick/sidekick_test.go:244:17: os.MkdirTemp() could be replaced by t.TempDir() in TestRustBootstrapWkt (usetesting)
outDir, err := os.MkdirTemp(t.TempDir(), "golden")
^
internal/sidekick/sidekick_test.go:311:17: os.MkdirTemp() could be replaced by t.TempDir() in TestRustOverrideTitleAndDescription (usetesting)
outDir, err := os.MkdirTemp(t.TempDir(), "golden")
^
internal/sidekick/sidekick_test.go:363:17: os.MkdirTemp() could be replaced by t.TempDir() in TestGoFromProtobuf (usetesting)
outDir, err := os.MkdirTemp(t.TempDir(), "golden")
^
internal/sidekick/update_test.go:39:8: os.Chdir() could be replaced by t.Chdir() in TestUpdateRootConfig (usetesting)
defer os.Chdir(cwd)
^
internal/sidekick/update_test.go:40:12: os.Chdir() could be replaced by t.Chdir() in TestUpdateRootConfig (usetesting)
if err := os.Chdir(tempDir); err != nil {
^


Fixes https://github.com/googleapis/librarian/issues/1541 ([caaee72](https://github.com/googleapis/librarian/commit/caaee72))

* ignored directories are configurable (#1573)  ([906e2e0](https://github.com/googleapis/librarian/commit/906e2e0))

* skip dart directory (#1570) For https://github.com/googleapis/librarian/issues/1563 ([6ac562e](https://github.com/googleapis/librarian/commit/6ac562e))

* hardcode dart as excluded path (#1564) Sidekick currently hardcodes paths that are excluded when running on the
google-cloud-rust repo. Change this from generator/ to dart/ since the
code moved.

This logic will be refactored in a follow-up PR.

For https://github.com/googleapis/librarian/issues/1563 ([b601994](https://github.com/googleapis/librarian/commit/b601994))

* fix TestGcloudConfig (#1557) TestGcloudConfig is skipped in https://github.com/googleapis/librarian/pull/1533. The test failure is
now fixed.

Fixes https://github.com/googleapis/librarian/issues/1544 ([df86dd2](https://github.com/googleapis/librarian/commit/df86dd2))

* merge into single Go module (#1533) Remove the go.mod file from internal/sidekick, merging sidekick and
librarian into a single Go module.

Add a requireProtoc helper to skip tests when protoc is not installed,
ensuring go test ./... passes on a fresh clone without requiring protoc.

Install protoc as part of the workflow in
https://github.com/googleapis/librarian/blob/main/.github/workflows/librarian.yaml,
so that all tests run in CI.

Codecov is temporarily disabled for internal/sidekick because
internal/sidekick reduced code coverage from 82% to 65%, which is our
below baseline of 80%. This will be fixed in follow up PRs.

For https://github.com/googleapis/librarian/issues/1510
For https://github.com/googleapis/librarian/issues/1543
Fixes https://github.com/googleapis/librarian/issues/1538
Fixes https://github.com/googleapis/librarian/issues/1535 ([904934e](https://github.com/googleapis/librarian/commit/904934e))

* fix godoclint errors (#1554) Fix godoclint errors and remove internal/sidekick from the exclude list
in TestGodocLint.

Fixes https://github.com/googleapis/librarian/issues/1542 ([5448d85](https://github.com/googleapis/librarian/commit/5448d85))

* make repo flag optional and derive from cwd when applicable (#1522) Make repo flag optional, removing required flag validation. Add logic to
derive from current working directory when there is librarian state file
detected, otherwise, return error. ([b06989f](https://github.com/googleapis/librarian/commit/b06989f))

* read configure response (#989) Fixes #985 ([60554f6](https://github.com/googleapis/librarian/commit/60554f6))

* rm unused flags (#1506)  ([6d33faf](https://github.com/googleapis/librarian/commit/6d33faf))

* improve error handling at commit and push (#1508) When no changes to commit, should log and return with no error, do not
attempt to proceed with commit and push. Commit error should be captured
and returned.

Added test cases for these error handling, and fixed test setup with
mocks.

Fixes #994 ([9f5b05a](https://github.com/googleapis/librarian/commit/9f5b05a))

* run yamlfmt on internal/sidekick  ([3a2eea7](https://github.com/googleapis/librarian/commit/3a2eea7))

* use snake_case in generate-request.json (#1045) Fixes https://github.com/googleapis/librarian/issues/1044 ([4c00f7d](https://github.com/googleapis/librarian/commit/4c00f7d))

* populate service config in `configure` command (#1500) Fixes #1499 ([02344f4](https://github.com/googleapis/librarian/commit/02344f4))

* add github remote https limitation in error message (#1025) Add https scheme in error message, because we limit git to use https
urls.

Fixes #993 ([efdcce7](https://github.com/googleapis/librarian/commit/efdcce7))

* derive github url from remote origin (#1003) Derive Github url only from the remote named origin. The other remotes
will be ignored.

Fix #919 ([87a232c](https://github.com/googleapis/librarian/commit/87a232c))

* handle generation for all libraries vs. single library according to flags (#977) Add flow control to handle both single library generation and all
configured libraries generation.

- Add &#34;--library&#34; flag and config
- removed redundant/outdated `detectIfLibraryConfigured`
- generate logic addition/change:
- generate single library if `api` or `library` specified, extra step to
configure new library when both `api` and `library` specified and
library not present in state.yaml
- loop though state and generate for all existing libraries when no
`api` or `library` specified.
- `runConfigureCommand` adds library entry to state, and calls
containerClient.Configure with correct request/ctx.
- add test cases, updates to some log entries, and update command doc to
reflect changes
- remove some unused code

Reference for reviewers: decision diagram in
[go/librarian:generate-command](http://go/librarian:generate-command)

Fixes #929 
Fixes #955
Fixes #931 ([d9f37fc](https://github.com/googleapis/librarian/commit/d9f37fc))

* rename flag source to api-source (#987) rename flag source to api-source ([b33b06e](https://github.com/googleapis/librarian/commit/b33b06e))

* make pushConfig default to empty string (#946) make pushConfig default to empty string ([cf1111e](https://github.com/googleapis/librarian/commit/cf1111e))

* update generate required flag checks (#935) Fix required flag check in generate.go

- remove required flag check for `api` and `source` flag in
newGenerateRunner
- add a check in `runConfigureCommand` for `api` as it is required for
generating a library for the first time
- swap test cases accordingly
- update `repo` flag description

Fixes #928
Fixes #914 ([6f76a14](https://github.com/googleapis/librarian/commit/6f76a14))

* use absolute path for librarian mount (#927) use absolute path for librarian mount in docker.Generate and
docker.Build, update test to verify

Fixes #925 ([10e3218](https://github.com/googleapis/librarian/commit/10e3218))

* load state.yaml from librarian dir (#915) State file is now expected in `.librarian/state.yaml`

Fixes #916 ([d41bd0e](https://github.com/googleapis/librarian/commit/d41bd0e))

* rename findLibraryIDByApiPath to findLibraryIDByAPIPath (#860)  Rename following Go conventions to favor capitalizing entire acronyms or initialisms like &#34;API&#34; and &#34;ID&#34; in names.  ([87bdb2c](https://github.com/googleapis/librarian/commit/87bdb2c))

* redefine the pipeline-state file contract (#803) Defines pipeline state file contract in state.go, revised helper
functions saving and loading pipeline state, and validation logics in
stateandconfig.go.
- created config/state.go for state.yaml file contract
- renamed temp structs for pipeline config as config/pipelineconfig.go
(created in #800)
- created
[doc/state-schema.md](https://github.com/googleapis/librarian/blob/a6817d8a68740032a833d9d123d2426893dd132d/doc/state-schema.md)
to document the schema and requirements.
- Validate() added for the state structs, and validation done right
after parsing.
- validation for library-id is added according to #784, for list of
validation constraints on each field, refer to the added
[doc/state-schema.md](https://github.com/googleapis/librarian/blob/a6817d8a68740032a833d9d123d2426893dd132d/doc/state-schema.md)



Fixes #772 ([1952280](https://github.com/googleapis/librarian/commit/1952280))

* remove create-release-artifacts command (#817) Remove create-release-artifacts command and associated code referenced
by it to simplify the codebase.

The docs and comments will be further cleaned up in the following PR and
being tracked by #802

Fixes #782 ([af17cb2](https://github.com/googleapis/librarian/commit/af17cb2))

* remove update-image-tag command (#811) Remove update-image-tag command and associated code referenced by it to
simplify the codebase.

The docs and comments will be further cleaned up in the following PR and
being tracked by https://github.com/googleapis/librarian/issues/802.

Fixes https://github.com/googleapis/librarian/issues/778 ([08691e2](https://github.com/googleapis/librarian/commit/08691e2))

* Remove publish-release-artifacts command (#801) Remove `publish-release-artifacts` command, associated code and
documentation.

Closes #780

--------- ([b6d8062](https://github.com/googleapis/librarian/commit/b6d8062))

* remove merge-release-pr command (#797) Remove `merge-release-pr` command and associated code referenced by it
to simplify the codebase.

Also clean up merge-release-pr and create-release-pr from the docs and
comments.

Fixes #779 ([56d8428](https://github.com/googleapis/librarian/commit/56d8428))

* remove create-release-pr command (#789) Remove `create-release-pr` command and associated code referenced by it
to simplify the codebase.

Fixes #781 ([39d2a9b](https://github.com/googleapis/librarian/commit/39d2a9b))

* add Command types (#2584) Go structs are added to support unmarshalling the gcloud command YAML
files in testdata/parallelstore/surface.

The files in testdata/parallelstore/surface were updated to ensure
compatibility with round-trip parsing tests. Specifically:

- The help_text fields were converted from block scalars to single-line
  style
- Fields that were set to false have been removed ([6ea6d31](https://github.com/googleapis/librarian/commit/6ea6d31))

* run yamlfmt on testdata (#2583) Ran yamlfmt on the testdata directory to ensure consistent formatting and make the files easier to read and compare against in tests. ([19ed950](https://github.com/googleapis/librarian/commit/19ed950))

* rename flagAddAPIRoot to flagAddAPI (#712)  ([8c1a875](https://github.com/googleapis/librarian/commit/8c1a875))

* remove flag push (#723) remove the flag push according to go/librarian:cli-reimagined.
The config is not touched and will get false by default. Underlying
logic will change in future, leaving out of scope for this fix.

Fixes #679 ([3958224](https://github.com/googleapis/librarian/commit/3958224))

* delete configure (#717) Fixes https://github.com/googleapis/librarian/issues/673 ([727c03d](https://github.com/googleapis/librarian/commit/727c03d))

* rename APIPath to API (#711) Rename APIPath to API to match the new flag name.

For https://github.com/googleapis/librarian/pull/686 ([7b6847e](https://github.com/googleapis/librarian/commit/7b6847e))

* rename APIRoot to Source (#710) Rename APIRoot to Source to match the flag name.

Fixes https://github.com/googleapis/librarian/issues/677 ([f65993f](https://github.com/googleapis/librarian/commit/f65993f))

* rename flag api-root to source (#688) Fixes #677 ([f0db649](https://github.com/googleapis/librarian/commit/f0db649))

* rename flag api-path to api (#686) Fixes #676 ([1655d08](https://github.com/googleapis/librarian/commit/1655d08))

### Documentation

* move CLI docs to cmd pkg (#2314) We should have these at the root of the command where people would
install the CLI from. Will link to these in the README in a future
commit. ([17a68d4](https://github.com/googleapis/librarian/commit/17a68d4))

* regen CLI docs (#2296)  ([654b8f3](https://github.com/googleapis/librarian/commit/654b8f3))

* add godoc for nested commands (#2225) Added Go&#39;s versions of partials to the text template so we can recurse
through nested commands and print all of thier help text godoc. ([58f943a](https://github.com/googleapis/librarian/commit/58f943a))

* generate helptext for subcommands (#2114) Also had to remove that it was an error to not to not specify Run. ([b91721a](https://github.com/googleapis/librarian/commit/b91721a))

* start generating package godoc (#1956) Created a means for us to generate the doc.go file based off output from
the help text. There is much more doc that still needs to be put into
this file but wanted to land this as a proof of concept at least. ([43e0a10](https://github.com/googleapis/librarian/commit/43e0a10))

* add some clarifications (#1974)  ([fb75149](https://github.com/googleapis/librarian/commit/fb75149))

* add consistency and more examples for CLI help text (#1948)  ([505b74a](https://github.com/googleapis/librarian/commit/505b74a))

* bring more consistent styling to flag documentation  ([4be588f](https://github.com/googleapis/librarian/commit/4be588f))

* fix repo flag formatting (#1916)  ([b8dc941](https://github.com/googleapis/librarian/commit/b8dc941))

* update help text for library flag (#1841) Fixes #1725 ([1321930](https://github.com/googleapis/librarian/commit/1321930))

* add doc comments for all exported symbols (#1556) Add missing documentation comments for all exported symbols and enable
TestExportedSymbolsHaveDocs for internal/sidekick.

Fixes https://github.com/googleapis/librarian/issues/1540 ([9dd3573](https://github.com/googleapis/librarian/commit/9dd3573))

</details>

@codecov
Copy link

codecov bot commented Sep 23, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 84.13%. Comparing base (2acb5c1) to head (de3b1c4).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #2326   +/-   ##
=======================================
  Coverage   84.13%   84.13%           
=======================================
  Files          97       97           
  Lines        9745     9745           
=======================================
  Hits         8199     8199           
  Misses       1199     1199           
  Partials      347      347           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@codyoss codyoss merged commit 669121e into main Sep 23, 2025
9 checks passed
@codyoss codyoss deleted the librarian-20250923T211617Z branch September 23, 2025 21:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment