Go Repositories

Available in Nexus Repository OSS and Nexus Repository Pro

Introduction

The Go programming language introduced Go modules from version 1.11 and 1.12 which introduced a dependency management system for the language built into the command line.

Nexus Repository Manager OSS and Nexus Repository Manager Pro support the Go repository format for proxy and group repositories. This allows the repository manager to take advantage of the packages in public Go repositories, without incurring repeated downloads of packages, and private Go repositories and combine them into a single endpoint.

This format is disabled by default in Professional HA-C environments.


The Go programming language natively uses the underlying version control system for fetching dependencies, for example Github.com, whereby the Go command line will use git to perform a full clone of all required dependencies. The Go community realised that this has a number of negative impacts for any typical CI process. Cloning repositories can be a time consuming process. Additionally, fetching sources from any number of version control systems such as Github excludes the ability of a proxying mechanism such as that provided by Nexus Repository Manager. To solve this problem Go introduced the GOPROXY environment variable.

GOPROXY

With the introduction of Go modules, the community also introduced an environment variable $GOPROXY and, when set, all modules are fetched using a Download API using the base url as the proxying endpoint. The Nexus Repository Manager requires the setting of the $GOPROXY environment variable pointing to a Go repository.

Proxying Go Repositories

You can set up a Go proxy repository to access a remote repository location.

At the time of this writing, it must be noted that there is currently no official central repository for Go. It is the client responsibility to choose a repository to proxy, be that public or locally hosted setup, such as using an Athens server.


To proxy a Go repository, you simply create a new go (proxy) as documented in Repository Management.

Minimal configuration steps are:

  • Define Name, e.g. go-proxy
  • Define URL for Remote storage, e.g. http://mylocalathensserver/
  • Pick a Blob store for Storage

Grouping Go Repositories

A repository group is the recommended way to expose all your Go repositories. A repository group allows you to expose the aggregated content of multiple Go repositories with one URL; it is this url that you should set the $GOPROXY environment variable url to.

To create a Go group repository, create a new repository using the recipe go (group) as documented in Repository Management.

Minimal configuration steps are:

  • Define Name

  • Select Blob store for Storage

  • Add Go repositories to the Members list in the desired order

Go configuration examples

If you need to access dependencies from authenticated sources, you'll need to run Athens internally; this locally hosted server is able to be configured with authentication credentials to access private repositories. You may still decide to proxy an external server to avoid unnecessary duplication of caching and therefore storage space.

The following diagram depicts an example set up: