Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion private/rules/coursier.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -721,6 +721,13 @@ def generate_pin_target(repository_ctx, unpinned_pin_target):
else:
lock_file_location = "/".join([package_path, file_name]) # e.g. path/to/some.json

if repository_ctx.attr.resolver == "maven":
resolver_target = Label("//private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/maven:MavenMain")
elif repository_ctx.attr.resolver == "gradle":
resolver_target = Label("//private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle:GradleMain")
else:
fail("Unknown resolver")

return _IN_REPO_PIN.format(
boms = repr(repository_ctx.attr.boms),
artifacts = repr(repository_ctx.attr.artifacts),
Expand All @@ -730,7 +737,7 @@ def generate_pin_target(repository_ctx, unpinned_pin_target):
fetch_sources = repr(repository_ctx.attr.fetch_sources),
fetch_javadocs = repr(repository_ctx.attr.fetch_javadoc),
lock_file = repr(lock_file_location),
resolver = repr(repository_ctx.attr.resolver),
resolver = repr(str(resolver_target)),
)

def infer_artifact_path_from_primary_and_repos(primary_url, repository_urls):
Expand Down
14 changes: 4 additions & 10 deletions private/rules/pin_dependencies.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -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} --resolver {resolver} --input_hash '{input_hash}' --output {output}
{resolver_cmd} --jvm_flags={jvm_flags} --argsfile {config} --input_hash '{input_hash}' --output {output}
"""

def _stringify_exclusions(exclusions):
Expand Down Expand Up @@ -76,8 +76,7 @@ def _pin_dependencies_impl(ctx):
_TEMPLATE.format(
config = config_file.short_path,
input_hash = input_hash[0],
resolver_cmd = ctx.executable._resolver.short_path,
resolver = ctx.attr.resolver,
resolver_cmd = ctx.executable.resolver.short_path,
output = "$BUILD_WORKSPACE_DIRECTORY/" + ctx.attr.lock_file,
jvm_flags = ctx.attr.jvm_flags,
),
Expand All @@ -88,19 +87,14 @@ 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]).merge(ctx.attr.resolver[DefaultInfo].default_runfiles),
),
]

pin_dependencies = rule(
_pin_dependencies_impl,
executable = True,
attrs = {
"resolver": attr.string(
doc = "The resolver to use",
values = ["gradle", "maven"],
default = "maven",
),
"artifacts": attr.string_list(
doc = "List of JSON blobs generated by parse_artifact_spec_list",
),
Expand All @@ -122,7 +116,7 @@ pin_dependencies = rule(
"jvm_flags": attr.string(
doc = "JVM flags to pass to resolver",
),
"_resolver": attr.label(
"resolver": attr.label(
executable = True,
cfg = "exec",
default = "//private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/cmd:Resolver",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
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.netrc.Netrc;
import com.github.bazelbuild.rules_jvm_external.resolver.remote.DownloadResult;
import com.github.bazelbuild.rules_jvm_external.resolver.remote.Downloader;
import com.github.bazelbuild.rules_jvm_external.resolver.remote.HttpDownloader;
Expand Down Expand Up @@ -56,20 +57,20 @@
import java.util.concurrent.Executors;
import java.util.function.Supplier;

public class Main {
public abstract class AbstractMain {

public static void main(String[] args) throws IOException {
public void doMain(String[] args) {
Set<DependencyInfo> infos;
try (EventListener listener = HttpDownloader.defaultEventListener()) {
ResolverConfig config = new ResolverConfig(listener, args);

ResolutionRequest request = config.getResolutionRequest();

Resolver resolver = config.getResolver();
Resolver resolver = getResolver(config.getNetrc(), config.getMaxThreads(), listener);

ResolutionResult resolutionResult = resolver.resolve(request);

infos = fulfillDependencyInfos(listener, config, resolutionResult.getResolution());
infos = fulfillDependencyInfos(resolver, listener, config, resolutionResult.getResolution());

writeLockFile(listener, config, request, infos, resolutionResult.getConflicts());

Expand All @@ -80,8 +81,13 @@ public static void main(String[] args) throws IOException {
}
}

public abstract Resolver getResolver(Netrc netrc, int maxThreads, EventListener listener);

private static Set<DependencyInfo> fulfillDependencyInfos(
EventListener listener, ResolverConfig config, Graph<Coordinates> resolved) {
Resolver resolver,
EventListener listener,
ResolverConfig config,
Graph<Coordinates> resolved) {
listener.onEvent(new PhaseEvent("Downloading dependencies"));

ResolutionRequest request = config.getResolutionRequest();
Expand All @@ -94,7 +100,7 @@ private static Set<DependencyInfo> fulfillDependencyInfos(
Downloader downloader =
new Downloader(
config.getNetrc(),
request.getLocalCache(config.getResolver().getName()),
request.getLocalCache(resolver.getName()),
request.getRepositories(),
listener,
cacheResults);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
load("@rules_java//java:defs.bzl", "java_binary", "java_library")
load("@rules_java//java:defs.bzl", "java_library")
load("@rules_jvm_external//:defs.bzl", "artifact")

java_library(
Expand All @@ -12,9 +12,7 @@ java_library(
"//private/tools/java/com/github/bazelbuild/rules_jvm_external/jar:IndexJar-lib",
"//private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver",
"//private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/events",
"//private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle",
"//private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/lockfile",
"//private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/maven",
"//private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/netrc",
"//private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/remote",
"//private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/ui",
Expand All @@ -28,14 +26,3 @@ java_library(
),
],
)

java_binary(
name = "Resolver",
main_class = "com.github.bazelbuild.rules_jvm_external.resolver.cmd.Main",
visibility = [
"//visibility:public",
],
runtime_deps = [
":cmd",
],
)
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,8 @@

import com.github.bazelbuild.rules_jvm_external.Coordinates;
import com.github.bazelbuild.rules_jvm_external.resolver.ResolutionRequest;
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.gradle.GradleResolver;
import com.github.bazelbuild.rules_jvm_external.resolver.maven.MavenResolver;
import com.github.bazelbuild.rules_jvm_external.resolver.netrc.Netrc;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
Expand All @@ -37,7 +34,6 @@ public class ResolverConfig {
public static final int DEFAULT_MAX_THREADS =
Math.min(5, Runtime.getRuntime().availableProcessors());
private final ResolutionRequest request;
private final Resolver resolver;
private final boolean fetchSources;
private final boolean fetchJavadoc;
private final Netrc netrc;
Expand All @@ -50,7 +46,6 @@ public ResolverConfig(EventListener listener, String... args) throws IOException
this.netrc = Netrc.fromUserHome();

ResolutionRequest request = new ResolutionRequest();
String chosenResolver = "maven";
boolean fetchSources = false;
boolean fetchJavadoc = false;
int maxThreads = DEFAULT_MAX_THREADS;
Expand Down Expand Up @@ -99,22 +94,6 @@ public ResolverConfig(EventListener listener, String... args) throws IOException
}
break;

case "--resolver":
i++;
switch (args[i]) {
case "gradle":
chosenResolver = "gradle";
break;

case "maven":
chosenResolver = "maven";
break;

default:
throw new IllegalArgumentException("Resolver must be one of `maven` or `gradle`");
}
break;

case "--sources":
fetchSources = true;
break;
Expand Down Expand Up @@ -153,10 +132,6 @@ public ResolverConfig(EventListener listener, String... args) throws IOException

config.getRepositories().forEach(request::addRepository);

if (config.getResolver() != null) {
chosenResolver = config.getResolver();
}

config.getGlobalExclusions().forEach(request::exclude);

config
Expand Down Expand Up @@ -208,24 +183,12 @@ public ResolverConfig(EventListener listener, String... args) throws IOException
this.inputHash = inputHash;
this.maxThreads = maxThreads;
this.output = output;

if (chosenResolver.equals("maven")) {
this.resolver = new MavenResolver(netrc, maxThreads, listener);
} else if (chosenResolver.equals("gradle")) {
this.resolver = new GradleResolver(netrc, maxThreads, listener);
} else {
throw new RuntimeException("Unknown resolver: " + chosenResolver);
}
}

public ResolutionRequest getResolutionRequest() {
return request;
}

public Resolver getResolver() {
return resolver;
}

public boolean isFetchSources() {
return fetchSources;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ load("@rules_jvm_external//:defs.bzl", "artifact")

java_library(
name = "gradle",
srcs = glob(["*.java"]),
srcs = glob(
["*.java"],
exclude = ["GradleMain.java"],
),
data = [
"//private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/data:gradle_build_templates",
"//private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/plugin:plugin-single-jar",
Expand Down Expand Up @@ -41,3 +44,19 @@ java_library(
"@gradle",
],
)

java_binary(
name = "GradleMain",
srcs = [
"GradleMain.java",
],
main_class = "com.github.bazelbuild.rules_jvm_external.resolver.gradle.GradleMain",
visibility = ["//visibility:public"],
deps = [
":gradle",
"//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/events",
"//private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/netrc",
],
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.github.bazelbuild.rules_jvm_external.resolver.gradle;

import com.github.bazelbuild.rules_jvm_external.resolver.Resolver;
import com.github.bazelbuild.rules_jvm_external.resolver.cmd.AbstractMain;
import com.github.bazelbuild.rules_jvm_external.resolver.events.EventListener;
import com.github.bazelbuild.rules_jvm_external.resolver.netrc.Netrc;

public class GradleMain extends AbstractMain {

public static void main(String[] args) {
new GradleMain().doMain(args);
}

@Override
public Resolver getResolver(Netrc netrc, int maxThreads, EventListener listener) {
return new GradleResolver(netrc, maxThreads, listener);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ load("@rules_jvm_external//:defs.bzl", "artifact")

java_library(
name = "maven",
srcs = glob(["*.java"]),
srcs = glob(
["*.java"],
exclude = ["MavenMain.java"],
),
visibility = [
"//private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver:__subpackages__",
"//tests/com/github/bazelbuild/rules_jvm_external:__subpackages__",
Expand Down Expand Up @@ -91,3 +94,19 @@ java_library(
),
],
)

java_binary(
name = "MavenMain",
srcs = [
"MavenMain.java",
],
main_class = "com.github.bazelbuild.rules_jvm_external.resolver.maven.MavenMain",
visibility = ["//visibility:public"],
deps = [
":maven",
"//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/events",
"//private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/netrc",
],
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.github.bazelbuild.rules_jvm_external.resolver.maven;

import com.github.bazelbuild.rules_jvm_external.resolver.Resolver;
import com.github.bazelbuild.rules_jvm_external.resolver.cmd.AbstractMain;
import com.github.bazelbuild.rules_jvm_external.resolver.events.EventListener;
import com.github.bazelbuild.rules_jvm_external.resolver.netrc.Netrc;

public class MavenMain extends AbstractMain {

public static void main(String[] args) {
new MavenMain().doMain(args);
}

@Override
public Resolver getResolver(Netrc netrc, int maxThreads, EventListener listener) {
return new MavenResolver(netrc, maxThreads, listener);
}
}