42 lines · 1.5 KB
-- pages: squashed from 0800_pages.sql, 0903_pages_domain_claims.sql.

-- Static site hosting: one site per repository, deployed into content-addressed R2 objects.
CREATE TABLE pages_sites (
  repo_id TEXT PRIMARY KEY REFERENCES repos(id) ON DELETE CASCADE,
  source TEXT NOT NULL CHECK (source IN ('branch', 'workflow')),
  branch TEXT NOT NULL,
  folder TEXT NOT NULL DEFAULT '',
  artifact_name TEXT NOT NULL DEFAULT 'pages',
  spa INTEGER NOT NULL DEFAULT 0,
  previews INTEGER NOT NULL DEFAULT 1,
  custom_domain TEXT UNIQUE,
  custom_hostname_id TEXT,
  domain_status TEXT,
  active_deployment_id TEXT,
  created_at INTEGER NOT NULL,
  updated_at INTEGER NOT NULL,
  domain_claimed_at INTEGER
);

CREATE TABLE pages_deployments (
  id TEXT PRIMARY KEY,
  repo_id TEXT NOT NULL REFERENCES repos(id) ON DELETE CASCADE,
  environment TEXT NOT NULL CHECK (environment IN ('production', 'preview')),
  pr_number INTEGER,
  source TEXT NOT NULL CHECK (source IN ('branch', 'artifact')),
  ref TEXT NOT NULL,
  sha TEXT NOT NULL,
  artifact_id TEXT,
  status TEXT NOT NULL CHECK (status IN ('queued', 'building', 'active', 'failed', 'superseded')),
  file_count INTEGER NOT NULL DEFAULT 0,
  total_bytes INTEGER NOT NULL DEFAULT 0,
  error TEXT,
  creator_id TEXT REFERENCES accounts(id),
  created_at INTEGER NOT NULL,
  completed_at INTEGER
);

CREATE INDEX pages_deployments_repo ON pages_deployments(repo_id, created_at DESC);