Skip to content

Commit 2a29676

Browse files
committed
Request higher SafeLevel builds when requesting Android build by branch
In cvd fetch, when requesting a build by branch and target, prefer requesting higher SafeLevel builds (PLATINUM, SAFE_2, SAFE_1) when possible before falling back to any complete successful build (SAFE_0 / unspecified). Assisted-by: Jetski:Gemini Next Bug: b/518049553
1 parent f7d32f3 commit 2a29676

3 files changed

Lines changed: 25 additions & 20 deletions

File tree

base/cvd/cuttlefish/host/libs/web/android_build_api.cpp

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -276,25 +276,25 @@ Result<std::vector<std::string>> AndroidBuildApi::Headers() {
276276

277277
Result<std::optional<std::string>> AndroidBuildApi::LatestBuildId(
278278
const std::string& branch, const std::string& target) {
279-
const std::string url =
280-
android_build_url_->GetLatestBuildIdUrl(branch, target);
281-
auto response =
282-
CF_EXPECT(HttpGetToJson(http_client_, url, CF_EXPECT(Headers())));
283-
284-
const Json::Value json = CF_EXPECTF(GetResponseJson(response),
285-
"Error fetching last known good build "
286-
"id for:\nbranch \"{}\", target \"{}\"",
287-
branch, target);
288-
if (!json.isMember("builds")) {
289-
return std::nullopt;
279+
for (const std::string_view safe_level :
280+
{"PLATINUM", "SAFE_2", "SAFE_1", ""}) {
281+
const std::string url =
282+
android_build_url_->GetLatestBuildIdUrl(branch, target, safe_level);
283+
std::vector<std::string> headers = CF_EXPECT(Headers());
284+
HttpResponse<Json::Value> response =
285+
CF_EXPECT(HttpGetToJson(http_client_, url, headers));
286+
287+
const Json::Value json = CF_EXPECTF(
288+
GetResponseJson(response),
289+
"Error fetching last known good build id for:\nbranch \"{}\", target "
290+
"\"{}\", safe_level \"{}\"",
291+
branch, target, safe_level);
292+
if (json.isMember("builds") && json["builds"].isArray() &&
293+
!json["builds"].empty()) {
294+
return CF_EXPECT(GetValue<std::string>(json["builds"][0], {"buildId"}));
295+
}
290296
}
291-
292-
CF_EXPECTF(json["builds"].isArray() && json["builds"].size() == 1,
293-
"Expected to find a single latest build for branch \"{}\" and "
294-
"target \"{}\" in the response array, "
295-
"but found {}",
296-
branch, target, json["builds"].size());
297-
return CF_EXPECT(GetValue<std::string>(json["builds"][0], { "buildId" }));
297+
return std::nullopt;
298298
}
299299

300300
Result<std::unordered_set<std::string>> AndroidBuildApi::Artifacts(

base/cvd/cuttlefish/host/libs/web/android_build_url.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,12 +116,16 @@ AndroidBuildUrl::AndroidBuildUrl(std::string api_base_url, std::string api_key,
116116
project_id_(std::move(project_id)) {}
117117

118118
std::string AndroidBuildUrl::GetLatestBuildIdUrl(std::string_view branch,
119-
std::string_view target) {
119+
std::string_view target,
120+
std::string_view safe_level) {
120121
UrlBuilder builder = UrlBuilder::GetLatestBuildIdBaseUrl(api_base_url_);
121122
builder.AddQueryParameter("buildAttemptStatus", "complete");
122123
builder.AddQueryParameter("buildType", "submitted");
123124
builder.AddQueryParameter("pageSize", "1");
124125
builder.AddQueryParameter("successful", "true");
126+
if (!safe_level.empty()) {
127+
builder.AddQueryParameter("safeLevel", safe_level);
128+
}
125129
builder.AddQueryParameter("branches", branch);
126130
builder.AddQueryParameter("targets", target);
127131
builder.AddApiKeyAndProjectId(api_key_, project_id_);

base/cvd/cuttlefish/host/libs/web/android_build_url.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ class AndroidBuildUrl {
3030
std::string project_id);
3131

3232
std::string GetLatestBuildIdUrl(std::string_view branch,
33-
std::string_view target);
33+
std::string_view target,
34+
std::string_view safe_level = "");
3435
std::string GetBuildUrl(std::string_view id, std::string_view target);
3536
std::string GetArtifactUrl(std::string_view id, std::string_view target,
3637
const std::vector<std::string>& artifact_filenames,

0 commit comments

Comments
 (0)