So I’ve been on the fence with the vendor
directory.
On one hand, it’s great to have the modules in the project because it speeds up the build and serves as a safe storage.
On the other hand, it does increase the churn in the repository and creates a lot of duplication on disk because many projects often contain the same dependencies.
Since I do like holding on to my dependencies and go mod
works great for me, I’ve decided to try out The Athens. I’s awesome.
§What is it
It is a self-hosted golang module mirror service. Unlike the public proxy.golang.org, it can cache private modules so no more GOPRIVATE
, yay!
Athens offers a selection of storage back ends: local disk, S3, Minio, GCS and the like. One instance can be pointed at another with upstream services. The documentation is very approachable.
§How I run it
KISS, Docker service backed with the disk type storage. Basically like this:
|
|
I’ve exported the GOPROXY=http://localhost:15001
in my Bash profile so tools use it automatically. I have a dedicated git repository where I sync my local modules to a couple of time a day.
Long term, maybe something like the S3 storage would be a better option but I’m not sure how expensive it can get.