import type { ServiceMethodFactory } from "@ethicdevs/react-monolith";
import { GitServer } from "@ethicdevs/fastify-git-server";
import { Env } from "../../env";
import { GitServerServiceDeps } from "./types";
import { getEnv } from "../../utils/server";
const makeOnPushEvent: ServiceMethodFactory<
GitServerServiceDeps,
[GitServer.Event],
void
> = ({ request }) => {
const env = getEnv();
return ({ data, message }) => {
message.write("\n");
if (data.packType === GitServer.PackType.RECEIVE) {
console.log("receive-pack");
const [orgSlug, repoSlug] = data.repoSlug.split("/");
request.prisma.repository
.findFirst({
where: {
slug: repoSlug,
organization: {
slug: orgSlug,
},
},
})
.then(async (repo) => {
if (repo == null) return Promise.resolve(null);
const updatedRepo = await request.prisma.repository.update({
where: {
id: repo.id,
},
data: {
lastPushedAt: new Date(Date.now()),
},
});
return updatedRepo;
});
const baseUrl =
env === "development"
? `${Env.DEPLOYMENT_SCHEME}://${Env.DEPLOYMENT_DOMAIN}:${Env.PORT}/${orgSlug}/${repoSlug}`
: `${Env.DEPLOYMENT_SCHEME}://${Env.DEPLOYMENT_DOMAIN}/${orgSlug}/${repoSlug}`;
if (data.payload != null) {
message.write("🖖 See the details of your push at:\n");
if (data.payload.refType === "head") {
message.write(`🧲 ${baseUrl}/${data.payload.refName}/tree/\n`);
} else if (data.payload.refType === "tag") {
message.write(`➡️ ${baseUrl}/tags/${data.payload.refName}\n`);
}
}
} else if (data.packType === GitServer.PackType.UPLOAD) {
console.log("upload-pack");
message.write(`🖖 Welcome at GitFOSS ${data.username}!\n`);
}
message.write("\n");
message.accept();
};
};
export default makeOnPushEvent;