aboutsummaryrefslogtreecommitdiff
path: root/libbbot
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2021-09-29 21:22:00 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2021-10-03 19:42:36 +0300
commit022d5cb4f246809ce8d9a08d3499edd309ed26e7 (patch)
treeb5546e41ab32cb5692fd3ca409642c3fc5cf1b5c /libbbot
parentb387713a19ddf0d10d8ae28c5de6e78cd9d568b5 (diff)
Add agent, worker, and dependency checksums to task/result manifests
Diffstat (limited to 'libbbot')
-rw-r--r--libbbot/manifest.cxx87
-rw-r--r--libbbot/manifest.hxx34
2 files changed, 116 insertions, 5 deletions
diff --git a/libbbot/manifest.cxx b/libbbot/manifest.cxx
index 36f92a0..c604810 100644
--- a/libbbot/manifest.cxx
+++ b/libbbot/manifest.cxx
@@ -43,6 +43,7 @@ namespace bbot
{
switch (s)
{
+ case result_status::skip: return "skip";
case result_status::success: return "success";
case result_status::warning: return "warning";
case result_status::error: return "error";
@@ -57,7 +58,8 @@ namespace bbot
result_status
to_result_status (const string& s)
{
- if (s == "success") return result_status::success;
+ if (s == "skip") return result_status::skip;
+ else if (s == "success") return result_status::success;
else if (s == "warning") return result_status::warning;
else if (s == "error") return result_status::error;
else if (s == "abort") return result_status::abort;
@@ -621,6 +623,16 @@ namespace bbot
bad_value (e.what ());
}
}
+ else if (n == "dependency-checksum")
+ {
+ if (dependency_checksum)
+ bad_name ("task dependency checksum redefinition");
+
+ if (v.empty ())
+ bad_value ("empty task dependency checksum");
+
+ dependency_checksum = move (v);
+ }
else if (n == "machine")
{
if (!machine.empty ())
@@ -697,6 +709,16 @@ namespace bbot
interactive = move (v);
}
+ else if (n == "worker-checksum")
+ {
+ if (worker_checksum)
+ bad_name ("task worker checksum redefinition");
+
+ if (v.empty ())
+ bad_value ("empty task worker checksum");
+
+ worker_checksum = move (v);
+ }
else if (!iu)
bad_name ("unknown name '" + n + "' in task manifest");
}
@@ -768,6 +790,9 @@ namespace bbot
for (const test_dependency& t: tests)
s.next (to_string (t.type), t.string ());
+ if (dependency_checksum)
+ s.next ("dependency-checksum", *dependency_checksum);
+
s.next ("machine", machine);
s.next ("target", target.string ());
@@ -804,6 +829,9 @@ namespace bbot
if (interactive)
s.next ("interactive", *interactive);
+ if (worker_checksum)
+ s.next ("worker-checksum", *worker_checksum);
+
s.next ("", ""); // End of manifest.
}
@@ -898,6 +926,16 @@ namespace bbot
result_url = move (v);
}
+ else if (n == "agent-checksum")
+ {
+ if (agent_checksum)
+ bad_name ("task response agent checksum redefinition");
+
+ if (v.empty ())
+ bad_value ("empty task response agent checksum");
+
+ agent_checksum = move (v);
+ }
else if (!iu)
bad_name ("unknown name '" + n + "' in task response manifest");
}
@@ -925,6 +963,9 @@ namespace bbot
if (result_url)
bad_value ("unexpected task response result url");
+
+ if (agent_checksum)
+ bad_value ("unexpected task response agent checksum");
}
// If session is not empty then the task manifest must follow, otherwise it
@@ -964,6 +1005,9 @@ namespace bbot
if (result_url)
s.next ("result-url", *result_url);
+ if (agent_checksum)
+ s.next ("agent-checksum", *agent_checksum);
+
s.next ("", ""); // End of manifest.
if (task)
@@ -1130,6 +1174,26 @@ namespace bbot
//
results[nlog++].log = move (v);
}
+ else if (n == "worker-checksum")
+ {
+ if (worker_checksum)
+ bad_name ("result worker checksum redefinition");
+
+ if (v.empty ())
+ bad_value ("empty result worker checksum");
+
+ worker_checksum = move (v);
+ }
+ else if (n == "dependency-checksum")
+ {
+ if (dependency_checksum)
+ bad_name ("result dependency checksum redefinition");
+
+ if (v.empty ())
+ bad_value ("empty result dependency checksum");
+
+ dependency_checksum = move (v);
+ }
else if (!iu)
bad_name ("unknown name '" + n + "' in result manifest");
}
@@ -1186,6 +1250,12 @@ namespace bbot
for (const auto& r: results)
s.next (r.operation + "-log", r.log);
+ if (worker_checksum)
+ s.next ("worker-checksum", *worker_checksum);
+
+ if (dependency_checksum)
+ s.next ("dependency-checksum", *dependency_checksum);
+
s.next ("", ""); // End of manifest.
}
@@ -1248,6 +1318,16 @@ namespace bbot
bad_value ("invalid result request challenge");
}
}
+ else if (n == "agent-checksum")
+ {
+ if (!agent_checksum.empty ())
+ bad_name ("result request agent checksum redefinition");
+
+ if (v.empty ())
+ bad_value ("empty result request agent checksum");
+
+ agent_checksum = move (v);
+ }
else if (!iu)
bad_name ("unknown name '" + n + "' in result request manifest");
}
@@ -1257,6 +1337,9 @@ namespace bbot
if (session.empty ())
bad_value ("no result request session specified");
+ if (agent_checksum.empty ())
+ bad_value ("no result request agent checksum specified");
+
nv = p.next ();
if (nv.empty ())
bad_value ("result manifest expected");
@@ -1283,6 +1366,8 @@ namespace bbot
if (challenge)
s.next ("challenge", base64_encode (*challenge));
+ s.next ("agent-checksum", agent_checksum);
+
s.next ("", ""); // End of manifest.
result.serialize (s);
diff --git a/libbbot/manifest.hxx b/libbbot/manifest.hxx
index 1896f70..7ba53cb 100644
--- a/libbbot/manifest.hxx
+++ b/libbbot/manifest.hxx
@@ -170,6 +170,8 @@ namespace bbot
std::vector<bpkg::requirement_alternatives> requirements;
butl::small_vector<bpkg::test_dependency, 1> tests;
+ butl::optional<std::string> dependency_checksum;
+
std::string machine; // Build machine to use for building the package.
butl::target_triplet target; // Build target.
@@ -178,6 +180,7 @@ namespace bbot
// Build system configuration variables (in addition to build environment
// configuration variables).
+ //
// Note: could be quoted.
//
strings config;
@@ -194,6 +197,8 @@ namespace bbot
butl::optional<std::string> interactive; // Interactive build breakpoint.
+ butl::optional<std::string> worker_checksum;
+
strings
unquoted_config () const;
@@ -206,26 +211,30 @@ namespace bbot
strings tr,
std::vector<bpkg::requirement_alternatives> ra,
butl::small_vector<bpkg::test_dependency, 1> ts,
+ butl::optional<std::string> dc,
std::string mn,
butl::target_triplet tg,
butl::optional<std::string> en,
strings cf,
butl::optional<bool> ht,
strings wr,
- butl::optional<std::string> ir)
+ butl::optional<std::string> ir,
+ butl::optional<std::string> wc)
: name (std::move (nm)),
version (std::move (vr)),
repository (std::move (rl)),
trust (std::move (tr)),
requirements (std::move (ra)),
tests (std::move (ts)),
+ dependency_checksum (std::move (dc)),
machine (std::move (mn)),
target (std::move (tg)),
environment (std::move (en)),
config (std::move (cf)),
host (std::move (ht)),
warning_regex (std::move (wr)),
- interactive (std::move (ir)) {}
+ interactive (std::move (ir)),
+ worker_checksum (std::move (wc)) {}
public:
task_manifest () = default; // VC export.
@@ -255,15 +264,20 @@ namespace bbot
//
butl::optional<std::string> challenge;
butl::optional<std::string> result_url;
+
+ butl::optional<std::string> agent_checksum;
+
butl::optional<task_manifest> task;
task_response_manifest (std::string s,
butl::optional<std::string> c,
butl::optional<std::string> u,
+ butl::optional<std::string> ac,
butl::optional<task_manifest> t)
: session (std::move (s)),
challenge (std::move (c)),
result_url (std::move (u)),
+ agent_checksum (std::move (ac)),
task (std::move (t)) {}
public:
@@ -283,6 +297,7 @@ namespace bbot
// indicate whether one "overrides" the other in the "merge" operator|
// (see below).
//
+ skip,
success,
warning,
error,
@@ -346,14 +361,21 @@ namespace bbot
//
operation_results results;
+ butl::optional<std::string> worker_checksum;
+ butl::optional<std::string> dependency_checksum;
+
result_manifest (bpkg::package_name n,
bpkg::version v,
result_status s,
- operation_results r)
+ operation_results r,
+ butl::optional<std::string> wc,
+ butl::optional<std::string> dc)
: name (std::move (n)),
version (std::move (v)),
status (s),
- results (std::move (r)) {}
+ results (std::move (r)),
+ worker_checksum (std::move (wc)),
+ dependency_checksum (std::move (dc)) {}
public:
result_manifest () = default; // VC export.
@@ -375,13 +397,17 @@ namespace bbot
//
butl::optional<std::vector<char>> challenge;
+ std::string agent_checksum;
+
result_manifest result;
result_request_manifest (std::string s,
butl::optional<std::vector<char>> c,
+ std::string ac,
result_manifest r)
: session (std::move (s)),
challenge (std::move (c)),
+ agent_checksum (std::move (ac)),
result (std::move (r)) {}
public: