Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions backend/app/api/routes/build_jobs.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ async def get_project_build_job(


@router.get("/projects/{project_id}/build-jobs/{job_id}/artifact")
@router.head("/projects/{project_id}/build-jobs/{job_id}/artifact", include_in_schema=False)
async def download_project_build_artifact(
project_id: int,
job_id: int,
Expand Down
14 changes: 14 additions & 0 deletions backend/tests/integration/test_project_build.py
Original file line number Diff line number Diff line change
Expand Up @@ -1189,6 +1189,15 @@ async def fake_build_snapshot( # noqa: ANN001
assert download_response.headers["content-type"] == "application/zip"
assert download_response.content == archive_content

# Editor 下载前先以 HEAD 检查鉴权、产物存在性和文件名。
head_response = await authenticated_client.head(
f"/api/projects/{project_id}/build-jobs/{build_job['id']}/artifact"
)
assert head_response.status_code == 200
assert head_response.headers["content-type"] == "application/zip"
assert head_response.headers["content-length"] == str(len(archive_content))
assert head_response.content == b""

access_response = await authenticated_client.post(
f"/api/projects/{project_id}/build-jobs/{build_job['id']}/access"
)
Expand Down Expand Up @@ -1293,6 +1302,11 @@ async def fake_build_snapshot( # noqa: ANN001
assert deleted_download_response.status_code == 404
assert deleted_download_response.json()["code"] == "BUILD_ARTIFACT_NOT_FOUND"

deleted_head_response = await authenticated_client.head(
f"/api/projects/{project_id}/build-jobs/{build_job['id']}/artifact"
)
assert deleted_head_response.status_code == 404

# 产物删除后:即使票据仍在有效期内,也已读不到任何内容。
deleted_proxy_response = await authenticated_client.get(
f"{isolated_preview_origin()}/build-artifacts/{project_id}/{build_job['id']}/",
Expand Down
Loading