diff --git a/BUILD b/BUILD index 0378f054b..e6492367a 100644 --- a/BUILD +++ b/BUILD @@ -6,6 +6,7 @@ exports_files([ "defs.bzl", "extensions.bzl", "specs.bzl", + "maven_install.json", ]) licenses(["notice"]) # Apache 2.0 diff --git a/maven_install.json b/maven_install.json index 07c3b81f6..20def9c32 100644 --- a/maven_install.json +++ b/maven_install.json @@ -1,7 +1,48 @@ { "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", - "__INPUT_ARTIFACTS_HASH": 1994476565, - "__RESOLVED_ARTIFACTS_HASH": -274973469, + "__INPUT_ARTIFACTS_HASH": { + "com.google.code.gson:gson": -1146526807, + "com.google.errorprone:error_prone_annotations": -571311395, + "com.google.guava:guava": 733518530, + "com.google.protobuf:protobuf-java": -670939507, + "com.google.protobuf:protobuf-java-util": -1033086717, + "com.google.truth:truth": 194878202, + "io.netty:netty-tcnative-boringssl-static": -1979050407, + "junit:junit": -652553691, + "org.hamcrest:hamcrest-core": 466791695, + "org.mockito:mockito-core": 1592791704, + "repositories": -1949687017 + }, + "__RESOLVED_ARTIFACTS_HASH": { + "com.google.auto.value:auto-value-annotations": 1323429276, + "com.google.code.findbugs:jsr305": 870839855, + "com.google.code.gson:gson": 50257904, + "com.google.errorprone:error_prone_annotations": 1527418394, + "com.google.guava:failureaccess": 1715931538, + "com.google.guava:guava": -1587873388, + "com.google.guava:listenablefuture": 1079558157, + "com.google.j2objc:j2objc-annotations": -1008747351, + "com.google.protobuf:protobuf-java": 657144169, + "com.google.protobuf:protobuf-java-util": 291568724, + "com.google.truth:truth": 1360610465, + "io.netty:netty-tcnative-boringssl-static": 786460467, + "io.netty:netty-tcnative-boringssl-static:jar:linux-aarch_64": -151974322, + "io.netty:netty-tcnative-boringssl-static:jar:linux-x86_64": -1831640381, + "io.netty:netty-tcnative-boringssl-static:jar:osx-aarch_64": -1661340718, + "io.netty:netty-tcnative-boringssl-static:jar:osx-x86_64": 2101324017, + "io.netty:netty-tcnative-boringssl-static:jar:windows-x86_64": 889950966, + "io.netty:netty-tcnative-classes": 1239547355, + "junit:junit": 724065836, + "net.bytebuddy:byte-buddy": 1086524953, + "net.bytebuddy:byte-buddy-agent": 1999612366, + "org.checkerframework:checker-qual": -778702181, + "org.hamcrest:hamcrest": -533823501, + "org.hamcrest:hamcrest-core": 511008887, + "org.jspecify:jspecify": 117231129, + "org.mockito:mockito-core": -1129661008, + "org.objenesis:objenesis": 1798216877, + "org.ow2.asm:asm": -1742429076 + }, "conflict_resolution": { "com.google.errorprone:error_prone_annotations:2.23.0": "com.google.errorprone:error_prone_annotations:2.41.0", "com.google.guava:guava:33.0.0-jre": "com.google.guava:guava:33.5.0-jre", @@ -542,5 +583,5 @@ ] }, "services": {}, - "version": "2" + "version": "3" } diff --git a/private/extensions/maven.bzl b/private/extensions/maven.bzl index 0d700d03d..3c2c28266 100644 --- a/private/extensions/maven.bzl +++ b/private/extensions/maven.bzl @@ -13,7 +13,7 @@ load("//private/lib:toml_parser.bzl", "parse_toml") load("//private/rules:coursier.bzl", "DEFAULT_AAR_IMPORT_LABEL", "coursier_fetch", "pinned_coursier_fetch") load("//private/rules:unpinned_maven_pin_command_alias.bzl", "unpinned_maven_pin_command_alias") load("//private/rules:v1_lock_file.bzl", "v1_lock_file") -load("//private/rules:v2_lock_file.bzl", "v2_lock_file") +load("//private/rules:v3_lock_file.bzl", "v2_lock_file", "v3_lock_file") load(":download_pinned_deps.bzl", "download_pinned_deps") DEFAULT_REPOSITORIES = [ @@ -728,12 +728,15 @@ def maven_impl(mctx): "artifacts": {}, "dependencies": {}, "repositories": {}, - "version": "2", + "version": "3", } else: lock_file = json.decode(lock_file_content) - if v2_lock_file.is_valid_lock_file(lock_file): + if v3_lock_file.is_valid_lock_file(lock_file): + artifacts = v3_lock_file.get_artifacts(lock_file) + importer = v3_lock_file + elif v2_lock_file.is_valid_lock_file(lock_file): artifacts = v2_lock_file.get_artifacts(lock_file) importer = v2_lock_file elif v1_lock_file.is_valid_lock_file(lock_file): diff --git a/private/rules/coursier.bzl b/private/rules/coursier.bzl index 3d74e635d..ed8eed54c 100644 --- a/private/rules/coursier.bzl +++ b/private/rules/coursier.bzl @@ -32,7 +32,7 @@ load( ) load("//private/lib:urls.bzl", "remove_auth_from_url") load("//private/rules:v1_lock_file.bzl", "v1_lock_file") -load("//private/rules:v2_lock_file.bzl", "v2_lock_file") +load("//private/rules:v3_lock_file.bzl", "v2_lock_file", "v3_lock_file") _BUILD = """ # package(default_visibility = [{visibilities}]) # https://github.com/bazelbuild/bazel/issues/13681 @@ -331,6 +331,13 @@ def _stable_artifact(artifact): keys = sorted(parsed.keys()) return ":".join(["%s=%s" % (key, parsed[key]) for key in keys]) +def _add_to_hash_dictionary(dictionary, artifact, salt): + artifact_dict = json.decode(artifact) + key = artifact_dict["group"] + ":" + artifact_dict["artifact"] + value = dictionary.get(key, []) + value.append(hash(_stable_artifact(artifact) + salt)) + dictionary[key] = value + # Compute a signature of the list of artifacts that will be used to build # the dependency tree. This is used as a check to see whether the dependency # tree needs to be repinned. @@ -349,24 +356,37 @@ def compute_dependency_inputs_signature(boms = [], artifacts = [], repositories artifact_inputs = [] excluded_artifact_inputs = [] + all_hashes = dict() + if boms and len(boms): for bom in sorted(boms): artifact_inputs.append(_stable_artifact(bom)) + _add_to_hash_dictionary(all_hashes, bom, "bom") for artifact in sorted(artifacts): artifact_inputs.append(_stable_artifact(artifact)) + _add_to_hash_dictionary(all_hashes, artifact, "artifact") for artifact in sorted(excluded_artifacts): excluded_artifact_inputs.append(_stable_artifact(artifact)) + _add_to_hash_dictionary(all_hashes, artifact, "excluded_artifact") v1_sig = hash(repr(sorted(artifact_inputs))) ^ hash(repr(sorted(repositories))) hash_parts = [sorted(artifact_inputs), sorted(repositories), sorted(excluded_artifact_inputs)] - current_version_sig = 0 + v2_sig = 0 for part in hash_parts: - current_version_sig ^= hash(repr(part)) + v2_sig ^= hash(repr(part)) + + for k, v in all_hashes.items(): + if len(v) == 1: + all_hashes[k] = v[0] + else: + all_hashes[k] = hash(repr(sorted(v))) - return (current_version_sig, [v1_sig]) + all_hashes["repositories"] = hash(repr(sorted(repositories))) + + return (all_hashes, [v1_sig, v2_sig]) def get_netrc_lines_from_entries(netrc_entries): netrc_lines = [] @@ -463,21 +483,26 @@ def _pinned_coursier_fetch_impl(repository_ctx): "artifacts": {}, "dependencies": {}, "repositories": {}, - "version": "2", + "version": "3", } else: maven_install_json_content = json.decode(lock_file_content) - if v1_lock_file.is_valid_lock_file(maven_install_json_content): + if v3_lock_file.is_valid_lock_file(maven_install_json_content): + importer = v3_lock_file + elif v2_lock_file.is_valid_lock_file(maven_install_json_content): + importer = v2_lock_file + elif v1_lock_file.is_valid_lock_file(maven_install_json_content): importer = v1_lock_file + else: + fail("Unable to read lock file: %s" % repository_ctx.attr.maven_install_json) + + # Check if using the most recent lock file format. + if importer != v3_lock_file: print_if_not_repinning( repository_ctx, "Lock file should be updated. Please run `REPIN=1 bazel run @unpinned_%s//:pin`" % repository_ctx.name, ) - elif v2_lock_file.is_valid_lock_file(maven_install_json_content): - importer = v2_lock_file - else: - fail("Unable to read lock file: %s" % repository_ctx.attr.maven_install_json) # Validation steps for maven_install.json. @@ -1323,7 +1348,7 @@ def _coursier_fetch_impl(repository_ctx): repository_ctx.file( "unsorted_deps.json", - content = v2_lock_file.render_lock_file( + content = v3_lock_file.render_lock_file( lock_file_contents, inputs_hash, ), @@ -1332,7 +1357,7 @@ def _coursier_fetch_impl(repository_ctx): repository_ctx.report_progress("Generating BUILD targets..") (generated_imports, jar_versionless_target_labels) = parser.generate_imports( repository_ctx = repository_ctx, - dependencies = v2_lock_file.get_artifacts(lock_file_contents), + dependencies = v3_lock_file.get_artifacts(lock_file_contents), explicit_artifacts = { a["group"] + ":" + a["artifact"] + (":" + a["classifier"] if "classifier" in a else ""): True for a in artifacts diff --git a/private/rules/pin_dependencies.bzl b/private/rules/pin_dependencies.bzl index e50035974..cdf17aed3 100644 --- a/private/rules/pin_dependencies.bzl +++ b/private/rules/pin_dependencies.bzl @@ -15,7 +15,7 @@ load("//private/rules:coursier.bzl", "compute_dependency_inputs_signature") _TEMPLATE = """#!/usr/bin/env bash -{resolver_cmd} --jvm_flags={jvm_flags} --argsfile {config} --input_hash '{input_hash}' --output {output} +{resolver_cmd} --jvm_flags={jvm_flags} --argsfile {config} --input-hash-path '{input_hash_path}' --output {output} """ def _stringify_exclusions(exclusions): @@ -63,19 +63,25 @@ def _pin_dependencies_impl(ctx): content = json.encode_indent(config, indent = " "), ) - input_hash = compute_dependency_inputs_signature( + input_hash, _ = compute_dependency_inputs_signature( boms = ctx.attr.boms, artifacts = ctx.attr.artifacts, repositories = ctx.attr.repositories, excluded_artifacts = ctx.attr.excluded_artifacts, ) + hash_file = ctx.actions.declare_file("%s-input-hash.json" % ctx.label.name) + ctx.actions.write( + hash_file, + content = json.encode_indent(input_hash, indent = " "), + ) + script = ctx.actions.declare_file(ctx.label.name) ctx.actions.write( script, _TEMPLATE.format( config = config_file.short_path, - input_hash = input_hash[0], + input_hash_path = hash_file.short_path, resolver_cmd = ctx.executable.resolver.short_path, output = "$BUILD_WORKSPACE_DIRECTORY/" + ctx.attr.lock_file, jvm_flags = ctx.attr.jvm_flags, @@ -87,7 +93,7 @@ def _pin_dependencies_impl(ctx): DefaultInfo( executable = script, files = depset([script, config_file]), - runfiles = ctx.runfiles(files = [script, config_file]).merge(ctx.attr.resolver[DefaultInfo].default_runfiles), + runfiles = ctx.runfiles(files = [script, config_file, hash_file]).merge(ctx.attr.resolver[DefaultInfo].default_runfiles), ), ] diff --git a/private/rules/v2_lock_file.bzl b/private/rules/v3_lock_file.bzl similarity index 70% rename from private/rules/v2_lock_file.bzl rename to private/rules/v3_lock_file.bzl index 5e5eaa0cf..f65c6574b 100644 --- a/private/rules/v2_lock_file.bzl +++ b/private/rules/v3_lock_file.bzl @@ -15,9 +15,15 @@ load("//private/lib:coordinates.bzl", "to_external_form") _REQUIRED_KEYS = ["artifacts", "dependencies", "repositories"] -def _is_valid_lock_file(lock_file_contents): +def _is_valid_lock_file_v2(lock_file_contents): + return _is_valid_lock_file(lock_file_contents, "2") + +def _is_valid_lock_file_v3(lock_file_contents): + return _is_valid_lock_file(lock_file_contents, "3") + +def _is_valid_lock_file(lock_file_contents, desired_version): version = lock_file_contents.get("version") - if "2" != version: + if desired_version != version: return False all_keys = lock_file_contents.keys() @@ -37,7 +43,7 @@ def _get_input_artifacts_hash(lock_file_contents): def _get_lock_file_hash(lock_file_contents): return lock_file_contents.get("__RESOLVED_ARTIFACTS_HASH") -def _compute_lock_file_hash(lock_file_contents): +def _compute_lock_file_hash_v2(lock_file_contents): to_hash = {} for key in sorted(_REQUIRED_KEYS): value = lock_file_contents.get(key) @@ -47,6 +53,75 @@ def _compute_lock_file_hash(lock_file_contents): to_hash.update({key: json.decode(json.encode(value))}) return hash(repr(to_hash)) +def _compute_final_hash(all_infos): + final_hashes = dict() + + # in case of circular dependencies, we take a normal hash of the original info as a starting point + backup_hashes = {k: hash(repr(v)) for k, v in all_infos.items()} + + # sets are balzel 8 only, we use a dict instead + remaining = {k: 0 for k in all_infos.keys()} + + # bazel does not support recursion, we have to emulate it manually + stack = [] + + # replacement for while True + for _ in range(1000000000): + if len(remaining) == 0 and len(stack) == 0: + break + + curr = None + if len(stack) == 0: + curr, _ = remaining.popitem() + else: + curr = stack.pop() + + if curr in final_hashes: + continue + + deps = all_infos[curr].get("dependencies", []) + + # make sure all dependencies are processed first + unprocessed = [d for d in deps if d in remaining] + if len(unprocessed) > 0: + dep = unprocessed[0] + stack.append(curr) + stack.append(dep) + remaining.pop(dep, None) + continue + + all_infos[curr]["dependency_hashes"] = {dep: final_hashes.get(dep, backup_hashes.get(dep, 0)) for dep in deps} + final_hashes[curr] = hash(repr(all_infos[curr])) + + return final_hashes + +def _compute_lock_file_hash_v3(lock_file_contents): + all_infos = dict() + + for dep, dep_info in lock_file_contents["artifacts"].items(): + shasums = dep_info["shasums"] + common_info = {k: v for k, v in dep_info.items() if k != "shasums"} + + is_jar_type = dep.count(":") == 1 + + for type, sha in shasums.items(): + jar_suffix = ":jar" if is_jar_type else "" + suffix = jar_suffix + ":" + type if type != "jar" else "" + + type_info = dict() + type_info["standard"] = common_info + type_info["sha"] = sha + all_infos[dep + suffix] = type_info + + for repo, artifacts in lock_file_contents["repositories"].items(): + for artifact in artifacts: + all_infos[artifact]["repository"] = repo + + for dep, dep_info in lock_file_contents["dependencies"].items(): + all_infos[dep]["dependencies"] = sorted(dep_info) + + return _compute_final_hash(all_infos) + def _to_m2_path(unpacked): path = "{group}/{artifact}/{version}/{artifact}-{version}".format( artifact = unpacked["artifact"], @@ -188,8 +263,8 @@ def _render_lock_file(lock_file_contents, input_hash): contents = [ "{", " \"__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY\": \"THERE_IS_NO_DATA_ONLY_ZUUL\",", - " \"__INPUT_ARTIFACTS_HASH\": %s," % input_hash, - " \"__RESOLVED_ARTIFACTS_HASH\": %s," % _compute_lock_file_hash(lock_file_contents), + " \"__INPUT_ARTIFACTS_HASH\": %s," % json.encode_indent(input_hash, prefix = " ", indent = " "), + " \"__RESOLVED_ARTIFACTS_HASH\": %s," % json.encode_indent(_compute_lock_file_hash_v3(lock_file_contents), prefix = " ", indent = " "), ] if lock_file_contents.get("conflict_resolution"): contents.append(" \"conflict_resolution\": %s," % json.encode_indent(lock_file_contents["conflict_resolution"], prefix = " ", indent = " ")) @@ -212,17 +287,27 @@ def _render_lock_file(lock_file_contents, input_hash): contents.append(" \"services\": %s," % json.encode_indent(lock_file_contents["services"], prefix = " ", indent = " ")) if lock_file_contents.get("skipped"): contents.append(" \"skipped\": %s," % json.encode_indent(lock_file_contents["skipped"], prefix = " ", indent = " ")) - contents.append(" \"version\": \"2\"") + contents.append(" \"version\": \"3\"") contents.append("}") contents.append("") return "\n".join(contents) v2_lock_file = struct( - is_valid_lock_file = _is_valid_lock_file, + is_valid_lock_file = _is_valid_lock_file_v2, + get_input_artifacts_hash = _get_input_artifacts_hash, + get_lock_file_hash = _get_lock_file_hash, + compute_lock_file_hash = _compute_lock_file_hash_v2, + get_artifacts = _get_artifacts, + get_netrc_entries = _get_netrc_entries, + has_m2local = _has_m2local, +) + +v3_lock_file = struct( + is_valid_lock_file = _is_valid_lock_file_v3, get_input_artifacts_hash = _get_input_artifacts_hash, get_lock_file_hash = _get_lock_file_hash, - compute_lock_file_hash = _compute_lock_file_hash, + compute_lock_file_hash = _compute_lock_file_hash_v3, get_artifacts = _get_artifacts, get_netrc_entries = _get_netrc_entries, render_lock_file = _render_lock_file, diff --git a/private/tools/java/com/github/bazelbuild/rules_jvm_external/coursier/LockFileConverter.java b/private/tools/java/com/github/bazelbuild/rules_jvm_external/coursier/LockFileConverter.java index 5899e0545..2ed501656 100644 --- a/private/tools/java/com/github/bazelbuild/rules_jvm_external/coursier/LockFileConverter.java +++ b/private/tools/java/com/github/bazelbuild/rules_jvm_external/coursier/LockFileConverter.java @@ -20,7 +20,7 @@ import com.github.bazelbuild.rules_jvm_external.Coordinates; import com.github.bazelbuild.rules_jvm_external.resolver.Conflict; import com.github.bazelbuild.rules_jvm_external.resolver.DependencyInfo; -import com.github.bazelbuild.rules_jvm_external.resolver.lockfile.V2LockFile; +import com.github.bazelbuild.rules_jvm_external.resolver.lockfile.V3LockFile; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; @@ -100,7 +100,7 @@ public static void main(String[] args) { Set infos = converter.getDependencies(); Set conflicts = converter.getConflicts(); - Map rendered = new V2LockFile(repositories, infos, conflicts).render(); + Map rendered = new V3LockFile(repositories, infos, conflicts).render(); String converted = new GsonBuilder().setPrettyPrinting().serializeNulls().create().toJson(rendered); diff --git a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/cmd/AbstractMain.java b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/cmd/AbstractMain.java index 26559a6df..6f61a8510 100644 --- a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/cmd/AbstractMain.java +++ b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/cmd/AbstractMain.java @@ -27,7 +27,7 @@ import com.github.bazelbuild.rules_jvm_external.resolver.Resolver; import com.github.bazelbuild.rules_jvm_external.resolver.events.EventListener; import com.github.bazelbuild.rules_jvm_external.resolver.events.PhaseEvent; -import com.github.bazelbuild.rules_jvm_external.resolver.lockfile.V2LockFile; +import com.github.bazelbuild.rules_jvm_external.resolver.lockfile.V3LockFile; import com.github.bazelbuild.rules_jvm_external.resolver.netrc.Netrc; import com.github.bazelbuild.rules_jvm_external.resolver.remote.DownloadResult; import com.github.bazelbuild.rules_jvm_external.resolver.remote.Downloader; @@ -259,7 +259,7 @@ private static void writeLockFile( listener.close(); Map rendered = - new V2LockFile(request.getRepositories(), infos, conflicts).render(); + new V3LockFile(request.getRepositories(), infos, conflicts).render(); Map toReturn = new TreeMap<>(rendered); // We don't need this, and having it will cause problems @@ -268,42 +268,96 @@ private static void writeLockFile( toReturn.put( "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY", "THERE_IS_NO_DATA_ONLY_ZUUL"); - int artifactHash = calculateArtifactHash(rendered); - toReturn.put("__RESOLVED_ARTIFACTS_HASH", artifactHash); - if (config.getInputHash() != null) { - toReturn.put("__INPUT_ARTIFACTS_HASH", Long.parseLong(config.getInputHash())); + toReturn.put("__INPUT_ARTIFACTS_HASH", config.getInputHash()); + toReturn.put("__RESOLVED_ARTIFACTS_HASH", calculateArtifactHash(rendered)); } String converted = new GsonBuilder().setPrettyPrinting().serializeNulls().create().toJson(toReturn) + "\n"; try (OutputStream os = output == null ? System.out : Files.newOutputStream(output); - BufferedOutputStream bos = new BufferedOutputStream(os)) { + BufferedOutputStream bos = new BufferedOutputStream(os)) { bos.write(converted.getBytes(UTF_8)); } } - private static int calculateArtifactHash(Map rendered) { - LinkedHashMap toHash = new LinkedHashMap<>(); - Set keys = new TreeSet<>(Set.of("artifacts", "dependencies", "repositories")); - for (String key : keys) { - Object value = rendered.get(key); - // Sort nested structures the same way Starlark does with json.decode(json.encode(value)) - // to ensure consistent hashing between Java and Starlark - if (value instanceof Map) { - value = sortMapRecursively((Map) value); + @SuppressWarnings("unchecked") + public static Map calculateArtifactHash(Map rendered) { + Map> allInfos = new LinkedHashMap<>(); + + Map> artifacts = sortMapRecursively((Map) rendered.get("artifacts")); + for (Map.Entry> dep : artifacts.entrySet()) { + Map depInfo = dep.getValue(); + Map shasums = (Map) depInfo.get("shasums"); + + Map commonInfo = new LinkedHashMap<>(depInfo); + commonInfo.remove("shasums"); + + boolean isJarType = dep.getKey().chars().filter(x -> x == ':').count() == 1; + + for (Map.Entry shaEntry : shasums.entrySet()) { + String type = shaEntry.getKey(); + String sha = shaEntry.getValue(); + + String jarSuffix = isJarType ? ":jar" : ""; + String suffix = (!type.equals("jar")) ? jarSuffix + ":" + type : ""; + + Map typeInfo = new LinkedHashMap<>(); + typeInfo.put("standard", commonInfo); + typeInfo.put("sha", sha); + allInfos.put(dep.getKey() + suffix, typeInfo); } - toHash.put(key, value); } - return new StarlarkRepr().repr(toHash).hashCode(); + Map> repositories = sortMapRecursively((Map) rendered.get("repositories")); + for (Map.Entry> repo : repositories.entrySet()) { + Iterable repoArtifacts = repo.getValue(); + for (String art : repoArtifacts) { + allInfos.get(art).put("repository", repo.getKey()); + } + } + + Map> dependencies = sortMapRecursively((Map) rendered.get("dependencies")); + for (Map.Entry> dep : dependencies.entrySet()) { + allInfos.get(dep.getKey()).put("dependencies", dep.getValue()); + } + + Map finalHash = new TreeMap<>(); + allInfos.forEach((k, v) -> calculateFinalHash(k, allInfos, finalHash)); + + return finalHash; + } + + @SuppressWarnings("unchecked") + private static int calculateFinalHash(String curr, Map> allInfos, Map finalHash) { + StarlarkRepr repr = new StarlarkRepr(); + + if (finalHash.containsKey(curr)) { + return finalHash.get(curr); + } + if (!allInfos.containsKey(curr)) { + return 0; + } + + finalHash.put(curr, repr.repr(allInfos.get(curr)).hashCode()); + + + Set deps = (Set) allInfos.get(curr).getOrDefault("dependencies", Collections.emptySet()); + Map hashedDeps = new TreeMap<>(); + for (String dep : deps) { + hashedDeps.put(dep, calculateFinalHash(dep, allInfos, finalHash)); + } + + allInfos.get(curr).put("dependency_hashes", hashedDeps); + finalHash.put(curr, repr.repr(allInfos.get(curr)).hashCode()); + return finalHash.get(curr); } @SuppressWarnings("unchecked") - private static Map sortMapRecursively(Map map) { - TreeMap sorted = new TreeMap<>(); + private static Map sortMapRecursively(Map map) { + TreeMap sorted = new TreeMap<>(); for (Map.Entry entry : map.entrySet()) { Object value = entry.getValue(); if (value instanceof Map) { @@ -320,7 +374,7 @@ private static Map sortMapRecursively(Map map) { } value = sortedList; } - sorted.put(String.valueOf(entry.getKey()), value); + sorted.put(String.valueOf(entry.getKey()), (T) value); } return sorted; } diff --git a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/cmd/ResolverConfig.java b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/cmd/ResolverConfig.java index a4dba95d2..8b1f24713 100644 --- a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/cmd/ResolverConfig.java +++ b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/cmd/ResolverConfig.java @@ -25,6 +25,9 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; public class ResolverConfig { @@ -38,7 +41,7 @@ public class ResolverConfig { private final boolean fetchJavadoc; private final Netrc netrc; private final Path output; - private final String inputHash; + private final Map inputHash; private final int maxThreads; public ResolverConfig(EventListener listener, String... args) throws IOException { @@ -50,7 +53,7 @@ public ResolverConfig(EventListener listener, String... args) throws IOException boolean fetchJavadoc = false; int maxThreads = DEFAULT_MAX_THREADS; Path output = null; - String inputHash = null; + Path inputHashPath = null; if (System.getenv("RJE_MAX_THREADS") != null) { maxThreads = Integer.parseInt(System.getenv("RJE_MAX_THREADS")); @@ -64,6 +67,7 @@ public ResolverConfig(EventListener listener, String... args) throws IOException } for (int i = 0; i < args.length; i++) { + String bazelWorkspaceDir = System.getenv("BUILD_WORKSPACE_DIRECTORY"); switch (args[i]) { case "--argsfile": i++; @@ -75,9 +79,9 @@ public ResolverConfig(EventListener listener, String... args) throws IOException request.addBom(args[i]); break; - case "--input_hash": + case "--input-hash-path": i++; - inputHash = args[i]; + inputHashPath = Paths.get(args[i]); break; case "--javadocs": @@ -86,7 +90,6 @@ public ResolverConfig(EventListener listener, String... args) throws IOException case "--output": i++; - String bazelWorkspaceDir = System.getenv("BUILD_WORKSPACE_DIRECTORY"); if (bazelWorkspaceDir == null) { output = Paths.get(args[i]); } else { @@ -173,6 +176,14 @@ public ResolverConfig(EventListener listener, String... args) throws IOException }); } + if (inputHashPath != null) { + String rawJson = Files.readString(inputHashPath); + Map json = new Gson().fromJson(rawJson, new TypeToken>() {}.getType()); + this.inputHash = new TreeMap<>(json); + } else { + this.inputHash = null; + } + if (request.getRepositories().isEmpty()) { request.addRepository("https://repo1.maven.org/maven2/"); } @@ -180,7 +191,6 @@ public ResolverConfig(EventListener listener, String... args) throws IOException this.request = request; this.fetchSources = fetchSources; this.fetchJavadoc = fetchJavadoc; - this.inputHash = inputHash; this.maxThreads = maxThreads; this.output = output; } @@ -205,7 +215,7 @@ public int getMaxThreads() { return maxThreads; } - public String getInputHash() { + public Map getInputHash() { return inputHash; } diff --git a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/lockfile/V2LockFile.java b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/lockfile/V3LockFile.java similarity index 98% rename from private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/lockfile/V2LockFile.java rename to private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/lockfile/V3LockFile.java index a85d9b7be..472df2e0d 100644 --- a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/lockfile/V2LockFile.java +++ b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/lockfile/V3LockFile.java @@ -36,7 +36,7 @@ import java.util.stream.Collectors; /** Format resolution results into the v2 lock file format. */ -public class V2LockFile { +public class V3LockFile { public static final URI M2_LOCAL_URI = Paths.get(USER_HOME.value()).resolve(".m2/repository").toUri(); @@ -44,7 +44,7 @@ public class V2LockFile { private final Set infos; private final Set conflicts; - public V2LockFile( + public V3LockFile( Collection repositories, Set infos, Set conflicts) { this.allRepos = repositories; this.infos = infos; @@ -64,7 +64,7 @@ public Set getConflicts() { } @SuppressWarnings("unchecked") - public static V2LockFile create(String from) { + public static V3LockFile create(String from) { Map raw = new Gson().fromJson(from, Map.class); Set repos = new LinkedHashSet<>(); @@ -171,7 +171,7 @@ public static V2LockFile create(String from) { conflicts.add(new Conflict(resolved, requested)); } - return new V2LockFile(repos, infos, conflicts); + return new V3LockFile(repos, infos, conflicts); } /** "Render" the resolution result to a `Map` suitable for printing as JSON. */ @@ -275,7 +275,7 @@ public Map render() { } lock.put("files", files); - lock.put("version", "2"); + lock.put("version", "3"); return lock; } diff --git a/tests/com/github/bazelbuild/rules_jvm_external/resolver/lockfile/BUILD b/tests/com/github/bazelbuild/rules_jvm_external/resolver/lockfile/BUILD index 9e4a15cc7..e1282cc62 100644 --- a/tests/com/github/bazelbuild/rules_jvm_external/resolver/lockfile/BUILD +++ b/tests/com/github/bazelbuild/rules_jvm_external/resolver/lockfile/BUILD @@ -1,12 +1,14 @@ load("//:defs.bzl", "artifact") java_test( - name = "V2LockFileTest", - srcs = ["V2LockFileTest.java"], - test_class = "com.github.bazelbuild.rules_jvm_external.resolver.lockfile.V2LockFileTest", + name = "V3LockFileTest", + srcs = ["V3LockFileTest.java"], + resources = ["//:maven_install.json"], + test_class = "com.github.bazelbuild.rules_jvm_external.resolver.lockfile.V3LockFileTest", deps = [ "//private/tools/java/com/github/bazelbuild/rules_jvm_external", "//private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver", + "//private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/cmd", "//private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/lockfile", artifact( "com.google.code.gson:gson", diff --git a/tests/com/github/bazelbuild/rules_jvm_external/resolver/lockfile/V2LockFileTest.java b/tests/com/github/bazelbuild/rules_jvm_external/resolver/lockfile/V3LockFileTest.java similarity index 66% rename from tests/com/github/bazelbuild/rules_jvm_external/resolver/lockfile/V2LockFileTest.java rename to tests/com/github/bazelbuild/rules_jvm_external/resolver/lockfile/V3LockFileTest.java index e1c1038d0..89ca63b71 100644 --- a/tests/com/github/bazelbuild/rules_jvm_external/resolver/lockfile/V2LockFileTest.java +++ b/tests/com/github/bazelbuild/rules_jvm_external/resolver/lockfile/V3LockFileTest.java @@ -19,16 +19,22 @@ import com.github.bazelbuild.rules_jvm_external.Coordinates; import com.github.bazelbuild.rules_jvm_external.resolver.Conflict; import com.github.bazelbuild.rules_jvm_external.resolver.DependencyInfo; +import com.github.bazelbuild.rules_jvm_external.resolver.cmd.AbstractMain; +import com.google.gson.Gson; import com.google.gson.GsonBuilder; + +import java.io.IOException; import java.net.URI; import java.util.HashMap; import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.TreeMap; +import java.util.TreeSet; + import org.junit.Test; -public class V2LockFileTest { +public class V3LockFileTest { private final URI defaultRepo = URI.create("http://localhost/m2/repository/"); private final Set repos = Set.of(defaultRepo); @@ -45,7 +51,7 @@ public void shouldRenderAggregatingJarsAsJarWithNullShasum() { Set.of(), new TreeMap<>()); - Map rendered = new V2LockFile(repos, Set.of(aggregator), Set.of()).render(); + Map rendered = new V3LockFile(repos, Set.of(aggregator), Set.of()).render(); Map artifacts = (Map) rendered.get("artifacts"); Map data = (Map) artifacts.get("com.example:aggregator"); @@ -58,7 +64,7 @@ public void shouldRenderAggregatingJarsAsJarWithNullShasum() { @Test public void shouldRoundTripASimpleSetOfDependencies() { - V2LockFile roundTripped = roundTrip(new V2LockFile(repos, Set.of(), Set.of())); + V3LockFile roundTripped = roundTrip(new V3LockFile(repos, Set.of(), Set.of())); assertEquals(repos, roundTripped.getRepositories()); assertEquals(Set.of(), roundTripped.getDependencyInfos()); @@ -67,15 +73,15 @@ public void shouldRoundTripASimpleSetOfDependencies() { @Test public void shouldRoundTripM2Local() { - V2LockFile lockFile = new V2LockFile(repos, Set.of(), Set.of()); + V3LockFile lockFile = new V3LockFile(repos, Set.of(), Set.of()); Map rendered = lockFile.render(); rendered.put("m2local", true); - V2LockFile roundTripped = - V2LockFile.create( + V3LockFile roundTripped = + V3LockFile.create( new GsonBuilder().setPrettyPrinting().serializeNulls().create().toJson(rendered)); - assertEquals(Set.of(defaultRepo, V2LockFile.M2_LOCAL_URI), roundTripped.getRepositories()); + assertEquals(Set.of(defaultRepo, V3LockFile.M2_LOCAL_URI), roundTripped.getRepositories()); } @Test @@ -90,7 +96,7 @@ public void shouldRoundTripASingleArtifact() { Set.of(), new TreeMap<>()); - V2LockFile lockFile = roundTrip(new V2LockFile(repos, Set.of(info), Set.of())); + V3LockFile lockFile = roundTrip(new V3LockFile(repos, Set.of(info), Set.of())); assertEquals(Set.of(info), lockFile.getDependencyInfos()); } @@ -119,7 +125,7 @@ public void shouldRoundTripASingleArtifactWithADependency() { Set.of(), new TreeMap<>()); - V2LockFile lockFile = roundTrip(new V2LockFile(repos, Set.of(info, dep), Set.of())); + V3LockFile lockFile = roundTrip(new V3LockFile(repos, Set.of(info, dep), Set.of())); assertEquals(Set.of(info, dep), lockFile.getDependencyInfos()); } @@ -133,15 +139,46 @@ public void shouldRoundTripConflicts() { new Conflict( new Coordinates("com.foo:bar:1.2.3"), new Coordinates("com.foo:bar:1.2.1"))); - V2LockFile lockFile = roundTrip(new V2LockFile(repos, Set.of(), conflicts)); + V3LockFile lockFile = roundTrip(new V3LockFile(repos, Set.of(), conflicts)); assertEquals(conflicts, lockFile.getConflicts()); } - private V2LockFile roundTrip(V2LockFile lockFile) { + @Test + @SuppressWarnings("unchecked") + public void testCalculateArtifactHashMatchesStoredHash() throws IOException { + String lockFileContent = new String( + getClass().getClassLoader().getResourceAsStream("maven_install.json").readAllBytes()); + + Gson gson = new GsonBuilder().create(); + Map lockFileData = gson.fromJson(lockFileContent, Map.class); + Map storedHash = (Map) lockFileData.get("__RESOLVED_ARTIFACTS_HASH"); + + Map dependencies = (Map) lockFileData.remove("dependencies"); + Map> convertedDeps = new TreeMap<>(); + for (Map.Entry entry : dependencies.entrySet()) { + java.util.List depList = (java.util.List) entry.getValue(); + convertedDeps.put(entry.getKey(), new TreeSet<>(depList)); + } + lockFileData.put("dependencies", convertedDeps); + + Map calculatedHash = AbstractMain.calculateArtifactHash(lockFileData); + + assertEquals("Hash mismatch: calculated hash does not match stored hash", storedHash.size(), calculatedHash.size()); + + for (Map.Entry entry : storedHash.entrySet()) { + String key = entry.getKey(); + int expectedHash = entry.getValue().intValue(); + int actualHash = calculatedHash.get(key); + + assertEquals(String.format("Hash mismatch for artifact '%s'", key), expectedHash, actualHash); + } + } + + private V3LockFile roundTrip(V3LockFile lockFile) { Map rendered = lockFile.render(); String converted = new GsonBuilder().setPrettyPrinting().serializeNulls().create().toJson(rendered) + "\n"; - return V2LockFile.create(converted); + return V3LockFile.create(converted); } } diff --git a/tests/custom_maven_install/coursier_resolved_install.json b/tests/custom_maven_install/coursier_resolved_install.json index 2362957fc..5ce89d44b 100644 --- a/tests/custom_maven_install/coursier_resolved_install.json +++ b/tests/custom_maven_install/coursier_resolved_install.json @@ -1,7 +1,95 @@ { "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", - "__INPUT_ARTIFACTS_HASH": -1749225327, - "__RESOLVED_ARTIFACTS_HASH": -821389950, + "__INPUT_ARTIFACTS_HASH": { + "com.google.auth:google-auth-library-oauth2-http": 991267597, + "com.google.auto:auto-common": -832702775, + "com.google.cloud:google-cloud-bigquery": 1661989687, + "com.google.cloud:libraries-bom": 710163787, + "repositories": -1949687017 + }, + "__RESOLVED_ARTIFACTS_HASH": { + "com.fasterxml.jackson.core:jackson-annotations": -15199951, + "com.fasterxml.jackson.core:jackson-core": -1299936085, + "com.fasterxml.jackson.core:jackson-databind": 298815505, + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310": -2004052717, + "com.google.android:annotations": 2096496032, + "com.google.api-client:google-api-client": 301964358, + "com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1": -1675930101, + "com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1": -2051887160, + "com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2": -825839132, + "com.google.api.grpc:proto-google-cloud-bigquerystorage-v1": -948743162, + "com.google.api.grpc:proto-google-cloud-bigquerystorage-v1alpha": -1610858001, + "com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta1": 655246401, + "com.google.api.grpc:proto-google-cloud-bigquerystorage-v1beta2": 478419370, + "com.google.api.grpc:proto-google-common-protos": 1013345642, + "com.google.api.grpc:proto-google-iam-v1": 323680405, + "com.google.api:api-common": 1897926401, + "com.google.api:gax": -725014247, + "com.google.api:gax-grpc": 830261426, + "com.google.api:gax-httpjson": 460866920, + "com.google.apis:google-api-services-bigquery": -707640637, + "com.google.auth:google-auth-library-credentials": -38083388, + "com.google.auth:google-auth-library-oauth2-http": -197000045, + "com.google.auto.value:auto-value": 1110951021, + "com.google.auto.value:auto-value-annotations": 641018093, + "com.google.auto:auto-common": 1968662279, + "com.google.cloud:google-cloud-bigquery": -181021345, + "com.google.cloud:google-cloud-bigquerystorage": 501592626, + "com.google.cloud:google-cloud-core": 533820805, + "com.google.cloud:google-cloud-core-http": -327174643, + "com.google.code.findbugs:jsr305": 870839855, + "com.google.code.gson:gson": 1698094868, + "com.google.errorprone:error_prone_annotations": 1014409728, + "com.google.flatbuffers:flatbuffers-java": -1130203947, + "com.google.guava:failureaccess": -718864417, + "com.google.guava:guava": 1045124605, + "com.google.guava:listenablefuture": 1079558157, + "com.google.http-client:google-http-client": 2071394127, + "com.google.http-client:google-http-client-apache-v2": -1368195375, + "com.google.http-client:google-http-client-appengine": -1713434323, + "com.google.http-client:google-http-client-gson": -480394556, + "com.google.j2objc:j2objc-annotations": -404209759, + "com.google.oauth-client:google-oauth-client": -1604056006, + "com.google.protobuf:protobuf-java": -758252690, + "com.google.protobuf:protobuf-java-util": -1866498432, + "commons-codec:commons-codec": -28659539, + "io.grpc:grpc-alts": 1043455852, + "io.grpc:grpc-api": 32128397, + "io.grpc:grpc-context": -1585690271, + "io.grpc:grpc-core": -1280008493, + "io.grpc:grpc-googleapis": -1179552585, + "io.grpc:grpc-grpclb": 537861896, + "io.grpc:grpc-inprocess": 574578431, + "io.grpc:grpc-netty-shaded": -1629092124, + "io.grpc:grpc-protobuf": -312725142, + "io.grpc:grpc-protobuf-lite": -1374866882, + "io.grpc:grpc-stub": -609312316, + "io.grpc:grpc-util": 1021337938, + "io.netty:netty-buffer": -501086272, + "io.netty:netty-common": 1159007193, + "io.opencensus:opencensus-api": -2128472383, + "io.opencensus:opencensus-contrib-http-util": -1954738382, + "io.opentelemetry:opentelemetry-api": -1533216960, + "io.opentelemetry:opentelemetry-context": 11027445, + "io.perfmark:perfmark-api": -1795841558, + "javax.annotation:javax.annotation-api": -1009230154, + "org.apache.arrow:arrow-format": -1324733457, + "org.apache.arrow:arrow-memory-core": 648193187, + "org.apache.arrow:arrow-memory-netty": 1706469998, + "org.apache.arrow:arrow-vector": -1120707973, + "org.apache.httpcomponents:httpclient": -930110091, + "org.apache.httpcomponents:httpcore": 67453319, + "org.checkerframework:checker-compat-qual": 2124515296, + "org.checkerframework:checker-qual": -1482757721, + "org.codehaus.mojo:animal-sniffer-annotations": -1619058809, + "org.conscrypt:conscrypt-openjdk-uber": 742580967, + "org.eclipse.collections:eclipse-collections": 515042027, + "org.eclipse.collections:eclipse-collections-api": 516322101, + "org.json:json": -1501897552, + "org.slf4j:slf4j-api": -749495182, + "org.threeten:threeten-extra": 322422590, + "org.threeten:threetenbp": 1406815789 + }, "conflict_resolution": { "com.google.auth:google-auth-library-oauth2-http": "com.google.auth:google-auth-library-oauth2-http:1.33.1", "com.google.cloud:google-cloud-bigquery": "com.google.cloud:google-cloud-bigquery:2.49.0" @@ -2407,5 +2495,5 @@ ] } }, - "version": "2" + "version": "3" } diff --git a/tests/custom_maven_install/maven_install.json b/tests/custom_maven_install/maven_install.json index 315d207ca..b5ec4ff6d 100644 --- a/tests/custom_maven_install/maven_install.json +++ b/tests/custom_maven_install/maven_install.json @@ -1,7 +1,19 @@ { "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", - "__INPUT_ARTIFACTS_HASH": -315282264, - "__RESOLVED_ARTIFACTS_HASH": 97194859, + "__INPUT_ARTIFACTS_HASH": { + "com.google.guava:guava": -1659386931, + "repositories": -1949687017 + }, + "__RESOLVED_ARTIFACTS_HASH": { + "com.google.code.findbugs:jsr305": 870839855, + "com.google.errorprone:error_prone_annotations": -1861905258, + "com.google.guava:failureaccess": 1595101280, + "com.google.guava:guava": 973460736, + "com.google.guava:listenablefuture": 1079558157, + "com.google.j2objc:j2objc-annotations": 1702790440, + "org.checkerframework:checker-qual": 1593391896, + "org.codehaus.mojo:animal-sniffer-annotations": -349140135 + }, "artifacts": { "com.google.code.findbugs:jsr305": { "shasums": { @@ -150,5 +162,5 @@ ] }, "services": {}, - "version": "2" + "version": "3" } diff --git a/tests/custom_maven_install/maven_resolved_install.json b/tests/custom_maven_install/maven_resolved_install.json index 9fb264f41..35be5bc9a 100644 --- a/tests/custom_maven_install/maven_resolved_install.json +++ b/tests/custom_maven_install/maven_resolved_install.json @@ -1,7 +1,90 @@ { "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", - "__INPUT_ARTIFACTS_HASH": -1679232744, - "__RESOLVED_ARTIFACTS_HASH": 1461783303, + "__INPUT_ARTIFACTS_HASH": { + "com.google.auto.value:auto-value-annotations": -1902273817, + "net.sf.json-lib:json-lib": -697400091, + "org.drools:drools-mvel": 1863360566, + "org.optaplanner:optaplanner-core": 1504805403, + "org.seleniumhq.selenium:selenium-bom": -457770816, + "org.seleniumhq.selenium:selenium-java": -2123729016, + "repositories": -315355421 + }, + "__RESOLVED_ARTIFACTS_HASH": { + "com.github.javaparser:javaparser-core": 2065268403, + "com.google.auto.service:auto-service-annotations": 262983930, + "com.google.auto.value:auto-value-annotations": 413037104, + "com.google.guava:guava": 734675670, + "com.thoughtworks.xstream:xstream": 401427885, + "commons-beanutils:commons-beanutils": -84415581, + "commons-codec:commons-codec": -1543128303, + "commons-collections:commons-collections": 334877720, + "commons-lang:commons-lang": 849229148, + "commons-logging:commons-logging": -2131529292, + "dev.failsafe:failsafe": -253921025, + "io.github.x-stream:mxparser": 110533211, + "io.opentelemetry:opentelemetry-api": 2049998201, + "io.opentelemetry:opentelemetry-api-events": -199493817, + "io.opentelemetry:opentelemetry-context": 587344705, + "io.opentelemetry:opentelemetry-exporter-logging": 899705141, + "io.opentelemetry:opentelemetry-extension-incubator": 101924900, + "io.opentelemetry:opentelemetry-sdk": -2085662267, + "io.opentelemetry:opentelemetry-sdk-common": 769843140, + "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure": -1510169109, + "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi": -552370191, + "io.opentelemetry:opentelemetry-sdk-logs": 1875683161, + "io.opentelemetry:opentelemetry-sdk-metrics": 265012770, + "io.opentelemetry:opentelemetry-sdk-trace": 1597368498, + "io.opentelemetry:opentelemetry-semconv": 1007803274, + "net.bytebuddy:byte-buddy": 1086524953, + "net.sf.ezmorph:ezmorph": -1715621718, + "net.sf.json-lib:json-lib:jar:jdk15": -636516130, + "org.antlr:antlr-runtime": -1636816377, + "org.apache.commons:commons-exec": 2113995192, + "org.apache.commons:commons-lang3": 487207135, + "org.apache.commons:commons-math3": 1401449619, + "org.drools:drools-canonical-model": -1600079424, + "org.drools:drools-compiler": 746362012, + "org.drools:drools-core": 1048506213, + "org.drools:drools-core-dynamic": 910052301, + "org.drools:drools-core-reflective": -346158958, + "org.drools:drools-ecj": 1388163007, + "org.drools:drools-model-compiler": 1750679104, + "org.drools:drools-mvel": -1367885592, + "org.drools:drools-mvel-compiler": 1627731278, + "org.drools:drools-mvel-parser": 1845480135, + "org.javassist:javassist": 2023479029, + "org.kie.soup:kie-soup-commons": 244991340, + "org.kie.soup:kie-soup-maven-support": 765938465, + "org.kie.soup:kie-soup-project-datamodel-api": -431304781, + "org.kie.soup:kie-soup-project-datamodel-commons": -50440142, + "org.kie.soup:kie-soup-xstream": 847410459, + "org.kie:kie-api": 1205967300, + "org.kie:kie-internal": -1026725853, + "org.kie:kie-memory-compiler": 505077746, + "org.mvel:mvel2": -531387633, + "org.optaplanner:optaplanner-core": -130295809, + "org.reflections:reflections": 613312211, + "org.seleniumhq.selenium:selenium-api": 1626352587, + "org.seleniumhq.selenium:selenium-chrome-driver": -1136374414, + "org.seleniumhq.selenium:selenium-chromium-driver": -67459411, + "org.seleniumhq.selenium:selenium-devtools-v116": 332351781, + "org.seleniumhq.selenium:selenium-devtools-v117": 1737727710, + "org.seleniumhq.selenium:selenium-devtools-v118": 876235604, + "org.seleniumhq.selenium:selenium-devtools-v85": -974128897, + "org.seleniumhq.selenium:selenium-edge-driver": -630326073, + "org.seleniumhq.selenium:selenium-firefox-driver": 2079866542, + "org.seleniumhq.selenium:selenium-http": 223670030, + "org.seleniumhq.selenium:selenium-ie-driver": -705940065, + "org.seleniumhq.selenium:selenium-java": 3398759, + "org.seleniumhq.selenium:selenium-json": 1922704862, + "org.seleniumhq.selenium:selenium-manager": 804615261, + "org.seleniumhq.selenium:selenium-os": 848073579, + "org.seleniumhq.selenium:selenium-remote-driver": -2024835808, + "org.seleniumhq.selenium:selenium-safari-driver": -2108274429, + "org.seleniumhq.selenium:selenium-support": 455725782, + "org.slf4j:slf4j-api": -801231047, + "xmlpull:xmlpull": -732624529 + }, "artifacts": { "com.github.javaparser:javaparser-core": { "shasums": { @@ -2475,5 +2558,5 @@ } }, "skipped": [], - "version": "2" + "version": "3" } diff --git a/tests/custom_maven_install/regression_testing_coursier_install.json b/tests/custom_maven_install/regression_testing_coursier_install.json index 037c9e10b..d2a02cee0 100644 --- a/tests/custom_maven_install/regression_testing_coursier_install.json +++ b/tests/custom_maven_install/regression_testing_coursier_install.json @@ -1,7 +1,329 @@ { "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", - "__INPUT_ARTIFACTS_HASH": 899526900, - "__RESOLVED_ARTIFACTS_HASH": -1058194221, + "__INPUT_ARTIFACTS_HASH": { + "androidx.arch.core:core-testing": -1902647835, + "build.buf:protovalidate": 1318629343, + "ch.epfl.scala:compiler-interface": -1596033540, + "com.almworks.sqlite4java:libsqlite4java-linux-i386": -334365433, + "com.android.support:appcompat-v7": -211260292, + "com.fasterxml.jackson:jackson-bom": -674350664, + "com.github.fommil.netlib:all": 1876514425, + "com.github.jnr:jffi": 1857711110, + "com.github.oshi:oshi-parent": 242676576, + "com.github.spinalhdl:spinalhdl-core_2.11": -240015513, + "com.github.spinalhdl:spinalhdl-lib_2.11": -2022255485, + "com.github.spotbugs:spotbugs": -1507423899, + "com.google.android.gms:play-services-base": 1030373327, + "com.google.apis:google-api-services-compute": -1034842172, + "com.google.ar.sceneform.ux:sceneform-ux": -1232306868, + "com.google.protobuf:protoc": 896727834, + "com.squareup:javapoet": -1703071500, + "com.sun.xml.bind:jaxb-ri": -450216842, + "io.confluent:kafka-avro-serializer": 1195491136, + "io.kubernetes:client-java": -1168931250, + "io.netty:netty-tcnative-boringssl-static": -1468516230, + "io.quarkus.http:quarkus-http-servlet": 1166665043, + "junit:junit": 1849086067, + "nz.ac.waikato.cms.weka:weka-stable": -519658205, + "org.apache.flink:flink-test-utils_2.12": -657890204, + "org.apache.kafka:kafka_2.11": -931805837, + "org.eclipse.jetty.orbit:javax.servlet": -931916695, + "org.eclipse.jetty:jetty-http": 200171901, + "org.jetbrains.kotlin:kotlin-test": -343019552, + "org.junit:junit-bom": 1445517106, + "org.mockito:mockito-core": -303255926, + "org.openjfx:javafx-base": 438159975, + "org.pantsbuild:jarjar": -1196706019, + "repositories": -1332501668 + }, + "__RESOLVED_ARTIFACTS_HASH": { + "android.arch.core:common": -1416537193, + "android.arch.core:runtime:aar": 636345922, + "android.arch.lifecycle:common": 2080816536, + "android.arch.lifecycle:livedata-core:aar": -853209051, + "android.arch.lifecycle:livedata:aar": 1492077470, + "android.arch.lifecycle:runtime:aar": -1630456185, + "android.arch.lifecycle:viewmodel:aar": 540300416, + "androidx.annotation:annotation": 1413426692, + "androidx.arch.core:core-common": 775335689, + "androidx.arch.core:core-runtime:aar": -1531171228, + "androidx.arch.core:core-testing:aar": -105338963, + "build.buf:protovalidate": -1327532593, + "ch.epfl.scala:compiler-interface": 132529650, + "com.101tec:zkclient": 39175760, + "com.almworks.sqlite4java:libsqlite4java-linux-i386:so": -691800296, + "com.almworks.sqlite4java:sqlite4java": 1585971300, + "com.android.support:animated-vector-drawable:aar": 1889685650, + "com.android.support:appcompat-v7:aar": 1160282098, + "com.android.support:asynclayoutinflater:aar": -1348979109, + "com.android.support:collections": -1737450565, + "com.android.support:coordinatorlayout:aar": -4912986, + "com.android.support:cursoradapter:aar": 1232970605, + "com.android.support:customview:aar": 2086849369, + "com.android.support:documentfile:aar": -355915353, + "com.android.support:drawerlayout:aar": -340434133, + "com.android.support:interpolator:aar": 1058588498, + "com.android.support:loader:aar": -148391104, + "com.android.support:localbroadcastmanager:aar": -1661155934, + "com.android.support:print:aar": 1667046809, + "com.android.support:slidingpanelayout:aar": -765546360, + "com.android.support:support-annotations": 1309588257, + "com.android.support:support-compat:aar": -1032754987, + "com.android.support:support-core-ui:aar": 1299524554, + "com.android.support:support-core-utils:aar": 708815589, + "com.android.support:support-fragment:aar": -1526817162, + "com.android.support:support-media-compat:aar": 1182105223, + "com.android.support:support-v4:aar": 736667801, + "com.android.support:support-vector-drawable:aar": -5083766, + "com.android.support:swiperefreshlayout:aar": -1093652444, + "com.android.support:versionedparcelable:aar": 1778691699, + "com.android.support:viewpager:aar": 1001004918, + "com.esotericsoftware.kryo:kryo": 1128585514, + "com.esotericsoftware.minlog:minlog": -1086846834, + "com.fasterxml.jackson.core:jackson-annotations": -1055592011, + "com.fasterxml.jackson.core:jackson-core": 216667274, + "com.fasterxml.jackson.core:jackson-databind": 1475380429, + "com.fasterxml.jackson:jackson-bom:pom": -810493604, + "com.github.fommil.netlib:all:pom": -126194363, + "com.github.fommil.netlib:core": 1162667486, + "com.github.fommil.netlib:native_ref-java": 336575376, + "com.github.fommil.netlib:native_system-java": -1198771517, + "com.github.fommil.netlib:netlib-native_ref-linux-armhf:jar:natives": -2083459955, + "com.github.fommil.netlib:netlib-native_ref-linux-i686:jar:natives": 814003036, + "com.github.fommil.netlib:netlib-native_ref-linux-x86_64:jar:natives": 1221459840, + "com.github.fommil.netlib:netlib-native_ref-osx-x86_64:jar:natives": -902030798, + "com.github.fommil.netlib:netlib-native_ref-win-i686:jar:natives": 2108196891, + "com.github.fommil.netlib:netlib-native_ref-win-x86_64:jar:natives": 620976348, + "com.github.fommil.netlib:netlib-native_system-linux-armhf:jar:natives": -1965139946, + "com.github.fommil.netlib:netlib-native_system-linux-i686:jar:natives": -919393715, + "com.github.fommil.netlib:netlib-native_system-linux-x86_64:jar:natives": -549776852, + "com.github.fommil.netlib:netlib-native_system-osx-x86_64:jar:natives": -1718119076, + "com.github.fommil.netlib:netlib-native_system-win-i686:jar:natives": -526413313, + "com.github.fommil.netlib:netlib-native_system-win-x86_64:jar:natives": 323407244, + "com.github.fommil:jniloader": -1645760824, + "com.github.jnr:jffi:jar:native": -1236550132, + "com.github.luben:zstd-jni": -917944896, + "com.github.oshi:oshi-core": 2011553404, + "com.github.oshi:oshi-parent:pom": -1116781681, + "com.github.scopt:scopt_2.11": -1117441672, + "com.github.scopt:scopt_2.12": 739714663, + "com.github.seancfoley:ipaddress": -1573085012, + "com.github.spinalhdl:spinalhdl-core_2.11": 2126411009, + "com.github.spinalhdl:spinalhdl-lib_2.11": 372569984, + "com.github.spinalhdl:spinalhdl-sim_2.11": 1546102183, + "com.github.spotbugs:spotbugs": -72366022, + "com.github.spotbugs:spotbugs-annotations": -400182452, + "com.github.stephenc.jcip:jcip-annotations": 2084352561, + "com.google.android.gms:play-services-base:aar": 1777147601, + "com.google.android.gms:play-services-basement:aar": -173286216, + "com.google.android.gms:play-services-tasks:aar": 1623202769, + "com.google.api-client:google-api-client": -1251489130, + "com.google.apis:google-api-services-compute:jar:javadoc": 546688301, + "com.google.ar.sceneform.ux:sceneform-ux:aar": 893379897, + "com.google.ar.sceneform:core:aar": -1394499740, + "com.google.ar.sceneform:filament-android:aar": -1626674165, + "com.google.ar.sceneform:rendering:aar": -385495648, + "com.google.ar.sceneform:sceneform-base:aar": -569785710, + "com.google.ar:core:aar": -2009465159, + "com.google.code.findbugs:jsr305": 870839855, + "com.google.code.gson:gson": -1761019674, + "com.google.errorprone:error_prone_annotations": -65955944, + "com.google.guava:failureaccess": -1890754729, + "com.google.guava:guava": -2049457827, + "com.google.guava:listenablefuture": 1079558157, + "com.google.http-client:google-http-client": 1692729036, + "com.google.http-client:google-http-client-jackson2": -374435461, + "com.google.j2objc:j2objc-annotations": 248818742, + "com.google.oauth-client:google-oauth-client": 1292097012, + "com.google.protobuf:protobuf-java": -926627966, + "com.google.protobuf:protoc:exe:linux-x86_64": 385774142, + "com.google.protobuf:protoc:exe:osx-aarch_64": -91281835, + "com.googlecode.matrix-toolkits-java:mtj": 858320340, + "com.googlecode.netlib-java:netlib-java": 1268735594, + "com.intellij:annotations": -585674531, + "com.microsoft.azure:adal4j": -1869354937, + "com.nimbusds:lang-tag": -293986304, + "com.nimbusds:nimbus-jose-jwt": -769091146, + "com.nimbusds:oauth2-oidc-sdk": -182702489, + "com.squareup.okhttp:logging-interceptor": 174810450, + "com.squareup.okhttp:okhttp": -853576632, + "com.squareup.okhttp:okhttp-ws": -911972507, + "com.squareup.okio:okio": -941431366, + "com.squareup:javapoet": -58597632, + "com.sun.activation:jakarta.activation": -397987846, + "com.sun.xml.bind:jaxb-impl": 757730157, + "com.sun.xml.bind:jaxb-jxc": -212781331, + "com.sun.xml.bind:jaxb-ri:pom": 1210413476, + "com.sun.xml.bind:jaxb-xjc": -911013610, + "com.thoughtworks.paranamer:paranamer": 513633693, + "com.twitter:chill-java": 2142505503, + "com.twitter:chill_2.12": -775630743, + "com.typesafe.akka:akka-actor_2.12": -566206600, + "com.typesafe.akka:akka-protobuf_2.12": -1421563507, + "com.typesafe.akka:akka-slf4j_2.12": 1396156599, + "com.typesafe.akka:akka-stream_2.12": 1516470657, + "com.typesafe.scala-logging:scala-logging_2.11": 911255833, + "com.typesafe:config": -183445756, + "com.typesafe:ssl-config-core_2.12": 1066136071, + "com.yammer.metrics:metrics-core": 1304879782, + "commons-cli:commons-cli": -707335820, + "commons-codec:commons-codec": -1543128303, + "commons-collections:commons-collections": 7509648, + "commons-io:commons-io": 635207467, + "commons-logging:commons-logging": 1248790901, + "io.confluent:common-config": -1557792737, + "io.confluent:common-utils": 1056057613, + "io.confluent:kafka-avro-serializer": -1528367490, + "io.confluent:kafka-schema-registry-client": 1715850592, + "io.kubernetes:client-java": 1698480924, + "io.kubernetes:client-java-api": 405311643, + "io.kubernetes:client-java-proto": -324172791, + "io.netty:netty": -761233739, + "io.netty:netty-buffer": -719144448, + "io.netty:netty-codec": 342308608, + "io.netty:netty-codec-http": -1650772488, + "io.netty:netty-common": 574438513, + "io.netty:netty-handler": 1332674026, + "io.netty:netty-resolver": -1771543934, + "io.netty:netty-tcnative-boringssl-static": 1882115446, + "io.netty:netty-tcnative-boringssl-static:jar:linux-aarch_64": -749632761, + "io.netty:netty-tcnative-boringssl-static:jar:linux-x86_64": 1910853943, + "io.netty:netty-tcnative-boringssl-static:jar:osx-aarch_64": 2115056135, + "io.netty:netty-tcnative-boringssl-static:jar:osx-x86_64": -309369589, + "io.netty:netty-tcnative-boringssl-static:jar:windows-x86_64": 661206652, + "io.netty:netty-tcnative-classes": 1358601921, + "io.netty:netty-transport": -292778684, + "io.quarkus.http:quarkus-http-core": 1832041166, + "io.quarkus.http:quarkus-http-http-core": 82437014, + "io.quarkus.http:quarkus-http-servlet": 788608709, + "io.sundr:builder-annotations": -79900138, + "io.sundr:resourcecify-annotations": 1643261131, + "io.sundr:sundr-codegen": 1086861893, + "io.sundr:sundr-core": 1349421792, + "io.swagger:swagger-annotations": 226981472, + "jakarta.activation:jakarta.activation-api": -1479873780, + "jakarta.mail:jakarta.mail-api": 1593960050, + "jakarta.xml.bind:jakarta.xml.bind-api": -1529766069, + "javax.activation:activation": -1387662613, + "javax.annotation:jsr250-api": 847275234, + "javax.enterprise:cdi-api": 1353074472, + "javax.inject:javax.inject": 698155243, + "javax.mail:mail": 228202537, + "jaxen:jaxen": -1706455689, + "jline:jline": 1981174520, + "joda-time:joda-time": 279761232, + "junit:junit": -643342642, + "net.bytebuddy:byte-buddy": -9127413, + "net.bytebuddy:byte-buddy-agent": -101929489, + "net.java.dev.jna:jna": -980528465, + "net.java.dev.jna:jna-platform": -1261025130, + "net.jcip:jcip-annotations": 1309637838, + "net.minidev:json-smart": -1350491454, + "net.openhft:affinity": 1243890085, + "net.sf.jopt-simple:jopt-simple": -1677351973, + "net.sf.saxon:Saxon-HE": 1103866023, + "net.sourceforge.f2j:arpack_combined_all": -436220794, + "nz.ac.waikato.cms.weka.thirdparty:bounce": 388165027, + "nz.ac.waikato.cms.weka.thirdparty:java-cup-11b": 498568429, + "nz.ac.waikato.cms.weka.thirdparty:java-cup-11b-runtime": 49513351, + "nz.ac.waikato.cms.weka:weka-stable": -855196930, + "org.agrona:agrona": -651696311, + "org.apache.ant:ant": 1015338813, + "org.apache.ant:ant-launcher": -533977198, + "org.apache.avro:avro": -611168387, + "org.apache.bcel:bcel": 1175564519, + "org.apache.commons:commons-collections4": 1388931702, + "org.apache.commons:commons-compress": 1837370538, + "org.apache.commons:commons-lang3": -1070155819, + "org.apache.commons:commons-math3": 1911229889, + "org.apache.commons:commons-text": 941293506, + "org.apache.curator:curator-test": 195589637, + "org.apache.flink:flink-annotations": 821176587, + "org.apache.flink:flink-clients_2.12": -885567461, + "org.apache.flink:flink-core": 417453553, + "org.apache.flink:flink-hadoop-fs": 283314434, + "org.apache.flink:flink-java": 1659455430, + "org.apache.flink:flink-metrics-core": -1410152825, + "org.apache.flink:flink-optimizer_2.12": -183110485, + "org.apache.flink:flink-queryable-state-client-java_2.12": -1378732623, + "org.apache.flink:flink-runtime_2.12": -2002475832, + "org.apache.flink:flink-runtime_2.12:jar:tests": -28551087, + "org.apache.flink:flink-shaded-asm": 548422274, + "org.apache.flink:flink-shaded-asm-6": 756974490, + "org.apache.flink:flink-shaded-guava": -812299033, + "org.apache.flink:flink-shaded-jackson": 1321189290, + "org.apache.flink:flink-shaded-netty": 1862786195, + "org.apache.flink:flink-streaming-java_2.12": 1086972183, + "org.apache.flink:flink-test-utils-junit": -1864074611, + "org.apache.flink:flink-test-utils_2.12": 1601145987, + "org.apache.flink:force-shading": -103320009, + "org.apache.httpcomponents:httpclient": -1027562682, + "org.apache.httpcomponents:httpcore": -391663805, + "org.apache.kafka:kafka-clients": -1279977449, + "org.apache.kafka:kafka_2.11": 1492146910, + "org.apache.maven:maven-artifact": 709463400, + "org.apache.maven:maven-model": -622184716, + "org.apache.maven:maven-plugin-api": -362217766, + "org.apache.yetus:audience-annotations": -1137626618, + "org.apache.zookeeper:zookeeper": -1251719664, + "org.bouncycastle:bcpkix-jdk15on": 40996685, + "org.bouncycastle:bcprov-ext-jdk15on": 368440175, + "org.bouncycastle:bcprov-jdk15on": -1778834980, + "org.checkerframework:checker-qual": 1111580854, + "org.clapper:grizzled-slf4j_2.12": -1718524488, + "org.codehaus.jackson:jackson-core-asl": -821702402, + "org.codehaus.jackson:jackson-mapper-asl": 90570825, + "org.codehaus.plexus:plexus-classworlds": 268773746, + "org.codehaus.plexus:plexus-component-annotations": -14420964, + "org.codehaus.plexus:plexus-utils": -407122851, + "org.dom4j:dom4j": -115387738, + "org.eclipse.jetty.orbit:javax.servlet": -1864612564, + "org.eclipse.jetty:jetty-http:jar:tests": -404910946, + "org.eclipse.jetty:jetty-io": -646937227, + "org.eclipse.jetty:jetty-util": -195235011, + "org.eclipse.sisu:org.eclipse.sisu.inject": 278909516, + "org.eclipse.sisu:org.eclipse.sisu.plexus": -124485520, + "org.hamcrest:hamcrest-core": 649657847, + "org.javassist:javassist": 974368245, + "org.jboss.logging:jboss-logging": 1972624563, + "org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec": 2013276768, + "org.jboss.spec.javax.servlet:jboss-servlet-api_4.0_spec": -332496586, + "org.jetbrains.kotlin:kotlin-stdlib": -1691433736, + "org.jetbrains.kotlin:kotlin-stdlib-common": 949149265, + "org.jetbrains.kotlin:kotlin-test": 617494533, + "org.jetbrains.kotlin:kotlin-test-common": -2102090994, + "org.jetbrains:annotations": 554168982, + "org.joda:joda-convert": 1927839173, + "org.junit:junit-bom:pom": -417363473, + "org.lz4:lz4-java": -1095781905, + "org.mockito:mockito-core": 608862172, + "org.objenesis:objenesis": 942053971, + "org.openjfx:javafx-base": -460981525, + "org.openjfx:javafx-base:jar:mac": -1683022733, + "org.ow2.asm:asm": 2054068535, + "org.ow2.asm:asm-analysis": 914981025, + "org.ow2.asm:asm-commons": 1044337117, + "org.ow2.asm:asm-tree": 838805697, + "org.ow2.asm:asm-util": -1036621320, + "org.pantsbuild:jarjar": 1500668513, + "org.projectnessie.cel:cel-core": -1213670364, + "org.projectnessie.cel:cel-generated-antlr": 2077736885, + "org.projectnessie.cel:cel-generated-pb": -943255755, + "org.reactivestreams:reactive-streams": 139763068, + "org.scala-lang.modules:scala-java8-compat_2.12": 1381258301, + "org.scala-lang.modules:scala-parser-combinators_2.12": -581950445, + "org.scala-lang:scala-library": -809489717, + "org.scala-lang:scala-reflect": 216292818, + "org.scala-sbt:util-interface": -343790524, + "org.slf4j:slf4j-api": -64059533, + "org.slf4j:slf4j-simple": -2143744417, + "org.tukaani:xz": 810583313, + "org.xerial.snappy:snappy-java": -1714422473, + "org.xmlresolver:xmlresolver": -276610907, + "org.xmlresolver:xmlresolver:jar:data": 556478278, + "org.yaml:snakeyaml": 612658694, + "xml-apis:xml-apis": 632917632 + }, "artifacts": { "android.arch.core:common": { "shasums": { @@ -636,9 +958,9 @@ }, "com.nimbusds:nimbus-jose-jwt": { "shasums": { - "jar": "104ed6c348d35f68ab16d85550ed59239bcb7846bc2bd885ef3851a0ab2e73cf" + "jar": "7ef3b0dd4a27407639d469cd75e7770463b4ee36e2c13535465da175d3b8f964" }, - "version": "10.5" + "version": "10.6" }, "com.nimbusds:oauth2-oidc-sdk": { "shasums": { @@ -7196,5 +7518,5 @@ ] } }, - "version": "2" + "version": "3" } diff --git a/tests/custom_maven_install/regression_testing_gradle_install.json b/tests/custom_maven_install/regression_testing_gradle_install.json index 3b81be286..2b86aab77 100644 --- a/tests/custom_maven_install/regression_testing_gradle_install.json +++ b/tests/custom_maven_install/regression_testing_gradle_install.json @@ -1,7 +1,95 @@ { "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", - "__INPUT_ARTIFACTS_HASH": -246340730, - "__RESOLVED_ARTIFACTS_HASH": 489340253, + "__INPUT_ARTIFACTS_HASH": { + "androidx.annotation:annotation": -187125788, + "androidx.compose.foundation:foundation-layout": 761286496, + "androidx.fragment:fragment-ktx": 1580141833, + "com.almworks.sqlite4java:libsqlite4java-linux-i386": -334365433, + "com.squareup.okhttp3:okhttp": 916942239, + "repositories": 1670674627 + }, + "__RESOLVED_ARTIFACTS_HASH": { + "androidx.activity:activity-ktx:aar": 1146925995, + "androidx.activity:activity:aar": -1440403158, + "androidx.annotation:annotation": -809558039, + "androidx.annotation:annotation-experimental:aar": -1941653327, + "androidx.annotation:annotation-jvm": 1383664268, + "androidx.arch.core:core-common": -415239964, + "androidx.arch.core:core-runtime:aar": 721693460, + "androidx.autofill:autofill:aar": -511132508, + "androidx.collection:collection": -1501786338, + "androidx.collection:collection-ktx": -1436076859, + "androidx.compose.animation:animation-core:aar": -322488082, + "androidx.compose.foundation:foundation-layout": 1669753672, + "androidx.compose.foundation:foundation-layout-android:aar": -1102234174, + "androidx.compose.runtime:runtime": -1424074061, + "androidx.compose.runtime:runtime-android:aar": 809070796, + "androidx.compose.runtime:runtime-saveable": -107285816, + "androidx.compose.runtime:runtime-saveable-android:aar": -2028424773, + "androidx.compose.runtime:runtime-saveable:aar": 672313711, + "androidx.compose.runtime:runtime:aar": 1304707487, + "androidx.compose.ui:ui": 554483494, + "androidx.compose.ui:ui-android:aar": -733619082, + "androidx.compose.ui:ui-geometry": -980858386, + "androidx.compose.ui:ui-geometry-android:aar": -1562325235, + "androidx.compose.ui:ui-geometry:aar": -654119961, + "androidx.compose.ui:ui-graphics": -592872271, + "androidx.compose.ui:ui-graphics-android:aar": 209268513, + "androidx.compose.ui:ui-graphics:aar": -1749913274, + "androidx.compose.ui:ui-text": 285368442, + "androidx.compose.ui:ui-text-android:aar": -1972107575, + "androidx.compose.ui:ui-text:aar": -562054584, + "androidx.compose.ui:ui-unit": -1991066374, + "androidx.compose.ui:ui-unit-android:aar": -2029822118, + "androidx.compose.ui:ui-unit:aar": -1893452485, + "androidx.compose.ui:ui-util": -1472724170, + "androidx.compose.ui:ui-util-android:aar": 1728790935, + "androidx.compose.ui:ui-util:aar": 1275854970, + "androidx.compose.ui:ui:aar": 82100207, + "androidx.concurrent:concurrent-futures": -1007115512, + "androidx.core:core-ktx:aar": -1146090213, + "androidx.core:core:aar": 80771634, + "androidx.customview:customview-poolingcontainer:aar": -893181901, + "androidx.customview:customview:aar": 2005746560, + "androidx.emoji2:emoji2:aar": -596676730, + "androidx.fragment:fragment-ktx:aar": -695164541, + "androidx.fragment:fragment:aar": -1369167705, + "androidx.interpolator:interpolator:aar": 1955524384, + "androidx.lifecycle:lifecycle-common": 1394624255, + "androidx.lifecycle:lifecycle-common-java8": -460148001, + "androidx.lifecycle:lifecycle-livedata-core-ktx:aar": -1365319379, + "androidx.lifecycle:lifecycle-livedata-core:aar": -1461381522, + "androidx.lifecycle:lifecycle-livedata:aar": 389628997, + "androidx.lifecycle:lifecycle-process:aar": -1627726003, + "androidx.lifecycle:lifecycle-runtime-ktx:aar": -941914636, + "androidx.lifecycle:lifecycle-runtime:aar": -153151272, + "androidx.lifecycle:lifecycle-viewmodel-ktx:aar": 921758075, + "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar": -1778220375, + "androidx.lifecycle:lifecycle-viewmodel:aar": 878136930, + "androidx.loader:loader:aar": 765181603, + "androidx.profileinstaller:profileinstaller:aar": -1012434662, + "androidx.savedstate:savedstate-ktx:aar": -743967691, + "androidx.savedstate:savedstate:aar": -1843665657, + "androidx.startup:startup-runtime:aar": 827709981, + "androidx.tracing:tracing:aar": 2008248276, + "androidx.versionedparcelable:versionedparcelable:aar": 847628981, + "androidx.viewpager:viewpager:aar": 1225723485, + "com.almworks.sqlite4java:libsqlite4java-linux-i386:so": -691800296, + "com.almworks.sqlite4java:sqlite4java": 1585971300, + "com.google.guava:listenablefuture": -1728764445, + "com.squareup.okhttp3:okhttp": 1262276211, + "com.squareup.okio:okio": -993505667, + "com.squareup.okio:okio-jvm": 2073967287, + "org.jetbrains.kotlin:kotlin-stdlib": -879725260, + "org.jetbrains.kotlin:kotlin-stdlib-common": 393704220, + "org.jetbrains.kotlin:kotlin-stdlib-jdk7": 1242909803, + "org.jetbrains.kotlin:kotlin-stdlib-jdk8": -597817274, + "org.jetbrains.kotlinx:kotlinx-coroutines-android": 4494327, + "org.jetbrains.kotlinx:kotlinx-coroutines-bom": -1867070274, + "org.jetbrains.kotlinx:kotlinx-coroutines-core": 478703932, + "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm": -305354319, + "org.jetbrains:annotations": 554168982 + }, "artifacts": { "androidx.activity:activity-ktx:aar": { "shasums": { @@ -510,8 +598,7 @@ "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.21": "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.10", "org.jetbrains.kotlin:kotlin-stdlib:1.8.0": "org.jetbrains.kotlin:kotlin-stdlib:1.8.21", "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1": "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4", - "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1": "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4", - "org.jetbrains.kotlinx:kotlinx-coroutines-core:pom:1.6.1": "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4" + "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1": "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4" }, "dependencies": { "androidx.activity:activity-ktx:aar": [ @@ -1146,5 +1233,5 @@ "skipped": [ "org.jetbrains.kotlinx:kotlinx-coroutines-bom" ], - "version": "2" + "version": "3" } diff --git a/tests/custom_maven_install/regression_testing_maven_install.json b/tests/custom_maven_install/regression_testing_maven_install.json index 75ae0d82c..5e7155012 100644 --- a/tests/custom_maven_install/regression_testing_maven_install.json +++ b/tests/custom_maven_install/regression_testing_maven_install.json @@ -1,7 +1,110 @@ { "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", - "__INPUT_ARTIFACTS_HASH": 1002959493, - "__RESOLVED_ARTIFACTS_HASH": -458720370, + "__INPUT_ARTIFACTS_HASH": { + "com.almworks.sqlite4java:libsqlite4java-linux-i386": -334365433, + "com.amazonaws:DynamoDBLocal": 1782516199, + "io.opentelemetry:opentelemetry-api": 1347935840, + "io.opentelemetry:opentelemetry-bom": 2085658796, + "io.opentelemetry:opentelemetry-sdk": -314306333, + "org.apache.parquet:parquet-common": -1460648886, + "org.codehaus.plexus:plexus": 444445977, + "org.hamcrest:hamcrest-core": -1351165872, + "repositories": 1670674627 + }, + "__RESOLVED_ARTIFACTS_HASH": { + "com.almworks.sqlite4java:libsqlite4java-linux-amd64:so": -430224057, + "com.almworks.sqlite4java:libsqlite4java-linux-i386:so": -691800296, + "com.almworks.sqlite4java:libsqlite4java-osx:dylib": 655576341, + "com.almworks.sqlite4java:sqlite4java": 1585971300, + "com.almworks.sqlite4java:sqlite4java-win32-x64:dll": 1778082080, + "com.almworks.sqlite4java:sqlite4java-win32-x86:dll": -1305379697, + "com.amazonaws:DynamoDBLocal": 91468097, + "com.amazonaws:aws-java-sdk-core": 1063449346, + "com.amazonaws:aws-java-sdk-dynamodb": -1854354311, + "com.amazonaws:aws-java-sdk-kms": -1285069951, + "com.amazonaws:aws-java-sdk-s3": -78649902, + "com.amazonaws:jmespath-java": 1376978508, + "com.fasterxml.jackson.core:jackson-annotations": -1638900403, + "com.fasterxml.jackson.core:jackson-core": -614671163, + "com.fasterxml.jackson.core:jackson-databind": -1004873616, + "com.fasterxml.jackson.dataformat:jackson-dataformat-cbor": -2085249715, + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310": 1937454015, + "com.google.code.findbugs:jsr305": 870839855, + "com.google.errorprone:error_prone_annotations": 374564632, + "com.google.guava:failureaccess": -1890754729, + "com.google.guava:guava": 83577436, + "com.google.guava:listenablefuture": 1079558157, + "com.google.j2objc:j2objc-annotations": 880287147, + "com.typesafe.netty:netty-reactive-streams": -540269241, + "com.typesafe.netty:netty-reactive-streams-http": -1104232166, + "commons-cli:commons-cli": 740512324, + "commons-codec:commons-codec": 1434473311, + "commons-logging:commons-logging": -836371585, + "io.netty:netty-buffer": -1802903280, + "io.netty:netty-codec": -1278797041, + "io.netty:netty-codec-http": 1277432904, + "io.netty:netty-codec-http2": 1631032186, + "io.netty:netty-common": 1106195050, + "io.netty:netty-handler": 1527580165, + "io.netty:netty-resolver": -1113123092, + "io.netty:netty-transport": -91090850, + "io.netty:netty-transport-native-epoll:jar:linux-x86_64": -2068274588, + "io.netty:netty-transport-native-unix-common": -1739569432, + "io.opentelemetry:opentelemetry-api": -943200401, + "io.opentelemetry:opentelemetry-api-events": 1169353385, + "io.opentelemetry:opentelemetry-context": -594651567, + "io.opentelemetry:opentelemetry-extension-incubator": 1546403929, + "io.opentelemetry:opentelemetry-sdk": -596776600, + "io.opentelemetry:opentelemetry-sdk-common": -1036216636, + "io.opentelemetry:opentelemetry-sdk-logs": 2055408667, + "io.opentelemetry:opentelemetry-sdk-metrics": 211332615, + "io.opentelemetry:opentelemetry-sdk-trace": -815583970, + "javax.annotation:javax.annotation-api": -1009230154, + "javax.servlet:javax.servlet-api": 324870439, + "joda-time:joda-time": 312773828, + "org.abego.treelayout:org.abego.treelayout.core": 278300168, + "org.antlr:antlr4-runtime": -1262578608, + "org.apache.commons:commons-lang3": -889837011, + "org.apache.httpcomponents:httpclient": 1065345002, + "org.apache.httpcomponents:httpcore": -391663805, + "org.apache.logging.log4j:log4j-api": -585928769, + "org.apache.logging.log4j:log4j-core": 1535229121, + "org.apache.parquet:parquet-common": -998794515, + "org.apache.parquet:parquet-format-structures": -287799581, + "org.apache.yetus:audience-annotations": 871716239, + "org.checkerframework:checker-qual": -1034954841, + "org.codehaus.plexus:plexus": 783456696, + "org.eclipse.jetty:jetty-client": 1404263854, + "org.eclipse.jetty:jetty-http": -2066614273, + "org.eclipse.jetty:jetty-io": -2047971562, + "org.eclipse.jetty:jetty-server": -994242498, + "org.eclipse.jetty:jetty-util": -1322510044, + "org.hamcrest:hamcrest-core": 649657847, + "org.mockito:mockito-core": -683704678, + "org.objenesis:objenesis": -1848541376, + "org.reactivestreams:reactive-streams": -1213709076, + "org.slf4j:slf4j-api": -1871972515, + "software.amazon.awssdk:annotations": -269651508, + "software.amazon.awssdk:apache-client": 596049840, + "software.amazon.awssdk:auth": 314852922, + "software.amazon.awssdk:aws-core": 955964559, + "software.amazon.awssdk:aws-json-protocol": 941472252, + "software.amazon.awssdk:cognitoidentity": -1874957667, + "software.amazon.awssdk:cognitoidentityprovider": 950153097, + "software.amazon.awssdk:dynamodb": 865346346, + "software.amazon.awssdk:dynamodb-enhanced": 203382399, + "software.amazon.awssdk:http-client-spi": 115264761, + "software.amazon.awssdk:metrics-spi": 205689458, + "software.amazon.awssdk:netty-nio-client": -151075274, + "software.amazon.awssdk:pinpoint": -2020505904, + "software.amazon.awssdk:profiles": -336693937, + "software.amazon.awssdk:protocol-core": -733748008, + "software.amazon.awssdk:regions": -1014234746, + "software.amazon.awssdk:sdk-core": -1928415843, + "software.amazon.awssdk:utils": -1215554400, + "software.amazon.eventstream:eventstream": 666815114, + "software.amazon.ion:ion-java": -657906253 + }, "artifacts": { "com.almworks.sqlite4java:libsqlite4java-linux-amd64:so": { "shasums": { @@ -2160,5 +2263,5 @@ "skipped": [ "org.codehaus.plexus:plexus" ], - "version": "2" + "version": "3" } diff --git a/tests/custom_maven_install/same_override_target_install.json b/tests/custom_maven_install/same_override_target_install.json index 15301e004..306a63ffb 100644 --- a/tests/custom_maven_install/same_override_target_install.json +++ b/tests/custom_maven_install/same_override_target_install.json @@ -1,7 +1,14 @@ { "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", - "__INPUT_ARTIFACTS_HASH": -2078851434, - "__RESOLVED_ARTIFACTS_HASH": 1534498822, + "__INPUT_ARTIFACTS_HASH": { + "org.slf4j:slf4j-log4j12": 373478401, + "repositories": -1949687017 + }, + "__RESOLVED_ARTIFACTS_HASH": { + "ch.qos.reload4j:reload4j": 1533684795, + "org.slf4j:slf4j-api": -844459515, + "org.slf4j:slf4j-reload4j": -1507386991 + }, "artifacts": { "ch.qos.reload4j:reload4j": { "shasums": { @@ -63,5 +70,5 @@ ] }, "services": {}, - "version": "2" + "version": "3" } diff --git a/tests/unit/coursier_test.bzl b/tests/unit/coursier_test.bzl index 2c66e6108..75b424fa9 100644 --- a/tests/unit/coursier_test.bzl +++ b/tests/unit/coursier_test.bzl @@ -614,6 +614,7 @@ def _calculate_inputs_hash_uses_excluded_artifacts_test(ctx): asserts.false(env, hash1 == hash2) asserts.true(env, old_hashes1[0] == old_hashes2[0]) + asserts.false(env, old_hashes1[1] == old_hashes2[1]) return unittest.end(env)