feat(registry): add workspace-scoped artifact metadata

This commit is contained in:
2026-08-27 02:18:09 +03:00
parent 497e1b740f
commit 2eb185b14a
29 changed files with 2264 additions and 181 deletions
@@ -1,5 +1,73 @@
use super::*;
#[tokio::test]
async fn failed_artifact_metadata_migration_rolls_back_schema_and_ledger() {
let _event_trigger_guard = EVENT_TRIGGER_TEST_LOCK.lock().await;
let database_url =
crank_test_support::postgres_schema_url("test_artifact_metadata_rollback").await;
let pool = sqlx::PgPool::connect(&database_url).await.unwrap();
MigrationAuthority::apply(&pool).await.unwrap();
remove_v12_schema(&pool).await;
let schema: String = sqlx::query_scalar("select current_schema()")
.fetch_one(&pool)
.await
.unwrap();
let failure_trigger = format!(
"create function reject_story21b_v12() returns event_trigger language plpgsql as $$
begin
if current_schema() = '{schema}' and current_query() like '%artifact_sources%' then
raise exception 'injected v12 ddl failure';
end if;
end $$;
create event trigger reject_story21b_v12 on ddl_command_start
execute function reject_story21b_v12();"
);
sqlx::raw_sql(sqlx::AssertSqlSafe(failure_trigger))
.execute(&pool)
.await
.unwrap();
let error = MigrationAuthority::apply(&pool).await.unwrap_err();
sqlx::raw_sql(
"drop event trigger reject_story21b_v12;
drop function reject_story21b_v12();",
)
.execute(&pool)
.await
.unwrap();
assert_eq!(error.code(), "apply_failed");
assert_eq!(error.version(), Some(12));
for relation in [
"artifact_blobs",
"artifact_blobs_pkey",
"artifact_blobs_artifact_ref_key",
"artifact_sources",
"artifact_sources_pkey",
"artifact_sources_workspace_created_idx",
] {
let present: bool = sqlx::query_scalar(
"select to_regclass(format('%I.%I', current_schema(), $1)) is not null",
)
.bind(relation)
.fetch_one(&pool)
.await
.unwrap();
assert!(!present, "{relation} must roll back with failed V12 DDL");
}
let ledger_v12: i64 =
sqlx::query_scalar("select count(*) from __crank_migrations where version = 12")
.fetch_one(&pool)
.await
.unwrap();
assert_eq!(ledger_v12, 0);
assert_eq!(
MigrationAuthority::preflight(&pool).await.unwrap(),
MigrationPreflight::MigrationRequired {
current: 11,
target: 12,
}
);
}
#[tokio::test]
async fn failed_consolidation_rolls_back_all_changes() {
let _event_trigger_guard = EVENT_TRIGGER_TEST_LOCK.lock().await;