Add comprehensive thumbnail validation

This commit is contained in:
2026-04-17 03:48:00 +10:00
parent 88026179b6
commit 4c1e2c7e84

View File

@@ -223,39 +223,25 @@ for (const file of changedFiles) {
} }
} }
// Check homepage URL if provided (optional)
if (plugin.homepage) {
try {
new URL(plugin.homepage);
if (plugin.homepage.endsWith('.git')) {
errors.push(`${file}: Homepage URL should not end with .git: ${plugin.homepage}`);
}
} catch {
errors.push(`${file}: Invalid homepage URL: ${plugin.homepage}`);
}
}
// Check downloadUrl if provided (optional)
if (plugin.downloadUrl) {
try {
new URL(plugin.downloadUrl);
if (plugin.downloadUrl.endsWith('.git')) {
errors.push(`${file}: Download URL should not end with .git: ${plugin.downloadUrl}`);
}
} catch {
errors.push(`${file}: Invalid download URL: ${plugin.downloadUrl}`);
}
}
// Check thumbnail if provided (optional) // Check thumbnail if provided (optional)
if (plugin.thumbnail) { if (plugin.thumbnail) {
try { try {
new URL(plugin.thumbnail); new URL(plugin.thumbnail);
if (plugin.thumbnail.endsWith('.git')) { // Thumbnail must be in the plugin repository
errors.push(`${file}: Thumbnail URL should not end with .git: ${plugin.thumbnail}`); const repoBase = plugin.repository;
if (!plugin.thumbnail.startsWith(repoBase)) {
errors.push(`${file}: Thumbnail must be hosted in your plugin repository: ${plugin.thumbnail}`);
}
// Must be named thumbnail.png, thumbnail.jpg, or thumbnail.gif
if (!/\/thumbnail\.(png|jpg|gif)$/i.test(plugin.thumbnail)) {
errors.push(`${file}: Thumbnail must be named thumbnail.png, thumbnail.jpg, or thumbnail.gif`);
}
// Must use raw URL format
if (!plugin.thumbnail.includes('/raw/branch/')) {
errors.push(`${file}: Thumbnail must use raw URL format: {repo}/raw/branch/main/thumbnail.png`);
} }
// Validate thumbnail meets requirements // Validate thumbnail meets requirements