// file : mod/ci-common.hxx -*- C++ -*- // license : MIT; see accompanying LICENSE file #ifndef MOD_CI_COMMON_HXX #define MOD_CI_COMMON_HXX #include // database #include #include #include #include #include namespace brep { class ci_start { public: void init (shared_ptr); // If the request handling has been performed normally, then return the // information that corresponds to the CI result manifest (see CI Result // Manifest in the manual). Otherwise (some internal has error occured), // log the error and return nullopt. // // The arguments correspond to the CI request and overrides manifest // values (see CI Request and Overrides Manifests in the manual). Note: // request id and timestamp are generated by the implementation. // struct package { package_name name; optional version; }; // Note that the inability to generate the reference is an internal // error. Thus, it is not optional. // struct start_result { uint16_t status; string message; string reference; vector> custom_result; }; // In the optional service information, if id is empty, then the generated // reference is used instead. // optional start (const basic_mark& error, const basic_mark& warn, const basic_mark* trace, optional&&, const repository_location& repository, const vector& packages, const optional& client_ip, const optional& user_agent, const optional& interactive = nullopt, const optional& simulate = nullopt, const vector>& custom_request = {}, const vector>& overrides = {}) const; // Create an unloaded CI request returning start_result::reference on // success and nullopt on an internal error. Such a request is not started // until loaded with the load() function below. See also the // build_unloaded() tenant services notification. // // Note: should be called out of the database transaction. // optional create (const basic_mark& error, const basic_mark& warn, const basic_mark* trace, odb::core::database&, tenant_service&&) const; // Load (and start) previously created (as unloaded) CI request. Similarly // to the start() function, return nullopt on an internal error. // // Note that tenant_service::id is used to identify the CI request tenant. // // Note: should be called out of the database transaction. // optional load (const basic_mark& error, const basic_mark& warn, const basic_mark* trace, odb::core::database&, tenant_service&&, const repository_location& repository) const; // Abandon previously created (as unloaded) CI request. // // Note: should be called out of the database transaction. // void abandon (const basic_mark& error, const basic_mark& warn, const basic_mark* trace, odb::core::database&, tenant_service&&) const; // Helpers. // // Serialize the start result as a CI result manifest. // static void serialize_manifest (const start_result&, ostream&, bool long_lines = false); private: shared_ptr options_; }; class ci_cancel { public: void init (shared_ptr, shared_ptr); // @@ TODO Archive the tenant. // void cancel (/*...*/); private: shared_ptr options_; shared_ptr build_db_; }; } #endif // MOD_CI_COMMON_HXX