Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set GOPRIVATE environment variable

I started working on a Go project and it uses some private modules from Github private repos and whenever I try to run go run main.go it gives me a below 410 Gone error:

verifying github.com/repoURL/[email protected]+incompatible/go.mod: github.com/repoURL/[email protected]+incompatible/go.mod: reading https://sum.golang.org/lookup/github.com/!repoURL/[email protected]+incompatible: 410 Gone

I can easily clone private repo from terminal which means my ssh keys are configured correctly. I read here that I need to set GOPRIVATE environment variable but I am not sure how to do that.

Can anyone answer or point to the relevant tutorial?

Go: v1.13, OS: macOS Mojave

like image 764
UsamaAmjad Avatar asked Oct 09 '19 13:10

UsamaAmjad


People also ask

Where should I set Goprivate?

causes the go command to treat as private any module with a path prefix matching either pattern, including git.corp.example.com/xyzzy, rsc.io/private, and rsc.io/private/quux. The 'go env -w' command (see 'go help env') can be used to set these variables for future go command invocations.

What is Goprivate?

The new GOPRIVATE environment variable indicates module paths that are not publicly available. It serves as the default value for the lower-level GONOPROXY and GONOSUMDB variables, which provide finer-grained control over which modules are fetched via proxy and verified using the checksum database.


2 Answers

Short Answer:

go env -w GOPRIVATE=github.com/repoURL/private-repo 

OR

If you want to allow all private repos from your organization

go env -w GOPRIVATE=github.com/<OrgNameHere>/* 

Long Answer:

Check "Module configuration for non-public modules" for more information:

The GOPRIVATE environment variable controls which modules the go command considers to be private (not available publicly) and should therefore not use the proxy or checksum database. The variable is a comma-separated list of glob patterns (in the syntax of Go's path.Match) of module path prefixes. For example,

 GOPRIVATE=*.corp.example.com,rsc.io/private 

causes the go command to treat as private any module with a path prefix matching either pattern, including git.corp.example.com/xyzzy, rsc.io/private, and rsc.io/private/quux.

. .

The 'go env -w' command (see 'go help env') can be used to set these variables for future go command invocations.


Note on the usage of ssh:

If you use ssh to access git repo (locally hosted), you might want to add the following to your ~/.gitconfig:

[url "ssh://[email protected]/"]        insteadOf = https://git.local.intranet/ 

for the go commands to be able to access the git server.

like image 118
ifnotak Avatar answered Sep 29 '22 13:09

ifnotak


Just a follow up on the usage of ssh, this is the command used to get it working:

GitHub:

git config --global url."[email protected]:".insteadOf "https://github.com/" 

Bitbucket:

git config --global url."[email protected]:".insteadOf "https://bitbucket.org/" 
like image 36
JFW Avatar answered Sep 29 '22 14:09

JFW