ok("Pflicht-File vorhanden: $f"); } else { $r->fail("Pflicht-File fehlt: $f"); } } // CHANGELOG ab Version > 1.0.0 if (!empty($m['version']) && version_compare($m['version'], '1.0.0', '>')) { if (file_exists("$dir/CHANGELOG.md")) { $r->ok("CHANGELOG.md vorhanden"); } else { $r->warn("CHANGELOG.md fehlt (Pflicht ab Modul-Version > 1.0.0)"); } } // Entry-HTML if (!empty($m['entryHtml'])) { $entry = $m['entryHtml']; if (file_exists("$dir/$entry")) { $r->ok("entryHtml existiert: $entry"); } else { $r->fail("entryHtml referenziert, aber Datei fehlt: $entry"); } } // Card-Bild if (!empty($m['cardImage'])) { if (file_exists("$dir/{$m['cardImage']}")) { $r->ok("cardImage existiert: {$m['cardImage']}"); } else { $r->fail("cardImage referenziert, aber Datei fehlt: {$m['cardImage']}"); } } // Screenshots if (!empty($m['screenshots']) && is_array($m['screenshots'])) { foreach ($m['screenshots'] as $shot) { if (file_exists("$dir/$shot")) { $r->ok("screenshot existiert: $shot"); } else { $r->fail("screenshot referenziert, aber Datei fehlt: $shot"); } } } // Verbotene Files $forbidden = ['.env.local', 'node_modules', '.git']; foreach ($forbidden as $f) { if (file_exists("$dir/$f")) { $r->fail("Verbotenes File/Verzeichnis im Lieferpaket: $f"); } } // Großdateien (>50 MB) $bigFiles = []; $rii = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS)); foreach ($rii as $file) { if ($file->isFile() && $file->getSize() > 50 * 1024 * 1024) { $bigFiles[] = sprintf("%s (%.1f MB)", str_replace($dir . DIRECTORY_SEPARATOR, '', $file->getPathname()), $file->getSize() / 1024 / 1024); } } if ($bigFiles) { $r->warn("Großdateien > 50 MB gefunden (Ausnahme bei Atlas beantragen)", $bigFiles); } else { $r->ok("Keine Großdateien über 50 MB"); } }