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

Read .netrc in go_repository #1090

Merged
merged 2 commits into from Aug 10, 2021
Merged

Read .netrc in go_repository #1090

merged 2 commits into from Aug 10, 2021

Conversation

linzhp
Copy link
Contributor

@linzhp linzhp commented Jul 31, 2021

What type of PR is this?
Feature

What package or component does this PR mostly affect?
go_repository

What does this PR do? Why is it needed?
The URLs that go_repository downloads libraries from may need authentication. We need to support the authentication tokens saved in .netrc similar to what http_archive does.

** Which issues(s) does this PR fix?
Fixes #847

** Other notes for review
This is a re-implementation of #848 by addressing @jayconrod's comments there. Besides fixes in the code, these are the responses to Jay's comments:

Could you confirm that Bazel 1.2.0 provides these functions, and if not, what is the oldest version of Bazel that does? I'd like to make sure we're not breaking compatibility here. If these were added recently, it would be better to copy them here.

Bazel 1.2.0 provides these functions (read_netrc, use_netrc): https://github.com/bazelbuild/bazel/blob/1.2.0/tools/build_defs/repo/utils.bzl. However, the third argument to use_netrc was added in Bazel 3.1. So this pull request will require Bazel 3.1, which shouldn't be a big issue as rules_go already requires Bazel 4.0

It looks like this will only work for HTTP mode. It also needs to work for module mode though (the ctx.attr.version branch). I think that just means making sure NETRC is set to the correct file in env_keys, but please verify.

In module mode, go_repository calls Go toolchain, which already has logic to support netrc without requiring NETRC environment variable.

Please add documentation to go_repository.bzl for these attributes.

Let's not add these attributes to keep it simple and use the netrc file from default location with default auth pattern for now until some people run into a scenario where customization is needed.

@linzhp linzhp requested a review from jayconrod as a code owner July 31, 2021 05:13
@linzhp linzhp requested a review from blico August 3, 2021 23:36
@blico
Copy link
Member

blico commented Aug 5, 2021

This has been attempted once before in the same fashion with #848, could you check out Jay's comments there?

Copy link
Member

@blico blico left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Once we settle on the new parameters needed, we will need to update the documentation for them too.

internal/go_repository.bzl Show resolved Hide resolved
internal/go_repository.bzl Show resolved Hide resolved
internal/go_repository.bzl Show resolved Hide resolved
@linzhp linzhp merged commit d7082fb into bazelbuild:master Aug 10, 2021
@linzhp linzhp deleted the auth branch August 10, 2021 15:12
dmivankov added a commit to dmivankov/bazel-gazelle that referenced this pull request May 18, 2022
Initial PR to handle netrc had support for auth_patterns
bazelbuild#848

But final version didn't
bazelbuild#1090

auth_patterns can still be needed, for example for private github repositories
Can be used like this
```python
go_repository(
    name = "something",
    auth_patterns = {
        "api.github.com": "Bearer <password>",
    },
    importpath = "github.com/someorg/something",
    strip_prefix = "something-...",
    type = "zip",
    urls = ["https://api.github.com/repos/someorg/something/zipball/..."],
)
```

Copying parameter documentation from bazel code
linzhp pushed a commit that referenced this pull request Jun 12, 2022
Initial PR to handle netrc had support for auth_patterns
#848

But final version didn't
#1090

auth_patterns can still be needed, for example for private github repositories
Can be used like this
```python
go_repository(
    name = "something",
    auth_patterns = {
        "api.github.com": "Bearer <password>",
    },
    importpath = "github.com/someorg/something",
    strip_prefix = "something-...",
    type = "zip",
    urls = ["https://api.github.com/repos/someorg/something/zipball/..."],
)
```
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.

Add netrc (like that of http_archive) to go_repository?
2 participants