feat(swift): add protobuf generation support - #6697
Conversation
There was a problem hiding this comment.
Code Review
This pull request adds support for a new "swift-protobuf" template in the Swift module generation process. It updates the configuration schema documentation, adds Template, IncludeList, and ModulePath fields to the SwiftModule configuration struct, implements a compileProtobufs function to run protoc with the correct imports, and adds a corresponding unit test. The feedback suggests explicitly handling all supported templates in the switch statement and returning errors for unknown or unsupported templates to prevent silent failures, which also requires importing the "fmt" package.
b8df067 to
a8ee361
Compare
noahdietz
left a comment
There was a problem hiding this comment.
Reviewing mostly from a Librarian config perspective.
|
adding @coryan to reviewers from Swift side |
coryan
left a comment
There was a problem hiding this comment.
There is something awkward about a "template" parameter that does not control what template subdirectory to use. Does this belong in a separate "language"?
88438eb to
e8f74a4
Compare
b027150 to
e8f74a4
Compare
63aa4c3 to
2766c7e
Compare
2766c7e to
e457e92
Compare
🤖 I have created a release *beep* *boop* --- ## [0.26.0](v0.25.0...v0.26.0) (2026-07-13) ### Features * **internal/gem:** add gem package to install Ruby gem tools ([#6724](#6724)) ([40ba6df](40ba6df)) * **internal/librarian/java:** add ApplyMoveActionsToLibrary helper and unit tests ([#6731](#6731)) ([f25bd33](f25bd33)) * **internal/librarian/java:** add RestructureToLibrary helper and unit tests ([#6757](#6757)) ([b2ff68c](b2ff68c)), closes [#6516](#6516) * **internal/librarian/java:** add ToKeepSet helper and unit tests ([#6730](#6730)) ([df99304](df99304)), closes [#6516](#6516) * **internal/librarian/java:** integrate native Go postprocessor into Java generator ([#6768](#6768)) ([074059d](074059d)), closes [#6516](#6516) * **internal/librarian/java:** mark legacy postprocessing for deprecation ([#6716](#6716)) ([78a4ab6](78a4ab6)), closes [#6516](#6516) * **internal/librarian/nodejs:** use cache and bin directories for nodejs install ([#6680](#6680)) ([7f88869](7f88869)) * **internal/librarian/php:** add inital PHP client library generator ([#6703](#6703)) ([9a45ab1](9a45ab1)) * **internal/librarian/php:** add tool installation directory helpers ([#6717](#6717)) ([9cdf0b5](9cdf0b5)), closes [#6630](#6630) * **internal/librarian/ruby:** support installing Ruby gem dependencies ([#6751](#6751)) ([bbce2c4](bbce2c4)), closes [#6634](#6634) * **internal/librarian:** add ruby tools directory to env output ([#6781](#6781)) ([c220d71](c220d71)) * **internal/postprocessing:** add Apply pipeline runner and tests ([#6714](#6714)) ([5cb8f66](5cb8f66)), closes [#6516](#6516) * **internal/postprocessing:** add ApplyMethodOperations batch runner and tests ([#6698](#6698)) ([8377d53](8377d53)), closes [#6516](#6516) * **internal/postprocessing:** add applyToFiles and RemoveFiles ([#6673](#6673)) ([2f4b437](2f4b437)), closes [#6516](#6516) * **internal/postprocessing:** add CopyFiles batch runner and tests ([#6686](#6686)) ([20c3a1a](20c3a1a)) * **internal/postprocessing:** add ReplaceAll and ReplaceRegexAll batch runners and tests ([#6688](#6688)) ([bb18f06](bb18f06)) * **internal/protoc:** add protoc installation and use installed `protoc` in Java generation ([#6622](#6622)) ([00ee24d](00ee24d)) * **internal/protoc:** add Run function ([#6699](#6699)) ([cd8a1d4](cd8a1d4)), closes [#6558](#6558) * **internal/serviceconfig:** allowlist API paths for php ([#6789](#6789)) ([7907686](7907686)), closes [#6629](#6629) * **internal/tool/gem:** verify input directories and tools before installation ([#6778](#6778)) ([3086d63](3086d63)) * **java:** append versions.txt on add ([#6653](#6653)) ([9e9e645](9e9e645)) * **librarian/internal/config:** add php config ([#6701](#6701)) ([939ae6f](939ae6f)) * **migrate:** discover and list PHP libraries during migration ([#6728](#6728)) ([e552b89](e552b89)) * **sidekick/parser:** correct LRO poller service ([#6704](#6704)) ([1d4b2d1](1d4b2d1)) * **sidekick/rust:** remove unstable gate for LRO tracing ([#6459](#6459)) ([8266ce3](8266ce3)) * **sidekick/swift:** discovery LROs ([#6738](#6738)) ([c294d15](c294d15)) * **sidekick/swift:** generate deprecation attributes ([#6750](#6750)) ([145e8ae](145e8ae)) * **sidekick/swift:** traits with dependencies ([#6709](#6709)) ([e8389f2](e8389f2)) * **swift:** add protobuf generation support ([#6697](#6697)) ([3bebf26](3bebf26)) * **tool/cmd/migrate/php:** scaffold composer tools for php ([#6736](#6736)) ([f23b451](f23b451)) * **tool/cmd/migrate:** add support to php ([#6726](#6726)) ([586bac0](586bac0)), closes [#6723](#6723) * **tool/cmd/migrate:** support union versions in PHP OwlBot configs ([#6782](#6782)) ([7690206](7690206)), closes [#6779](#6779) ### Bug Fixes * **internal/librarian/java:** remove excluded_poms from repometadata ([#6676](#6676)) ([5e0f7f2](5e0f7f2)) * **internal/librarian/php:** enforce explicit API paths and add default output path ([#6740](#6740)) ([347bbd6](347bbd6)) * **internal/librarian:** preserve gem tools during tidy ([#6783](#6783)) ([0150007](0150007)) * **internal/librarian:** preserve maven and protoc configuration during tidy ([#6702](#6702)) ([b439528](b439528)), closes [#6558](#6558) * **internal/snippetmetadata:** disable HTML escaping in JSON output ([#6777](#6777)) ([4da5e28](4da5e28)), closes [#6776](#6776) * **librarian/rust:** detect inconsistent repos ([#6766](#6766)) ([82ce5a9](82ce5a9)) * **sidekick/swift:** missing enum value docs ([#6727](#6727)) ([e9020d2](e9020d2)) * **tool/cmd/migrate:** populate API paths from .OwlBot.yaml during migrate for php ([#6739](#6739)) ([6a15260](6a15260)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
This change introduces support for generating raw Swift Protobuf and gRPC-Swift stub files directly using protoc, bypassing the standard GAPIC client generation when requested. This is done by adding a new "swift-protobuf" template option to the Swift module configuration.
Produces the following: https://depot.code.corp.goog/experimental/google-cloud-swift/pull/300
Issue: googleapis/google-cloud-swift#452