diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2020-03-18 22:17:49 +0300 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2020-03-27 17:28:44 +0300 |
commit | 35359f038f571dc46de3d14af72a2bc911fb0a24 (patch) | |
tree | de3e89d678e78b9efc4d395274fd7ccc68f4a213 /mod/options.cli | |
parent | 8ad672cc7211952716ffe1fbf76c179b4f1149e3 (diff) |
Implement brep-monitor
Diffstat (limited to 'mod/options.cli')
-rw-r--r-- | mod/options.cli | 811 |
1 files changed, 0 insertions, 811 deletions
diff --git a/mod/options.cli b/mod/options.cli deleted file mode 100644 index f02d7a6..0000000 --- a/mod/options.cli +++ /dev/null @@ -1,811 +0,0 @@ -// file : mod/options.cli -*- C++ -*- -// license : MIT; see accompanying LICENSE file - -include <libbpkg/manifest.hxx>; // repository_location - -include <web/xhtml-fragment.hxx>; - -include <libbrep/types.hxx>; - -include <mod/options-types.hxx>; - -namespace brep -{ - // Web handler configuration options. - // - namespace options - { - // Option groups. - // - class handler - { - string email - { - "<email>", - "Repository email. This email is used for the \cb{From:} header in - emails send by \cb{brep} (for example, build failure notifications)." - } - - string host - { - "<host>", - "Repository host. It specifies the scheme and the host address (but - not the root path; see \cb{root} below) that will be used whenever - \cb{brep} needs to construct an absolute URL to one of its locations - (for example, a link to a build log that is being send via email)." - } - - dir_path root = "/" - { - "<path>" - "Repository root. That is, this is the part of the URL between the - host name and the start of the repository. For example, root value - '\cb{/pkg}' means the repository URL is \cb{http://example.org/pkg/}. - Specify '\cb{/}' to use the web server root - (\cb{http://example.org/})." - } - - string tenant-name = "tenant" - { - "<name>", - "Name to call the tenant values on web pages. If not specified, then - \cb{tenant} is used." - } - - uint16_t verbosity = 0 - { - "<level>", - "Trace verbosity level. Level 0 disables tracing, which is also the - default." - } - }; - - class openssl_options - { - path openssl = "openssl" - { - "<path>", - "The openssl program to be used for crypto operations. You can also - specify additional options that should be passed to the openssl - program with \cb{openssl-option}. If the openssl program is not - explicitly specified, then \cb{brep} will use \cb{openssl} by - default." - } - - strings openssl-option - { - "<opt>", - "Additional option to be passed to the openssl program (see - \cb{openssl} for details). Repeat this option to specify multiple - openssl options." - } - - strings openssl-envvar - { - "<name>[=value]", - "Environment variable to be set (<name>=<value>) or unset (just - <name>) for the openssl program (see \cb{openssl} for details). - Repeat this option to specify multiple openssl variables. Note - that unspecified variables are inherited from the web server - process. - - You need to at least set the \cb{RANDFILE} environment variable - to change the default location of the openssl program seed file - and maybe also the \cb{OPENSSL_CONF} variable if you would like - to use a custom openssl configuration file." - } - }; - - class package_db - { - string package-db-user - { - "<user>", - "Package database login user name. If not specified, then operating - system (login) name is used. See also \c{package-db-role}." - } - - string package-db-role = "brep" - { - "<user>", - "Package database execution user name. If not empty then the login - user will be switched (with \c{SET ROLE}) to this user prior to - executing any statements. If not specified, then \cb{brep} is used." - } - - string package-db-password - { - "<pass>", - "Package database password. If not specified, then login without - password is expected to work." - } - - string package-db-name = "brep_package" - { - "<name>", - "Package database name. If not specified, then \cb{brep_package} is - used by default." - } - - string package-db-host - { - "<host>", - "Package database host name, address, or socket. If not specified, then - connect to \cb{localhost} using the operating system-default - mechanism (Unix-domain socket, etc)." - } - - uint16_t package-db-port = 0 - { - "<port>", - "Package database port number. If not specified, the default port is - used." - } - - size_t package-db-max-connections = 5 - { - "<num>", - "The maximum number of concurrent package database connections per web - server process. If 0, then no limitation is applied. The default is - 5." - } - - size_t package-db-retry = 10 - { - "<num>", - "The maximum number of times to retry package database transactions in - the face of recoverable failures (deadlock, loss of connection, etc). - The default is 10." - } - }; - - class build: openssl_options - { - path build-config - { - "<buildtab>", - "Build configuration file. If not specified, then the package building - functionality will be disabled. If specified, then the build database - must be configured (see \cb{build-db-*}). The \cb{brep} instance - needs to be restarted after modifying <buildtab> for the changes to - take effect." - } - - dir_path build-bot-agent-keys - { - "<dir>", - "Directory containing build bot agent public keys. If specified, then - \cb{brep} will perform agent authentication and will reject build - results from unauthenticated ones. If not specified, then build - results are accepted from all agents (which will be a security - risk if the \cb{brep} instance is publicly accessible). - - The directory is expected to contain one PEM-encoded public key - per file with the \cb{.pem} extension. All other files and - subdirectories are ignored. The \cb{brep} instance needs to be - restarted after adding new key files for the changes to take effect." - } - - size_t build-forced-rebuild-timeout = 600 - { - "<seconds>", - "Time to wait before considering a package for a forced rebuild. Must - be specified in seconds. Default is 10 minutes." - } - - size_t build-normal-rebuild-timeout = 86400 - { - "<seconds>", - "Time to wait before considering a package for a normal rebuild. Must - be specified in seconds. Default is 24 hours." - } - }; - - class build_db - { - string build-db-user - { - "<user>", - "Build database login user name. If not specified, then operating - system (login) name is used. See also \c{build-db-role}." - } - - string build-db-role = "brep" - { - "<user>", - "Build database execution user name. If not empty then the login - user will be switched (with \c{SET ROLE}) to this user prior to - executing any statements. If not specified, then \cb{brep} is used." - } - - string build-db-password - { - "<pass>", - "Build database password. If not specified, then login without - password is expected to work." - } - - string build-db-name = "brep_build" - { - "<name>", - "Build database name. If not specified, then \cb{brep_build} is used - by default." - } - - string build-db-host - { - "<host>", - "Build database host name, address, or socket. If not specified, then - connect to \cb{localhost} using the operating system-default - mechanism (Unix-domain socket, etc)." - } - - uint16_t build-db-port = 0 - { - "<port>", - "Build database port number. If not specified, the default port is - used." - } - - size_t build-db-max-connections = 5 - { - "<num>", - "The maximum number of concurrent build database connections per web - server process. If 0, then no limitation is applied. The default is - 5." - } - - size_t build-db-retry = 10 - { - "<num>", - "The maximum number of times to retry build database transactions in - the face of recoverable failures (deadlock, loss of connection, etc). - The default is 10." - } - }; - - class page - { - web::xhtml::fragment logo - { - "<xhtml>", - "Web page logo. It is displayed in the page header aligned to the left - edge. The value is treated as an XHTML5 fragment." - } - - vector<page_menu> menu; - { - "<label=link>", - "Web page menu. Each entry is displayed in the page header in the - order specified and aligned to the right edge. A link target that - starts with '\cb{/}' or contains '\cb{:}' is used as is. Otherwise, - it is prefixed with the repository web interface root." - } - }; - - class search - { - uint16_t search-page-entries = 20 - { - "<num>", - "Number of packages per page. The default is 20." - } - - uint16_t search-pages = 5 - { - "<num>", - "Number of pages in navigation (pager). The default is 5." - } - }; - - class package - { - uint16_t package-description = 500 - { - "<len>", - "Number of package description characters to display in brief pages. - The default is 500 (~ 80 characters * 6 lines)." - } - - uint16_t package-changes = 5000; - { - "<len>", - "Number of package changes characters to display in brief pages. The - default is 5000 (~ 80 chars x 60 lines)." - } - }; - - // Handler options. - // - - class packages: search, package_db, page, handler - { - string search-title = "Packages" - { - "<text>", - "Package search page title. It is placed inside XHTML5 <title> - element." - } - }; - - class package_details: package, search, package_db, page, handler - { - }; - - class package_version_details: package, package_db, - build, build_db, - page, - handler - { - }; - - class repository_details: package_db, page, handler - { - }; - - class build_task: build, build_db, handler - { - size_t build-task-request-max-size = 102400 - { - "<bytes>", - "The maximum size of the build task request manifest accepted. Note - that the HTTP POST request body is cached to retry database - transactions in the face of recoverable failures (deadlock, loss of - connection, etc). The default is 100K." - } - - size_t build-result-timeout = 10800 - { - "<seconds>", - "Time to wait before considering the expected task result lost. Must be - specified in seconds. The default is 3 hours." - } - }; - - class build_result: build, package_db, build_db, handler - { - size_t build-result-request-max-size = 10240000 - { - "<bytes>", - "The maximum size of the build result manifest accepted. Note that the - HTTP POST request body is cached to retry database transactions in the - face of recoverable failures (deadlock, loss of connection, etc). The - default is 10M." - } - }; - - class build_log: build, build_db, handler - { - }; - - class build_force: build, build_db, handler - { - }; - - class builds: build, build_db, page, handler - { - uint16_t build-page-entries = 20 - { - "<num>", - "Number of builds per page. The default is 20." - } - - uint16_t build-pages = 5 - { - "<num>", - "Number of pages in navigation (pager). The default is 5." - } - }; - - class build_configs: build, page, handler - { - uint16_t build-config-page-entries = 20 - { - "<num>", - "Number of build configurations per page. The default is 20." - } - - uint16_t build-config-pages = 5 - { - "<num>", - "Number of pages in navigation (pager). The default is 5." - } - }; - - class submit: page, handler - { - dir_path submit-data - { - "<dir>", - "The directory to save final submission data to. If unspecified, the - package submission functionality will be disabled. If specified, - then \cb{submit-temp} must be specified as well. See \l{brep The - \cb{build2} Repository Interface Manual} for more information on - package submission. - - Note that the directory path must be absolute and the directory - itself must exist and have read, write, and execute permissions - granted to the user that runs the web server." - } - - dir_path submit-temp - { - "<dir>", - "The directory to save temporary submission data to. Must be specified - if the package submission functionality is enabled. - - Note that this directory must be on the same filesystem and satisfy - the same requirements as \cb{submit-data}. It is also the user's - responsibility to clean it up after an unclean web server shutdown." - } - - size_t submit-max-size = 10485760 - { - "<bytes>", - "The maximum size of the submission data accepted. Note that currently - the entire submission request is read into memory. The default is - 10M." - } - - path submit-form - { - "<file>", - "The package submission form fragment. If specified, then its contents - are treated as an XHTML5 fragment that is inserted into the <body> - element of the submission page. If unspecified, then no submission - page will be displayed. Note that the file path must be absolute." - } - - string submit-email - { - "<email>", - "The package submission email. If specified, the submission request - and result manifests will be sent to this address. See \l{brep The - \cb{build2} Repository Interface Manual} for more information." - } - - path submit-handler - { - "<path>", - "The handler program to be executed on package submission. The handler - is executed as part of the HTTP request and is passed additional - arguments that can be specified with \cb{submit-handler-argument} - followed by the absolute path to the submission directory. See - \l{brep The \cb{build2} Repository Interface Manual} for more - information. Note that the program path must be absolute." - } - - strings submit-handler-argument - { - "<arg>", - "Additional arguments to be passed to the submission handler program - (see \cb{submit-handler} for details). Repeat this option to specify - multiple arguments." - } - - size_t submit-handler-timeout - { - "<seconds>", - "The submission handler program timeout in seconds. If specified and - the handler does not exit in the allotted time, then it is killed and - its termination is treated as abnormal." - } - }; - - class ci: page, handler - { - dir_path ci-data - { - "<dir>", - "The directory to save CI request data to. If unspecified, the - package CI functionality will be disabled. See \l{brep The - \cb{build2} Repository Interface Manual} for more information on - package CI. - - Note that the directory path must be absolute and the directory - itself must exist and have read, write, and execute permissions - granted to the user that runs the web server." - } - - path ci-form - { - "<file>", - "The package CI form fragment. If specified, then its contents are - treated as an XHTML5 fragment that is inserted into the <body> - element of the CI page. If unspecified, then no CI page will be - displayed. Note that the file path must be absolute." - } - - string ci-email - { - "<email>", - "The package CI email. If specified, the CI request and result - manifests will be sent to this address. See \l{brep The \cb{build2} - Repository Interface Manual} for more information." - } - - path ci-handler - { - "<path>", - "The handler program to be executed on CI request. The handler is - executed as part of the HTTP request and is passed additional - arguments that can be specified with \cb{ci-handler-argument} - followed by the absolute path to the CI request directory. See - \l{brep The \cb{build2} Repository Interface Manual} for more - information. Note that the program path must be absolute." - } - - strings ci-handler-argument - { - "<arg>", - "Additional arguments to be passed to the CI handler program (see - \cb{ci-handler} for details). Repeat this option to specify multiple - arguments." - } - - size_t ci-handler-timeout - { - "<seconds>", - "The CI handler program timeout in seconds. If specified and the - handler does not exit in the allotted time, then it is killed and - its termination is treated as abnormal." - } - }; - - class repository_root: handler - { - string root-global-view = "packages" - { - "<service>", - "The default view to display for the global repository root. The - <service> argument is one of the supported services (\c{packages}, - \c{builds}, \c{submit}, \c{ci}, etc). The default service is - packages." - } - - string root-tenant-view = "packages" - { - "<service>" - "The default view to display for the tenant repository root. The - <service> argument is one of the supported services (\c{packages}, - \c{builds}, \c{submit}, \c{ci}, etc). The default service is - packages." - } - }; - } - - // Web handler HTTP request parameters. - // - namespace params - { - // Use parameters long names in the C++ code, short aliases (if present) - // in HTTP URL. - // - class packages - { - // Display package search result list starting from this page. - // - uint16_t page | p; - - // Package search criteria. - // - // Note that the packages parameter is renamed to '_' by the root - // handler (see the request_proxy class for details). - // - string q | _; - }; - - class package_details - { - // Display package version search result list starting from this page. - // - uint16_t page | p; - - // Package version search criteria. - // - string query | q; - - // Page form. - // - page_form form | f = page_form::brief; - }; - - class package_version_details - { - // Page form. - // - page_form form | f = page_form::brief; - }; - - class repository_details - { - // No parameters so far. - // - }; - - class build_task - { - // Package repository canonical name (note: including pkg: type). - // - vector<string> repository | r; - }; - - class build_result - { - // No parameters so far. - // - }; - - class build_log - { - // No parameters so far. - // - }; - - // All parameters are non-optional. - // - class build_force - { - // Package name. - // - string package | pn; - - // Package version. May not be url-encoded, in which case the plus - // character is considered literally (rather than as the encoded space - // character). In other words, after url-decoding the space character is - // treated the same way as the plus character. - // - // @@ Make it of the version type? Maybe after it get moved to - // libbpkg/types.hxx or at least the second use case appear. - // - string version | pv; - - // Package build configuration. - // - string configuration | cf; - - // Toolchain name. - // - string toolchain_name | tn; - - // Toolchain version. May not be url-encoded (see above). - // - string toolchain_version | tv; - - // Package rebuild reason. Must not be empty. - // - string reason; - }; - - class builds - { - // Display packages build configurations list starting from this page. - // - uint16_t page | p; - - // Package builds query filter options. - // - - // Package name wildcard. An empty value is treated the same way as *. - // - // We used to generate URLs like: - // - // https://cppget.org/?builds&pn=bbot - // - // This looked a bit verbose, so now we produce URLs like: - // - // https://cppget.org/?builds=bbot - // - // To support the already distributed URLs the name_legacy (pn) parameter - // overrides the name (builds) parameter, if present. Note that the - // builds parameter is renamed to '_' by the root handler (see the - // request_proxy class for details). - // - string name | _; - string name_legacy | pn; - - // Package version. If empty or *, then no version constraint is applied. - // Otherwise the build package version must match the value exactly. - // - string version | pv; - - // Package build toolchain in the <name>-<version> form. If *, then no - // toolchain constraint is applied. Otherwise the build toolchain name - // and version must match the value exactly. - // - string toolchain | tc = "*"; - - // Package build configuration name wildcard. An empty value is treated - // the same way as *. - // - string configuration | cf; - - // Package build machine name wildcard. An empty value is treated the - // same way as *. - // - string machine | mn; - - // Package build target wildcard. An empty value is treated the same way - // as *. - // - string target | tg; - - // Package build result. If *, then no build result constraint is - // applied. Otherwise the value is supposed to be the one of the - // following (ordered) statuses: pending, building, success, warning, - // error, abort, abnormal. The first 3 statuses are checked for equality, - // the rest - for being greater or equal. - // - string result | rs = "*"; - }; - - class build_configs - { - // Note that the build-configs parameter is renamed to '_' by the root - // handler (see the request_proxy class for details). - // - string class_name | _ = "all"; - - // Display build configurations list starting from this page. - // - uint16_t page | p; - }; - - // Parameters, except simulate, must either be all present (actual - // submission) or absent (submission form request). - // - // Note also that besides these parameters there can be others. We don't - // recognize their semantics and just save them to the submission request - // manifest. - // - class submit - { - // Package archive file name. Must be <input type="file"/>. - // - // Note that it can potentially be not just a name but a file path and - // in the client's form (e.g., Windows). - // - string archive; - - // Package archive file SHA256 checksum. - // - string sha256sum; - - // Submission simulation outcome. - // - string simulate; - }; - - // Parameters, except simulate, must either be all present (actual CI - // request) or absent (CI form request). - // - // Note also that besides these parameters there can be others. We don't - // recognize their semantics and just save them to the CI request - // manifest. - // - class ci - { - // Package repository location. - // - // Note that the ci parameter is renamed to '_' by the root handler (see - // the request_proxy class for details). - // - bpkg::repository_location repository | _; - - // Package names/versions. - // - strings package; - - // Overrides file name. Must be <input type="file"/>. - // - // Note that we don't really need this name and only check if this - // parameter is specified to detect presence of the upload. - // - string overrides; - - // Submission simulation outcome. - // - string simulate; - }; - } -} |