Open source implementation of Go proxy with monorepo support (more projects with go.mod and different versions in the same GIT repository).
This is an extension of basic Go proxy functionality.
| Address | Description |
|---|---|
/versions.json |
Latest versions of modules. |
/dl/{name}/{version}/{arch} |
Downloads endpoint. |
/dl/versions.json |
Downloads latest versions. |
Note: Downloads prefix (dl) is configurable.
| JSON path | Description | Example |
|---|---|---|
/addr |
Service HTTP listen address. | ":80" |
/storage |
Path to storage. | "./cache" |
/log_level |
Log level. | "trace" |
/default_go_proxy_url |
URL of default Go proxy for fallback. | "http://proxy.golang.org" |
/downloads_prefix |
Prefix for downloads path. | "dl" |
/modules |
Modules configurations. | |
/downloads |
Downloads configurations. | |
/sources |
Sources configurations. |
Available log levels are panic, fatal, error, warn, info, debug, trace or an empty string for default log level.
See local configuration file for more details.
| JSON path | Description | Example |
|---|---|---|
/name |
Name of module without version suffix. | "example.com/go/lib" |
/source |
Source name from list of sources or null. |
"gitlab-local" |
/source_params |
Source parameters object (depends on source type). |
The fallback to default_go_proxy_url can be disabled with the parameter /source set to null.
It results in 404 for a given module instead of the fallback to default_go_proxy_url, which could result in unexpected states confusing Go SDK.
As every request to get a module from Go SDK is a cascade of requests - an attempt to download "example.com/go/lib" is in fact done by a cascade of requests:
"example.com/go/lib""example.com/go""example.com"
If the fallback for "example.com/go" and "example.com" wasn't disabled, these requests would be redirected to default_go_proxy_url and have finished with an error.
| JSON path | Description | Example |
|---|---|---|
/mode |
Mode (only generic-packages is allowed). |
"generic-packages" |
/source |
Source name from list of sources. | "gitlab-local" |
/source_params |
Source parameters object (depends on source type). |
All configured downloads are available on path: /dl/<name>/<version> or /dl/<name>/<version>/<arch>
Version is <major>.<minor>.<patch> or latest.
| JSON path | Description | Example |
|---|---|---|
/name |
Name of the source (unique at source list). | "gitlab-local" |
/type |
Source type from supported source types. | "gitlab" |
Source configuration (at /sources):
| JSON path | Description | Example |
|---|---|---|
/url |
URL of Gitlab. | "https://gitlab.example.com" |
/auth |
Private token to access Gitlab. | "1111111111" |
/allow_insecure_tls |
Do not fail on invalid certificate. | true |
Source parameters configuration (at /modules):
| JSON path | Description | Example |
|---|---|---|
/project_id |
Gitlab project ID. | 42 |
/dir |
Directory with project relative to git root. | "lib" |
/tag_prefix |
Tag prefix (e.g. lib- for tag lib-v1.0.0). |
"lib-" |
/version_dir |
Each version at separated directory, see below. | false |
If /version_dir is true, major versions 2 and higher are expected at subdirectories, e.g.:
| Versions | Directory |
|---|---|
0.x.x and 1.x.x |
/project/ |
2.x.x |
/project/v2 |
3.x.x |
/project/v3 |
Source downloads parameters configuration (at /downloads):
| JSON path | Description | Example |
|---|---|---|
/project_id |
Gitlab project ID. | 42 |
/package_name |
Name of package. | "lib" |
/disable_architecture |
Remove <arch> parameter from URL. |
false |
/file_extension |
File extension at package registry (optional). | ".yaml" |
- Root of file storage is configurable by
/storageproperty in the config. - Each module has its own directory (without version suffix
v2). - Each version has its own files with a version prefix (e.g.
v1.0.0).- File
.lockcontains the date and time of lock. This file is present only if a new version is being processed. - File
.tmpcontains temporary data during version processing. - File
.infois an info file (see Go proxy specification). - File
.modis Go modules file. - File
.zipis zip archive with a whole module at specified version.
- File
You must build this image from the root of the repository.
docker build -t goproxy .To set version:
docker build --build-arg GOPROXY_VERSION=2.0.0 -t goproxy .