Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(terraform): support github repo source url with underscores #9661

Merged
merged 15 commits into from Apr 23, 2021
Merged
64 changes: 64 additions & 0 deletions lib/manager/terraform/modules.spec.ts
@@ -0,0 +1,64 @@
import { getName } from '../../../test/util';
import { gitTagsRefMatchRegex, githubRefMatchRegex } from './modules';

describe(getName(__filename), () => {
describe('githubRefMatchRegex', () => {
it('should split project and tag from source', () => {
const { project, tag } = githubRefMatchRegex.exec(
'github.com/hashicorp/example?ref=v1.0.0'
).groups;
expect(project).toBe('hashicorp/example');
expect(tag).toBe('v1.0.0');
});

it('should parse alpha-numeric characters as well as dots, underscores, and dashes in repo names', () => {
const { project } = githubRefMatchRegex.exec(
'github.com/hashicorp/example.repo-123?ref=v1.0.0'
).groups;
expect(project).toBe('hashicorp/example.repo-123');
});
});
describe('gitTagsRefMatchRegex', () => {
it('should split project and tag from source', () => {
const http = gitTagsRefMatchRegex.exec(
'http://github.com/hashicorp/example?ref=v1.0.0'
).groups;
const https = gitTagsRefMatchRegex.exec(
'https://github.com/hashicorp/example?ref=v1.0.0'
).groups;
const ssh = gitTagsRefMatchRegex.exec(
'ssh://github.com/hashicorp/example?ref=v1.0.0'
).groups;

expect(http.project).toBe('hashicorp/example');
expect(http.tag).toBe('v1.0.0');

expect(https.project).toBe('hashicorp/example');
expect(https.tag).toBe('v1.0.0');

expect(ssh.project).toBe('hashicorp/example');
expect(ssh.tag).toBe('v1.0.0');
});

it('should parse alpha-numeric characters as well as dots, underscores, and dashes in repo names', () => {
const http = gitTagsRefMatchRegex.exec(
'http://github.com/hashicorp/example.repo-123?ref=v1.0.0'
).groups;
const https = gitTagsRefMatchRegex.exec(
'https://github.com/hashicorp/example.repo-123?ref=v1.0.0'
).groups;
const ssh = gitTagsRefMatchRegex.exec(
'ssh://github.com/hashicorp/example.repo-123?ref=v1.0.0'
).groups;

expect(http.project).toBe('hashicorp/example.repo-123');
expect(http.tag).toBe('v1.0.0');

expect(https.project).toBe('hashicorp/example.repo-123');
expect(https.tag).toBe('v1.0.0');

expect(ssh.project).toBe('hashicorp/example.repo-123');
expect(ssh.tag).toBe('v1.0.0');
});
});
});
4 changes: 2 additions & 2 deletions lib/manager/terraform/modules.ts
Expand Up @@ -7,8 +7,8 @@ import type { PackageDependency } from '../types';
import { extractTerraformProvider } from './providers';
import { ExtractionResult, TerraformDependencyTypes } from './util';

const githubRefMatchRegex = /github.com([/:])(?<project>[^/]+\/[a-z0-9-.]+).*\?ref=(?<tag>.*)$/;
const gitTagsRefMatchRegex = /(?:git::)?(?<url>(?:http|https|ssh):\/\/(?:.*@)?(?<path>.*.*\/(?<project>.*\/.*)))\?ref=(?<tag>.*)$/;
export const githubRefMatchRegex = /github\.com([/:])(?<project>[^/]+\/[a-z0-9-_.]+).*\?ref=(?<tag>.*)$/i;
export const gitTagsRefMatchRegex = /(?:git::)?(?<url>(?:http|https|ssh):\/\/(?:.*@)?(?<path>.*.*\/(?<project>.*\/.*)))\?ref=(?<tag>.*)$/;
const hostnameMatchRegex = /^(?<hostname>([\w|\d]+\.)+[\w|\d]+)/;

