From 022d5cb4f246809ce8d9a08d3499edd309ed26e7 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Wed, 29 Sep 2021 21:22:00 +0300 Subject: Add agent, worker, and dependency checksums to task/result manifests --- libbbot/manifest.cxx | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++- libbbot/manifest.hxx | 34 +++++++++++++++++--- 2 files changed, 116 insertions(+), 5 deletions(-) (limited to 'libbbot') 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 requirements; butl::small_vector tests; + butl::optional 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 interactive; // Interactive build breakpoint. + butl::optional worker_checksum; + strings unquoted_config () const; @@ -206,26 +211,30 @@ namespace bbot strings tr, std::vector ra, butl::small_vector ts, + butl::optional dc, std::string mn, butl::target_triplet tg, butl::optional en, strings cf, butl::optional ht, strings wr, - butl::optional ir) + butl::optional ir, + butl::optional 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 challenge; butl::optional result_url; + + butl::optional agent_checksum; + butl::optional task; task_response_manifest (std::string s, butl::optional c, butl::optional u, + butl::optional ac, butl::optional 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 worker_checksum; + butl::optional dependency_checksum; + result_manifest (bpkg::package_name n, bpkg::version v, result_status s, - operation_results r) + operation_results r, + butl::optional wc, + butl::optional 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> challenge; + std::string agent_checksum; + result_manifest result; result_request_manifest (std::string s, butl::optional> 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: -- cgit v1.1