diff options
author | David Ostrovsky <david.ostrovsky@gmail.com> | 2022-04-26 08:47:54 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2022-04-26 08:47:54 +0000 |
commit | 7e647fd4b5abbaa7e82e2f4a8352a02c044449b3 (patch) | |
tree | 62c72c2fdd885a448e61556e6baceac2cabaf557 | |
parent | 6b1a46ba94f9c1715f41421b9eb3a6e4e8c3f593 (diff) | |
parent | ecd1a20daabc74db496f88f122d027abf59d0315 (diff) |
Merge "Merge branch 'stable-3.3' into stable-3.4" into stable-3.4
22 files changed, 258 insertions, 65 deletions
diff --git a/Documentation/dev-release-deploy-config.txt b/Documentation/dev-release-deploy-config.txt index a4ccccfa9a..db08da506b 100644 --- a/Documentation/dev-release-deploy-config.txt +++ b/Documentation/dev-release-deploy-config.txt @@ -44,15 +44,13 @@ the upload to Maven Central, and to sign the release announcement email. + Generate and publish a PGP key as described in link:http://central.sonatype.org/pages/working-with-pgp-signatures.html[ -Working with PGP Signatures,role=external,window=_blank]. In addition to the keyserver mentioned -there it is recommended to also publish the key to the -link:https://keyserver.ubuntu.com/[Ubuntu key server]. +Working with PGP Signatures,role=external,window=_blank]. + Please be aware that after publishing your public key it may take a while until it is visible to the Sonatype server. + Add an entry for the public key in the -link:https://gerrit.googlesource.com/homepage/+/md-pages/releases/public-keys.md[key list,role=external,window=_blank] +link:https://gerrit.googlesource.com/homepage/+/master/pages/site/releases/public-keys.md[key list,role=external,window=_blank] on the homepage. + The PGP passphrase can be put in `~/.m2/settings.xml`: @@ -57,8 +57,38 @@ protobuf_deps() http_archive( name = "build_bazel_rules_nodejs", - sha256 = "dd7ea7efda7655c218ca707f55c3e1b9c68055a70c31a98f264b3445bc8f4cb1", - urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/3.2.3/rules_nodejs-3.2.3.tar.gz"], + sha256 = "c077680a307eb88f3e62b0b662c2e9c6315319385bc8c637a861ffdbed8ca247", + urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/5.1.0/rules_nodejs-5.1.0.tar.gz"], +) + +load("@build_bazel_rules_nodejs//:repositories.bzl", "build_bazel_rules_nodejs_dependencies") + +build_bazel_rules_nodejs_dependencies() + +# This is required just because we have a dependency on @bazel/concatjs. +# We don't actually use any of this web_testing stuff. +# TODO: Remove this dependency. +http_archive( + name = "io_bazel_rules_webtesting", + sha256 = "e9abb7658b6a129740c0b3ef6f5a2370864e102a5ba5ffca2cea565829ed825a", + urls = [ + "https://github.com/bazelbuild/rules_webtesting/releases/download/0.3.5/rules_webtesting.tar.gz", + ], +) + +# TODO: Remove this, see comments on `io_bazel_rules_webtesting`. +load("@io_bazel_rules_webtesting//web:repositories.bzl", "web_test_repositories") + +# TODO: Remove this, see comments on `io_bazel_rules_webtesting`. +web_test_repositories() + +# TODO: Remove this, see comments on `io_bazel_rules_webtesting`. +load("@io_bazel_rules_webtesting//web/versioned:browsers-0.3.3.bzl", "browser_repositories") + +# TODO: Remove this, see comments on `io_bazel_rules_webtesting`. +browser_repositories( + chromium = True, + firefox = True, ) # Golang support for PolyGerrit local dev server. @@ -883,42 +913,57 @@ maven_jar( sha1 = "11cfac598df9dc48bb9ed9357ed04212694b7808", ) -load("@build_bazel_rules_nodejs//:index.bzl", "yarn_install") +load("@build_bazel_rules_nodejs//:index.bzl", "node_repositories", "yarn_install") + +node_repositories( + node_version = "16.13.2", + yarn_version = "1.22.17", +) yarn_install( name = "npm", + exports_directories_only = False, frozen_lockfile = False, package_json = "//:package.json", + symlink_node_modules = True, yarn_lock = "//:yarn.lock", ) yarn_install( name = "ui_npm", args = ["--prod"], + exports_directories_only = False, frozen_lockfile = False, package_json = "//:polygerrit-ui/app/package.json", + symlink_node_modules = True, yarn_lock = "//:polygerrit-ui/app/yarn.lock", ) yarn_install( name = "ui_dev_npm", + exports_directories_only = False, frozen_lockfile = False, package_json = "//:polygerrit-ui/package.json", + symlink_node_modules = True, yarn_lock = "//:polygerrit-ui/yarn.lock", ) yarn_install( name = "tools_npm", + exports_directories_only = False, frozen_lockfile = False, package_json = "//:tools/node_tools/package.json", + symlink_node_modules = True, yarn_lock = "//:tools/node_tools/yarn.lock", ) yarn_install( name = "plugins_npm", args = ["--prod"], + exports_directories_only = False, frozen_lockfile = False, package_json = "//:plugins/package.json", + symlink_node_modules = True, yarn_lock = "//:plugins/yarn.lock", ) diff --git a/antlr3/BUILD b/antlr3/BUILD index 549946a2a0..23641e3e2b 100644 --- a/antlr3/BUILD +++ b/antlr3/BUILD @@ -22,6 +22,7 @@ java_library( srcs = [":query"], visibility = [ "//java/com/google/gerrit/index:__subpackages__", + "//java/com/google/gerrit/server:__subpackages__", "//javatests/com/google/gerrit:__subpackages__", "//javatests/com/google/gerrit/index:__pkg__", "//plugins:__pkg__", diff --git a/java/com/google/gerrit/httpd/restapi/RestApiServlet.java b/java/com/google/gerrit/httpd/restapi/RestApiServlet.java index 9b86a4fe1f..d224f9d4bf 100644 --- a/java/com/google/gerrit/httpd/restapi/RestApiServlet.java +++ b/java/com/google/gerrit/httpd/restapi/RestApiServlet.java @@ -334,7 +334,7 @@ public class RestApiServlet extends HttpServlet { try (TraceContext traceContext = enableTracing(req, res)) { List<IdString> path = splitPath(req); - try (PerThreadCache ignored = PerThreadCache.create()) { + try (PerThreadCache ignored = PerThreadCache.create(req)) { RequestInfo requestInfo = createRequestInfo(traceContext, requestUri(req), path); globals.requestListeners.runEach(l -> l.onRequest(requestInfo)); diff --git a/java/com/google/gerrit/server/cache/PerThreadCache.java b/java/com/google/gerrit/server/cache/PerThreadCache.java index b4f79d10ab..609fce7b25 100644 --- a/java/com/google/gerrit/server/cache/PerThreadCache.java +++ b/java/com/google/gerrit/server/cache/PerThreadCache.java @@ -21,7 +21,9 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Maps; import com.google.gerrit.common.Nullable; import java.util.Map; +import java.util.Optional; import java.util.function.Supplier; +import javax.servlet.http.HttpServletRequest; /** * Caches object instances for a request as {@link ThreadLocal} in the serving thread. @@ -58,6 +60,12 @@ public class PerThreadCache implements AutoCloseable { private static final int PER_THREAD_CACHE_SIZE = 25; /** + * Optional HTTP request associated with the per-thread cache, should the thread be associated + * with the incoming HTTP thread pool. + */ + private final Optional<HttpServletRequest> httpRequest; + + /** * Unique key for key-value mappings stored in PerThreadCache. The key is based on the value's * class and a list of identifiers that in combination uniquely set the object apart form others * of the same class. @@ -102,9 +110,9 @@ public class PerThreadCache implements AutoCloseable { } } - public static PerThreadCache create() { + public static PerThreadCache create(@Nullable HttpServletRequest httpRequest) { checkState(CACHE.get() == null, "called create() twice on the same request"); - PerThreadCache cache = new PerThreadCache(); + PerThreadCache cache = new PerThreadCache(httpRequest); CACHE.set(cache); return cache; } @@ -121,7 +129,9 @@ public class PerThreadCache implements AutoCloseable { private final Map<Key<?>, Object> cache = Maps.newHashMapWithExpectedSize(PER_THREAD_CACHE_SIZE); - private PerThreadCache() {} + private PerThreadCache(@Nullable HttpServletRequest req) { + httpRequest = Optional.ofNullable(req); + } /** * Returns an instance of {@code T} that was either loaded from the cache or obtained from the @@ -139,6 +149,19 @@ public class PerThreadCache implements AutoCloseable { return value; } + /** Returns the optional HTTP request associated with the local thread cache. */ + public Optional<HttpServletRequest> getHttpRequest() { + return httpRequest; + } + + /** Returns true if there is an HTTP request associated and is a GET or HEAD */ + public boolean hasReadonlyRequest() { + return httpRequest + .map(HttpServletRequest::getMethod) + .filter(m -> m.equalsIgnoreCase("GET") || m.equalsIgnoreCase("HEAD")) + .isPresent(); + } + @Override public void close() { CACHE.remove(); diff --git a/java/com/google/gerrit/server/git/RepoRefCache.java b/java/com/google/gerrit/server/git/RepoRefCache.java index 6b2493a9f1..9086da7fb5 100644 --- a/java/com/google/gerrit/server/git/RepoRefCache.java +++ b/java/com/google/gerrit/server/git/RepoRefCache.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.git; +import com.google.gerrit.server.cache.PerThreadCache; import java.io.IOException; import java.util.Collections; import java.util.HashMap; @@ -29,6 +30,17 @@ public class RepoRefCache implements RefCache { private final RefDatabase refdb; private final Map<String, Optional<ObjectId>> ids; + public static Optional<RefCache> getOptional(Repository repo) { + PerThreadCache cache = PerThreadCache.get(); + if (cache != null && cache.hasReadonlyRequest()) { + return Optional.of( + cache.get( + PerThreadCache.Key.create(RepoRefCache.class, repo), () -> new RepoRefCache(repo))); + } + + return Optional.empty(); + } + public RepoRefCache(Repository repo) { this.refdb = repo.getRefDatabase(); this.ids = new HashMap<>(); diff --git a/java/com/google/gerrit/server/notedb/ChangeNotes.java b/java/com/google/gerrit/server/notedb/ChangeNotes.java index 6500d926d8..619d499507 100644 --- a/java/com/google/gerrit/server/notedb/ChangeNotes.java +++ b/java/com/google/gerrit/server/notedb/ChangeNotes.java @@ -56,6 +56,7 @@ import com.google.gerrit.server.ReviewerByEmailSet; import com.google.gerrit.server.ReviewerSet; import com.google.gerrit.server.ReviewerStatusUpdate; import com.google.gerrit.server.git.RefCache; +import com.google.gerrit.server.git.RepoRefCache; import com.google.gerrit.server.project.NoSuchChangeException; import com.google.gerrit.server.project.ProjectCache; import com.google.gerrit.server.query.change.ChangeData; @@ -654,6 +655,10 @@ public class ChangeNotes extends AbstractChangeNotes<ChangeNotes> { @Override protected ObjectId readRef(Repository repo) throws IOException { - return refs != null ? refs.get(getRefName()).orElse(null) : super.readRef(repo); + Optional<RefCache> refsCache = + Optional.ofNullable(refs).map(Optional::of).orElse(RepoRefCache.getOptional(repo)); + return refsCache.isPresent() + ? refsCache.get().get(getRefName()).orElse(null) + : super.readRef(repo); } } diff --git a/java/com/google/gerrit/server/restapi/BUILD b/java/com/google/gerrit/server/restapi/BUILD index 6d3e222d6d..708e860189 100644 --- a/java/com/google/gerrit/server/restapi/BUILD +++ b/java/com/google/gerrit/server/restapi/BUILD @@ -8,6 +8,7 @@ java_library( name = "restapi", srcs = glob(["**/*.java"]), deps = [ + "//antlr3:query_parser", "//java/com/google/gerrit/common:annotations", "//java/com/google/gerrit/common:server", "//java/com/google/gerrit/entities", @@ -29,6 +30,7 @@ java_library( "//lib:guava", "//lib:jgit", "//lib:servlet-api", + "//lib/antlr:java-runtime", "//lib/auto:auto-value", "//lib/auto:auto-value-annotations", "//lib/commons:compress", diff --git a/java/com/google/gerrit/server/restapi/account/PostWatchedProjects.java b/java/com/google/gerrit/server/restapi/account/PostWatchedProjects.java index 5979b2a9ea..2131070b04 100644 --- a/java/com/google/gerrit/server/restapi/account/PostWatchedProjects.java +++ b/java/com/google/gerrit/server/restapi/account/PostWatchedProjects.java @@ -14,12 +14,15 @@ package com.google.gerrit.server.restapi.account; +import com.google.common.base.Strings; import com.google.gerrit.entities.NotifyConfig.NotifyType; import com.google.gerrit.extensions.client.ProjectWatchInfo; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestModifyView; +import com.google.gerrit.index.query.QueryParseException; +import com.google.gerrit.index.query.QueryParser; import com.google.gerrit.server.IdentifiedUser; import com.google.gerrit.server.UserInitiated; import com.google.gerrit.server.account.AccountResource; @@ -95,6 +98,17 @@ public class PostWatchedProjects throw new BadRequestException("project name must be specified"); } + if (!Strings.isNullOrEmpty(info.filter)) { + try { + QueryParser.parse(info.filter); + } catch (QueryParseException e) { + throw new BadRequestException( + String.format( + "invalid filter expression for project %s: %s", info.project, e.getMessage()), + e); + } + } + ProjectWatchKey key = ProjectWatchKey.create(projectsCollection.parse(info.project).getNameKey(), info.filter); if (m.containsKey(key)) { diff --git a/javatests/com/google/gerrit/server/cache/BUILD b/javatests/com/google/gerrit/server/cache/BUILD index b3b2f5ac09..c708e09f5f 100644 --- a/javatests/com/google/gerrit/server/cache/BUILD +++ b/javatests/com/google/gerrit/server/cache/BUILD @@ -7,8 +7,11 @@ junit_tests( deps = [ "//java/com/google/gerrit/server", "//java/com/google/gerrit/testing:gerrit-test-util", + "//javatests/com/google/gerrit/util/http/testutil", "//lib:junit", "//lib/truth", + "//lib/truth:truth-java8-extension", + "@servlet-api//jar", ], ) diff --git a/javatests/com/google/gerrit/server/cache/PerThreadCacheTest.java b/javatests/com/google/gerrit/server/cache/PerThreadCacheTest.java index 5d420d33f6..c04deb4e8e 100644 --- a/javatests/com/google/gerrit/server/cache/PerThreadCacheTest.java +++ b/javatests/com/google/gerrit/server/cache/PerThreadCacheTest.java @@ -15,9 +15,13 @@ package com.google.gerrit.server.cache; import static com.google.common.truth.Truth.assertThat; +import static com.google.common.truth.Truth8.assertThat; import static com.google.gerrit.testing.GerritJUnit.assertThrows; +import com.google.gerrit.util.http.testutil.FakeHttpServletRequest; import java.util.function.Supplier; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; import org.junit.Test; public class PerThreadCacheTest { @@ -43,7 +47,7 @@ public class PerThreadCacheTest { @Test public void endToEndCache() { - try (PerThreadCache ignored = PerThreadCache.create()) { + try (PerThreadCache ignored = PerThreadCache.create(null)) { PerThreadCache cache = PerThreadCache.get(); PerThreadCache.Key<String> key1 = PerThreadCache.Key.create(String.class); @@ -61,7 +65,7 @@ public class PerThreadCacheTest { @Test public void cleanUp() { PerThreadCache.Key<String> key = PerThreadCache.Key.create(String.class); - try (PerThreadCache ignored = PerThreadCache.create()) { + try (PerThreadCache ignored = PerThreadCache.create(null)) { PerThreadCache cache = PerThreadCache.get(); String value1 = cache.get(key, () -> "value1"); assertThat(value1).isEqualTo("value1"); @@ -69,7 +73,7 @@ public class PerThreadCacheTest { // Create a second cache and assert that it is not connected to the first one. // This ensures that the cleanup is actually working. - try (PerThreadCache ignored = PerThreadCache.create()) { + try (PerThreadCache ignored = PerThreadCache.create(null)) { PerThreadCache cache = PerThreadCache.get(); String value1 = cache.get(key, () -> "value2"); assertThat(value1).isEqualTo("value2"); @@ -78,16 +82,48 @@ public class PerThreadCacheTest { @Test public void doubleInstantiationFails() { - try (PerThreadCache ignored = PerThreadCache.create()) { + try (PerThreadCache ignored = PerThreadCache.create(null)) { IllegalStateException thrown = - assertThrows(IllegalStateException.class, () -> PerThreadCache.create()); + assertThrows(IllegalStateException.class, () -> PerThreadCache.create(null)); assertThat(thrown).hasMessageThat().contains("called create() twice on the same request"); } } @Test + public void isAssociatedWithHttpReadonlyRequest() { + HttpServletRequest getRequest = new FakeHttpServletRequest(); + try (PerThreadCache cache = PerThreadCache.create(getRequest)) { + assertThat(cache.getHttpRequest()).hasValue(getRequest); + assertThat(cache.hasReadonlyRequest()).isTrue(); + } + } + + @Test + public void isAssociatedWithHttpWriteRequest() { + HttpServletRequest putRequest = + new HttpServletRequestWrapper(new FakeHttpServletRequest()) { + @Override + public String getMethod() { + return "PUT"; + } + }; + try (PerThreadCache cache = PerThreadCache.create(putRequest)) { + assertThat(cache.getHttpRequest()).hasValue(putRequest); + assertThat(cache.hasReadonlyRequest()).isFalse(); + } + } + + @Test + public void isNotAssociatedWithHttpRequest() { + try (PerThreadCache cache = PerThreadCache.create(null)) { + assertThat(cache.getHttpRequest()).isEmpty(); + assertThat(cache.hasReadonlyRequest()).isFalse(); + } + } + + @Test public void enforceMaxSize() { - try (PerThreadCache cache = PerThreadCache.create()) { + try (PerThreadCache cache = PerThreadCache.create(null)) { // Fill the cache for (int i = 0; i < 50; i++) { PerThreadCache.Key<String> key = PerThreadCache.Key.create(String.class, i); diff --git a/package.json b/package.json index 320b196ab9..f52aa74621 100644 --- a/package.json +++ b/package.json @@ -3,9 +3,10 @@ "version": "3.1.0-SNAPSHOT", "description": "Gerrit Code Review", "dependencies": { - "@bazel/rollup": "^3.2.3", - "@bazel/terser": "^3.2.3", - "@bazel/typescript": "^3.2.3" + "@bazel/concatjs": "^5.1.0", + "@bazel/rollup": "^5.1.0", + "@bazel/terser": "^5.1.0", + "@bazel/typescript": "^5.1.0" }, "devDependencies": { "@typescript-eslint/eslint-plugin": "^4.22.0", diff --git a/polygerrit-ui/app/BUILD b/polygerrit-ui/app/BUILD index 2f83182c51..47521f6f6e 100644 --- a/polygerrit-ui/app/BUILD +++ b/polygerrit-ui/app/BUILD @@ -130,6 +130,7 @@ eslint( ], ignore = ".eslintignore", plugins = [ + "@npm//@typescript-eslint/eslint-plugin", "@npm//eslint-config-google", "@npm//eslint-plugin-html", "@npm//eslint-plugin-import", diff --git a/polygerrit-ui/app/node_modules_licenses/BUILD b/polygerrit-ui/app/node_modules_licenses/BUILD index 44b98117ba..a2fddb10de 100644 --- a/polygerrit-ui/app/node_modules_licenses/BUILD +++ b/polygerrit-ui/app/node_modules_licenses/BUILD @@ -1,4 +1,4 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_library") +load("@npm//@bazel/concatjs:index.bzl", "ts_library") load("//tools/node_tools/node_modules_licenses:node_modules_licenses.bzl", "node_modules_licenses") filegroup( @@ -6,6 +6,8 @@ filegroup( srcs = glob(["licenses/*.txt"]), ) +# TODO: Would be nice to use `ts_project` from @bazel/typescript instead. +# We would prefer to not depend on @bazel/concatjs ... ts_library( name = "licenses-config", srcs = [ diff --git a/tools/node_tools/BUILD b/tools/node_tools/BUILD index 03e3a13c53..8aeed0177e 100644 --- a/tools/node_tools/BUILD +++ b/tools/node_tools/BUILD @@ -28,13 +28,19 @@ nodejs_binary( # Create a tsc_wrapped compiler rule to use in the ts_library # compiler attribute when using self-managed dependencies +# TODO: Would be nice to just use `tsc-bin` below instead. +# We would prefer to not depend on @bazel/concatjs ... nodejs_binary( name = "tsc_wrapped-bin", # Point bazel to your node_modules to find the entry point - data = ["@tools_npm//:node_modules"], + data = [ + "@tools_npm//:node_modules", + "@tools_npm//@bazel/concatjs", + "@tools_npm//typescript", + ], # It seems, bazel uses different approaches to compile ts files (it runs some # ts service in background). It works without any workaround. - entry_point = "@tools_npm//:node_modules/@bazel/typescript/internal/tsc_wrapped/tsc_wrapped.js", + entry_point = "@tools_npm//:node_modules/@bazel/concatjs/internal/tsc_wrapped/tsc_wrapped.js", ) # Wrap a typescript into a tsc-bin binary. diff --git a/tools/node_tools/node_modules_licenses/BUILD b/tools/node_tools/node_modules_licenses/BUILD index b88ec24f5b..1437e755ee 100644 --- a/tools/node_tools/node_modules_licenses/BUILD +++ b/tools/node_tools/node_modules_licenses/BUILD @@ -1,9 +1,11 @@ load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary") -load("@npm//@bazel/typescript:index.bzl", "ts_library") +load("@npm//@bazel/concatjs:index.bzl", "ts_library") load("@npm//@bazel/rollup:index.bzl", "rollup_bundle") package(default_visibility = ["//visibility:public"]) +# TODO: Would be nice to use `ts_project` from @bazel/typescript instead. +# We would prefer to not depend on @bazel/concatjs ... ts_library( name = "licenses-map", srcs = glob(["*.ts"]), diff --git a/tools/node_tools/package.json b/tools/node_tools/package.json index bfc5191908..fc7ac16cf5 100644 --- a/tools/node_tools/package.json +++ b/tools/node_tools/package.json @@ -3,8 +3,9 @@ "description": "Gerrit Build Tools", "browser": false, "dependencies": { - "@bazel/rollup": "^3.2.3", - "@bazel/typescript": "^3.2.3", + "@bazel/concatjs": "^5.1.0", + "@bazel/rollup": "^5.1.0", + "@bazel/typescript": "^5.1.0", "@types/node": "^10.17.12", "@types/parse5": "^4.0.0", "@types/parse5-html-rewriting-stream": "^5.1.2", diff --git a/tools/node_tools/polygerrit_app_preprocessor/BUILD b/tools/node_tools/polygerrit_app_preprocessor/BUILD index fa3ce56a1c..47f2a41696 100644 --- a/tools/node_tools/polygerrit_app_preprocessor/BUILD +++ b/tools/node_tools/polygerrit_app_preprocessor/BUILD @@ -1,9 +1,11 @@ load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary") load("@npm//@bazel/rollup:index.bzl", "rollup_bundle") -load("@npm//@bazel/typescript:index.bzl", "ts_library") +load("@npm//@bazel/concatjs:index.bzl", "ts_library") package(default_visibility = ["//visibility:public"]) +# TODO: Would be nice to use `ts_project` from @bazel/typescript instead. +# We would prefer to not depend on @bazel/concatjs ... ts_library( name = "preprocessor", srcs = glob(["*.ts"]), diff --git a/tools/node_tools/polygerrit_app_preprocessor/links-updater.ts b/tools/node_tools/polygerrit_app_preprocessor/links-updater.ts index 24e445d2d5..9f872cc96f 100644 --- a/tools/node_tools/polygerrit_app_preprocessor/links-updater.ts +++ b/tools/node_tools/polygerrit_app_preprocessor/links-updater.ts @@ -39,7 +39,7 @@ async function main() { process.exit(1); } - const jsonRedirects: JSONRedirects = JSON.parse(fs.readFileSync(process.argv[3], {encoding: "utf-8"})); + const jsonRedirects: JSONRedirects = JSON.parse(fs.readFileSync(process.argv[3], {encoding: "utf-8"})) as JSONRedirects; const redirectsResolver = new RedirectsResolver(jsonRedirects.redirects); const input = readMultilineParamFile(process.argv[2]); diff --git a/tools/node_tools/utils/BUILD b/tools/node_tools/utils/BUILD index 2196012f71..0a6e768f93 100644 --- a/tools/node_tools/utils/BUILD +++ b/tools/node_tools/utils/BUILD @@ -1,7 +1,9 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_library") +load("@npm//@bazel/concatjs:index.bzl", "ts_library") package(default_visibility = ["//visibility:public"]) +# TODO: Would be nice to use `ts_project` from @bazel/typescript instead. +# We would prefer to not depend on @bazel/concatjs ... ts_library( name = "utils", srcs = glob(["*.ts"]), diff --git a/tools/node_tools/yarn.lock b/tools/node_tools/yarn.lock index 767f285687..4aa7ebb950 100644 --- a/tools/node_tools/yarn.lock +++ b/tools/node_tools/yarn.lock @@ -492,20 +492,35 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" -"@bazel/rollup@^3.2.3": - version "3.2.3" - resolved "https://registry.yarnpkg.com/@bazel/rollup/-/rollup-3.2.3.tgz#eb6b17f89da5d38b035a6d59a99000f2d5ada667" - integrity sha512-7PmJqekk92OaiwwEN3dYsp5qbZX8cqr0WkFUiaM3FBsNYVoN/rdh+VxQJWTuDGLjWiHxLwE95YwVHcvwerSrCg== +"@bazel/concatjs@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@bazel/concatjs/-/concatjs-5.1.0.tgz#f4321dec4a225c3ceac41b2dc7ec7c3dd3dd5e21" + integrity sha512-sj+vxHVB/swh7awOfQ37h3p/gxSPgLSnUkDt6POrj26qkfi7HrLB1ZkWAPFIIxjEhsBp1LchoHiezjw2GylZQg== -"@bazel/typescript@^3.2.3": - version "3.2.3" - resolved "https://registry.yarnpkg.com/@bazel/typescript/-/typescript-3.2.3.tgz#6e40bdb7c5294e588bac3b7d1269e58b98a1856c" - integrity sha512-Q1Yin/AYdh9yrkSJo3H6nVn6mMaohr5syjLd0Df0w7WI4zerdJTxrY5nhoWZwO/S1rPj8/MedDwZudCqPDeDMA== +"@bazel/rollup@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@bazel/rollup/-/rollup-5.1.0.tgz#dc858ddc93c9fdb9cc2e7982e632c939c646ebdc" + integrity sha512-wEiWdSyVbsycSirSYjR6FGfPGbRNI7sGNAYmrV0hIzYIi+KqXeTNcwKIRSE9PESP3mb0VWbZmHvXvmrWk6daPQ== + dependencies: + "@bazel/worker" "5.1.0" + +"@bazel/typescript@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@bazel/typescript/-/typescript-5.1.0.tgz#348552355cc92a43f22e637fabce76ed64505548" + integrity sha512-E7wYv1tBFtcsFp0YN7Cf9Lv184xOzvT5WJKwZxt+43oq8R5tGmTSuqQwm4c9JmEq6s0eZmwUaRv+WXp9hxsE4A== dependencies: + "@bazel/worker" "5.1.0" protobufjs "6.8.8" semver "5.6.0" source-map-support "0.5.9" - tsutils "2.27.2" + tsutils "3.21.0" + +"@bazel/worker@5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@bazel/worker/-/worker-5.1.0.tgz#6f1e0f3ef628e3449d424cacd341c9abd09a3735" + integrity sha512-u3aU93UtHz3vL6ozezq0jnw83s1cNT4dAnW+vvB7M++YKFlB3CWzZFb0JRJbCp1b6DDe30ML0WOdd3nVYuylpw== + dependencies: + google-protobuf "^3.6.1" "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" @@ -3958,6 +3973,11 @@ globby@^8.0.1: pify "^3.0.0" slash "^1.0.0" +google-protobuf@^3.6.1: + version "3.19.4" + resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.19.4.tgz#8d32c3e34be9250956f28c0fb90955d13f311888" + integrity sha512-OIPNCxsG2lkIvf+P5FNfJ/Km95CsXOBecS9ZcAU6m2Rq3svc0Apl9nB3GMDNKfQ9asNv4KjyAqGwPQFrVle3Yg== + got@^5.0.0: version "5.7.1" resolved "https://registry.yarnpkg.com/got/-/got-5.7.1.tgz#5f81635a61e4a6589f180569ea4e381680a51f35" @@ -7856,10 +7876,10 @@ tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== -tsutils@2.27.2: - version "2.27.2" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.27.2.tgz#60ba88a23d6f785ec4b89c6e8179cac9b431f1c7" - integrity sha512-qf6rmT84TFMuxAKez2pIfR8UCai49iQsfB7YWVjV1bKpy/d0PWT5rEOSM6La9PiHZ0k1RRZQiwVdVJfQ3BPHgg== +tsutils@3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" @@ -500,25 +500,44 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" -"@bazel/rollup@^3.2.3": - version "3.2.3" - resolved "https://registry.yarnpkg.com/@bazel/rollup/-/rollup-3.2.3.tgz#eb6b17f89da5d38b035a6d59a99000f2d5ada667" - integrity sha512-7PmJqekk92OaiwwEN3dYsp5qbZX8cqr0WkFUiaM3FBsNYVoN/rdh+VxQJWTuDGLjWiHxLwE95YwVHcvwerSrCg== +"@bazel/concatjs@^5.1.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@bazel/concatjs/-/concatjs-5.4.0.tgz#04e752a6ea3e684f00879e6683657c4ede72df6e" + integrity sha512-jlupaDKxqFS3B1lttOIgkKxirP7v5Qx7KCFtOXO7JxtvYJD/qKtKXEQggTrGKJqLPyiZlNiYimHHGICLSWIZcQ== + dependencies: + protobufjs "6.8.8" + source-map-support "0.5.9" + tsutils "3.21.0" + +"@bazel/rollup@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@bazel/rollup/-/rollup-5.1.0.tgz#dc858ddc93c9fdb9cc2e7982e632c939c646ebdc" + integrity sha512-wEiWdSyVbsycSirSYjR6FGfPGbRNI7sGNAYmrV0hIzYIi+KqXeTNcwKIRSE9PESP3mb0VWbZmHvXvmrWk6daPQ== + dependencies: + "@bazel/worker" "5.1.0" -"@bazel/terser@^3.2.3": - version "3.2.3" - resolved "https://registry.yarnpkg.com/@bazel/terser/-/terser-3.2.3.tgz#18849cb01f6a9fd840955547b0a9dbf63f02c720" - integrity sha512-SzX3ytgt8+i36sODPO9ju0LbjKXB8w9zi00S+XNManQTRilNrr/NODTYbBzKrjuebA/o52NMpvRGigRd1Z2RGg== +"@bazel/terser@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@bazel/terser/-/terser-5.1.0.tgz#5c82b93f4d9def8103c16be2dd33900d156fa066" + integrity sha512-uE3hTqfkZr4nvlk3jwi0xx6URqqI7r6GGPtDAU02/PVei+O4PfThaov7cwHO+D1FnoLncDqChb9Iolr7Crw/8A== -"@bazel/typescript@^3.2.3": - version "3.2.3" - resolved "https://registry.yarnpkg.com/@bazel/typescript/-/typescript-3.2.3.tgz#6e40bdb7c5294e588bac3b7d1269e58b98a1856c" - integrity sha512-Q1Yin/AYdh9yrkSJo3H6nVn6mMaohr5syjLd0Df0w7WI4zerdJTxrY5nhoWZwO/S1rPj8/MedDwZudCqPDeDMA== +"@bazel/typescript@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@bazel/typescript/-/typescript-5.1.0.tgz#348552355cc92a43f22e637fabce76ed64505548" + integrity sha512-E7wYv1tBFtcsFp0YN7Cf9Lv184xOzvT5WJKwZxt+43oq8R5tGmTSuqQwm4c9JmEq6s0eZmwUaRv+WXp9hxsE4A== dependencies: + "@bazel/worker" "5.1.0" protobufjs "6.8.8" semver "5.6.0" source-map-support "0.5.9" - tsutils "2.27.2" + tsutils "3.21.0" + +"@bazel/worker@5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@bazel/worker/-/worker-5.1.0.tgz#6f1e0f3ef628e3449d424cacd341c9abd09a3735" + integrity sha512-u3aU93UtHz3vL6ozezq0jnw83s1cNT4dAnW+vvB7M++YKFlB3CWzZFb0JRJbCp1b6DDe30ML0WOdd3nVYuylpw== + dependencies: + google-protobuf "^3.6.1" "@dabh/diagnostics@^2.0.2": version "2.0.2" @@ -5014,6 +5033,11 @@ globby@^9.2.0: pify "^4.0.1" slash "^2.0.0" +google-protobuf@^3.6.1: + version "3.19.4" + resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.19.4.tgz#8d32c3e34be9250956f28c0fb90955d13f311888" + integrity sha512-OIPNCxsG2lkIvf+P5FNfJ/Km95CsXOBecS9ZcAU6m2Rq3svc0Apl9nB3GMDNKfQ9asNv4KjyAqGwPQFrVle3Yg== + got@^11.8.0: version "11.8.2" resolved "https://registry.yarnpkg.com/got/-/got-11.8.2.tgz#7abb3959ea28c31f3576f1576c1effce23f33599" @@ -9856,16 +9880,9 @@ tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tsutils@2.27.2: - version "2.27.2" - resolved "https://registry.npmjs.org/tsutils/-/tsutils-2.27.2.tgz" - integrity sha512-qf6rmT84TFMuxAKez2pIfR8UCai49iQsfB7YWVjV1bKpy/d0PWT5rEOSM6La9PiHZ0k1RRZQiwVdVJfQ3BPHgg== - dependencies: - tslib "^1.8.1" - -tsutils@^3.17.1: +tsutils@3.21.0, tsutils@^3.17.1: version "3.21.0" - resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" |