export function extractTerraformModule(
Expand Down
64 changes: 64 additions & 0 deletions lib/manager/terragrunt/modules.spec.ts
@@ -0,0 +1,64 @@
import { getName } from '../../../test/util';
import { gitTagsRefMatchRegex, githubRefMatchRegex } from './modules';

describe(getName(__filename), () => {
describe('githubRefMatchRegex', () => {
it('should split project and tag from source', () => {
const { project, tag } = githubRefMatchRegex.exec(
'github.com/hashicorp/example?ref=v1.0.0'
).groups;
expect(project).toBe('hashicorp/example');
expect(tag).toBe('v1.0.0');
});

it('should parse alpha-numeric characters as well as dots, underscores, and dashes in repo names', () => {
const { project } = githubRefMatchRegex.exec(
'github.com/hashicorp/example.repo-123?ref=v1.0.0'
).groups;
expect(project).toBe('hashicorp/example.repo-123');
});
});
describe('gitTagsRefMatchRegex', () => {
it('should split project and tag from source', () => {
const http = gitTagsRefMatchRegex.exec(
'http://github.com/hashicorp/example?ref=v1.0.0'
).groups;
const https = gitTagsRefMatchRegex.exec(
'https://github.com/hashicorp/example?ref=v1.0.0'
).groups;
const ssh = gitTagsRefMatchRegex.exec(
'ssh://github.com/hashicorp/example?ref=v1.0.0'
).groups;

expect(http.project).toBe('hashicorp/example');
expect(http.tag).toBe('v1.0.0');

expect(https.project).toBe('hashicorp/example');
expect(https.tag).toBe('v1.0.0');

expect(ssh.project).toBe('hashicorp/example');
expect(ssh.tag).toBe('v1.0.0');
});

it('should parse alpha-numeric characters as well as dots, underscores, and dashes in repo names', () => {
const http = gitTagsRefMatchRegex.exec(
'http://github.com/hashicorp/example.repo-123?ref=v1.0.0'
).groups;
const https = gitTagsRefMatchRegex.exec(
'https://github.com/hashicorp/example.repo-123?ref=v1.0.0'
).groups;
const ssh = gitTagsRefMatchRegex.exec(
'ssh://github.com/hashicorp/example.repo-123?ref=v1.0.0'
).groups;

expect(http.project).toBe('hashicorp/example.repo-123');
expect(http.tag).toBe('v1.0.0');

expect(https.project).toBe('hashicorp/example.repo-123');
expect(https.tag).toBe('v1.0.0');

expect(ssh.project).toBe('hashicorp/example.repo-123');
expect(ssh.tag).toBe('v1.0.0');
});
});
});
4 changes: 2 additions & 2 deletions lib/manager/terragrunt/modules.ts
Expand Up @@ -7,8 +7,8 @@ import type { PackageDependency } from '../types';
import { extractTerragruntProvider } from './providers';
import { ExtractionResult, TerragruntDependencyTypes } from './util';

const githubRefMatchRegex = /github.com([/:])(?<project>[^/]+\/[a-z0-9-.]+).*\?ref=(?<tag>.*)$/;
const gitTagsRefMatchRegex = /(?:git::)?(?<url>(?:http|https|ssh):\/\/(?:.*@)?(?<path>.*.*\/(?<project>.*\/.*)))\?ref=(?<tag>.*)$/;
export const githubRefMatchRegex = /github\.com([/:])(?<project>[^/]+\/[a-z0-9-_.]+).*\?ref=(?<tag>.*)$/i;
export const gitTagsRefMatchRegex = /(?:git::)?(?<url>(?:http|https|ssh):\/\/(?:.*@)?(?<path>.*.*\/(?<project>.*\/.*)))\?ref=(?<tag>.*)$/;
const hostnameMatchRegex = /^(?<hostname>([\w|\d]+\.)+[\w|\d]+)/;

export function extractTerragruntModule(
Expand Down