Skip to content

feat(internal/librarian/php): add inital PHP client library generator - #6703

Merged
zhumin8 merged 12 commits into
googleapis:mainfrom
zhumin8:php-generate
Jul 8, 2026
Merged

feat(internal/librarian/php): add inital PHP client library generator#6703
zhumin8 merged 12 commits into
googleapis:mainfrom
zhumin8:php-generate

Conversation

@zhumin8

@zhumin8 zhumin8 commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

An initial implementation of the PHP client library generator is added to librarian. The goal of this change is to enable executing the PHP GAPIC generator as a protoc plugin from librarian's generation path.

The generator setup downloads the PHP generator codebase, installs its Composer dependencies, and generates a wrapper script that delegates compilation to the Main.php entrypoint. (Will remove this setup in followups)
Compilation parameters such as transport settings, numeric enums, and migration modes are automatically derived and passed during execution.

For #6629

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request implements the PHP client library generator, which fetches the PHP generator, installs Composer dependencies, writes a wrapper script, and runs the generator plugin via protoc. It also adds integration tests to verify the generation output. The review feedback suggests avoiding race conditions and Windows path issues by checking if the wrapper script exists before writing it and using filepath.ToSlash. Additionally, it recommends using errors.Is instead of os.IsNotExist and properly propagating other errors when checking the vendor directory.

Comment thread internal/librarian/php/generate.go Outdated
Comment thread internal/librarian/php/generate.go Outdated
@zhumin8

zhumin8 commented Jul 8, 2026

Copy link
Copy Markdown
Contributor Author

There seems to be an issue with our yaml formatter removing empty lines, and php generator having issue without the blank lines in service yaml? Investigating.

@zhumin8

zhumin8 commented Jul 8, 2026

Copy link
Copy Markdown
Contributor Author

Adjusted test coverage temporarily, will do followups to refactor and add tests. In the meantime, installGenerator is intended to be throw away code while proper install command is ready (not adding test for it).

@zhumin8
zhumin8 marked this pull request as ready for review July 8, 2026 20:44
@zhumin8
zhumin8 requested a review from a team as a code owner July 8, 2026 20:44
@zhumin8
zhumin8 requested review from JoeWang1127 and sofisl July 8, 2026 20:44
Comment thread .github/workflows/php.yaml
Comment thread internal/librarian/php/generate.go
Comment thread internal/librarian/php/generate_test.go Outdated
Comment thread internal/librarian/php/generate_test.go Outdated
Comment thread internal/librarian/php/generate_test.go Outdated
Comment thread internal/librarian/php/generate_test.go
Comment thread internal/librarian/php/generate_test.go
Comment thread internal/librarian/php/generate_test.go Outdated
@zhumin8
zhumin8 enabled auto-merge (squash) July 8, 2026 21:11
@zhumin8
zhumin8 merged commit 9a45ab1 into googleapis:main Jul 8, 2026
31 checks passed
zhumin8 added a commit that referenced this pull request Jul 9, 2026
zhumin8 added a commit that referenced this pull request Jul 9, 2026
…se it in generator (#6719)

Use protoc.Run in php generate.
Followup to #6703.

For #6629
zhumin8 added a commit that referenced this pull request Jul 9, 2026
…6718)

Refactor generateAPI for readability.

Followup to #6703.

For #6629
noahdietz pushed a commit that referenced this pull request Jul 13, 2026
🤖 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants