feat(internal/librarian/nodejs): use cache and bin directories for nodejs install - #6680
Conversation
There was a problem hiding this comment.
Code Review
This pull request integrates Node.js tool installation paths into the librarian debug environment and updates Node.js command execution to run with the correct tools environment. It also refactors getPNPMEnv to configure pnpm paths using the librarian cache and bin directories instead of querying Node dynamically. Feedback was provided regarding a hardcoded path separator (:) when updating the PATH environment variable, which could cause issues on Windows; using os.PathListSeparator is recommended for cross-platform compatibility.
|
Coverage... |
885dd86 to
953f9c6
Compare
|
The rest coverage is good now. |
|
Updated to use nodejs_tools: It's itchy that the 'bin' folder contains a folder that contains 'bin'. But I don't address that in this pull request. |
…dejs install Update NodeJS tool installation to use LIBRARIAN_BIN directly for installed executables and LIBRARIAN_CACHE for downloaded google-cloud-node repository and pnpm cache/store. Fixes googleapis#6678
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Signed-off-by: Tomo Suzuki <suztomo@gmail.com>
…epo in TestRepoFromPackageURL
…executable and package URL
…s with wantErr on all cases
…clude nodejs_tools/bin in PATH
…olsEnv to table-driven tests
7df341c to
89969a4
Compare
Could you create an issue for this, I can come up with another directory name. |
|
Filed #6695. |
…dejs install (googleapis#6680) Update NodeJS tool installation to use `$LIBRARIAN_BIN/nodejs_tools` for installed executables (aligning with `go_tools` and `java_tools`) and `LIBRARIAN_CACHE` for downloaded `google-cloud-node` repository and pnpm cache/store. Fixes googleapis#6678 - Installs Node.js tools in `$LIBRARIAN_BIN/nodejs_tools/bin` (with `PNPM_HOME=$LIBRARIAN_BIN/nodejs_tools` and `PNPM_CONFIG_GLOBAL_BIN_DIR=$LIBRARIAN_BIN/nodejs_tools/bin`). - Prepends `$LIBRARIAN_BIN/nodejs_tools/bin` to `PATH` during tool installation and generation to prevent `pnpm` warnings/errors about global bin directory not in `PATH`. - Declares sentinel errors (`errMissingExecutable`, `errMissingPackageURL`, `errCannotExtractRepo`) evaluated with `errors.Is`. - Table-driven tests in `internal/librarian/nodejs/install_test.go` use a `pnpm` shell script stub. The stub handles `pnpm add -g` for non-build tool installations and asserts that required transient environment variables (`PNPM_HOME`, `PNPM_CONFIG_GLOBAL_BIN_DIR`, `PNPM_CONFIG_GLOBAL_DIR`, `PNPM_CONFIG_STORE_DIR`, and `PNPM_CONFIG_DANGEROUSLY_ALLOW_ALL_BUILDS`) are present during execution. --------- Signed-off-by: Tomo Suzuki <suztomo@gmail.com> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
🤖 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>
Update NodeJS tool installation to use
$LIBRARIAN_BIN/nodejs_toolsfor installed executables (aligning withgo_toolsandjava_tools) andLIBRARIAN_CACHEfor downloadedgoogle-cloud-noderepository and pnpm cache/store.Fixes #6678
$LIBRARIAN_BIN/nodejs_tools/bin(withPNPM_HOME=$LIBRARIAN_BIN/nodejs_toolsandPNPM_CONFIG_GLOBAL_BIN_DIR=$LIBRARIAN_BIN/nodejs_tools/bin).$LIBRARIAN_BIN/nodejs_tools/bintoPATHduring tool installation and generation to preventpnpmwarnings/errors about global bin directory not inPATH.errMissingExecutable,errMissingPackageURL,errCannotExtractRepo) evaluated witherrors.Is.internal/librarian/nodejs/install_test.gouse apnpmshell script stub. The stub handlespnpm add -gfor non-build tool installations and asserts that required transient environment variables (PNPM_HOME,PNPM_CONFIG_GLOBAL_BIN_DIR,PNPM_CONFIG_GLOBAL_DIR,PNPM_CONFIG_STORE_DIR, andPNPM_CONFIG_DANGEROUSLY_ALLOW_ALL_BUILDS) are present during execution.I ran `librarian install` and the executables are installed in the cache folder.
I ran generate without setting the PATH. Librarian used the bin directory.