store

package
v0.9.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 14, 2026 License: Apache-2.0 Imports: 9 Imported by: 0

Documentation

Overview

Package store is the server's SQLite persistence layer: executions, their stack/edge subgraph, and per-(class,target) approval gate state. Pure-Go SQLite (modernc.org/sqlite, no cgo); schema migrated by goose at Open.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func BumpRev

func BumpRev(db *sql.DB, id string) error

BumpRev increments the cache-bust revision (used by the rendered SVG URL so GitHub's image proxy re-fetches on each state change).

func GetStackOutput added in v0.6.0

func GetStackOutput(db *sql.DB, execID, stack, kind string) (pointer, excerpt string, ok bool, err error)

GetStackOutput returns the stored pointer + excerpt for a stack's output kind. ok is false when none is recorded.

func IsClassified

func IsClassified(db *sql.DB, pr int, environment string) (bool, error)

IsClassified reports whether a plan ever classified (pr, environment).

func LatestExecutionID added in v0.6.0

func LatestExecutionID(db *sql.DB, pr int, environment string) (string, bool)

LatestExecutionID returns the most recent execution id for (pr, environment). ok is false when none exists.

func LatestVerifyExecutionID added in v0.6.0

func LatestVerifyExecutionID(db *sql.DB, pr int, environment string) (string, bool)

LatestVerifyExecutionID returns the most recent verify-context execution id for (pr, environment) — i.e. a run whose status_context begins with "verify". ok is false when none exists.

func LoadGraph

func LoadGraph(db *sql.DB, id string) (events.Graph, error)

LoadGraph loads the stacks (ordered by path) and edges of an execution.

func MarkActive

func MarkActive(db *sql.DB, pr int, environment string) error

MarkActive flips every stored target for (pr, environment) to ACTIVE, so the gate drops out of PendingGates and the live approval panel shows approved rather than the stale request-time waiting state.

func MarkClassified

func MarkClassified(db *sql.DB, pr int, environment string) error

MarkClassified records that (pr, environment) was classified by a plan, even when the plan was clean (zero gate_targets). Idempotent.

func Open

func Open(dsn string) (*sql.DB, error)

Open opens the SQLite database at dsn, enables WAL, and applies all migrations. dsn is a modernc.org/sqlite DSN, e.g. a file path or "file:/data/server.db".

func SetCheckRunID

func SetCheckRunID(db *sql.DB, id string, checkRunID int64) error

SetCheckRunID records the GitHub check-run id created for an execution.

func SetReport

func SetReport(db *sql.DB, id, markdown string) error

SetReport stores the rendered plan report markdown for an execution.

func SetTargetRequester added in v0.7.0

func SetTargetRequester(db *sql.DB, pr int, environment, requester string) error

SetTargetRequester records the leased requester SA for every gate target of a (pr, environment). Idempotent; no-op if no rows match.

func UpdateStack

func UpdateStack(db *sql.DB, id, stack string, status events.Status, detail string) error

UpdateStack ticks one stack's status (and optional failure detail).

func UpsertInit

func UpsertInit(db *sql.DB, in events.Init) error

UpsertInit records an execution and its changed subgraph from an Init event. Re-init with the same id is upsert-safe. The phase column is intentionally left untouched: the lifecycle phase is owned by UpsertPhase, which may run before Init.

func UpsertPhase

func UpsertPhase(db *sql.DB, p events.PhaseEvent) error

UpsertPhase sets the execution's lifecycle phase, creating a bare row if Init has not run yet. Identity fields are only overwritten when the event carries a non-zero value, so a bare phase bump never clobbers data set by an earlier Init (and an early phase event survives a later Init).

func UpsertStackOutput added in v0.6.0

func UpsertStackOutput(db *sql.DB, execID, stack, kind, pointer, excerpt string) error

UpsertStackOutput records (or updates) the pointer + tail excerpt for one stack's output of a given kind ("log", later "plan"/"verify").

func UpsertTarget

func UpsertTarget(db *sql.DB, pr int, environment, class, target, grant, state string) error

UpsertTarget records or updates the grant for a (pr, environment, class, target). On conflict the grant_name, state, and updated_at are overwritten. NOTE: `requester` is deliberately excluded from the ON CONFLICT update set. SetTargetRequester writes the leased requester SA after the initial upsert; subsequent reconcile-loop UpsertTarget calls (state refreshes) must not clobber it — keeping it out of the update set is the invariant that lets handleGateCheck trust targets[0].Requester for the entire (pr, environment).

Types

type Execution

type Execution struct {
	ID             string
	Repo           string
	SHA            string
	PR             int
	Environment    string
	CheckRunID     sql.NullInt64
	Rev            int
	ReportMarkdown string
	LogURL         string
	Status         string // execution-level commit status (e.g. "in_progress"/"success"/"failure"); written by the serve handler, distinct from per-stack events.Status
	StatusContext  string
	Phase          string
	CreatedAt      time.Time
}

Execution is a row of the executions table.

func GetExecution

func GetExecution(db *sql.DB, id string) (Execution, error)

GetExecution loads one execution row.

func ListExecutions added in v0.6.0

func ListExecutions(db *sql.DB, limit int) ([]Execution, error)

ListExecutions returns the most recent executions, newest first.

func ListExecutionsForPR added in v0.6.0

func ListExecutionsForPR(db *sql.DB, pr int) ([]Execution, error)

ListExecutionsForPR returns all executions for a PR, newest first.

type Gate

type Gate struct {
	PR          int
	Environment string
}

Gate identifies the unit an approval verdict is posted for.

func PendingGates

func PendingGates(db *sql.DB) ([]Gate, error)

PendingGates returns the (pr, environment) gates that still have at least one target not yet ACTIVE — i.e. gates whose verdict may still need posting. The reconcile loop walks these to self-heal the gap where an approval event is processed while the grant is still activating (some providers fire no further event for the activating→active transition) and dropped events / restarts.

type GateTarget

type GateTarget struct {
	Class     string
	Target    string
	GrantName string
	State     string
	Requester string
}

GateTarget holds the per-(class,target) grant state recorded for a (pr, environment).

func TargetsFor

func TargetsFor(db *sql.DB, pr int, environment string) ([]GateTarget, error)

TargetsFor returns every GateTarget recorded for (pr, environment). Returns a non-nil empty slice when none match.

Directories

Path Synopsis
Package migrations embeds the goose SQL migrations for the server store.
Package migrations embeds the goose SQL migrations for the server store.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL