#feature: some update

This commit is contained in:
2026-08-12 18:00:09 +08:00
parent ba916f5ce1
commit 103340536b
39 changed files with 2916 additions and 227 deletions
@@ -82,6 +82,7 @@ class JenkinsBuildController extends Controller
'success' => (bool) ($result['success'] ?? false),
'message' => $result['message'] ?? null,
'queue_url' => $result['queue_url'] ?? null,
'build_number' => $result['build_number'] ?? null,
];
}
@@ -94,6 +95,83 @@ class JenkinsBuildController extends Controller
], $successCount > 0 ? 200 : 422);
}
public function statuses(Request $request): JsonResponse
{
if (! $this->jenkinsClient->isConfigured()) {
return response()->json([
'success' => false,
'message' => 'Jenkins 未配置,请先配置 Jenkins 连接信息',
], 422);
}
$projectSlugs = Project::getJenkinsNotifyEnabled()->pluck('slug')->all();
$data = $request->validate([
'builds' => ['required', 'array', 'min:1'],
'builds.*.id' => ['required', 'string'],
'builds.*.project_slug' => ['required', 'string', Rule::in($projectSlugs)],
'builds.*.queue_url' => ['nullable', 'string'],
'builds.*.build_number' => ['nullable', 'integer'],
]);
$projects = Project::getJenkinsNotifyEnabled()->keyBy('slug');
$results = [];
foreach ($data['builds'] as $build) {
/** @var Project $project */
$project = $projects[$build['project_slug']];
$results[] = [
'id' => $build['id'],
'project_slug' => $project->slug,
'job_name' => $project->jenkins_job_name,
...$this->jenkinsClient->getBuildStatus(
$project->jenkins_job_name,
$build['queue_url'] ?? null,
isset($build['build_number']) ? (int) $build['build_number'] : null
),
];
}
return response()->json([
'success' => true,
'data' => [
'results' => $results,
],
]);
}
public function cancel(Request $request): JsonResponse
{
if (! $this->jenkinsClient->isConfigured()) {
return response()->json([
'success' => false,
'message' => 'Jenkins 未配置,请先配置 Jenkins 连接信息',
], 422);
}
$projectSlugs = Project::getJenkinsNotifyEnabled()->pluck('slug')->all();
$data = $request->validate([
'project_slug' => ['required', 'string', Rule::in($projectSlugs)],
'queue_url' => ['nullable', 'string'],
'build_number' => ['nullable', 'integer'],
]);
$project = Project::getJenkinsNotifyEnabled()->firstWhere('slug', $data['project_slug']);
$result = $this->jenkinsClient->cancelBuild(
$project->jenkins_job_name,
$data['queue_url'] ?? null,
isset($data['build_number']) ? (int) $data['build_number'] : null
);
return response()->json([
'success' => (bool) ($result['success'] ?? false),
'message' => ($result['success'] ?? false) ? '已发送取消请求' : ($result['message'] ?? '取消失败'),
'data' => [
'result' => $result,
],
], ($result['success'] ?? false) ? 200 : 422);
}
private function normalizeParameters(array $parameters): array
{
return collect($parameters)