summaryrefslogblamecommitdiff
path: root/makima/migrations/20260205000001_chain_repositories.sql
blob: 5be8cf299cdd9ba03d79ed5e16aca7a8f87c5940 (plain) (tree)


























                                                                                                           
-- Chain repositories - allow chains to have multiple repositories
-- Similar to contract_repositories but for chains
CREATE TABLE IF NOT EXISTS chain_repositories (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    chain_id UUID NOT NULL REFERENCES chains(id) ON DELETE CASCADE,
    name VARCHAR(255) NOT NULL,                     -- display name / repo name
    repository_url VARCHAR(512),                    -- NULL for local repos
    local_path VARCHAR(512),                        -- local filesystem path (for local repos)
    source_type VARCHAR(32) NOT NULL DEFAULT 'remote', -- remote/local/managed
    status VARCHAR(32) NOT NULL DEFAULT 'ready',    -- ready/pending/creating/failed
    is_primary BOOLEAN NOT NULL DEFAULT false,      -- primary repo for contract defaults
    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

-- source_type values:
--   'remote'  = existing remote repo (GitHub, GitLab, etc) - has repository_url
--   'local'   = existing local repo - has local_path
--   'managed' = new repo created/managed by Makima daemon - gets repository_url after creation

CREATE INDEX idx_chain_repositories_chain_id ON chain_repositories(chain_id);
-- Only one primary per chain
CREATE UNIQUE INDEX idx_chain_repositories_primary ON chain_repositories(chain_id) WHERE is_primary = true;

-- Remove the old single repository fields from chains table (they're now in chain_repositories)
ALTER TABLE chains DROP COLUMN IF EXISTS repository_url;
ALTER TABLE chains DROP COLUMN IF EXISTS local_path;