@wascartech/devbot 2.1.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/devcontainer.js +9 -0
- package/dist/devcontainer.js.map +1 -1
- package/dist/migrate.js +395 -30
- package/dist/migrate.js.map +1 -1
- package/package.json +2 -1
package/dist/devcontainer.js
CHANGED
|
@@ -113,6 +113,12 @@ export function devcontainerVolumeArgs(podmanVolume) {
|
|
|
113
113
|
// $XDG_CONFIG_HOME/containers (now the out-of-tree xdg volume — still worth
|
|
114
114
|
// overriding so the inner runtime's config never mixes with opencode's). The
|
|
115
115
|
// referenced file is created by ensurePodmanStore.
|
|
116
|
+
//
|
|
117
|
+
// This does NOT cover containers.conf: podman still scans
|
|
118
|
+
// $XDG_CONFIG_HOME/containers/containers.conf.d before reading the storage
|
|
119
|
+
// override. The runtime path in docker/devbot-shell redirects XDG_CONFIG_HOME
|
|
120
|
+
// (and the other XDG dirs) to $HOME/agent for that reason; the runner must keep
|
|
121
|
+
// passing opencode's sealed xdg home to the container itself.
|
|
116
122
|
export function devcontainerEnvArgs() {
|
|
117
123
|
return [
|
|
118
124
|
"--env", `CONTAINERS_STORAGE_CONF=${PODMAN_STORE_DIR}/storage.conf`,
|
|
@@ -134,6 +140,9 @@ export function devcontainerPromptSection() {
|
|
|
134
140
|
"",
|
|
135
141
|
"- Build and run the project's own images, or pull service images (postgres, redis, etc.), then `podman network create` a private network so containers resolve each other by name.",
|
|
136
142
|
"- Prefer a repo `compose.yaml`/`docker-compose.yml` via `podman compose` when one exists; otherwise use raw `podman`.",
|
|
143
|
+
"- The runtime is preconfigured for the agent UID: do not set `XDG_*`, use `sudo`, or add `--privileged`, `--isolation=chroot`, or `--storage-driver` flags.",
|
|
144
|
+
"- Debian/Ubuntu images that run `apt-get update && apt-get install` build normally; no sandbox-specific Dockerfile line is needed.",
|
|
145
|
+
"- A `podman` failure with `containers.conf.d: permission denied`, or an apt build failing with `setgroups 65534 failed` / `setegid 65534 failed` (errno EINVAL 22), is a DevBot sandbox bug to report. Do not add sandbox-specific configuration such as `APT::Sandbox::User` to the project.",
|
|
137
146
|
"- The container store lives in a separate volume outside `/workspace`, so container artifacts are never part of the git diff and must not be committed.",
|
|
138
147
|
"- Stop long-running containers when you're done (`podman rm -f <name>`); they are reaped when this run exits.",
|
|
139
148
|
].join("\n");
|
package/dist/devcontainer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devcontainer.js","sourceRoot":"","sources":["../src/devcontainer.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,4EAA4E;AAC5E,kEAAkE;AAClE,EAAE;AACF,8EAA8E;AAC9E,yEAAyE;AACzE,sEAAsE;AACtE,gFAAgF;AAChF,0EAA0E;AAC1E,2BAA2B;AAE3B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAKhD,gFAAgF;AAChF,2EAA2E;AAC3E,iDAAiD;AACjD,MAAM,UAAU,mBAAmB,CAAC,OAAgB,EAAE,IAAsB;IAC1E,OAAO,OAAO,IAAI,IAAI,KAAK,OAAO,CAAC;AACrC,CAAC;AAED,6EAA6E;AAC7E,iFAAiF;AACjF,MAAM,UAAU,aAAa,CAAC,IAAI,GAAG,WAAW;IAC9C,IAAI,CAAC;QACH,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,0EAA0E;AAC1E,gFAAgF;AAChF,2EAA2E;AAC3E,yEAAyE;AACzE,MAAM,CAAC,MAAM,gBAAgB,GAAG,sCAAsC,CAAC;AAEvE,gFAAgF;AAChF,gFAAgF;AAChF,mDAAmD;AACnD,MAAM,UAAU,oBAAoB,CAAC,UAA4B,EAAE,OAAgB;IACjF,IAAI,UAAU,KAAK,MAAM;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC;IACrE,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,8EAA8E;AAC9E,0EAA0E;AAC1E,kFAAkF;AAClF,4EAA4E;AAC5E,oEAAoE;AACpE,sEAAsE;AACtE,MAAM,UAAU,eAAe;IAC7B,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AACxD,CAAC;AAED,wEAAwE;AACxE,gFAAgF;AAChF,uEAAuE;AACvE,kBAAkB;AAClB,MAAM,UAAU,gBAAgB,CAAC,MAAqB;IACpD,MAAM,IAAI,GAAG;QACX,6EAA6E;QAC7E,8CAA8C;QAC9C,kBAAkB;QAClB,4EAA4E;QAC5E,8BAA8B;QAC9B,iBAAiB;QACjB,mDAAmD;QACnD,gBAAgB,EAAE,eAAe;QACjC,yEAAyE;QACzE,gBAAgB,EAAE,oBAAoB;QACtC,wEAAwE;QACxE,2EAA2E;QAC3E,wEAAwE;QACxE,yEAAyE;QACzE,iEAAiE;QACjE,gBAAgB,EAAE,YAAY;QAC9B,4EAA4E;QAC5E,WAAW,EAAE,WAAW;QACxB,WAAW,EAAE,QAAQ;QACrB,WAAW,EAAE,QAAQ;QACrB,WAAW,EAAE,OAAO;QACpB,WAAW,EAAE,YAAY;QACzB,yEAAyE;QACzE,4EAA4E;QAC5E,sEAAsE;QACtE,UAAU,EAAE,cAAc;KAC3B,CAAC;IACF,IAAI,MAAM,KAAK,gBAAgB,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,yEAAyE;AACzE,6EAA6E;AAC7E,6EAA6E;AAC7E,uDAAuD;AACvD,MAAM,UAAU,WAAW,CAAC,MAAqB;IAC/C,MAAM,KAAK,GAAG;QACZ,WAAW;QACX,MAAM,KAAK,gBAAgB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,gBAAgB;QACrE,gBAAgB,gBAAgB,WAAW;QAC3C,cAAc,gBAAgB,WAAW;KAC1C,CAAC;IACF,IAAI,MAAM,KAAK,gBAAgB,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CACR,EAAE,EACF,2BAA2B,EAC3B,2CAA2C,CAC5C,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,+EAA+E;AAC/E,0EAA0E;AAC1E,MAAM,UAAU,sBAAsB,CAAC,YAAoB;IACzD,OAAO,CAAC,IAAI,EAAE,GAAG,YAAY,IAAI,gBAAgB,IAAI,CAAC,CAAC;AACzD,CAAC;AAED,4EAA4E;AAC5E,yEAAyE;AACzE,4EAA4E;AAC5E,6EAA6E;AAC7E,mDAAmD;AACnD,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,OAAO,EAAE,2BAA2B,gBAAgB,eAAe;QACnE,4EAA4E;QAC5E,0EAA0E;QAC1E,oEAAoE;QACpE,OAAO,EAAE,wBAAwB;KAClC,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,4EAA4E;AAC5E,4EAA4E;AAC5E,aAAa;AACb,MAAM,UAAU,yBAAyB;IACvC,OAAO;QACL,qCAAqC;QACrC,EAAE;QACF,0OAA0O;QAC1O,EAAE;QACF,oLAAoL;QACpL,uHAAuH;QACvH,yJAAyJ;QACzJ,+GAA+G;KAChH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
|
1
|
+
{"version":3,"file":"devcontainer.js","sourceRoot":"","sources":["../src/devcontainer.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,4EAA4E;AAC5E,kEAAkE;AAClE,EAAE;AACF,8EAA8E;AAC9E,yEAAyE;AACzE,sEAAsE;AACtE,gFAAgF;AAChF,0EAA0E;AAC1E,2BAA2B;AAE3B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAKhD,gFAAgF;AAChF,2EAA2E;AAC3E,iDAAiD;AACjD,MAAM,UAAU,mBAAmB,CAAC,OAAgB,EAAE,IAAsB;IAC1E,OAAO,OAAO,IAAI,IAAI,KAAK,OAAO,CAAC;AACrC,CAAC;AAED,6EAA6E;AAC7E,iFAAiF;AACjF,MAAM,UAAU,aAAa,CAAC,IAAI,GAAG,WAAW;IAC9C,IAAI,CAAC;QACH,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,0EAA0E;AAC1E,gFAAgF;AAChF,2EAA2E;AAC3E,yEAAyE;AACzE,MAAM,CAAC,MAAM,gBAAgB,GAAG,sCAAsC,CAAC;AAEvE,gFAAgF;AAChF,gFAAgF;AAChF,mDAAmD;AACnD,MAAM,UAAU,oBAAoB,CAAC,UAA4B,EAAE,OAAgB;IACjF,IAAI,UAAU,KAAK,MAAM;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC;IACrE,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,8EAA8E;AAC9E,0EAA0E;AAC1E,kFAAkF;AAClF,4EAA4E;AAC5E,oEAAoE;AACpE,sEAAsE;AACtE,MAAM,UAAU,eAAe;IAC7B,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AACxD,CAAC;AAED,wEAAwE;AACxE,gFAAgF;AAChF,uEAAuE;AACvE,kBAAkB;AAClB,MAAM,UAAU,gBAAgB,CAAC,MAAqB;IACpD,MAAM,IAAI,GAAG;QACX,6EAA6E;QAC7E,8CAA8C;QAC9C,kBAAkB;QAClB,4EAA4E;QAC5E,8BAA8B;QAC9B,iBAAiB;QACjB,mDAAmD;QACnD,gBAAgB,EAAE,eAAe;QACjC,yEAAyE;QACzE,gBAAgB,EAAE,oBAAoB;QACtC,wEAAwE;QACxE,2EAA2E;QAC3E,wEAAwE;QACxE,yEAAyE;QACzE,iEAAiE;QACjE,gBAAgB,EAAE,YAAY;QAC9B,4EAA4E;QAC5E,WAAW,EAAE,WAAW;QACxB,WAAW,EAAE,QAAQ;QACrB,WAAW,EAAE,QAAQ;QACrB,WAAW,EAAE,OAAO;QACpB,WAAW,EAAE,YAAY;QACzB,yEAAyE;QACzE,4EAA4E;QAC5E,sEAAsE;QACtE,UAAU,EAAE,cAAc;KAC3B,CAAC;IACF,IAAI,MAAM,KAAK,gBAAgB,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,yEAAyE;AACzE,6EAA6E;AAC7E,6EAA6E;AAC7E,uDAAuD;AACvD,MAAM,UAAU,WAAW,CAAC,MAAqB;IAC/C,MAAM,KAAK,GAAG;QACZ,WAAW;QACX,MAAM,KAAK,gBAAgB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,gBAAgB;QACrE,gBAAgB,gBAAgB,WAAW;QAC3C,cAAc,gBAAgB,WAAW;KAC1C,CAAC;IACF,IAAI,MAAM,KAAK,gBAAgB,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CACR,EAAE,EACF,2BAA2B,EAC3B,2CAA2C,CAC5C,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,+EAA+E;AAC/E,0EAA0E;AAC1E,MAAM,UAAU,sBAAsB,CAAC,YAAoB;IACzD,OAAO,CAAC,IAAI,EAAE,GAAG,YAAY,IAAI,gBAAgB,IAAI,CAAC,CAAC;AACzD,CAAC;AAED,4EAA4E;AAC5E,yEAAyE;AACzE,4EAA4E;AAC5E,6EAA6E;AAC7E,mDAAmD;AACnD,EAAE;AACF,0DAA0D;AAC1D,2EAA2E;AAC3E,8EAA8E;AAC9E,gFAAgF;AAChF,8DAA8D;AAC9D,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,OAAO,EAAE,2BAA2B,gBAAgB,eAAe;QACnE,4EAA4E;QAC5E,0EAA0E;QAC1E,oEAAoE;QACpE,OAAO,EAAE,wBAAwB;KAClC,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,4EAA4E;AAC5E,4EAA4E;AAC5E,aAAa;AACb,MAAM,UAAU,yBAAyB;IACvC,OAAO;QACL,qCAAqC;QACrC,EAAE;QACF,0OAA0O;QAC1O,EAAE;QACF,oLAAoL;QACpL,uHAAuH;QACvH,6JAA6J;QAC7J,oIAAoI;QACpI,+RAA+R;QAC/R,yJAAyJ;QACzJ,+GAA+G;KAChH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
package/dist/migrate.js
CHANGED
|
@@ -8,66 +8,431 @@ import { log } from "./logger.js";
|
|
|
8
8
|
// migration is a numbered .sql file in migrations/ applied in order inside a
|
|
9
9
|
// transaction; schema_migrations records the applied version. Fail-closed: a
|
|
10
10
|
// half-applied migration aborts boot so a never half-schema serves requests.
|
|
11
|
+
//
|
|
12
|
+
// Additive migrations (ALTER TABLE ... ADD COLUMN plus the IF NOT EXISTS forms)
|
|
13
|
+
// are safe to replay against a schema that is ahead of schema_migrations: an
|
|
14
|
+
// existing column with the declared shape is skipped, a missing one is added,
|
|
15
|
+
// and the version is recorded only after every declared effect is present.
|
|
11
16
|
const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
|
|
12
17
|
const MIGRATIONS_DIR = join(MODULE_DIR, "..", "migrations");
|
|
18
|
+
const IDENT = '(?:"[^"]+"|`[^`]+`|\\[[^\\]]+\\]|[A-Za-z_][A-Za-z0-9_$]*)';
|
|
19
|
+
const QUALIFIED_IDENT = `${IDENT}(?:\\s*\\.\\s*${IDENT})?`;
|
|
20
|
+
const ADD_COLUMN = new RegExp(`^ALTER\\s+TABLE\\s+(${QUALIFIED_IDENT})\\s+ADD\\s+(?:COLUMN\\s+)?(${IDENT})\\s+([\\s\\S]+)$`, "i");
|
|
21
|
+
const CREATE_TABLE = new RegExp(`^CREATE\\s+TABLE\\s+IF\\s+NOT\\s+EXISTS\\s+(${QUALIFIED_IDENT})`, "i");
|
|
22
|
+
const CREATE_INDEX = new RegExp(`^CREATE\\s+(?:UNIQUE\\s+)?INDEX\\s+IF\\s+NOT\\s+EXISTS\\s+(${QUALIFIED_IDENT})`, "i");
|
|
23
|
+
const CONSTRAINT_KEYWORDS = [
|
|
24
|
+
"PRIMARY",
|
|
25
|
+
"NOT",
|
|
26
|
+
"NULL",
|
|
27
|
+
"UNIQUE",
|
|
28
|
+
"CHECK",
|
|
29
|
+
"DEFAULT",
|
|
30
|
+
"COLLATE",
|
|
31
|
+
"REFERENCES",
|
|
32
|
+
"GENERATED",
|
|
33
|
+
"AS",
|
|
34
|
+
];
|
|
35
|
+
const NOT_COLUMN_KEYWORDS = new Set(["CONSTRAINT", "PRIMARY", "UNIQUE", "FOREIGN", "CHECK"]);
|
|
13
36
|
function loadMigrations() {
|
|
14
37
|
let names;
|
|
15
38
|
try {
|
|
16
|
-
names = readdirSync(MIGRATIONS_DIR).filter((
|
|
39
|
+
names = readdirSync(MIGRATIONS_DIR).filter((name) => name.endsWith(".sql"));
|
|
17
40
|
}
|
|
18
41
|
catch {
|
|
19
42
|
return [];
|
|
20
43
|
}
|
|
21
44
|
return names
|
|
22
45
|
.map((filename) => {
|
|
23
|
-
const
|
|
24
|
-
if (!
|
|
46
|
+
const match = /^(\d+)_.+\.sql$/.exec(filename);
|
|
47
|
+
if (!match)
|
|
25
48
|
return null;
|
|
26
|
-
const version = Number(
|
|
49
|
+
const version = Number(match[1]);
|
|
27
50
|
const sql = readFileSync(join(MIGRATIONS_DIR, filename), "utf8");
|
|
28
51
|
return { version, filename, sql };
|
|
29
52
|
})
|
|
30
|
-
.filter((
|
|
53
|
+
.filter((migration) => migration !== null)
|
|
31
54
|
.sort((a, b) => a.version - b.version);
|
|
32
55
|
}
|
|
33
|
-
function
|
|
34
|
-
|
|
56
|
+
function splitStatements(sql) {
|
|
57
|
+
const statements = [];
|
|
58
|
+
let current = "";
|
|
59
|
+
let quote = null;
|
|
60
|
+
let i = 0;
|
|
61
|
+
while (i < sql.length) {
|
|
62
|
+
const ch = sql[i];
|
|
63
|
+
const next = sql[i + 1];
|
|
64
|
+
if (quote !== null) {
|
|
65
|
+
current += ch;
|
|
66
|
+
if (ch === quote) {
|
|
67
|
+
if (next === quote) {
|
|
68
|
+
current += next;
|
|
69
|
+
i += 2;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
quote = null;
|
|
73
|
+
}
|
|
74
|
+
i++;
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
if (ch === "-" && next === "-") {
|
|
78
|
+
i += 2;
|
|
79
|
+
while (i < sql.length && sql[i] !== "\n")
|
|
80
|
+
i++;
|
|
81
|
+
current += " ";
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (ch === "/" && next === "*") {
|
|
85
|
+
i += 2;
|
|
86
|
+
while (i < sql.length && !(sql[i] === "*" && sql[i + 1] === "/"))
|
|
87
|
+
i++;
|
|
88
|
+
i += 2;
|
|
89
|
+
current += " ";
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
if (ch === "'" || ch === '"' || ch === "`") {
|
|
93
|
+
quote = ch;
|
|
94
|
+
current += ch;
|
|
95
|
+
i++;
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (ch === "[") {
|
|
99
|
+
quote = "]";
|
|
100
|
+
current += ch;
|
|
101
|
+
i++;
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
if (ch === ";") {
|
|
105
|
+
const statement = current.trim();
|
|
106
|
+
if (statement)
|
|
107
|
+
statements.push(statement);
|
|
108
|
+
current = "";
|
|
109
|
+
i++;
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
current += ch;
|
|
113
|
+
i++;
|
|
114
|
+
}
|
|
115
|
+
const statement = current.trim();
|
|
116
|
+
if (statement)
|
|
117
|
+
statements.push(statement);
|
|
118
|
+
return statements;
|
|
119
|
+
}
|
|
120
|
+
function lastIdentPart(raw) {
|
|
121
|
+
let quote = null;
|
|
122
|
+
let lastDot = -1;
|
|
123
|
+
for (let i = 0; i < raw.length; i++) {
|
|
124
|
+
const ch = raw[i];
|
|
125
|
+
if (quote !== null) {
|
|
126
|
+
if (ch === quote)
|
|
127
|
+
quote = null;
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
if (ch === "'" || ch === '"' || ch === "`") {
|
|
131
|
+
quote = ch;
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
if (ch === "[") {
|
|
135
|
+
quote = "]";
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
if (ch === ".")
|
|
139
|
+
lastDot = i;
|
|
140
|
+
}
|
|
141
|
+
return unquoteIdent(raw.slice(lastDot + 1));
|
|
142
|
+
}
|
|
143
|
+
function unquoteIdent(raw) {
|
|
144
|
+
const value = raw.trim();
|
|
145
|
+
if (value.length < 2)
|
|
146
|
+
return value;
|
|
147
|
+
const first = value[0];
|
|
148
|
+
const last = value[value.length - 1];
|
|
149
|
+
if ((first === '"' && last === '"') || (first === "'" && last === "'") || (first === "`" && last === "`")) {
|
|
150
|
+
return value.slice(1, -1).replaceAll(first + first, first);
|
|
151
|
+
}
|
|
152
|
+
if (first === "[" && last === "]")
|
|
153
|
+
return value.slice(1, -1).replaceAll("]]", "]");
|
|
154
|
+
return value;
|
|
155
|
+
}
|
|
156
|
+
function parseAdditive(sql) {
|
|
157
|
+
const statements = splitStatements(sql);
|
|
158
|
+
if (statements.length === 0)
|
|
159
|
+
return null;
|
|
160
|
+
const effects = [];
|
|
161
|
+
for (const statement of statements) {
|
|
162
|
+
const add = ADD_COLUMN.exec(statement);
|
|
163
|
+
if (add) {
|
|
164
|
+
const table = lastIdentPart(add[1]);
|
|
165
|
+
const column = lastIdentPart(add[2]);
|
|
166
|
+
const definition = add[3].trim();
|
|
167
|
+
if (!definition || NOT_COLUMN_KEYWORDS.has(column.toUpperCase()))
|
|
168
|
+
return null;
|
|
169
|
+
effects.push({ kind: "column", sql: statement, table, column, definition });
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
const table = CREATE_TABLE.exec(statement);
|
|
173
|
+
if (table) {
|
|
174
|
+
effects.push({ kind: "table", sql: statement, name: lastIdentPart(table[1]) });
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
const index = CREATE_INDEX.exec(statement);
|
|
178
|
+
if (index) {
|
|
179
|
+
effects.push({ kind: "index", sql: statement, name: lastIdentPart(index[1]) });
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
return effects;
|
|
185
|
+
}
|
|
186
|
+
function topLevelIndex(sql, words) {
|
|
187
|
+
let quote = null;
|
|
188
|
+
let depth = 0;
|
|
189
|
+
for (let i = 0; i < sql.length; i++) {
|
|
190
|
+
const ch = sql[i];
|
|
191
|
+
if (quote !== null) {
|
|
192
|
+
if (ch === quote) {
|
|
193
|
+
if (sql[i + 1] === quote) {
|
|
194
|
+
i++;
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
quote = null;
|
|
198
|
+
}
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
if (ch === "'" || ch === '"' || ch === "`") {
|
|
202
|
+
quote = ch;
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
if (ch === "[") {
|
|
206
|
+
quote = "]";
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
if (ch === "(") {
|
|
210
|
+
depth++;
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
if (ch === ")") {
|
|
214
|
+
depth = Math.max(0, depth - 1);
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
if (depth !== 0 || !/[A-Za-z_]/.test(ch))
|
|
218
|
+
continue;
|
|
219
|
+
let end = i + 1;
|
|
220
|
+
while (end < sql.length && /[A-Za-z0-9_$]/.test(sql[end]))
|
|
221
|
+
end++;
|
|
222
|
+
if (words.includes(sql.slice(i, end).toUpperCase()))
|
|
223
|
+
return i;
|
|
224
|
+
i = end - 1;
|
|
225
|
+
}
|
|
226
|
+
return -1;
|
|
227
|
+
}
|
|
228
|
+
function parseDefault(definition) {
|
|
229
|
+
const at = topLevelIndex(definition, ["DEFAULT"]);
|
|
230
|
+
if (at === -1)
|
|
231
|
+
return null;
|
|
232
|
+
let i = at + "DEFAULT".length;
|
|
233
|
+
while (i < definition.length && /\s/.test(definition[i]))
|
|
234
|
+
i++;
|
|
235
|
+
if (i >= definition.length)
|
|
236
|
+
return null;
|
|
237
|
+
const start = i;
|
|
238
|
+
const first = definition[i];
|
|
239
|
+
if (first === "'" || first === '"' || first === "`") {
|
|
240
|
+
i++;
|
|
241
|
+
while (i < definition.length) {
|
|
242
|
+
if (definition[i] === first) {
|
|
243
|
+
if (definition[i + 1] === first) {
|
|
244
|
+
i += 2;
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
i++;
|
|
248
|
+
break;
|
|
249
|
+
}
|
|
250
|
+
i++;
|
|
251
|
+
}
|
|
252
|
+
return normalizeSql(definition.slice(start, i));
|
|
253
|
+
}
|
|
254
|
+
if (first === "(") {
|
|
255
|
+
let depth = 0;
|
|
256
|
+
while (i < definition.length) {
|
|
257
|
+
const ch = definition[i];
|
|
258
|
+
if (ch === "(")
|
|
259
|
+
depth++;
|
|
260
|
+
else if (ch === ")") {
|
|
261
|
+
depth--;
|
|
262
|
+
if (depth === 0) {
|
|
263
|
+
i++;
|
|
264
|
+
break;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
i++;
|
|
268
|
+
}
|
|
269
|
+
return normalizeSql(definition.slice(start, i));
|
|
270
|
+
}
|
|
271
|
+
while (i < definition.length && !/[\s,)]/.test(definition[i]))
|
|
272
|
+
i++;
|
|
273
|
+
return normalizeSql(definition.slice(start, i));
|
|
274
|
+
}
|
|
275
|
+
function normalizeSql(value) {
|
|
276
|
+
return value.trim().replace(/\s+/g, " ");
|
|
277
|
+
}
|
|
278
|
+
function parseColumnShape(definition) {
|
|
279
|
+
const typeEnd = topLevelIndex(definition, CONSTRAINT_KEYWORDS);
|
|
280
|
+
return {
|
|
281
|
+
type: normalizeSql(typeEnd === -1 ? definition : definition.slice(0, typeEnd)).toUpperCase(),
|
|
282
|
+
notNull: topLevelIndex(definition, ["NOT"]) !== -1,
|
|
283
|
+
default: parseDefault(definition),
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
function quoteIdent(name) {
|
|
287
|
+
return `"${name.replaceAll('"', '""')}"`;
|
|
288
|
+
}
|
|
289
|
+
function columnState(database, effect) {
|
|
290
|
+
const rows = database.prepare(`PRAGMA table_info(${quoteIdent(effect.table)})`).all();
|
|
291
|
+
const row = rows.find((candidate) => candidate.name.toLowerCase() === effect.column.toLowerCase());
|
|
292
|
+
if (!row)
|
|
293
|
+
return "missing";
|
|
294
|
+
const expected = parseColumnShape(effect.definition);
|
|
295
|
+
const compatible = normalizeSql(row.type).toUpperCase() === expected.type &&
|
|
296
|
+
(row.notnull === 1) === expected.notNull &&
|
|
297
|
+
normalizeSql(row.dflt_value ?? "") === normalizeSql(expected.default ?? "");
|
|
298
|
+
return compatible ? "compatible" : "incompatible";
|
|
299
|
+
}
|
|
300
|
+
function objectExists(database, type, name) {
|
|
301
|
+
const row = database
|
|
302
|
+
.prepare("SELECT 1 AS ok FROM sqlite_master WHERE type = ? AND name = ? COLLATE NOCASE")
|
|
303
|
+
.get(type, name);
|
|
304
|
+
return row !== undefined;
|
|
305
|
+
}
|
|
306
|
+
function applyAdditiveMigration(database, effects) {
|
|
307
|
+
let skipped = 0;
|
|
308
|
+
let executed = 0;
|
|
309
|
+
for (const effect of effects) {
|
|
310
|
+
if (effect.kind === "column") {
|
|
311
|
+
const state = columnState(database, effect);
|
|
312
|
+
if (state === "compatible") {
|
|
313
|
+
skipped++;
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
316
|
+
if (state === "incompatible") {
|
|
317
|
+
throw new Error(`column ${effect.table}.${effect.column} exists with an incompatible definition`);
|
|
318
|
+
}
|
|
319
|
+
database.exec(effect.sql);
|
|
320
|
+
executed++;
|
|
321
|
+
continue;
|
|
322
|
+
}
|
|
323
|
+
database.exec(effect.sql);
|
|
324
|
+
executed++;
|
|
325
|
+
}
|
|
326
|
+
for (const effect of effects) {
|
|
327
|
+
if (effect.kind === "column") {
|
|
328
|
+
const state = columnState(database, effect);
|
|
329
|
+
if (state === "missing") {
|
|
330
|
+
throw new Error(`migration did not create column ${effect.table}.${effect.column}`);
|
|
331
|
+
}
|
|
332
|
+
if (state === "incompatible") {
|
|
333
|
+
throw new Error(`column ${effect.table}.${effect.column} exists with an incompatible definition`);
|
|
334
|
+
}
|
|
335
|
+
continue;
|
|
336
|
+
}
|
|
337
|
+
if (!objectExists(database, effect.kind, effect.name)) {
|
|
338
|
+
throw new Error(`migration did not create ${effect.kind} ${effect.name}`);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
return { skipped, executed };
|
|
342
|
+
}
|
|
343
|
+
function appliedVersions(database) {
|
|
344
|
+
database.exec(`
|
|
35
345
|
CREATE TABLE IF NOT EXISTS schema_migrations (
|
|
36
346
|
version INTEGER PRIMARY KEY,
|
|
37
347
|
applied_at INTEGER NOT NULL
|
|
38
348
|
)
|
|
39
349
|
`);
|
|
40
|
-
const
|
|
41
|
-
return row
|
|
350
|
+
const rows = database.prepare("SELECT version FROM schema_migrations").all();
|
|
351
|
+
return new Set(rows.map((row) => row.version));
|
|
42
352
|
}
|
|
43
|
-
export function
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
353
|
+
export function unrecordedBelowMax(applied, migrations) {
|
|
354
|
+
if (applied.size === 0)
|
|
355
|
+
return [];
|
|
356
|
+
const max = Math.max(...applied);
|
|
357
|
+
const missing = new Set();
|
|
358
|
+
for (const migration of migrations) {
|
|
359
|
+
if (migration.version < max && !applied.has(migration.version))
|
|
360
|
+
missing.add(migration.version);
|
|
361
|
+
}
|
|
362
|
+
return [...missing].sort((a, b) => a - b);
|
|
363
|
+
}
|
|
364
|
+
function migrateOne(database, migration) {
|
|
365
|
+
const started = Date.now();
|
|
366
|
+
try {
|
|
367
|
+
database.exec("BEGIN");
|
|
368
|
+
let skipped = 0;
|
|
369
|
+
let executed = 0;
|
|
370
|
+
if (migration.effects !== null) {
|
|
371
|
+
const result = applyAdditiveMigration(database, migration.effects);
|
|
372
|
+
skipped = result.skipped;
|
|
373
|
+
executed = result.executed;
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
database.exec(migration.sql);
|
|
377
|
+
executed = 1;
|
|
378
|
+
}
|
|
379
|
+
database.prepare("INSERT INTO schema_migrations (version, applied_at) VALUES (?, ?)").run(migration.version, Math.floor(Date.now() / 1000));
|
|
380
|
+
database.exec("COMMIT");
|
|
381
|
+
log.info("migration applied", {
|
|
382
|
+
version: migration.version,
|
|
383
|
+
file: migration.filename,
|
|
384
|
+
ms: Date.now() - started,
|
|
385
|
+
skippedColumns: skipped,
|
|
386
|
+
executedStatements: executed,
|
|
387
|
+
adopted: skipped > 0 && executed === 0,
|
|
388
|
+
});
|
|
50
389
|
}
|
|
51
|
-
|
|
52
|
-
for (const m of pending) {
|
|
53
|
-
const t0 = Date.now();
|
|
390
|
+
catch (e) {
|
|
54
391
|
try {
|
|
55
|
-
|
|
56
|
-
db.exec(m.sql);
|
|
57
|
-
db.prepare("INSERT INTO schema_migrations (version, applied_at) VALUES (?, ?)").run(m.version, Math.floor(Date.now() / 1000));
|
|
58
|
-
db.exec("COMMIT");
|
|
59
|
-
log.info("migration applied", { version: m.version, file: m.filename, ms: Date.now() - t0 });
|
|
392
|
+
database.exec("ROLLBACK");
|
|
60
393
|
}
|
|
61
|
-
catch
|
|
62
|
-
|
|
63
|
-
log.error("migration failed, aborting boot", { version: m.version, file: m.filename, err: e instanceof Error ? e.message : String(e) });
|
|
64
|
-
throw new Error(`migration ${m.version} (${m.filename}) failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
394
|
+
catch {
|
|
395
|
+
// BEGIN may have failed before a transaction was active.
|
|
65
396
|
}
|
|
397
|
+
log.error("migration failed, aborting boot", {
|
|
398
|
+
version: migration.version,
|
|
399
|
+
file: migration.filename,
|
|
400
|
+
err: e instanceof Error ? e.message : String(e),
|
|
401
|
+
});
|
|
402
|
+
throw new Error(`migration ${migration.version} (${migration.filename}) failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
66
403
|
}
|
|
67
404
|
}
|
|
405
|
+
export function runMigrations(database, migrations = loadMigrations()) {
|
|
406
|
+
const applied = appliedVersions(database);
|
|
407
|
+
const last = applied.size === 0 ? 0 : Math.max(...applied);
|
|
408
|
+
const pending = migrations
|
|
409
|
+
.filter((migration) => !applied.has(migration.version))
|
|
410
|
+
.sort((a, b) => a.version - b.version)
|
|
411
|
+
.map((migration) => ({ ...migration, effects: parseAdditive(migration.sql) }));
|
|
412
|
+
if (pending.length === 0) {
|
|
413
|
+
log.debug("migrations up to date", { applied: last });
|
|
414
|
+
return;
|
|
415
|
+
}
|
|
416
|
+
const missing = unrecordedBelowMax(applied, migrations);
|
|
417
|
+
if (missing.length > 0) {
|
|
418
|
+
const filenames = new Map(migrations.map((migration) => [migration.version, migration.filename]));
|
|
419
|
+
log.warn("schema_migrations has unrecorded versions below the applied max", {
|
|
420
|
+
max: last,
|
|
421
|
+
missing: missing.map((version) => ({ version, filename: filenames.get(version) })),
|
|
422
|
+
});
|
|
423
|
+
}
|
|
424
|
+
const pendingLast = pending[pending.length - 1].version;
|
|
425
|
+
log.info("applying migrations", { from: last, to: pendingLast, count: pending.length });
|
|
426
|
+
for (const migration of pending)
|
|
427
|
+
migrateOne(database, migration);
|
|
428
|
+
}
|
|
429
|
+
export function migrate() {
|
|
430
|
+
runMigrations(db);
|
|
431
|
+
}
|
|
68
432
|
export function migrationStatus() {
|
|
69
|
-
const last = appliedVersion();
|
|
70
433
|
const all = loadMigrations();
|
|
71
|
-
|
|
434
|
+
const applied = appliedVersions(db);
|
|
435
|
+
const appliedCount = all.filter((migration) => applied.has(migration.version)).length;
|
|
436
|
+
return { appliedCount, pendingCount: all.length - appliedCount };
|
|
72
437
|
}
|
|
73
438
|
//# sourceMappingURL=migrate.js.map
|
package/dist/migrate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wascartech/devbot",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "Adrien Jussak <adrien.jussak@wascar.tech>",
|
|
@@ -51,6 +51,7 @@
|
|
|
51
51
|
"test:queue-store": "node --experimental-sqlite --test --import tsx scripts/check-queue-store.ts",
|
|
52
52
|
"test:idempotency": "node --experimental-sqlite --test --import tsx scripts/check-idempotency.ts",
|
|
53
53
|
"test:migrate": "node --experimental-sqlite --test --import tsx scripts/check-migrate.ts",
|
|
54
|
+
"test:migrate-replay": "node --experimental-sqlite --test --import tsx scripts/check-migrate-replay.ts",
|
|
54
55
|
"test:dispatch": "node --experimental-sqlite --test --import tsx scripts/check-dispatch.ts",
|
|
55
56
|
"test:webhook-e2e": "node --experimental-sqlite --test --import tsx scripts/check-webhook-e2e.ts",
|
|
56
57
|
"test:mr-content": "node --experimental-sqlite --test --import tsx scripts/check-mr-content.ts",
|