feat(go)!: default GOPROXY (#20081)

Set default GOPROXY value to match `go`'s own default.

Closes #20040

BREAKING CHANGE: Renovate will now use go's default `GOPROXY` settings. To avoid using the public proxy, configure `GOPROXY=direct`.
This commit is contained in:
Rhys Arkins 2023-01-29 07:11:52 +01:00
parent d28763fa01
commit d92e19437a
No known key found for this signature in database
GPG key ID: 4B50341A77CC799B
5 changed files with 35 additions and 23 deletions

View file

@ -53,25 +53,10 @@ describe('modules/datasource/go/index', () => {
delete process.env.GOPROXY;
});
it('fetches release info directly from VCS', async () => {
const expected = { releases: [{ version: '0.0.1' }] };
getReleasesProxyMock.mockResolvedValue(null);
getReleasesDirectMock.mockResolvedValue(expected);
const res = await datasource.getReleases({
packageName: 'golang.org/foo/bar',
});
expect(res).toBe(expected);
expect(getReleasesProxyMock).not.toHaveBeenCalled();
expect(getReleasesDirectMock).toHaveBeenCalled();
});
it('supports GOPROXY', async () => {
it('fetches releases', async () => {
const expected = { releases: [{ version: '0.0.1' }] };
getReleasesProxyMock.mockResolvedValue(expected);
getReleasesDirectMock.mockResolvedValue(null);
process.env.GOPROXY = 'https://proxy.golang.org,direct';
const res = await datasource.getReleases({
packageName: 'golang.org/foo/bar',

View file

@ -36,9 +36,7 @@ export class GoDatasource extends Datasource {
key: ({ packageName }: Partial<DigestConfig>) => `${packageName}-digest`,
})
getReleases(config: GetReleasesConfig): Promise<ReleaseResult | null> {
return process.env.GOPROXY
? this.goproxy.getReleases(config)
: this.direct.getReleases(config);
return this.goproxy.getReleases(config);
}
/**

View file

@ -0,0 +1,5 @@
This datasource will default to using the `GOPROXY` settings `https://proxy.golang.org,direct` if there is no value defined in environment variables.
To override this default and use a different proxy, simply configure `GOPROXY` to an alternative setting in env.
To override this default and stop using any proxy at all, set `GOPROXY` to the value `direct`.

View file

@ -285,6 +285,30 @@ describe('modules/datasource/go/releases-goproxy', () => {
delete process.env.GOINSECURE;
});
it('handles direct', async () => {
process.env.GOPROXY = 'direct';
githubGetTags.mockResolvedValueOnce({
releases: [
{ gitRef: 'v1.0.0', version: 'v1.0.0' },
{ gitRef: 'v1.0.1', version: 'v1.0.1' },
],
});
githubGetReleases.mockResolvedValueOnce({ releases: [] });
const res = await datasource.getReleases({
packageName: 'github.com/google/btree',
});
expect(res).toEqual({
releases: [
{ gitRef: 'v1.0.0', version: 'v1.0.0' },
{ gitRef: 'v1.0.1', version: 'v1.0.1' },
],
sourceUrl: 'https://github.com/google/btree',
});
});
it('skips GONOPROXY and GOPRIVATE packages', async () => {
process.env.GOPROXY = baseUrl;
process.env.GOPRIVATE = 'github.com/google/*';
@ -311,8 +335,6 @@ describe('modules/datasource/go/releases-goproxy', () => {
});
it('fetches release data from goproxy', async () => {
process.env.GOPROXY = baseUrl;
httpMock
.scope(`${baseUrl}/github.com/google/btree`)
.get('/@v/list')

View file

@ -32,8 +32,10 @@ export class GoProxyDatasource extends Datasource {
async getReleases(config: GetReleasesConfig): Promise<ReleaseResult | null> {
const { packageName } = config;
logger.trace(`goproxy.getReleases(${packageName})`);
const goproxy = process.env.GOPROXY;
const goproxy = process.env.GOPROXY ?? 'https://proxy.golang.org,direct';
if (goproxy === 'direct') {
return this.direct.getReleases(config);
}
const proxyList = this.parseGoproxy(goproxy);
const noproxy = GoProxyDatasource.parseNoproxy();