const fs = require("fs");
const express = require("express");
const app = express();
const { exec } = require("child_process");
const nodeMailer = require("nodemailer");
const contentFile = fs.readFileSync("./service_run/giteaService.conf", "utf8");
let checkStatus = "ready"
// const checkFile = fs.readFileSync("./service_run/checkFile", "utf8");
const PORT = contentFile
.split("\n")
.filter((i) => i.includes("PORT_SERVICE"))[0]
?.split("=")[1]
.trim();
app.use(express.json());
app.post("/git/gitea-webhook", async (req, res) => {
let title = "";
const checkSendMail = contentFile
.split("\n")
.filter((i) => i.includes("SEND_EMAIL"))[0]
?.split("=")[1]
.trim();
const emailAddress = contentFile
.split("\n")
.filter((i) => i.includes("EMAIL_ADDRESS"))[0]
?.split("=")[1]
.trim();
const FE_Path = contentFile
.split("\n")
.filter((i) => i.includes("FE_PROJECT_PATH"))[0]
?.split("=")[1]
.trim();
const giteaEvent = req.headers["x-gitea-event"];
const body = req.body;
//console.log(body)
res
.status(200)
.send({ mess: "The event has been received!", data: req.body });
console.log("CHECK FILE", checkStatus);
if (checkStatus === "busy") {
const transporter = nodeMailer.createTransport({
pool: true,
host: "mail.ipsupply.com.au",
port: 465,
secure: true,
auth: {
user: "admin@apactech.io",
pass: "BGK!dyt6upd2eax1bhz",
},
});
const options = {
from: "admin@apactech.io",
to: emailAddress,
subject: "Git notifications (Fail)",
html:
"
There is an active build process in the " +
FE_Path +
" directory. Please check and push again in a few minutes.
",
};
return transporter.sendMail(options);
} else {
console.log("New event: " + giteaEvent);
// fs.writeFileSync("./service_run/checkFile", "true");
checkStatus="busy"
exec("./service_run/giteaHook.sh", (error, stdout, stderr) => {
let content = stdout !== "" ? stdout : stderr;
if (error) {
console.log("Pull failed. Please check");
console.log(`Error executing command: ${error}`);
title += "New Git envent: " + giteaEvent;
} else {
console.log(stdout);
if (
stderr.includes("Error") ||
stderr.includes("failed") ||
stdout.includes("Error") ||
stdout.includes("failed")
) {
title += "New Git envent: " + giteaEvent;
} else {
title += "New Git envent: " + giteaEvent + "(success)";
}
setTimeout(() => {
checkStatus="ready"
// fs.writeFileSync("./service_run/checkFile", "false");
}, 10000);
}
if (checkSendMail === "True") {
const transporter = nodeMailer.createTransport({
pool: true,
host: "mail.ipsupply.com.au",
port: 465,
secure: true,
auth: {
user: "admin@apactech.io",
pass: "BGK!dyt6upd2eax1bhz",
},
});
const options = {
from: "admin@apactech.io",
to: emailAddress,
subject: title,
html:
"*** " +
giteaEvent +
" event ***
Committer: " +
req.body.commits[0]?.committer.name +
"
Message: " +
req.body.commits[0]?.message +
"
Branch: " +
req.body.ref +
"
Link: " +
req.body.commits[0]?.url +
"Process output:
",
};
return transporter.sendMail(options);
}
});
}
});
app.listen(PORT, () => {
console.log("Service is running on port ", PORT);
});