<div dir="ltr">I’ve been playing with a couple of Go ports recently and trying to get various pieces to work with offline builds…and I’m not convinced that offline builds as they are currently executed are a good thing. In extreme cases, I think that the use of go.vendors is an antipattern.<div><br></div><div>As an example, I was looking at devel/please and used go2port, found a number of issues, and then applied a patch to my local golang Portgroup (all instances of them from all sources) based on [1]. Even that didn't work for everything, but I kept trying it…until I realized that I was downloading ten different versions of the same repository at ~35Mb *each* in order to build something. A build that takes about five minutes from `git clone…` to the end of `./bootstrap.sh` (devel/please is a bit strange) took more than 30 minutes just to download vendored dependencies  (many of them duplicated, remember).</div><div><br></div><div>The sysutils/go2port tool is amazing, but does not pull the dependencies down the way that go mod does, cannot find some dependencies because of the resolutions, and the portgroup's go.vendors support is restricted to using full repo archive downloads instead of the somewhat smarter apparently git-based solution that go mod is using where only the required subpaths are pulled.</div><div><br></div><div>I don't have a solution to this other than to suggest that offline builds and go.vendors be deprecated (it's also only using the legacy archive retrieval), unless we come up with another way to do this.</div><div><br></div><div>There might be a way to do it using `go mod vendor`, but that leaves a different problem of how / where the vendored dependencies will be stored because the upstream is not vendoring, we would be. If we had a way to take `vendor/modules.txt` (after go mod vendor) and telling one of the build machines to build vendored archives of the versioned items in the tree, we could perhaps download those, but as far as I know there is no way to *force* that particular mechanism as the archive is not coming from a source, but would be made during the initial buildbot build (until all the archived items are in place, `go mod vendor` would need to be run locally).</div><div><br></div><div>-a</div><div><br></div><div>[1] <a href="https://marc.info/?l=macports-dev&m=170710631300800&w=2">https://marc.info/?l=macports-dev&m=170710631300800&w=2</a></div><div><div><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature">Austin Ziegler • <a href="mailto:halostatue@gmail.com" target="_blank">halostatue@gmail.com</a> • <a href="mailto:austin@halostatue.ca" target="_blank">austin@halostatue.ca</a><br><a href="http://www.halostatue.ca/" target="_blank">http://www.halostatue.ca/</a> • <a href="http://twitter.com/halostatue" target="_blank">http://twitter.com/halostatue</a></div></div></div></div>