aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--clean/clean.cxx163
-rw-r--r--libbrep/build.hxx2
-rw-r--r--libbrep/build.xml131
-rw-r--r--libbrep/package.hxx2
-rw-r--r--libbrep/package.xml531
-rw-r--r--tests/ci/ci-load.testscript24
-rw-r--r--tests/submit/submit-dir.testscript3
-rw-r--r--tests/submit/submit-pub.testscript6
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 &quot;C&quot;"/>
+ <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 &quot;C&quot;"/>
+ <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 &quot;C&quot;"/>
- <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 &quot;C&quot;"/>
- <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 &quot;C&quot;"/>
- <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 &quot;C&quot;"/>
- <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 &quot;C&quot;"/>
- <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 &quot;C&quot;"/>
- <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 &quot;C&quot;"/>
+ <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 &quot;C&quot;"/>
+ <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 &quot;C&quot;"/>
+ <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 &quot;C&quot;"/>
+ <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
%.+
\\