Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Track whether a repo is pinned or unpinned by explicit attr #1204

Merged
merged 3 commits into from
Jul 26, 2024
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
1 change: 1 addition & 0 deletions private/extensions/maven.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -412,6 +412,7 @@ def _maven_impl(mctx):
# created from the maven_install.json file in the coursier_fetch
# invocation after this.
name = "unpinned_" + name if repo.get("lock_file") else name,
pinned_repo_name = name if repo.get("lock_file") else None,
user_provided_name = name,
repositories = repo.get("repositories"),
artifacts = artifacts_json,
Expand Down
21 changes: 14 additions & 7 deletions private/rules/coursier.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,9 @@ def _is_file(repository_ctx, path):
def _is_directory(repository_ctx, path):
return repository_ctx.which("test") and repository_ctx.execute(["test", "-d", path]).return_code == 0

def _is_unpinned(repository_ctx):
return repository_ctx.attr.pinned_repo_name != ""

def _shell_quote(s):
# Lifted from
# https://github.com/bazelbuild/bazel-skylib/blob/6a17363a3c27dde70ab5002ad9f2e29aff1e1f4b/lib/shell.bzl#L49
Expand Down Expand Up @@ -875,7 +878,7 @@ def make_coursier_dep_tree(
cmd.append("--default=true")

environment = {}
if not repository_ctx.attr.name.startswith("unpinned_"):
if not _is_unpinned(repository_ctx):
coursier_cache_location = get_coursier_cache_or_default(
repository_ctx,
False,
Expand Down Expand Up @@ -1009,7 +1012,7 @@ def _coursier_fetch_impl(repository_ctx):
# TODO(jin): allow custom cache locations
coursier_cache_path = get_coursier_cache_or_default(
repository_ctx,
repository_ctx.attr.name.startswith("unpinned_"),
_is_unpinned(repository_ctx),
).replace("//", "/")

for artifact in dep_tree["dependencies"]:
Expand All @@ -1032,13 +1035,13 @@ def _coursier_fetch_impl(repository_ctx):
# to file within the repository rule workspace
print("Assuming maven local for artifact: %s" % artifact["coord"])
artifact.update({"url": None})
if not repository_ctx.attr.name.startswith("unpinned_"):
if not _is_unpinned(repository_ctx):
artifact.update({"file": _relativize_and_symlink_file_in_maven_local(repository_ctx, artifact["file"])})

files_to_inspect.append(repository_ctx.path(artifact["file"]))
continue

if repository_ctx.attr.name.startswith("unpinned_"):
if _is_unpinned(repository_ctx):
artifact.update({"file": _relativize_and_symlink_file_in_coursier_cache(repository_ctx, artifact["file"], coursier_cache_path)})

# Coursier saves the artifacts into a subdirectory structure
Expand Down Expand Up @@ -1231,13 +1234,13 @@ def _coursier_fetch_impl(repository_ctx):
},
override_targets = repository_ctx.attr.override_targets,
# Skip maven local dependencies if generating the unpinned repository
skip_maven_local_dependencies = repository_ctx.attr.name.startswith("unpinned_"),
skip_maven_local_dependencies = _is_unpinned(repository_ctx),
)

# This repository rule can be either in the pinned or unpinned state, depending on when
# the user invokes artifact pinning. Normalize the repository name here.
if repository_ctx.name.startswith("unpinned_"):
repository_name = repository_ctx.name[len("unpinned_"):]
if _is_unpinned(repository_ctx):
repository_name = repository_ctx.attr.pinned_repo_name
outdated_build_file_content = ""
else:
repository_name = repository_ctx.name
Expand Down Expand Up @@ -1439,6 +1442,10 @@ coursier_fetch = repository_rule(
),
"ignore_empty_files": attr.bool(default = False, doc = "Treat jars that are empty as if they were not found."),
"additional_coursier_options": attr.string_list(doc = "Additional options that will be passed to coursier."),
"pinned_repo_name": attr.string(
doc = "Name of the corresponding pinned repo for this repo. Presence implies that this is an unpinned repo.",
mandatory = False,
),
},
environ = [
"JAVA_HOME",
Expand Down
1 change: 1 addition & 0 deletions private/rules/maven_install.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,7 @@ def maven_install(
# created from the maven_install.json file in the coursier_fetch
# invocation after this.
name = name if maven_install_json == None else "unpinned_" + name,
pinned_repo_name = None if maven_install_json == None else name,
repositories = repositories_json_strings,
artifacts = artifacts_json_strings,
fail_on_missing_checksum = fail_on_missing_checksum,
Expand Down