feat: UpdateAgent Selbstaktualisierung & kopflose Installation, .NET 10 Migration, Backend- & SDK-Fixes
- .NET 10 Migration: Alle .NET-Projekte auf net10.0 umgestellt (#459) - Client-SDK: ResolveAgentPath bereinigt und DLL-Pruefung ergaenzt (#458) - Packager: Commit-Ermittlung aus publishDir / Assembly InformationalVersion (#456) - BuildInfo.targets: ExitCode-Abfang und Regex-Validierung gegen Git-Fehlertexte (#363) - UpdateService: Re-Publish erhaelt bestehende Manifeste und Werte (#457) - Bugtracker API: on_roadmap-Filter in manage?action=list durchgereicht (#349) - Watchdog API: project_slug-Filter in GET /status ergaenzt (#420) - UpdateService API: no_release_for_platform mit verfuegbaren Plattformen (#421) - Bugtracker Core: Fehler-Normalisierung gegen zersplitterte error_hashes (#419) - UpdateAgent: Kopfloser Installationsmodus via --answers (#89) - Installer & Agent: Automatische Selbstaktualisierung beim Start - Tooling: AGENTS.md, CLAUDE.md und Standalone-CLI scripts/dc.py hinzugefuegt
This commit is contained in:
@@ -505,6 +505,10 @@ function collectFilters(?string $boundProject, ?string $homeProject = null): arr
|
||||
$filters['unclaimed_only'] = filter_var(Http::input('unclaimed_only'), FILTER_VALIDATE_BOOLEAN);
|
||||
}
|
||||
|
||||
if (Http::input('on_roadmap') !== null && Http::input('on_roadmap') !== '') {
|
||||
$filters['on_roadmap'] = filter_var(Http::input('on_roadmap'), FILTER_VALIDATE_BOOLEAN);
|
||||
}
|
||||
|
||||
// Ein projektgebundenes Token kann den Projektfilter nicht umgehen.
|
||||
if ($boundProject !== null) {
|
||||
$filters['project_slug'] = $boundProject;
|
||||
|
||||
@@ -88,13 +88,25 @@ switch ($action) {
|
||||
Http::fail(400, 'missing_product', 'Der Parameter "product" wird benoetigt.');
|
||||
}
|
||||
|
||||
$release = $manager->latestRelease(
|
||||
$product,
|
||||
Http::str('channel') ?? 'prod',
|
||||
Http::str('platform') ?? Http::str('rid')
|
||||
);
|
||||
$platform = Http::str('platform') ?? Http::str('rid');
|
||||
$channel = Http::str('channel') ?? 'prod';
|
||||
|
||||
$release = $manager->latestRelease($product, $channel, $platform);
|
||||
if ($release === null) {
|
||||
Http::fail(404, 'no_release', sprintf('Fuer "%s" ist kein Release hinterlegt.', $product));
|
||||
$available = $manager->getAvailablePlatforms($product, $channel);
|
||||
if (!empty($available)) {
|
||||
Http::fail(404, 'no_release_for_platform', sprintf(
|
||||
'Fuer "%s" (%s) ist kein Release fuer die Plattform "%s" hinterlegt. Verfuegbare Plattformen: %s.',
|
||||
$product,
|
||||
$channel,
|
||||
$platform ?? 'any',
|
||||
implode(', ', $available)
|
||||
), null, [
|
||||
'requested_platform' => $platform ?? 'any',
|
||||
'available_platforms' => $available,
|
||||
]);
|
||||
}
|
||||
Http::fail(404, 'no_release', sprintf('Fuer "%s" (%s) ist kein Release hinterlegt.', $product, $channel));
|
||||
}
|
||||
|
||||
Http::ok(['release' => $release]);
|
||||
|
||||
@@ -157,9 +157,16 @@ switch ($action) {
|
||||
Http::ok(['event_id' => $eventId], 201);
|
||||
|
||||
case 'status':
|
||||
ApiAuth::requireScope($db, 'watchdog:read');
|
||||
$monitors = $monitorRepo->getAllMonitors();
|
||||
Http::ok(['count' => count($monitors), 'monitors' => $monitors]);
|
||||
$context = ApiAuth::requireScope($db, 'watchdog:read');
|
||||
$requestedSlug = Http::str('project_slug') ?? Http::str('project');
|
||||
$boundProject = ApiAuth::projectFilter($context);
|
||||
$projectSlug = $boundProject ?? $requestedSlug;
|
||||
|
||||
$monitors = $monitorRepo->getAllMonitors($projectSlug);
|
||||
Http::ok(array_merge(
|
||||
['count' => count($monitors), 'monitors' => $monitors],
|
||||
ApiAuth::scopeNotice($requestedSlug, (string)($projectSlug ?? 'all'))
|
||||
));
|
||||
|
||||
case 'events':
|
||||
ApiAuth::requireScope($db, 'watchdog:read');
|
||||
|
||||
Reference in New Issue
Block a user