summaryrefslogtreecommitdiff
path: root/scripts/bind_package_dependencies.js
diff options
context:
space:
mode:
authorBrandon Keiji <[email protected]>2025-04-21 23:11:51 -0700
committerGitHub <[email protected]>2025-04-21 23:11:51 -0700
commit79710375e3477ec821aa889c02eb64f2529440af (patch)
tree51552ebfba9606bf82aad079bc3b9a31452b51d7 /scripts/bind_package_dependencies.js
parent98fa8d2b5134dd919dffb7cb68a3f97dad0b159f (diff)
fix: point npmrc to dogfood artifact registry (#108)
Diffstat (limited to 'scripts/bind_package_dependencies.js')
-rw-r--r--scripts/bind_package_dependencies.js50
1 files changed, 50 insertions, 0 deletions
diff --git a/scripts/bind_package_dependencies.js b/scripts/bind_package_dependencies.js
new file mode 100644
index 00000000..eb9a4cc6
--- /dev/null
+++ b/scripts/bind_package_dependencies.js
@@ -0,0 +1,50 @@
+/**
+ * @license
+ * Copyright 2025 Google LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import fs from 'node:fs';
+import path from 'node:path';
+import _ from 'lodash';
+
+function bindPackageDependencies() {
+ const scriptDir = process.cwd();
+ const currentPkgJsonPath = path.join(scriptDir, 'package.json');
+ const currentPkg = JSON.parse(fs.readFileSync(currentPkgJsonPath));
+ // assume packages are all under /<repo_root>/packages/
+ const packagesDir = path.join(path.dirname(scriptDir));
+
+ const geminiCodePkgs = fs
+ .readdirSync(packagesDir)
+ .filter(
+ (name) =>
+ fs.statSync(path.join(packagesDir, name)).isDirectory() &&
+ fs.existsSync(path.join(packagesDir, name, 'package.json')),
+ )
+ .map((packageDirname) => {
+ const packageJsonPath = path.join(
+ packagesDir,
+ packageDirname,
+ 'package.json',
+ );
+ return JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
+ })
+ .reduce((pkgs, pkg) => ({ ...pkgs, [pkg.name]: pkg }), {});
+ currentPkg.dependencies = _.mapValues(
+ currentPkg.dependencies,
+ (value, key) => {
+ if (geminiCodePkgs[key]) {
+ console.log(
+ `Package ${currentPkg.name} has a dependency on ${key}. Updating dependent version.`,
+ );
+ return geminiCodePkgs[key].version;
+ }
+ return value;
+ },
+ );
+ const updatedPkgJson = JSON.stringify(currentPkg, null, 2) + '\n';
+ fs.writeFileSync(currentPkgJsonPath, updatedPkgJson);
+}
+
+bindPackageDependencies();