AkurAI Build
Menu

AkurAI-Build

public

Latest change 42b1f6e0e604d1858cd129b8c3fa41817a61163c - feat: add managed deployment provenance by Ólafur Búi Ólafsson

ALTER TABLE deployments ADD COLUMN organization_id TEXT CHECK (organization_id IS NULL OR length(organization_id) BETWEEN 1 AND 128);
ALTER TABLE deployments ADD COLUMN workspace_id TEXT CHECK (workspace_id IS NULL OR length(workspace_id) BETWEEN 1 AND 128);
ALTER TABLE deployments ADD COLUMN installation_id TEXT CHECK (installation_id IS NULL OR length(installation_id) BETWEEN 1 AND 128);
ALTER TABLE deployments ADD COLUMN app_id TEXT CHECK (app_id IS NULL OR length(app_id) BETWEEN 1 AND 128);
ALTER TABLE deployments ADD COLUMN installation_revision INTEGER CHECK (installation_revision IS NULL OR installation_revision > 0);
ALTER TABLE deployments ADD COLUMN commit_sha TEXT CHECK (commit_sha IS NULL OR length(commit_sha) IN (40, 64));
ALTER TABLE deployments ADD COLUMN artifact_digest TEXT CHECK (artifact_digest IS NULL OR length(artifact_digest) = 64);
ALTER TABLE deployments ADD COLUMN result TEXT CHECK (result IS NULL OR result IN ('success', 'failure', 'rollback', 'recovery'));
ALTER TABLE deployments ADD COLUMN rollback_of_deployment_id INTEGER REFERENCES deployments(id) ON DELETE SET NULL;
ALTER TABLE deployments ADD COLUMN recovery_of_deployment_id INTEGER REFERENCES deployments(id) ON DELETE SET NULL;

CREATE TABLE managed_installations (
    installation_id TEXT PRIMARY KEY CHECK (length(installation_id) BETWEEN 1 AND 128),
    organization_id TEXT NOT NULL CHECK (length(organization_id) BETWEEN 1 AND 128),
    workspace_id TEXT NOT NULL CHECK (length(workspace_id) BETWEEN 1 AND 128),
    app_id TEXT NOT NULL CHECK (length(app_id) BETWEEN 1 AND 128),
    revision INTEGER NOT NULL CHECK (revision > 0),
    updated_at INTEGER NOT NULL DEFAULT (unixepoch())
) STRICT;

CREATE TABLE installation_revisions (
    installation_id TEXT NOT NULL REFERENCES managed_installations(installation_id) ON DELETE CASCADE,
    revision INTEGER NOT NULL CHECK (revision > 0),
    organization_id TEXT NOT NULL CHECK (length(organization_id) BETWEEN 1 AND 128),
    workspace_id TEXT NOT NULL CHECK (length(workspace_id) BETWEEN 1 AND 128),
    app_id TEXT NOT NULL CHECK (length(app_id) BETWEEN 1 AND 128),
    idempotency_key TEXT NOT NULL CHECK (length(idempotency_key) BETWEEN 1 AND 256),
    created_at INTEGER NOT NULL DEFAULT (unixepoch()),
    PRIMARY KEY (installation_id, revision),
    UNIQUE (installation_id, idempotency_key)
) STRICT;

CREATE INDEX installation_revisions_tenant
    ON installation_revisions(organization_id, workspace_id, installation_id, revision DESC);
CREATE INDEX deployments_metrics
    ON deployments(environment, status, created_at);
CREATE INDEX deployments_tenant
    ON deployments(organization_id, workspace_id, installation_id, created_at);
PRAGMA user_version = 4;