Skip to content

Commit

Permalink
feat(go)!: default GOPROXY (#20081)
Browse files Browse the repository at this point in the history
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`.
  • Loading branch information
rarkins authored Jan 29, 2023
1 parent c4bfe55 commit 865316a
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 23 deletions.
17 changes: 1 addition & 16 deletions lib/modules/datasource/go/index.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down
4 changes: 1 addition & 3 deletions lib/modules/datasource/go/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

/**
Expand Down
5 changes: 5 additions & 0 deletions lib/modules/datasource/go/readme.md
Original file line number Diff line number Diff line change
@@ -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`.
26 changes: 24 additions & 2 deletions lib/modules/datasource/go/releases-goproxy.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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/*';
Expand All @@ -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')
Expand Down
6 changes: 4 additions & 2 deletions lib/modules/datasource/go/releases-goproxy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand Down

0 comments on commit 865316a

Please sign in to comment.