// file : mod/mod-ci-github.hxx -*- C++ -*- // license : MIT; see accompanying LICENSE file #ifndef MOD_MOD_CI_GITHUB_HXX #define MOD_MOD_CI_GITHUB_HXX #include #include #include #include #include #include #include namespace brep { struct service_data; class ci_github: public database_module, private ci_start, public tenant_service_build_unloaded, public tenant_service_build_queued, public tenant_service_build_building, public tenant_service_build_built { public: explicit ci_github (tenant_service_map&); // Create a shallow copy (handling instance) if initialized and a deep // copy (context exemplar) otherwise. // explicit ci_github (const ci_github&, tenant_service_map&); virtual bool handle (request&, response&); virtual const cli::options& cli_options () const {return options::ci_github::description ();} virtual function (const tenant_service&)> build_unloaded (tenant_service&&, const diag_epilogue& log_writer) const noexcept override; virtual function (const tenant_service&)> build_queued (const tenant_service&, const vector&, optional initial_state, const build_queued_hints&, const diag_epilogue& log_writer) const noexcept override; virtual function (const tenant_service&)> build_building (const tenant_service&, const build&, const diag_epilogue& log_writer) const noexcept override; virtual function (const tenant_service&)> build_built (const tenant_service&, const build&, const diag_epilogue& log_writer) const noexcept override; private: virtual void init (cli::scanner&); // Handle the check_suite event `requested` and `rerequested` actions. // // If warning_success is true, then map result_status::warning to SUCCESS // and to FAILURE otherwise. // bool handle_check_suite_request (gh_check_suite_event, bool warning_success); // Handle the pull_request event `opened` and `synchronize` actions. // // If warning_success is true, then map result_status::warning to SUCCESS // and to FAILURE otherwise. // bool handle_pull_request (gh_pull_request_event, bool warning_success); // Create an unloaded CI request for a pull request. If `cancel_first` is // true, cancel its existing CI request first. // // Return true if an unloaded CI request was created. Ignore failure to // cancel because the CI request may already have been cancelled for other // reasons. // // After this call we will start getting the build_unloaded() // notifications until (1) we load the request, (2) we cancel it, or (3) // it gets archived after some timeout. // bool create_pull_request_ci (const basic_mark& error, const basic_mark& warn, const basic_mark& trace, const service_data&, const string& pull_request_node_id, bool cancel_first) const; // Build a check run details_url for a build. // string details_url (const build&) const; optional generate_jwt (const basic_mark& trace, const basic_mark& error) const; // Authenticate to GitHub as an app installation. // optional obtain_installation_access_token (uint64_t install_id, string jwt, const basic_mark& error) const; private: shared_ptr options_; tenant_service_map& tenant_service_map_; }; } #endif // MOD_MOD_CI_GITHUB_HXX