Skip to content

maven_install: fail if 'repositories' attribute is empty#1135

Merged
jin merged 1 commit into
bazel-contrib:masterfrom
mattnworb:check-repositories-length
May 15, 2024
Merged

maven_install: fail if 'repositories' attribute is empty#1135
jin merged 1 commit into
bazel-contrib:masterfrom
mattnworb:check-repositories-length

Conversation

@mattnworb
Copy link
Copy Markdown
Contributor

@mattnworb mattnworb commented May 13, 2024

Coursier fails with a cryptic error in case someone tries to use maven_install() without specifying any repositories, which is a small silly thing I did when trying to extract internal corporate code into a public proof-of-concept on how to do something with Bazel that took me 10 minutes to hunt down :)

When repositories is empty, Coursier fails with an error like:

  Dependencies:
org.junit.jupiter:junit-jupiter-engine:5.10.2:
Resolution error: Error downloading org.junit.jupiter:junit-jupiter-engine:5.10.2

this was for a maven_install() block with a single artifact to install; otherwise the error message will contain one Resolution error per artifact. The problem though is that Coursier doesn't say what the error is, just that one occurred.

The root-cause is that coursier_fetch etc will invoke coursier with arguments like

coursier fetch <artifacts> ... --no-default ...

which disables default repositories like Maven Central.

So as a simple fix to prevent people from configuring maven_install in a way that doesn't make sense like I did, this commit adds a check inside make_coursier_dep_tree (where the arguments to coursier are constructed) to fail if the list/dict of repositories is empty.

@jin
Copy link
Copy Markdown
Collaborator

jin commented May 15, 2024

I'm surprised that we took this long to encounter this failure mode... thanks!

Could you rebase?

Coursier fails with a cryptic error in case someone tries to use
`maven_install()` without specifying any `repositories`, which is a
small silly thing I did when trying to extract internal corporate code
into a public proof-of-concept on how to do something with Bazel that
took me 10 minutes to hunt down :)

When `repositories` is empty, Coursier fails with an error like:

```
  Dependencies:
org.junit.jupiter:junit-jupiter-engine:5.10.2:
Resolution error: Error downloading org.junit.jupiter:junit-jupiter-engine:5.10.2
```

this was for a `maven_install()` block with a single artifact to install;
otherwise the error message will contain one `Resolution error` per artifact.
The problem though is that Coursier doesn't say what the error is, just that
one occurred.

The root-cause is that `coursier_fetch` etc will invoke coursier with arguments like

```
coursier fetch <artifacts> ... --no-default ...
```

So as a simple fix to prevent people from configuring `maven_install` in a way
that doesn't make sense like I did, this commit adds a check inside
`make_coursier_dep_tree` (where the arguments to coursier are constructed) to
fail if the list/dict of repositories is empty.
@mattnworb mattnworb force-pushed the check-repositories-length branch from 5d9b3c5 to b8fdc37 Compare May 15, 2024 13:41
@mattnworb
Copy link
Copy Markdown
Contributor Author

@jin done, thanks!

@jin jin merged commit 14597e3 into bazel-contrib:master May 15, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants