Skip to content

Commit bb44467

Browse files
authored
Merge pull request #195 from kubero-dev/fix/m1m1x/gogs-git-url-parsing
Fix/m1m1x/gogs git url parsing
2 parents b388b32 + 0ede928 commit bb44467

File tree

7 files changed

+79
-15
lines changed

7 files changed

+79
-15
lines changed

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"dotenv": "^16.0.1",
2929
"express": "^4.18.1",
3030
"express-session": "^1.17.3",
31+
"git-url-parse": "^13.1.0",
3132
"gitea-js": "^1.2.0",
3233
"kubernetes-client": "^9.0.0",
3334
"lodash.get": "^4.4.2",
@@ -46,6 +47,7 @@
4647
"yaml": "^2.1.1"
4748
},
4849
"devDependencies": {
50+
"@types/git-url-parse": "^9.0.1",
4951
"@types/connect-history-api-fallback": "^1.3.5",
5052
"@types/cookie-session": "^2.0.44",
5153
"@types/cors": "^2.8.12",

src/git/bitbucket.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import debug from 'debug';
22
import * as crypto from "crypto"
33
import { IWebhook, IRepository, IWebhookR, IDeploykeyR} from './types';
44
import { Repo } from './repo';
5+
import gitUrlParse = require("git-url-parse");
56
debug('app:kubero:bitbucket:api')
67

78
//const { Octokit } = require("@octokit/core");
@@ -40,9 +41,9 @@ export class BitbucketApi extends Repo {
4041
}
4142
}
4243

43-
// TODO : Improve matching here
44-
let owner = gitrepo.match(/^git@bitbucket.org:(.*)\/.*$/)?.[1] as string;
45-
let repo = gitrepo.match(/^git@bitbucket.org:.*\/(.*).git$/)?.[1] as string;
44+
let parsed = gitUrlParse(gitrepo)
45+
let repo = parsed.name
46+
let owner = parsed.owner
4647

4748
console.log(owner, repo);
4849
try {

src/git/gitea.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import debug from 'debug';
22
import * as crypto from "crypto"
33
import { IWebhook, IRepository, IWebhookR, IDeploykeyR} from './types';
44
import { Repo } from './repo';
5+
import gitUrlParse = require("git-url-parse");
56
debug('app:kubero:gitea:api')
67

78
//https://www.npmjs.com/package/gitea-js
@@ -31,9 +32,9 @@ export class GiteaApi extends Repo {
3132
}
3233
}
3334

34-
// TODO : Improve matching here
35-
let owner = gitrepo.match(/^git@.*:(.*)\/.*$/)?.[1] as string;
36-
let repo = gitrepo.match(/^git@.*:.*\/(.*)\.git$/)?.[1] as string;
35+
let parsed = gitUrlParse(gitrepo)
36+
let repo = parsed.name
37+
let owner = parsed.owner
3738

