Skip to content

Commit 0fa132e

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). If users want a specific build id, that is already possible to request through command line arguments. When a user requests a branch by name, they probably do not care as much how recent the build is. In the case of our presubmit, this will hopefully reduce flakes that come from the device side. The main failure mode here is if a build target / branch combination has previously reported a higher safe level and no longer does, it will get stuck on the older build from the higher safe level indefinitely. Assisted-by: Jetski:Gemini Next Bug: b/518049553
1 parent f7d32f3 commit 0fa132e

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)