Yet another go modules proxy
This project aim at creating a very configurable go module proxy that can work in many environments.
This project can work as:
- A proxy for the standard goproxy online service
- A caching proxy for gomodules
- A single entrypoint for all go modules.
- A configurable proxy (rewrite module name, force VCS, add authentication, ...)
Binaries for multiple platforms are available as download in the releases page. Start the binary with a config file then, enjoy !
This go module follows the goproxy protocol described here: https://golang.org/ref/mod#goproxy-protocol
The configuration file is a Json file. It can be given to the executable with the -config
flag.
General options for the proxy:
defaultRelayProxy
: set the default upstream go module proxy
To allow deep configuration and override of the proxy behaviour, phases represents the main steps done to collect a gomodule.
Receive
: when the request is receivedPrefetch
: just before fetching the contentFetch
: when downloading / getting the content
In each phase one or more plugins can be used, given they do something for that phase.
Note: this is not a real plugin system as you have to declare/register the "plugin" in the source code so that it can be used.
Using the term plugin is a way to say that the phases execution and result can change based on the configuration.
A Default plugin that implement all phases and redirect all requests to upstream goproxy.
A plugin to specify a private plugin. It changes the remote url from default go proxy to a git url to your repository. Authentication can be defined in the plugin config
A plugin to rename / rewrite the module being targeted to another one. This will impact the fetched repository as only the replacement module name will be kept.
A plugin to arbitrary define a custom VCS for a given module or group of module.
This might be usefull in private environnement where the domain used is not where the modules are
hosted. For example, module name would be something like myCompany.com/myGroup/module
and the repository is located at
http://git.private.local/myGroup/module
. This is then transparent for the go client.