Skip to content
Snippets Groups Projects
Unverified Commit 1da46b06 authored by eSamS's avatar eSamS Committed by GitHub
Browse files

fix(go): allow go modules in gitlab subgroups (#14831)

parent 31f539b9
No related branches found
No related tags found
No related merge requests found
<html>
<head>
<meta name="go-import" content="my.custom.domain/golang/subgroup/myrepo git https://my.custom.domain/golang/subgroup/myrepo.git" />
<meta name="go-source"
content="my.custom.domain/golang/subgroup/myrepo https://my.custom.domain/golang/subgroup/myrepo https://my.custom.domain/golang/subgroup/myrepo/-/tree/master{/dir} https://my.custom.domain/golang/subgroup/myrepo/-/blob/master{/dir}/{file}#L{line}" />
</head>
<body>go get https://my.custom.domain/golang/subgroup/myrepo</body>
</html>
...@@ -201,6 +201,60 @@ describe('modules/datasource/go/base', () => { ...@@ -201,6 +201,60 @@ describe('modules/datasource/go/base', () => {
}); });
}); });
it('supports GitLab EE deps in subgroup', async () => {
hostRules.find.mockReturnValue({ token: 'some-token' });
httpMock
.scope('https://my.custom.domain')
.get('/golang/subgroup/myrepo?go-get=1')
.reply(200, loadFixture('go-get-gitlab-ee-subgroup.html'));
const res = await BaseGoDatasource.getDatasource(
'my.custom.domain/golang/subgroup/myrepo'
);
expect(res).toEqual({
datasource: GitlabTagsDatasource.id,
packageName: 'golang/subgroup/myrepo',
registryUrl: 'https://my.custom.domain',
});
});
it('supports GitLab EE deps in subgroup with version', async () => {
hostRules.find.mockReturnValue({ token: 'some-token' });
httpMock
.scope('https://my.custom.domain')
.get('/golang/subgroup/myrepo/v2?go-get=1')
.reply(200, loadFixture('go-get-gitlab-ee-subgroup.html'));
const res = await BaseGoDatasource.getDatasource(
'my.custom.domain/golang/subgroup/myrepo/v2'
);
expect(res).toEqual({
datasource: GitlabTagsDatasource.id,
packageName: 'golang/subgroup/myrepo',
registryUrl: 'https://my.custom.domain',
});
});
it('supports GitLab EE monorepo deps in subgroup', async () => {
hostRules.find.mockReturnValue({ token: 'some-token' });
httpMock
.scope('https://my.custom.domain')
.get('/golang/subgroup/myrepo/monorepo?go-get=1')
.reply(200, loadFixture('go-get-gitlab-ee-subgroup.html'));
const res = await BaseGoDatasource.getDatasource(
'my.custom.domain/golang/subgroup/myrepo/monorepo'
);
expect(res).toEqual({
datasource: GitlabTagsDatasource.id,
packageName: 'golang/subgroup/myrepo',
registryUrl: 'https://my.custom.domain',
});
});
it('handles fyne.io', async () => { it('handles fyne.io', async () => {
const meta = const meta =
'<meta name="go-import" content="fyne.io/fyne git https://github.com/fyne-io/fyne">'; '<meta name="go-import" content="fyne.io/fyne git https://github.com/fyne-io/fyne">';
......
...@@ -4,7 +4,7 @@ import { logger } from '../../../logger'; ...@@ -4,7 +4,7 @@ import { logger } from '../../../logger';
import * as hostRules from '../../../util/host-rules'; import * as hostRules from '../../../util/host-rules';
import { Http } from '../../../util/http'; import { Http } from '../../../util/http';
import { regEx } from '../../../util/regex'; import { regEx } from '../../../util/regex';
import { trimTrailingSlash } from '../../../util/url'; import { trimLeadingSlash, trimTrailingSlash } from '../../../util/url';
import { BitBucketTagsDatasource } from '../bitbucket-tags'; import { BitBucketTagsDatasource } from '../bitbucket-tags';
import { GithubTagsDatasource } from '../github-tags'; import { GithubTagsDatasource } from '../github-tags';
import { GitlabTagsDatasource } from '../gitlab-tags'; import { GitlabTagsDatasource } from '../gitlab-tags';
...@@ -123,9 +123,7 @@ export class BaseGoDatasource { ...@@ -123,9 +123,7 @@ export class BaseGoDatasource {
// get server base url from import url // get server base url from import url
const parsedUrl = URL.parse(goSourceUrl); const parsedUrl = URL.parse(goSourceUrl);
// split the go module from the URL: host/go/module -> go/module const packageName = trimLeadingSlash(parsedUrl.pathname);
const split = goModule.split('/');
const packageName = split[1] + '/' + split[2];
const registryUrl = `${parsedUrl.protocol}//${parsedUrl.host}`; const registryUrl = `${parsedUrl.protocol}//${parsedUrl.host}`;
......
...@@ -26,6 +26,10 @@ export function trimTrailingSlash(url: string): string { ...@@ -26,6 +26,10 @@ export function trimTrailingSlash(url: string): string {
return url.replace(regEx(/\/+$/), ''); return url.replace(regEx(/\/+$/), '');
} }
export function trimLeadingSlash(path: string): string {
return path.replace(/^\//, '');
}
export function resolveBaseUrl(baseUrl: string, input: string | URL): string { export function resolveBaseUrl(baseUrl: string, input: string | URL): string {
const inputString = input.toString(); const inputString = input.toString();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment