2

I'm trying to understand how to work with a remote repository in Artifactory for a Go project. My initial expectation was that it'll work transparently, all I would need to do is to point GORPOXY variable to a virtual repository (with local and remote behind it), do go build and dependencies will either be downloaded from the Artifactory cache or Artifactory would download them transparently. Similar to the way it works for maven dependencies.

When I tried that, it complained that the dependencies weren't found in artifactory. Ok.

Reading the documentation two things stand out. First, there's nothing there about GOPROXY and everything is about using artifactory cli. That's a big downside for several reasons. Second, is that you need to publish dependencies manually with jfrog rt go-publish go --self=false --deps=ALL and then dependencies appear under a local repository.

So I'm trying to figure out if 1) I can avoid using JFrog CLI and 2) what's the point of remote repositories if they don't proxy? Or maybe I'm missing something?

Artifactory 6.3.0

Leo
  • 1,016
  • 1
  • 13
  • 32

1 Answers1

1

I understand your confusion on the blog post you mentioned, though I have a feeling the intent of the writer was to more show how the JFrog CLI can be used.

To answer your questions:

1) Yes, you don't have to use the JFrog CLI to build. Please check out the documentation on how to set up a remote repository for Go. This will guide you through setting up GitHub or GoCenter as a remote repository for your Go builds. This will allow you to set the GOPROXY environment variable following this structure <protocol>://<username>:<password>@<artifactory domain>/api/go/<go repository>.

2) Remote repositories will absolutely act as a proxy, caching the contents you download from the remote repository (copying a part from the user guide: A remote Go repository in Artifactory serves as a caching proxy for a public Go registry such as GoCenter or GitHub.)

retgits
  • 1,323
  • 1
  • 9
  • 14
  • Thanks! I'm still confused by the workflow suggested by the documentation. This part ` Since the package’s modules are not yet available in Artifactory, to resolve dependencies through Artifactory, you need to use the ‘no-registry’ flag in order to get the dependencies sources from GitHub and let Go create modules from them.` seems to be implying that you can't use artifactory as a proxy. – Leo Mar 24 '19 at 23:14
  • 1
    I get your point and I think we need to improve our docs a bit to explain that more clearly. It all depends on which command you use to build your Go app. If you do not use the JFrog CLI, and set the GOPROXY to your Artifactory URL, Artifactory will be used as a proxy. If you use the JFrog CLI and use the `--no-registry` flag, it will bypass Artifactory completely and thus not cache the modules. – retgits Mar 25 '19 at 01:07
  • 1
    @retgits this does not answer the question! The link you have in #1 is expressly the opposite -- it makes NO mention of GOPROXY at all, instead it explicitly tells you to use the JFrog CLI, which is precisely what we are trying to avoid. If you simply set GOPROXY and use the Go tools alone, you'll always get a 400 bad request. – Matthew Olenik Aug 07 '19 at 21:54
  • I'm running into the same problems @MatthewOlenik is. – Alan Cabrera Nov 12 '20 at 16:17