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
38class AndroidBuildApi : public BuildApi {
39 public:
40 AndroidBuildApi() = delete;
42 virtual ~AndroidBuildApi() = default;
44 HttpClient& http_client, AndroidBuildUrl& android_build_url,
45 CredentialSource* credential_source = nullptr,
46 std::chrono::seconds retry_period = std::chrono::seconds::zero(),
47 CasDownloader* cas_downloader = nullptr);
48
49 Result<Build> GetBuild(const BuildString& build_string) override;
50
52 const std::string& target_directory,
53 const std::string& artifact_name) override;
54
56 const Build&, const std::string& artifact_name) override;
57
58 private:
59 struct BuildInfo {
60 std::string branch;
61 std::string product;
62 std::string status;
63 std::string target;
65 };
66
68 std::string build_id;
69 std::chrono::system_clock::time_point creation_time;
71 };
72
73 Result<BuildInfo> GetBuildInfo(std::string_view build_id,
74 std::string_view target);
75 Result<bool> BlockUntilTerminalStatus(std::string_view initial_status,
76 std::string_view build_id,
77 std::string_view target);
79
81 const std::string& branch, const std::string& target);
82
84 const DeviceBuild& build,
85 const std::vector<std::string>& artifact_filenames);
86
88 const DirectoryBuild& build,
89 const std::vector<std::string>& artifact_filenames);
90
92 const Build& build, const std::vector<std::string>& artifact_filenames);
93
95 const std::string& artifact);
97 const std::string& artifact,
98 const std::string& path);
99
101 const std::string& artifact,
102 const std::string& path);
103
104 Result<void> ArtifactToFile(const Build& build, const std::string& artifact,
105 const std::string& path);
106
108 const std::string& target_directory,
109 const std::string& artifact_name);
111 const Build& build, const std::string& target_directory,
112 const std::string& artifact_name);
113
114 Result<Build> GetBuild(const DeviceBuildString& build_string);
115 Result<Build> GetBuild(const DirectoryBuildString& build_string);
116
118 const std::string& artifact_name);
120 const std::string& artifact_name);
121
125 std::chrono::seconds retry_period_;
127};
128
129std::tuple<std::string, std::string> GetBuildIdAndTarget(const Build& build);
130
131std::optional<std::string> GetFilepath(const Build& build);
132
133std::string ConstructTargetFilepath(const std::string& directory,
134 const std::string& filename);
135
136} // namespace cuttlefish
Definition: android_build_api.h:38
Result< std::string > DownloadFile(const Build &build, const std::string &target_directory, const std::string &artifact_name) override
Definition: android_build_api.cpp:154
Result< void > ArtifactToFile(const DeviceBuild &build, const std::string &artifact, const std::string &path)
Definition: android_build_api.cpp:399
Result< std::vector< std::string > > Headers()
Definition: android_build_api.cpp:266
std::chrono::seconds retry_period_
Definition: android_build_api.h:125
Result< bool > BlockUntilTerminalStatus(std::string_view initial_status, std::string_view build_id, std::string_view target)
Definition: android_build_api.cpp:234
CredentialSource * credential_source_
Definition: android_build_api.h:124
HttpClient & http_client_
Definition: android_build_api.h:122
Result< std::string > GetArtifactDownloadUrl(const DeviceBuild &build, const std::string &artifact)
Definition: android_build_api.cpp:385
Result< SeekableZipSource > FileReader(const Build &, const std::string &artifact_name) override
Definition: android_build_api.cpp:164
Result< std::string > DownloadTargetFile(const Build &build, const std::string &target_directory, const std::string &artifact_name)
Definition: android_build_api.cpp:460
Result< BuildInfo > GetBuildInfo(std::string_view build_id, std::string_view target)
Definition: android_build_api.cpp:191
AndroidBuildUrl & android_build_url_
Definition: android_build_api.h:123
CasDownloader * cas_downloader_
Definition: android_build_api.h:126
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:332
Result< std::string > DownloadTargetFileFromCas(const Build &build, const std::string &target_directory, const std::string &artifact_name)
Definition: android_build_api.cpp:437
Result< Build > GetBuild(const BuildString &build_string) override
Definition: android_build_api.cpp:148
Result< std::optional< CandidateBuild > > LatestBuildCandidate(const std::string &branch, const std::string &target)
Definition: android_build_api.cpp:278
virtual ~AndroidBuildApi()=default
Definition: android_build_url.h:53
Definition: build_api.h:27
Definition: cas_downloader.h:73
Definition: credential_source.h:32
Definition: http_client.h:95
Definition: alloc_driver.h:20
std::tuple< std::string, std::string > GetBuildIdAndTarget(const Build &build)
Definition: android_build_api.cpp:483
tl::expected< T, StackTraceError > Result
Definition: result_type.h:30
std::variant< DeviceBuild, DirectoryBuild > Build
Definition: android_build.h:56
std::optional< std::string > GetFilepath(const Build &build)
Definition: android_build_api.cpp:489
SafeLevel
Definition: android_build_url.h:25
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:493
void zero(volatile uint8_t *begin, const volatile uint8_t *end)
Definition: android_build_api.h:59
std::string status
Definition: android_build_api.h:62
std::string product
Definition: android_build_api.h:61
std::string branch
Definition: android_build_api.h:60
bool is_signed
Definition: android_build_api.h:64
std::string target
Definition: android_build_api.h:63
Definition: android_build_api.h:67
std::string build_id
Definition: android_build_api.h:68
std::chrono::system_clock::time_point creation_time
Definition: android_build_api.h:69
SafeLevel safe_level
Definition: android_build_api.h:70
Definition: android_build_string.h:30
Definition: android_build.h:28
Definition: android_build_string.h:41
Definition: android_build.h:42