Skip to content

Commit 325ea4c

Browse files
committed
add gitlab support as well
1 parent 4126d65 commit 325ea4c

File tree

5 files changed

+89
-10
lines changed

5 files changed

+89
-10
lines changed

app/services/Gitlab.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { Container, Service } from "../Container.js";
2+
import { Gitlab as Gl } from "@gitbeaker/rest";
3+
import config from "@/config/apikeys.json" with { type: "json" };
4+
5+
export class Gitlab extends Service {
6+
name = "Gitlab";
7+
8+
api = new Gl({ token: config.gitlab });
9+
}
10+
11+
export default (container: Container): Service => {
12+
return new Gitlab(container);
13+
};

app/services/discord/modules/webhook-handler.ts

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -187,16 +187,35 @@ export default async (bot: DiscordBot): Promise<void> => {
187187
break;
188188
case "everything":
189189
const msg = ctx.message;
190-
// so far we only have github so...
191-
const [, owner, repo, ref] =
192-
/https?:\/\/github.com\/(?<owner>\S+)\/(?<repo>\S+)\/(?<sha>\S+)/.exec(
193-
msg.embeds[msg.embeds.length - 1].url ?? ""
194-
) || [];
195-
196-
const res = await (
197-
await bot.container.getService("Github")
198-
).octokit.rest.repos.getCommit({ owner, repo, ref });
199-
const files = res.data.files?.flatMap(f => f.filename);
190+
const url = msg.embeds[msg.embeds.length - 1].url;
191+
if (!url) {
192+
await ctx.reply("url not found for refreshing :( ... aborting");
193+
return;
194+
}
195+
196+
let files: string[] | undefined;
197+
198+
// what could go wrong
199+
if (url.startsWith("https://github.com")) {
200+
const [, owner, repo, ref] =
201+
/https?:\/\/github\.com\/(?<owner>\S+)\/(?<repo>\S+)\/(?<sha>\S+)/.exec(
202+
url ?? ""
203+
) || [];
204+
205+
const res = await (
206+
await bot.container.getService("Github")
207+
).octokit.rest.repos.getCommit({ owner, repo, ref });
208+
files = res.data.files?.flatMap(f => f.filename);
209+
} else if (url.startsWith("https://gitlab.com")) {
210+
const [, id, sha] =
211+
/https?:\/\/gitlab\.com\/(?<id>\S+)\/-\/commit\/(?<sha>\S+)/.exec(
212+
url ?? ""
213+
) || [];
214+
const res = await (
215+
await bot.container.getService("Gitlab")
216+
).api.Commits.showDiff(encodeURIComponent(id), sha);
217+
files = res.filter(f => !f.deleted_file).flatMap(f => f.new_path);
218+
}
200219

201220
if (!files || files.length === 0) {
202221
await ctx.reply("no files found for refreshing :( ... aborting");

app/services/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import DiscordBotProvider, { DiscordBot } from "./discord/index.js";
55
import DiscordMetadataProvider, { DiscordMetadata } from "./DiscordMetadata.js";
66
import GameBridgeProvider, { GameBridge } from "./gamebridge/index.js";
77
import GithubProvider, { Github } from "./Github.js";
8+
import GitlabProvider, { Gitlab } from "./Gitlab.js";
89
import IRCProvider, { IRC } from "./IRC.js";
910
import MarkovProvider, { Markov } from "./Markov.js";
1011
import MotdProvider, { Motd } from "./Motd.js";
@@ -22,6 +23,7 @@ export default [
2223
DiscordMetadataProvider,
2324
GameBridgeProvider,
2425
GithubProvider,
26+
GitlabProvider,
2527
IRCProvider,
2628
MarkovProvider,
2729
MotdProvider,
@@ -40,6 +42,7 @@ export {
4042
DiscordMetadata,
4143
GameBridge,
4244
Github,
45+
Gitlab,
4346
IRC,
4447
Markov,
4548
Motd,
@@ -58,6 +61,7 @@ export type ServiceMap = {
5861
DiscordMetadata: DiscordMetadata;
5962
GameBridge: GameBridge;
6063
Github: Github;
64+
Gitlab: Gitlab;
6165
IRC: IRC;
6266
Markov: Markov;
6367
Motd: Motd;

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
"dependencies": {
2323
"@ffmpeg.wasm/core-mt": "^0.13.2",
2424
"@ffmpeg.wasm/main": "^0.13.1",
25+
"@gitbeaker/rest": "^43.8.0",
2526
"@microsoft/signalr": "^8.0.7",
2627
"@napi-rs/canvas": "^0.1.37",
2728
"@octokit/auth-app": "^8.1.1",

yarn.lock

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,33 @@
170170
resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6"
171171
integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==
172172

173+
"@gitbeaker/core@^43.8.0":
174+
version "43.8.0"
175+
resolved "https://registry.yarnpkg.com/@gitbeaker/core/-/core-43.8.0.tgz#b9ff02c9c91296f5aaaa0b9c16c4396453610fca"
176+
integrity sha512-H+LfKuf4dExBinb79c+CXViRBvTVQNf5BYLNSizm2SiqdED5JruhKX88payefleY0szp7G/mySlFSXPyGRH1dQ==
177+
dependencies:
178+
"@gitbeaker/requester-utils" "^43.8.0"
179+
qs "^6.14.0"
180+
xcase "^2.0.1"
181+
182+
"@gitbeaker/requester-utils@^43.8.0":
183+
version "43.8.0"
184+
resolved "https://registry.yarnpkg.com/@gitbeaker/requester-utils/-/requester-utils-43.8.0.tgz#6b9fb0cf93ce20c7a9b453161749c61a704c2849"
185+
integrity sha512-d/SiJdxijc+aH5ZBQOw83XLxNSXqsBZNm5k3nPu1EHxGxK0fajXmxdMl0/vNXbKRggnIquFCxURkrQSEzfjqxQ==
186+
dependencies:
187+
picomatch-browser "^2.2.6"
188+
qs "^6.14.0"
189+
rate-limiter-flexible "^8.0.1"
190+
xcase "^2.0.1"
191+
192+
"@gitbeaker/rest@^43.8.0":
193+
version "43.8.0"
194+
resolved "https://registry.yarnpkg.com/@gitbeaker/rest/-/rest-43.8.0.tgz#e7ed39a2ae0a358f9c91c02aa0f3f946cd7ced5c"
195+
integrity sha512-xxqsNsUXaFang9b2e/NTIgqUeuUlifA2Opy1mOVqTDuJZZNIOTgUNyziwBJoleBhMC0XuvY3JNVMWthufcVjRw==
196+
dependencies:
197+
"@gitbeaker/core" "^43.8.0"
198+
"@gitbeaker/requester-utils" "^43.8.0"
199+
173200
"@graphql-typed-document-node/core@^3.1.1":
174201
version "3.2.0"
175202
resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.2.0.tgz#5f3d96ec6b2354ad6d8a28bf216a1d97b5426861"
@@ -4101,6 +4128,11 @@ picocolors@^1.0.0:
41014128
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
41024129
integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
41034130

4131+
picomatch-browser@^2.2.6:
4132+
version "2.2.6"
4133+
resolved "https://registry.yarnpkg.com/picomatch-browser/-/picomatch-browser-2.2.6.tgz#e0626204575eb49f019f2f2feac24fc3b53e7a8a"
4134+
integrity sha512-0ypsOQt9D4e3hziV8O4elD9uN0z/jtUEfxVRtNaAAtXIyUx9m/SzlO020i8YNL2aL/E6blOvvHQcin6HZlFy/w==
4135+
41044136
picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
41054137
version "2.3.1"
41064138
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
@@ -4423,6 +4455,11 @@ range-parser@^1.2.1:
44234455
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
44244456
integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
44254457

4458+
rate-limiter-flexible@^8.0.1:
4459+
version "8.2.1"
4460+
resolved "https://registry.yarnpkg.com/rate-limiter-flexible/-/rate-limiter-flexible-8.2.1.tgz#206f4af15244b590ca4ee2b5e945ef859bb6b6ba"
4461+
integrity sha512-QreyZSG7jJepD7wbMVG0wvkMx8MZaCKdnpUIffoQ/xavM7PKzpSfzrs6DISVb00LXckV1lQ3NSkc4xL3ZaUVLg==
4462+
44264463
raw-body@^3.0.0:
44274464
version "3.0.0"
44284465
resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-3.0.0.tgz#25b3476f07a51600619dae3fe82ddc28a36e5e0f"
@@ -5578,6 +5615,11 @@ ws@^8.17.0, ws@^8.18.0:
55785615
resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.1.tgz#ea131d3784e1dfdff91adb0a4a116b127515e3cb"
55795616
integrity sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==
55805617

5618+
xcase@^2.0.1:
5619+
version "2.0.1"
5620+
resolved "https://registry.yarnpkg.com/xcase/-/xcase-2.0.1.tgz#c7fa72caa0f440db78fd5673432038ac984450b9"
5621+
integrity sha512-UmFXIPU+9Eg3E9m/728Bii0lAIuoc+6nbrNUKaRPJOFp91ih44qqGlWtxMB6kXFrRD6po+86ksHM5XHCfk6iPw==
5622+
55815623
xtend@^4.0.0:
55825624
version "4.0.2"
55835625
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"

0 commit comments

Comments
 (0)