修复预览构建状态解析与工作进程恢复
Project CI / Repository checks (push) Successful in 55s
Project CI / Frontend tests (push) Successful in 3m35s
Project CI / Backend tests (push) Successful in 4m38s
Project CI / Native shell tests (push) Successful in 15m53s

限制 Jenkins 状态接口只返回监控所需字段

避免完整构建 JSON 触发反序列化递归深度限制

让预览外部生成工作进程在身份初始化后自动重启

补充定向测试、防回归检查和技术说明
This commit is contained in:
2026-08-15 18:52:10 +08:00
parent cf5eac1c63
commit c75fcbf023
5 changed files with 28 additions and 3 deletions
@@ -205,10 +205,13 @@ impl JenkinsClient {
Fut: Future<Output = ()>,
{
let build_url = loop {
let item_url = reference
let mut item_url = reference
.queue_url
.join("api/json")
.map_err(|error| error.to_string())?;
item_url
.query_pairs_mut()
.append_pair("tree", "cancelled,executable[url]");
let item: QueueItem = self.get_json_with_retry(item_url).await?;
if item.cancelled.unwrap_or(false) {
return Ok(JenkinsOutcome {
@@ -226,9 +229,12 @@ impl JenkinsClient {
on_build(build_url.as_str()).await;
let successful = loop {
let state_url = build_url
let mut state_url = build_url
.join("api/json")
.map_err(|error| error.to_string())?;
state_url
.query_pairs_mut()
.append_pair("tree", "building,result");
let state: BuildState = self.get_json_with_retry(state_url).await?;
if state.building {
tokio::time::sleep(self.poll_interval).await;
@@ -103,7 +103,13 @@ async fn mock_queue(axum::extract::Path(id): axum::extract::Path<u64>) -> Json<V
)
}
async fn mock_build(State(state): State<MockJenkinsState>) -> impl IntoResponse {
async fn mock_build(
State(state): State<MockJenkinsState>,
uri: axum::http::Uri,
) -> impl IntoResponse {
if uri.query() != Some("tree=building%2Cresult") {
return (StatusCode::BAD_REQUEST, "missing bounded tree query").into_response();
}
if state
.invalid_build_responses
.fetch_update(Ordering::SeqCst, Ordering::SeqCst, |remaining| {