-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
100 lines (84 loc) · 2.89 KB
/
index.js
File metadata and controls
100 lines (84 loc) · 2.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
const fs = require("fs");
const path = require("path");
const { execSync } = require("child_process");
// Récupérer les chemins depuis les arguments de la ligne de commande
const directories = process.argv.slice(2);
if (directories.length === 0) {
console.error("Veuillez fournir au moins un chemin de projet en argument.");
process.exit(1);
}
let mdReport = "# Rapport des paquets npm à mettre à jour\n\n";
for (const dir of directories) {
const absDir = path.isAbsolute(dir) ? dir : path.resolve(dir);
mdReport += `## Projet : \`${absDir}\`\n\n`;
let outdated;
try {
outdated = execSync("npm outdated --json", {
cwd: absDir,
encoding: "utf-8",
stdio: ["pipe", "pipe", "ignore"],
});
} catch (e) {
outdated = e.stdout;
}
if (!outdated) {
mdReport += "_Aucun paquet à mettre à jour._\n\n";
continue;
}
let outdatedPackages;
try {
outdatedPackages = JSON.parse(outdated);
} catch (e) {
mdReport += "_Erreur lors du parsing de la sortie npm outdated._\n\n";
continue;
}
if (Object.keys(outdatedPackages).length === 0) {
mdReport += "_Tous les paquets sont à jour._\n\n";
continue;
}
mdReport +=
"| Package | Version actuelle | Dernière version | Version voulue |\n";
mdReport +=
"|---------|------------------|------------------|----------------|\n";
for (const [pkg, info] of Object.entries(outdatedPackages)) {
mdReport += `| ${pkg} | ${info.current} | ${info.latest} | ${info.wanted} |\n`;
}
mdReport += "\n";
}
const reportPath = path.join(__dirname, "outdated-report.md");
fs.writeFileSync(reportPath, mdReport, "utf-8");
console.log(`Rapport généré : ${reportPath}`);
// --- Préparation pour l'envoi par mail (à compléter) ---
// Décommentez et complétez les informations ci-dessous pour activer l'envoi d'email
/*
require("dotenv").config();
const nodemailer = require("nodemailer");
// Les informations SMTP sont maintenant chargées depuis le fichier .env
const transporter = nodemailer.createTransport({
host: process.env.SMTP_HOST,
port: parseInt(process.env.SMTP_PORT, 10),
secure: process.env.SMTP_SECURE === "true",
auth: {
user: process.env.SMTP_USER,
pass: process.env.SMTP_PASS,
},
});
const mailOptions = {
from: `"${process.env.MAIL_FROM_NAME}" <${process.env.SMTP_USER}>`,
to: process.env.MAIL_TO, // liste des destinataires, séparés par des virgules
subject: "Rapport npm outdated",
text: "Veuillez trouver en pièce jointe le rapport des paquets à mettre à jour.",
attachments: [
{
filename: "outdated-report.md",
path: reportPath,
},
],
};
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.error("Erreur lors de l'envoi du mail :", error);
}
console.log("Email envoyé :", info.response);
});
*/