diff options
-rw-r--r-- | clean/clean.cxx | 163 | ||||
-rw-r--r-- | libbrep/build.hxx | 2 | ||||
-rw-r--r-- | libbrep/build.xml | 131 | ||||
-rw-r--r-- | libbrep/package.hxx | 2 | ||||
-rw-r--r-- | libbrep/package.xml | 531 | ||||
-rw-r--r-- | tests/ci/ci-load.testscript | 24 | ||||
-rw-r--r-- | tests/submit/submit-dir.testscript | 3 | ||||
-rw-r--r-- | tests/submit/submit-pub.testscript | 6 |
8 files changed, 438 insertions, 424 deletions
diff --git a/clean/clean.cxx b/clean/clean.cxx index 828ae4b..55ddb10 100644 --- a/clean/clean.cxx +++ b/clean/clean.cxx @@ -313,76 +313,129 @@ namespace brep prep_pkg_query pkg_prep_query ( conn->prepare_query<build_package_version> ("package-query", pq)); + // On the recoverable database error we will retry querying/traversing + // builds in the current chunk, up to 10 times. If we still end up with + // the recoverable database error, then just skip this builds chunk. + // + const size_t max_retries (10); + size_t retry (max_retries); + + bool erased (false); + optional<string> re; + for (bool ne (true); ne; ) { - transaction t (conn->begin ()); + size_t n (0); - // Query builds. - // - auto builds (bld_prep_query.execute ()); - - if ((ne = !builds.empty ())) + try { - for (const auto& b: builds) - { - auto i (timeouts.find (b.toolchain_name)); - - timestamp et (i != timeouts.end () - ? i->second - : default_timeout); - - // Note that we don't consider the case when both the configuration - // and the package still exist but the package now excludes the - // configuration (configuration is now of the legacy class instead - // of the default class, etc). Should we handle this case and - // re-implement in a way brep-monitor does it? Probably not since - // the described situation is not very common and storing some extra - // builds which sooner or later will be wiped out due to the timeout - // is harmless. The current implementation, however, is simpler and - // consumes less resources in runtime (doesn't load build package - // objects, etc). - // - bool cleanup ( - // Check that the build is not stale. - // - b.timestamp <= et || + transaction t (conn->begin ()); + + // Query builds. + // + auto builds (bld_prep_query.execute ()); + + n = builds.size (); - // Check that the build configuration is still present. + size_t not_erased (0); + + if ((ne = (n != 0))) + { + for (const auto& b: builds) + { + auto i (timeouts.find (b.toolchain_name)); + + timestamp et (i != timeouts.end () + ? i->second + : default_timeout); + + // Note that we don't consider the case when both the + // configuration and the package still exist but the package now + // excludes the configuration (configuration is now of the legacy + // class instead of the default class, etc). Should we handle this + // case and re-implement in a way brep-monitor does it? Probably + // not since the described situation is not very common and + // storing some extra builds which sooner or later will be wiped + // out due to the timeout is harmless. The current implementation, + // however, is simpler and consumes less resources in runtime + // (doesn't load build package objects, etc). // - // Note that we unable to detect configuration changes and rely on - // periodic rebuilds to take care of that. + bool cleanup ( + // Check that the build is not stale. + // + b.timestamp <= et || + + // Check that the build configuration is still present. + // + // Note that we unable to detect configuration changes and rely + // on periodic rebuilds to take care of that. + // + configs_set.find ( + build_target_config_id { + b.target, b.target_config_name}) == configs_set.end ()); + + // Check that the build package still exists. // - configs_set.find ( - build_target_config_id {b.target, - b.target_config_name}) == - configs_set.end ()); - - // Check that the build package still exists. - // - if (!cleanup) - { - if (tnt != b.tenant || pkg_name != b.package_name) + if (!cleanup) { - tnt = b.tenant; - pkg_name = b.package_name; - package_versions.clear (); - - for (auto& p: pkg_prep_query.execute ()) - package_versions.emplace (move (p.version)); + if (tnt != b.tenant || pkg_name != b.package_name) + { + tnt = b.tenant; + pkg_name = b.package_name; + package_versions.clear (); + + for (auto& p: pkg_prep_query.execute ()) + package_versions.emplace (move (p.version)); + } + + cleanup = package_versions.find (b.package_version) == + package_versions.end (); } - cleanup = package_versions.find (b.package_version) == - package_versions.end (); + if (cleanup) + db.erase (b); + else + ++not_erased; } + } + + t.commit (); - if (cleanup) - db.erase (b); - else - ++offset; + if (!erased) + erased = (not_erased != n); + + offset += not_erased; + retry = max_retries; + } + catch (const recoverable& e) + { + // Re-iterate over the current builds chunk, unless there are no more + // attempts left. In the later case stash the error message, if not + // stashed yet, and skip the current builds chunk. + // + if (retry-- == 0) + { + offset += n; + retry = max_retries; + + if (!re) + re = e.what (); } + + tnt = ""; + pkg_name = package_name (); + package_versions.clear (); } + } - t.commit (); + // If we failed to erase some builds due to the recoverable database error + // and no builds have been erased at all, then terminate with the exit + // code 3 (recoverable database error). + // + if (re && !erased) + { + cerr << "recoverable database error: " << *re << endl; + return 3; } return 0; diff --git a/libbrep/build.hxx b/libbrep/build.hxx index 55fd42b..b485636 100644 --- a/libbrep/build.hxx +++ b/libbrep/build.hxx @@ -26,7 +26,7 @@ // Used by the data migration entries. // -#define LIBBREP_BUILD_SCHEMA_VERSION_BASE 20 +#define LIBBREP_BUILD_SCHEMA_VERSION_BASE 28 #pragma db model version(LIBBREP_BUILD_SCHEMA_VERSION_BASE, 28, closed) diff --git a/libbrep/build.xml b/libbrep/build.xml index 90b4b4f..d58e5f4 100644 --- a/libbrep/build.xml +++ b/libbrep/build.xml @@ -1,12 +1,61 @@ <changelog xmlns="http://www.codesynthesis.com/xmlns/odb/changelog" database="pgsql" schema-name="build" version="1"> - <changeset version="28"/> - - <changeset version="27"/> - - <changeset version="26"/> - - <changeset version="25"> - <add-table name="build_auxiliary_machines" kind="container"> + <model version="28"> + <table name="build" kind="object"> + <column name="package_tenant" type="TEXT" null="false"/> + <column name="package_name" type="CITEXT" null="false"/> + <column name="package_version_epoch" type="INTEGER" null="false"/> + <column name="package_version_canonical_upstream" type="TEXT" null="false"/> + <column name="package_version_canonical_release" type="TEXT" null="false" options="COLLATE "C""/> + <column name="package_version_revision" type="INTEGER" null="false"/> + <column name="target" type="TEXT" null="false"/> + <column name="target_config_name" type="TEXT" null="false"/> + <column name="package_config_name" type="TEXT" null="false"/> + <column name="toolchain_name" type="TEXT" null="false"/> + <column name="toolchain_version_epoch" type="INTEGER" null="false"/> + <column name="toolchain_version_canonical_upstream" type="TEXT" null="false"/> + <column name="toolchain_version_canonical_release" type="TEXT" null="false" options="COLLATE "C""/> + <column name="toolchain_version_revision" type="INTEGER" null="false"/> + <column name="package_version_upstream" type="TEXT" null="false"/> + <column name="package_version_release" type="TEXT" null="true"/> + <column name="toolchain_version_upstream" type="TEXT" null="false"/> + <column name="toolchain_version_release" type="TEXT" null="true"/> + <column name="state" type="TEXT" null="false"/> + <column name="interactive" type="TEXT" null="true"/> + <column name="timestamp" type="BIGINT" null="false"/> + <column name="force" type="TEXT" null="false"/> + <column name="status" type="TEXT" null="true"/> + <column name="soft_timestamp" type="BIGINT" null="false"/> + <column name="hard_timestamp" type="BIGINT" null="false"/> + <column name="agent_fingerprint" type="TEXT" null="true"/> + <column name="agent_challenge" type="TEXT" null="true"/> + <column name="controller_checksum" type="TEXT" null="false"/> + <column name="machine_checksum" type="TEXT" null="false"/> + <column name="agent_checksum" type="TEXT" null="true"/> + <column name="worker_checksum" type="TEXT" null="true"/> + <column name="dependency_checksum" type="TEXT" null="true"/> + <column name="machine" type="TEXT" null="false"/> + <column name="machine_summary" type="TEXT" null="false"/> + <primary-key> + <column name="package_tenant"/> + <column name="package_name"/> + <column name="package_version_epoch"/> + <column name="package_version_canonical_upstream"/> + <column name="package_version_canonical_release"/> + <column name="package_version_revision"/> + <column name="target"/> + <column name="target_config_name"/> + <column name="package_config_name"/> + <column name="toolchain_name"/> + <column name="toolchain_version_epoch"/> + <column name="toolchain_version_canonical_upstream"/> + <column name="toolchain_version_canonical_release"/> + <column name="toolchain_version_revision"/> + </primary-key> + <index name="build_timestamp_i"> + <column name="timestamp"/> + </index> + </table> + <table name="build_auxiliary_machines" kind="container"> <column name="package_tenant" type="TEXT" null="false"/> <column name="package_name" type="CITEXT" null="false"/> <column name="package_version_epoch" type="INTEGER" null="false"/> @@ -75,72 +124,6 @@ <index name="build_auxiliary_machines_index_i"> <column name="index"/> </index> - </add-table> - </changeset> - - <changeset version="24"/> - - <changeset version="23"/> - - <changeset version="22"/> - - <changeset version="21"/> - - <model version="20"> - <table name="build" kind="object"> - <column name="package_tenant" type="TEXT" null="false"/> - <column name="package_name" type="CITEXT" null="false"/> - <column name="package_version_epoch" type="INTEGER" null="false"/> - <column name="package_version_canonical_upstream" type="TEXT" null="false"/> - <column name="package_version_canonical_release" type="TEXT" null="false" options="COLLATE "C""/> - <column name="package_version_revision" type="INTEGER" null="false"/> - <column name="target" type="TEXT" null="false"/> - <column name="target_config_name" type="TEXT" null="false"/> - <column name="package_config_name" type="TEXT" null="false"/> - <column name="toolchain_name" type="TEXT" null="false"/> - <column name="toolchain_version_epoch" type="INTEGER" null="false"/> - <column name="toolchain_version_canonical_upstream" type="TEXT" null="false"/> - <column name="toolchain_version_canonical_release" type="TEXT" null="false" options="COLLATE "C""/> - <column name="toolchain_version_revision" type="INTEGER" null="false"/> - <column name="package_version_upstream" type="TEXT" null="false"/> - <column name="package_version_release" type="TEXT" null="true"/> - <column name="toolchain_version_upstream" type="TEXT" null="false"/> - <column name="toolchain_version_release" type="TEXT" null="true"/> - <column name="state" type="TEXT" null="false"/> - <column name="interactive" type="TEXT" null="true"/> - <column name="timestamp" type="BIGINT" null="false"/> - <column name="force" type="TEXT" null="false"/> - <column name="status" type="TEXT" null="true"/> - <column name="soft_timestamp" type="BIGINT" null="false"/> - <column name="hard_timestamp" type="BIGINT" null="false"/> - <column name="agent_fingerprint" type="TEXT" null="true"/> - <column name="agent_challenge" type="TEXT" null="true"/> - <column name="machine" type="TEXT" null="false"/> - <column name="machine_summary" type="TEXT" null="false"/> - <column name="controller_checksum" type="TEXT" null="false"/> - <column name="machine_checksum" type="TEXT" null="false"/> - <column name="agent_checksum" type="TEXT" null="true"/> - <column name="worker_checksum" type="TEXT" null="true"/> - <column name="dependency_checksum" type="TEXT" null="true"/> - <primary-key> - <column name="package_tenant"/> - <column name="package_name"/> - <column name="package_version_epoch"/> - <column name="package_version_canonical_upstream"/> - <column name="package_version_canonical_release"/> - <column name="package_version_revision"/> - <column name="target"/> - <column name="target_config_name"/> - <column name="package_config_name"/> - <column name="toolchain_name"/> - <column name="toolchain_version_epoch"/> - <column name="toolchain_version_canonical_upstream"/> - <column name="toolchain_version_canonical_release"/> - <column name="toolchain_version_revision"/> - </primary-key> - <index name="build_timestamp_i"> - <column name="timestamp"/> - </index> </table> <table name="build_results" kind="container"> <column name="package_tenant" type="TEXT" null="false"/> diff --git a/libbrep/package.hxx b/libbrep/package.hxx index 76c5836..c06d8d3 100644 --- a/libbrep/package.hxx +++ b/libbrep/package.hxx @@ -18,7 +18,7 @@ // Used by the data migration entries. // -#define LIBBREP_PACKAGE_SCHEMA_VERSION_BASE 27 +#define LIBBREP_PACKAGE_SCHEMA_VERSION_BASE 34 #pragma db model version(LIBBREP_PACKAGE_SCHEMA_VERSION_BASE, 34, closed) diff --git a/libbrep/package.xml b/libbrep/package.xml index f33119e..42cad89 100644 --- a/libbrep/package.xml +++ b/libbrep/package.xml @@ -1,295 +1,37 @@ <changelog xmlns="http://www.codesynthesis.com/xmlns/odb/changelog" database="pgsql" schema-name="package" version="1"> - <changeset version="34"> - <alter-table name="tenant"> - <add-column name="unloaded_timestamp" type="BIGINT" null="true"/> - <add-column name="unloaded_notify_interval" type="BIGINT" null="true"/> - <add-index name="tenant_unloaded_timestamp_i"> - <column name="unloaded_timestamp"/> - </add-index> - </alter-table> - </changeset> - - <changeset version="33"> - <add-table name="public_key" kind="object"> - <column name="tenant" type="TEXT" null="false"/> - <column name="fingerprint" type="TEXT" null="false"/> - <column name="data" type="TEXT" null="false"/> - <primary-key> - <column name="tenant"/> - <column name="fingerprint"/> - </primary-key> - <foreign-key name="tenant_fk" deferrable="DEFERRED"> - <column name="tenant"/> - <references table="tenant"> - <column name="id"/> - </references> - </foreign-key> - </add-table> - <alter-table name="package"> - <add-column name="custom_bot" type="BOOLEAN" null="true"/> - </alter-table> - <add-table name="package_build_bot_keys" kind="container"> - <column name="tenant" type="TEXT" null="false"/> - <column name="name" type="CITEXT" null="false"/> - <column name="version_epoch" type="INTEGER" null="false"/> - <column name="version_canonical_upstream" type="TEXT" null="false"/> - <column name="version_canonical_release" type="TEXT" null="false" options="COLLATE "C""/> - <column name="version_revision" type="INTEGER" null="false"/> - <column name="index" type="BIGINT" null="false"/> - <column name="key_tenant" type="TEXT" null="false"/> - <column name="key_fingerprint" type="TEXT" null="false"/> - <foreign-key name="tenant_fk" deferrable="DEFERRED"> - <column name="tenant"/> - <references table="tenant"> - <column name="id"/> - </references> - </foreign-key> - <foreign-key name="object_id_fk" on-delete="CASCADE"> - <column name="tenant"/> - <column name="name"/> - <column name="version_epoch"/> - <column name="version_canonical_upstream"/> - <column name="version_canonical_release"/> - <column name="version_revision"/> - <references table="package"> - <column name="tenant"/> - <column name="name"/> - <column name="version_epoch"/> - <column name="version_canonical_upstream"/> - <column name="version_canonical_release"/> - <column name="version_revision"/> - </references> - </foreign-key> - <index name="package_build_bot_keys_object_id_i"> - <column name="tenant"/> - <column name="name"/> - <column name="version_epoch"/> - <column name="version_canonical_upstream"/> - <column name="version_canonical_release"/> - <column name="version_revision"/> - </index> - <index name="package_build_bot_keys_index_i"> - <column name="index"/> - </index> - <foreign-key name="key_tenant_fk" deferrable="DEFERRED"> - <column name="key_tenant"/> - <references table="tenant"> - <column name="id"/> - </references> - </foreign-key> - <foreign-key name="key_fk" deferrable="DEFERRED"> - <column name="key_tenant"/> - <column name="key_fingerprint"/> - <references table="public_key"> - <column name="tenant"/> - <column name="fingerprint"/> - </references> - </foreign-key> - </add-table> - <add-table name="package_build_config_bot_keys" kind="container"> - <column name="tenant" type="TEXT" null="false"/> - <column name="name" type="CITEXT" null="false"/> - <column name="version_epoch" type="INTEGER" null="false"/> - <column name="version_canonical_upstream" type="TEXT" null="false"/> - <column name="version_canonical_release" type="TEXT" null="false" options="COLLATE "C""/> - <column name="version_revision" type="INTEGER" null="false"/> - <column name="config_index" type="BIGINT" null="false"/> - <column name="index" type="BIGINT" null="false"/> - <column name="key_tenant" type="TEXT" null="false"/> - <column name="key_fingerprint" type="TEXT" null="false"/> - <foreign-key name="tenant_fk" deferrable="DEFERRED"> - <column name="tenant"/> - <references table="tenant"> - <column name="id"/> - </references> - </foreign-key> - <foreign-key name="object_id_fk" on-delete="CASCADE"> - <column name="tenant"/> - <column name="name"/> - <column name="version_epoch"/> - <column name="version_canonical_upstream"/> - <column name="version_canonical_release"/> - <column name="version_revision"/> - <references table="package"> - <column name="tenant"/> - <column name="name"/> - <column name="version_epoch"/> - <column name="version_canonical_upstream"/> - <column name="version_canonical_release"/> - <column name="version_revision"/> - </references> - </foreign-key> - <index name="package_build_config_bot_keys_object_id_i"> - <column name="tenant"/> - <column name="name"/> - <column name="version_epoch"/> - <column name="version_canonical_upstream"/> - <column name="version_canonical_release"/> - <column name="version_revision"/> - </index> - <foreign-key name="key_tenant_fk" deferrable="DEFERRED"> - <column name="key_tenant"/> - <references table="tenant"> - <column name="id"/> - </references> - </foreign-key> - <foreign-key name="key_fk" deferrable="DEFERRED"> - <column name="key_tenant"/> - <column name="key_fingerprint"/> - <references table="public_key"> - <column name="tenant"/> - <column name="fingerprint"/> - </references> - </foreign-key> - </add-table> - </changeset> - - <changeset version="32"> - <alter-table name="tenant"> - <add-column name="build_toolchain_name" type="TEXT" null="true"/> - <add-column name="build_toolchain_version_epoch" type="INTEGER" null="true"/> - <add-column name="build_toolchain_version_canonical_upstream" type="TEXT" null="true"/> - <add-column name="build_toolchain_version_canonical_release" type="TEXT" null="true"/> - <add-column name="build_toolchain_version_revision" type="INTEGER" null="true"/> - <add-column name="build_toolchain_version_upstream" type="TEXT" null="true"/> - <add-column name="build_toolchain_version_release" type="TEXT" null="true"/> - </alter-table> - </changeset> - - <changeset version="31"> - <add-table name="package_build_auxiliaries" kind="container"> - <column name="tenant" type="TEXT" null="false"/> - <column name="name" type="CITEXT" null="false"/> - <column name="version_epoch" type="INTEGER" null="false"/> - <column name="version_canonical_upstream" type="TEXT" null="false"/> - <column name="version_canonical_release" type="TEXT" null="false" options="COLLATE "C""/> - <column name="version_revision" type="INTEGER" null="false"/> - <column name="index" type="BIGINT" null="false"/> - <column name="environment_name" type="TEXT" null="false"/> - <column name="config" type="TEXT" null="false"/> - <column name="comment" type="TEXT" null="false"/> - <foreign-key name="tenant_fk" deferrable="DEFERRED"> - <column name="tenant"/> - <references table="tenant"> - <column name="id"/> - </references> - </foreign-key> - <foreign-key name="object_id_fk" on-delete="CASCADE"> - <column name="tenant"/> - <column name="name"/> - <column name="version_epoch"/> - <column name="version_canonical_upstream"/> - <column name="version_canonical_release"/> - <column name="version_revision"/> - <references table="package"> - <column name="tenant"/> - <column name="name"/> - <column name="version_epoch"/> - <column name="version_canonical_upstream"/> - <column name="version_canonical_release"/> - <column name="version_revision"/> - </references> - </foreign-key> - <index name="package_build_auxiliaries_object_id_i"> - <column name="tenant"/> - <column name="name"/> - <column name="version_epoch"/> - <column name="version_canonical_upstream"/> - <column name="version_canonical_release"/> - <column name="version_revision"/> - </index> - <index name="package_build_auxiliaries_index_i"> - <column name="index"/> - </index> - </add-table> - <add-table name="package_build_config_auxiliaries" kind="container"> - <column name="tenant" type="TEXT" null="false"/> - <column name="name" type="CITEXT" null="false"/> - <column name="version_epoch" type="INTEGER" null="false"/> - <column name="version_canonical_upstream" type="TEXT" null="false"/> - <column name="version_canonical_release" type="TEXT" null="false" options="COLLATE "C""/> - <column name="version_revision" type="INTEGER" null="false"/> - <column name="config_index" type="BIGINT" null="false"/> - <column name="index" type="BIGINT" null="false"/> - <column name="environment_name" type="TEXT" null="false"/> - <column name="config" type="TEXT" null="false"/> - <column name="comment" type="TEXT" null="false"/> - <foreign-key name="tenant_fk" deferrable="DEFERRED"> - <column name="tenant"/> - <references table="tenant"> - <column name="id"/> - </references> - </foreign-key> - <foreign-key name="object_id_fk" on-delete="CASCADE"> - <column name="tenant"/> - <column name="name"/> - <column name="version_epoch"/> - <column name="version_canonical_upstream"/> - <column name="version_canonical_release"/> - <column name="version_revision"/> - <references table="package"> - <column name="tenant"/> - <column name="name"/> - <column name="version_epoch"/> - <column name="version_canonical_upstream"/> - <column name="version_canonical_release"/> - <column name="version_revision"/> - </references> - </foreign-key> - <index name="package_build_config_auxiliaries_object_id_i"> - <column name="tenant"/> - <column name="name"/> - <column name="version_epoch"/> - <column name="version_canonical_upstream"/> - <column name="version_canonical_release"/> - <column name="version_revision"/> - </index> - </add-table> - </changeset> - - <changeset version="30"> - <alter-table name="tenant"> - <add-column name="service_id" type="TEXT" null="true"/> - <add-column name="service_type" type="TEXT" null="true"/> - <add-column name="service_data" type="TEXT" null="true"/> - <add-column name="queued_timestamp" type="BIGINT" null="true"/> - <add-index name="tenant_service_i" type="UNIQUE"> - <column name="service_id"/> - <column name="service_type"/> - </add-index> - <add-index name="tenant_service_id_i"> - <column name="service_id"/> - </add-index> - </alter-table> - </changeset> - - <changeset version="29"> - <alter-table name="package_tests"> - <add-column name="test_enable" type="TEXT" null="true"/> - </alter-table> - </changeset> - - <changeset version="28"> - <alter-table name="package_build_configs"> - <add-column name="config_email" type="TEXT" null="true"/> - <add-column name="config_email_comment" type="TEXT" null="true"/> - <add-column name="config_warning_email" type="TEXT" null="true"/> - <add-column name="config_warning_email_comment" type="TEXT" null="true"/> - <add-column name="config_error_email" type="TEXT" null="true"/> - <add-column name="config_error_email_comment" type="TEXT" null="true"/> - </alter-table> - </changeset> - - <model version="27"> + <model version="34"> <table name="tenant" kind="object"> <column name="id" type="TEXT" null="false"/> <column name="private" type="BOOLEAN" null="false"/> <column name="interactive" type="TEXT" null="true"/> <column name="creation_timestamp" type="BIGINT" null="false"/> <column name="archived" type="BOOLEAN" null="false"/> + <column name="service_id" type="TEXT" null="true"/> + <column name="service_type" type="TEXT" null="true"/> + <column name="service_data" type="TEXT" null="true"/> + <column name="unloaded_timestamp" type="BIGINT" null="true"/> + <column name="unloaded_notify_interval" type="BIGINT" null="true"/> + <column name="queued_timestamp" type="BIGINT" null="true"/> + <column name="build_toolchain_name" type="TEXT" null="true"/> + <column name="build_toolchain_version_epoch" type="INTEGER" null="true"/> + <column name="build_toolchain_version_canonical_upstream" type="TEXT" null="true"/> + <column name="build_toolchain_version_canonical_release" type="TEXT" null="true"/> + <column name="build_toolchain_version_revision" type="INTEGER" null="true"/> + <column name="build_toolchain_version_upstream" type="TEXT" null="true"/> + <column name="build_toolchain_version_release" type="TEXT" null="true"/> <primary-key> <column name="id"/> </primary-key> + <index name="tenant_service_i" type="UNIQUE"> + <column name="service_id"/> + <column name="service_type"/> + </index> + <index name="tenant_service_id_i"> + <column name="service_id"/> + </index> + <index name="tenant_unloaded_timestamp_i"> + <column name="unloaded_timestamp"/> + </index> </table> <table name="repository" kind="object"> <column name="tenant" type="TEXT" null="false"/> @@ -409,6 +151,21 @@ </references> </foreign-key> </table> + <table name="public_key" kind="object"> + <column name="tenant" type="TEXT" null="false"/> + <column name="fingerprint" type="TEXT" null="false"/> + <column name="data" type="TEXT" null="false"/> + <primary-key> + <column name="tenant"/> + <column name="fingerprint"/> + </primary-key> + <foreign-key name="tenant_fk" deferrable="DEFERRED"> + <column name="tenant"/> + <references table="tenant"> + <column name="id"/> + </references> + </foreign-key> + </table> <table name="package" kind="object"> <column name="tenant" type="TEXT" null="false"/> <column name="name" type="CITEXT" null="false"/> @@ -454,6 +211,7 @@ <column name="sha256sum" type="TEXT" null="true"/> <column name="buildable" type="BOOLEAN" null="false"/> <column name="unbuildable_reason" type="TEXT" null="true"/> + <column name="custom_bot" type="BOOLEAN" null="true"/> <column name="search_index" type="tsvector" null="true"/> <primary-key> <column name="tenant"/> @@ -989,6 +747,7 @@ <column name="test_package_version_revision" type="INTEGER" null="true"/> <column name="test_type" type="TEXT" null="false"/> <column name="test_buildtime" type="BOOLEAN" null="false"/> + <column name="test_enable" type="TEXT" null="true"/> <column name="test_reflect" type="TEXT" null="true"/> <foreign-key name="tenant_fk" deferrable="DEFERRED"> <column name="tenant"/> @@ -1136,6 +895,109 @@ <column name="index"/> </index> </table> + <table name="package_build_auxiliaries" kind="container"> + <column name="tenant" type="TEXT" null="false"/> + <column name="name" type="CITEXT" null="false"/> + <column name="version_epoch" type="INTEGER" null="false"/> + <column name="version_canonical_upstream" type="TEXT" null="false"/> + <column name="version_canonical_release" type="TEXT" null="false" options="COLLATE "C""/> + <column name="version_revision" type="INTEGER" null="false"/> + <column name="index" type="BIGINT" null="false"/> + <column name="environment_name" type="TEXT" null="false"/> + <column name="config" type="TEXT" null="false"/> + <column name="comment" type="TEXT" null="false"/> + <foreign-key name="tenant_fk" deferrable="DEFERRED"> + <column name="tenant"/> + <references table="tenant"> + <column name="id"/> + </references> + </foreign-key> + <foreign-key name="object_id_fk" on-delete="CASCADE"> + <column name="tenant"/> + <column name="name"/> + <column name="version_epoch"/> + <column name="version_canonical_upstream"/> + <column name="version_canonical_release"/> + <column name="version_revision"/> + <references table="package"> + <column name="tenant"/> + <column name="name"/> + <column name="version_epoch"/> + <column name="version_canonical_upstream"/> + <column name="version_canonical_release"/> + <column name="version_revision"/> + </references> + </foreign-key> + <index name="package_build_auxiliaries_object_id_i"> + <column name="tenant"/> + <column name="name"/> + <column name="version_epoch"/> + <column name="version_canonical_upstream"/> + <column name="version_canonical_release"/> + <column name="version_revision"/> + </index> + <index name="package_build_auxiliaries_index_i"> + <column name="index"/> + </index> + </table> + <table name="package_build_bot_keys" kind="container"> + <column name="tenant" type="TEXT" null="false"/> + <column name="name" type="CITEXT" null="false"/> + <column name="version_epoch" type="INTEGER" null="false"/> + <column name="version_canonical_upstream" type="TEXT" null="false"/> + <column name="version_canonical_release" type="TEXT" null="false" options="COLLATE "C""/> + <column name="version_revision" type="INTEGER" null="false"/> + <column name="index" type="BIGINT" null="false"/> + <column name="key_tenant" type="TEXT" null="false"/> + <column name="key_fingerprint" type="TEXT" null="false"/> + <foreign-key name="tenant_fk" deferrable="DEFERRED"> + <column name="tenant"/> + <references table="tenant"> + <column name="id"/> + </references> + </foreign-key> + <foreign-key name="object_id_fk" on-delete="CASCADE"> + <column name="tenant"/> + <column name="name"/> + <column name="version_epoch"/> + <column name="version_canonical_upstream"/> + <column name="version_canonical_release"/> + <column name="version_revision"/> + <references table="package"> + <column name="tenant"/> + <column name="name"/> + <column name="version_epoch"/> + <column name="version_canonical_upstream"/> + <column name="version_canonical_release"/> + <column name="version_revision"/> + </references> + </foreign-key> + <index name="package_build_bot_keys_object_id_i"> + <column name="tenant"/> + <column name="name"/> + <column name="version_epoch"/> + <column name="version_canonical_upstream"/> + <column name="version_canonical_release"/> + <column name="version_revision"/> + </index> + <index name="package_build_bot_keys_index_i"> + <column name="index"/> + </index> + <foreign-key name="key_tenant_fk" deferrable="DEFERRED"> + <column name="key_tenant"/> + <references table="tenant"> + <column name="id"/> + </references> + </foreign-key> + <foreign-key name="key_fk" deferrable="DEFERRED"> + <column name="key_tenant"/> + <column name="key_fingerprint"/> + <references table="public_key"> + <column name="tenant"/> + <column name="fingerprint"/> + </references> + </foreign-key> + </table> <table name="package_build_configs" kind="container"> <column name="tenant" type="TEXT" null="false"/> <column name="name" type="CITEXT" null="false"/> @@ -1147,6 +1009,12 @@ <column name="config_name" type="TEXT" null="false"/> <column name="config_arguments" type="TEXT" null="false"/> <column name="config_comment" type="TEXT" null="false"/> + <column name="config_email" type="TEXT" null="true"/> + <column name="config_email_comment" type="TEXT" null="true"/> + <column name="config_warning_email" type="TEXT" null="true"/> + <column name="config_warning_email_comment" type="TEXT" null="true"/> + <column name="config_error_email" type="TEXT" null="true"/> + <column name="config_error_email_comment" type="TEXT" null="true"/> <foreign-key name="tenant_fk" deferrable="DEFERRED"> <column name="tenant"/> <references table="tenant"> @@ -1267,6 +1135,105 @@ <column name="version_revision"/> </index> </table> + <table name="package_build_config_auxiliaries" kind="container"> + <column name="tenant" type="TEXT" null="false"/> + <column name="name" type="CITEXT" null="false"/> + <column name="version_epoch" type="INTEGER" null="false"/> + <column name="version_canonical_upstream" type="TEXT" null="false"/> + <column name="version_canonical_release" type="TEXT" null="false" options="COLLATE "C""/> + <column name="version_revision" type="INTEGER" null="false"/> + <column name="config_index" type="BIGINT" null="false"/> + <column name="index" type="BIGINT" null="false"/> + <column name="environment_name" type="TEXT" null="false"/> + <column name="config" type="TEXT" null="false"/> + <column name="comment" type="TEXT" null="false"/> + <foreign-key name="tenant_fk" deferrable="DEFERRED"> + <column name="tenant"/> + <references table="tenant"> + <column name="id"/> + </references> + </foreign-key> + <foreign-key name="object_id_fk" on-delete="CASCADE"> + <column name="tenant"/> + <column name="name"/> + <column name="version_epoch"/> + <column name="version_canonical_upstream"/> + <column name="version_canonical_release"/> + <column name="version_revision"/> + <references table="package"> + <column name="tenant"/> + <column name="name"/> + <column name="version_epoch"/> + <column name="version_canonical_upstream"/> + <column name="version_canonical_release"/> + <column name="version_revision"/> + </references> + </foreign-key> + <index name="package_build_config_auxiliaries_object_id_i"> + <column name="tenant"/> + <column name="name"/> + <column name="version_epoch"/> + <column name="version_canonical_upstream"/> + <column name="version_canonical_release"/> + <column name="version_revision"/> + </index> + </table> + <table name="package_build_config_bot_keys" kind="container"> + <column name="tenant" type="TEXT" null="false"/> + <column name="name" type="CITEXT" null="false"/> + <column name="version_epoch" type="INTEGER" null="false"/> + <column name="version_canonical_upstream" type="TEXT" null="false"/> + <column name="version_canonical_release" type="TEXT" null="false" options="COLLATE "C""/> + <column name="version_revision" type="INTEGER" null="false"/> + <column name="config_index" type="BIGINT" null="false"/> + <column name="index" type="BIGINT" null="false"/> + <column name="key_tenant" type="TEXT" null="false"/> + <column name="key_fingerprint" type="TEXT" null="false"/> + <foreign-key name="tenant_fk" deferrable="DEFERRED"> + <column name="tenant"/> + <references table="tenant"> + <column name="id"/> + </references> + </foreign-key> + <foreign-key name="object_id_fk" on-delete="CASCADE"> + <column name="tenant"/> + <column name="name"/> + <column name="version_epoch"/> + <column name="version_canonical_upstream"/> + <column name="version_canonical_release"/> + <column name="version_revision"/> + <references table="package"> + <column name="tenant"/> + <column name="name"/> + <column name="version_epoch"/> + <column name="version_canonical_upstream"/> + <column name="version_canonical_release"/> + <column name="version_revision"/> + </references> + </foreign-key> + <index name="package_build_config_bot_keys_object_id_i"> + <column name="tenant"/> + <column name="name"/> + <column name="version_epoch"/> + <column name="version_canonical_upstream"/> + <column name="version_canonical_release"/> + <column name="version_revision"/> + </index> + <foreign-key name="key_tenant_fk" deferrable="DEFERRED"> + <column name="key_tenant"/> + <references table="tenant"> + <column name="id"/> + </references> + </foreign-key> + <foreign-key name="key_fk" deferrable="DEFERRED"> + <column name="key_tenant"/> + <column name="key_fingerprint"/> + <references table="public_key"> + <column name="tenant"/> + <column name="fingerprint"/> + </references> + </foreign-key> + </table> <table name="package_other_repositories" kind="container"> <column name="tenant" type="TEXT" null="false"/> <column name="name" type="CITEXT" null="false"/> diff --git a/tests/ci/ci-load.testscript b/tests/ci/ci-load.testscript index eb9ba7c..ff75493 100644 --- a/tests/ci/ci-load.testscript +++ b/tests/ci/ci-load.testscript @@ -105,11 +105,13 @@ email: user@example.org %depends: \\* build2 .+% %depends: \\* bpkg .+% - bootstrap-build:\\ + bootstrap-build: + \\ project = libhello %.+ \\ - root-build:\\ + root-build: + \\ cxx.std = latest %.+ \\ @@ -124,11 +126,13 @@ email: user@example.org %depends: \\* build2 .+% %depends: \\* bpkg .+% - bootstrap-build:\\ + bootstrap-build: + \\ project = hello %.+ \\ - root-build:\\ + root-build: + \\ cxx.std = latest %.+ \\ @@ -164,11 +168,13 @@ email: user@example.org %depends: \\* build2 .+% %depends: \\* bpkg .+% - bootstrap-build:\\ + bootstrap-build: + \\ project = hello %.+ \\ - root-build:\\ + root-build: + \\ cxx.std = latest %.+ \\ @@ -205,11 +211,13 @@ email: user@example.org %depends: \\* build2 .+% %depends: \\* bpkg .+% - bootstrap-build:\\ + bootstrap-build: + \\ project = libhello %.+ \\ - root-build:\\ + root-build: + \\ cxx.std = latest %.+ \\ diff --git a/tests/submit/submit-dir.testscript b/tests/submit/submit-dir.testscript index 285710f..3bc908f 100644 --- a/tests/submit/submit-dir.testscript +++ b/tests/submit/submit-dir.testscript @@ -77,7 +77,8 @@ $* >>"EOO" : 1 status: 400 - message:\\ + message: + \\ package archive is not valid gzip: libhello-0.1.0.tar.gz: not in gzip format diff --git a/tests/submit/submit-pub.testscript b/tests/submit/submit-pub.testscript index 8c042a7..a846b82 100644 --- a/tests/submit/submit-pub.testscript +++ b/tests/submit/submit-pub.testscript @@ -182,7 +182,8 @@ clone_root_rep = [cmdline] cp --no-cleanup -r $root_rep ./ &pkg-1/*** &?pkg.lock $* $~/brep-loader $~/pkg $~/$data_dir >>~"%EOO%" : 1 status: 400 - message:\\ + message: + \\ submitted archive is not a valid package %.+ \\ @@ -203,7 +204,8 @@ clone_root_rep = [cmdline] cp --no-cleanup -r $root_rep ./ &pkg-1/*** &?pkg.lock $* $~/brep-loader $~/pkg $~/$data_dir >>~"%EOO%" : 1 status: 400 - message:\\ + message: + \\ unable to add package to repository %.+ \\ |