3839
let res = await this.gitea.repos.repoGet(owner, repo)
3940
.catch((error: any) => {

src/git/github.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import debug from 'debug';
22
import * as crypto from "crypto"
33
import { IWebhook, IRepository, IWebhookR, IDeploykeyR} from './types';
44
import { Repo } from './repo';
5+
import gitUrlParse = require("git-url-parse");
56
debug('app:kubero:github:api')
67

78
//const { Octokit } = require("@octokit/core");
@@ -30,9 +31,9 @@ export class GithubApi extends Repo {
3031
}
3132
}
3233

33-
// TODO : Improve matching here or use default function in Superclass
34-
let owner = gitrepo.match(/^git@github.com:(.*)\/.*$/)?.[1] as string;
35-
let repo = gitrepo.match(/^git@github.com:.*\/(.*).git$/)?.[1] as string;
34+
let parsed = gitUrlParse(gitrepo)
35+
let repo = parsed.name
36+
let owner = parsed.owner
3637

3738
try {
3839
let res = await this.octokit.request('GET /repos/{owner}/{repo}', {

src/git/gitlab.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { IWebhook, IRepository, IWebhookR, IDeploykeyR} from './types';
55
import { Repo } from './repo';
66
import {Client as GitlabClient} from '@nerdvision/gitlab-js';
77
import {Options} from 'got';
8+
import gitUrlParse = require("git-url-parse");
89

910

1011
export class GitlabApi extends Repo {
@@ -40,9 +41,9 @@ export class GitlabApi extends Repo {
4041
}
4142
}
4243

43-
// TODO : Improve matching here
44-
let owner = gitrepo.match(/^git@.*:(.*)\/.*$/)?.[1] as string;
45-
let repo = gitrepo.match(/^git@.*:.*\/(.*)\.git$/)?.[1] as string;
44+
let parsed = gitUrlParse(gitrepo)
45+
let repo = parsed.name
46+
let owner = parsed.owner
4647

4748
let res: any = await this.gitlab.get(`projects/${owner}%2F${repo}`)
4849
.catch((error: any) => {

src/git/gogs.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import debug from 'debug';
22
import * as crypto from "crypto"
33
import { IWebhook, IRepository, IWebhookR, IDeploykeyR} from './types';
44
import { Repo } from './repo';
5+
import gitUrlParse = require("git-url-parse");
56
debug('app:kubero:gogs:api')
67

78
//https://www.npmjs.com/package/gitea-js
@@ -20,6 +21,8 @@ export class GogsApi extends Repo {
2021
}
2122

2223
protected async getRepository(gitrepo: string): Promise<IRepository> {
24+
const GitUrlParse = require("git-url-parse");
25+
2326
let ret: IRepository = {
2427
status: 500,
2528
statusText: 'error',
@@ -31,9 +34,18 @@ export class GogsApi extends Repo {
3134
}
3235
}
3336

34-
// TODO : Improve matching here
35-
let owner = gitrepo.match(/^git@.*:(.*)\/.*$/)?.[1] as string;
36-
let repo = gitrepo.match(/^git@.*:.*\/(.*)\.git$/)?.[1] as string;
37+
let parsed = gitUrlParse(gitrepo)
38+
let repo = parsed.name
39+
let owner = parsed.owner
40+
41+
if ( owner == undefined ){
42+
debug.log("git owner extraction failed");
43+
throw new Error("git owner extraction failed");
44+
}
45+
if ( repo == undefined ){
46+
debug.log("git owner extraction failed");
47+
throw new Error("git repo extraction failed");
48+
}
3749

3850
let res = await this.gitea.repos.repoGet(owner, repo)
3951
.catch((error: any) => {

yarn.lock

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -946,6 +946,11 @@
946946
"@types/qs" "*"
947947
"@types/serve-static" "*"
948948

949+
"@types/git-url-parse@^9.0.1":
950+
version "9.0.1"
951+
resolved "https://registry.yarnpkg.com/@types/git-url-parse/-/git-url-parse-9.0.1.tgz#1c7cc89527ca8b5afcf260ead3b0e4e373c43938"
952+
integrity sha512-Zf9mY4Mz7N3Nyi341nUkOtgVUQn4j6NS4ndqEha/lOgEbTkHzpD7wZuRagYKzrXNtvawWfsrojoC1nhsQexvNA==
953+
949954
"@types/got@^9.6.9":
950955
version "9.6.12"
951956
resolved "https://registry.yarnpkg.com/@types/got/-/got-9.6.12.tgz#fd42a6e1f5f64cd6bb422279b08c30bb5a15a56f"
@@ -2354,6 +2359,21 @@ getpass@^0.1.1:
23542359
dependencies:
23552360
assert-plus "^1.0.0"
23562361

2362+
git-up@^7.0.0:
2363+
version "7.0.0"
2364+
resolved "https://registry.yarnpkg.com/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467"
2365+
integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==
2366+
dependencies:
2367+
is-ssh "^1.4.0"
2368+
parse-url "^8.1.0"
2369+
2370+
git-url-parse@^13.1.0:
2371+
version "13.1.0"
2372+
resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-13.1.0.tgz#07e136b5baa08d59fabdf0e33170de425adf07b4"
2373+
integrity sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==
2374+
dependencies:
2375+
git-up "^7.0.0"
2376+
23572377
gitea-js@^1.2.0:
23582378
version "1.20.1"
23592379
resolved "https://registry.yarnpkg.com/gitea-js/-/gitea-js-1.20.1.tgz#a382c8c56a869fedb11bc7889a5effea1bbbfede"
@@ -2614,6 +2634,13 @@ is-plain-object@^5.0.0:
26142634
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344"
26152635
integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==
26162636

2637+
is-ssh@^1.4.0:
2638+
version "1.4.0"
2639+
resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2"
2640+
integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==
2641+
dependencies:
2642+
protocols "^2.0.1"
2643+
26172644
is-stream@^2.0.0:
26182645
version "2.0.1"
26192646
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
@@ -3586,6 +3613,20 @@ parse-json@^5.2.0:
35863613
json-parse-even-better-errors "^2.3.0"
35873614
lines-and-columns "^1.1.6"
35883615

3616+
parse-path@^7.0.0:
3617+
version "7.0.0"
3618+
resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.0.0.tgz#605a2d58d0a749c8594405d8cc3a2bf76d16099b"
3619+
integrity sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==
3620+
dependencies:
3621+
protocols "^2.0.0"
3622+
3623+
parse-url@^8.1.0:
3624+
version "8.1.0"
3625+
resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d"
3626+
integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==
3627+
dependencies:
3628+
parse-path "^7.0.0"
3629+
35893630
parseurl@~1.3.3:
35903631
version "1.3.3"
35913632
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
@@ -3715,6 +3756,11 @@ prompts@^2.0.1:
37153756
kleur "^3.0.3"
37163757
sisteransi "^1.0.5"
37173758

3759+
protocols@^2.0.0, protocols@^2.0.1:
3760+
version "2.0.1"
3761+
resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86"
3762+
integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==
3763+
37183764
proxy-addr@~2.0.7:
37193765
version "2.0.7"
37203766
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"

0 commit comments

Comments
 (0)