Android-cuttlefish cvd tool
android_build_api.h
Go to the documentation of this file.
1//
2// Copyright (C) 2019 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15
16#pragma once
17
18#include <chrono>
19#include <optional>
20#include <string>
21#include <string_view>
22#include <tuple>
23#include <unordered_set>
24#include <vector>
25
35
36namespace cuttlefish {
37
38inline constexpr char kAndroidBuildServiceUrl[] =
39 "https://www.googleapis.com/android/internal/build/v3";
40
41class AndroidBuildApi : public BuildApi {
42 public:
43 AndroidBuildApi() = delete;
45 virtual ~AndroidBuildApi() = default;
46 AndroidBuildApi(HttpClient& http_client, CredentialSource* credential_source,
47 AndroidBuildUrl* android_build_url,
48 std::chrono::seconds retry_period,
49 CasDownloader* cas_downloader = nullptr);
50
51 Result<Build> GetBuild(const BuildString& build_string) override;
52
54 const std::string& target_directory,
55 const std::string& artifact_name) override;
56
58 const Build& build, const std::string& target_directory,
59 const std::string& artifact_name,
60 const std::string& backup_artifact_name) override;
61
63 const Build&, const std::string& artifact_name) override;
64
65 private:
66 struct BuildInfo {
67 std::string branch;
68 std::string product;
69 std::string status;
70 std::string target;
71 };
72 Result<BuildInfo> GetBuildInfo(std::string_view build_id,
73 std::string_view target);
74 Result<void> BlockUntilTerminalStatus(std::string_view initial_status,
75 std::string_view build_id,
76 std::string_view target);
78
79 Result<std::optional<std::string>> LatestBuildId(const std::string& branch,
80 const std::string& target);
81
83 const DeviceBuild& build,
84 const std::vector<std::string>& artifact_filenames);
85
87 const DirectoryBuild& build,
88 const std::vector<std::string>& artifact_filenames);
89
91 const Build& build, const std::vector<std::string>& artifact_filenames);
92
94 const std::string& artifact);
96 const std::string& artifact,
97 const std::string& path);
98
100 const std::string& artifact,
101 const std::string& path);
102
103 Result<void> ArtifactToFile(const Build& build, const std::string& artifact,
104 const std::string& path);
105
107 const std::string& target_directory,
108 const std::string& artifact_name);
110 const Build& build, const std::string& target_directory,
111 const std::string& artifact_name);
112
113 Result<Build> GetBuild(const DeviceBuildString& build_string);
114 Result<Build> GetBuild(const DirectoryBuildString& build_string);
115
117 const std::string& artifact_name);
119 const std::string& artifact_name);
120
124 std::chrono::seconds retry_period_;
126};
127
128std::tuple<std::string, std::string> GetBuildIdAndTarget(const Build& build);
129
130std::optional<std::string> GetFilepath(const Build& build);
131
132std::string ConstructTargetFilepath(const std::string& directory,
133 const std::string& filename);
134
135} // namespace cuttlefish
Definition: expected.h:86
Definition: android_build_api.h:41
Result< std::string > DownloadFile(const Build &build, const std::string &target_directory, const std::string &artifact_name) override
Definition: android_build_api.cpp:138
Result< void > ArtifactToFile(const DeviceBuild &build, const std::string &artifact, const std::string &path)
Definition: android_build_api.cpp:341
Result< std::vector< std::string > > Headers()
Definition: android_build_api.cpp:242
std::chrono::seconds retry_period_
Definition: android_build_api.h:124
CredentialSource * credential_source_
Definition: android_build_api.h:122
HttpClient & http_client_
Definition: android_build_api.h:121
Result< std::optional< std::string > > LatestBuildId(const std::string &branch, const std::string &target)
Definition: android_build_api.cpp:251
Result< std::string > GetArtifactDownloadUrl(const DeviceBuild &build, const std::string &artifact)
Definition: android_build_api.cpp:327
Result< void > BlockUntilTerminalStatus(std::string_view initial_status, std::string_view build_id, std::string_view target)
Definition: android_build_api.cpp:221
Result< SeekableZipSource > FileReader(const Build &, const std::string &artifact_name) override
Definition: android_build_api.cpp:160
AndroidBuildUrl * android_build_url_
Definition: android_build_api.h:123
Result< std::string > DownloadTargetFile(const Build &build, const std::string &target_directory, const std::string &artifact_name)
Definition: android_build_api.cpp:406
Result< BuildInfo > GetBuildInfo(std::string_view build_id, std::string_view target)
Definition: android_build_api.cpp:187
CasDownloader * cas_downloader_
Definition: android_build_api.h:125
AndroidBuildApi(AndroidBuildApi &&)=delete
Result< std::unordered_set< std::string > > Artifacts(const DeviceBuild &build, const std::vector< std::string > &artifact_filenames)
Definition: android_build_api.cpp:274
Result< std::string > DownloadTargetFileFromCas(const Build &build, const std::string &target_directory, const std::string &artifact_name)
Definition: android_build_api.cpp:381
Result< std::string > DownloadFileWithBackup(const Build &build, const std::string &target_directory, const std::string &artifact_name, const std::string &backup_artifact_name) override
Definition: android_build_api.cpp:148
Result< Build > GetBuild(const BuildString &build_string) override
Definition: android_build_api.cpp:132
virtual ~AndroidBuildApi()=default
Definition: android_build_url.h:24
Definition: build_api.h:27
Definition: cas_downloader.h:72
Definition: credential_source.h:29
Definition: http_client.h:84
Definition: alloc_utils.cpp:23
constexpr char kAndroidBuildServiceUrl[]
Definition: android_build_api.h:38
std::tuple< std::string, std::string > GetBuildIdAndTarget(const Build &build)
Definition: android_build_api.cpp:427
std::variant< DeviceBuild, DirectoryBuild > Build
Definition: android_build.h:49
std::optional< std::string > GetFilepath(const Build &build)
Definition: android_build_api.cpp:433
std::variant< DeviceBuildString, DirectoryBuildString > BuildString
Definition: android_build_string.h:52
std::string ConstructTargetFilepath(const std::string &directory, const std::string &filename)
Definition: android_build_api.cpp:437
Definition: android_build_api.h:66
std::string status
Definition: android_build_api.h:69
std::string product
Definition: android_build_api.h:68
std::string branch
Definition: android_build_api.h:67
std::string target
Definition: android_build_api.h:70
Definition: android_build_string.h:28
Definition: android_build.h:26
Definition: android_build_string.h:39
Definition: android_build.h:36