feat(web/panettone): Add a system for database migrations
Add a system for writing, running, and tracking database migrations (changes to the database schema) over time, inspired by but significantly simpler than postmodern-passenger-pigeon. Migrations can be generated by running (PANETTONE.MODEL:GENERATE-MIGRATION "name"), and are numerically ordered lisp files that define (at least) a function called UP, which runs the migration. The migrations that have been run against the database are tracked in the `migrations` table, and when the `(PANETTONE.MODEL:MIGRATE)` function is called (as it is on startup), all migrations that have not yet been run are run within a transaction. This includes one migration `1-init-schema.lisp`, which migrates the database (idempotently) to the current state of the schema. Change-Id: Id243a47763abea649784b12f25a6d05c2267381c Reviewed-on: https://cl.tvl.fyi/c/depot/+/11253 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>
This commit is contained in:
parent
d5f57ac6e6
commit
a1a29f7c0b
5 changed files with 228 additions and 37 deletions
|
|
@ -1,4 +1,4 @@
|
|||
{ depot, ... }:
|
||||
{ depot, pkgs, ... }:
|
||||
|
||||
depot.nix.buildLisp.program {
|
||||
name = "panettone";
|
||||
|
|
@ -9,6 +9,7 @@ depot.nix.buildLisp.program {
|
|||
cl-ppcre
|
||||
cl-smtp
|
||||
cl-who
|
||||
str
|
||||
defclass-std
|
||||
drakma
|
||||
easy-routes
|
||||
|
|
@ -23,6 +24,14 @@ depot.nix.buildLisp.program {
|
|||
srcs = [
|
||||
./panettone.asd
|
||||
./src/packages.lisp
|
||||
(pkgs.writeText "build.lisp" ''
|
||||
(defpackage build
|
||||
(:use :cl :alexandria)
|
||||
(:export :*migrations-dir*))
|
||||
(in-package :build)
|
||||
(declaim (optimize (safety 3)))
|
||||
(defvar *migrations-dir* "${./src/migrations}")
|
||||
'')
|
||||
./src/util.lisp
|
||||
./src/css.lisp
|
||||
./src/email.lisp
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue