From 99e3452992865d03304b59d82e045c2538f3d0b4 Mon Sep 17 00:00:00 2001 From: Reinier Maas Date: Tue, 28 Apr 2026 14:51:03 +0200 Subject: [PATCH 1/7] Fix: Typo in `strategy.rs` --- opsqueue/src/consumer/strategy.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opsqueue/src/consumer/strategy.rs b/opsqueue/src/consumer/strategy.rs index 7aeffb2..047db5c 100644 --- a/opsqueue/src/consumer/strategy.rs +++ b/opsqueue/src/consumer/strategy.rs @@ -76,7 +76,7 @@ impl Strategy { Some(field) => { let taken_values: Vec<_> = field.too_high_counts(1).collect(); let taken_values_string = - serde_json::to_string(&taken_values).expect("Always valid JSO"); + serde_json::to_string(&taken_values).expect("Always valid JSON"); tracing::trace!("Taken values that are left out of PreferDistinct: {taken_values_string:?}"); qb.push_bind(taken_values_string); } From e076c54173861b8a4b2acb882115d3087e3ddd53 Mon Sep 17 00:00:00 2001 From: Reinier Maas Date: Tue, 28 Apr 2026 15:08:14 +0200 Subject: [PATCH 2/7] opsqueue: include source tree in cargo package output The previous `include = ["opsqueue_example_database_schema.db"]` was an exhaustive allow-list, so `cargo package` / `cargo vendor` stripped `src/`, `app/`, `migrations/` and `build.rs` from the published crate. Local builds via the workspace skipped packaging, hiding the issue; downstream git-source consumers (e.g. Frida via Crane / cargo vendor) hit "couldn't read .../opsqueue-0.35.1/src/lib.rs". Extend the include list to cover everything the lib + bin + embedded migrations need, and bump 0.35.1 -> 0.35.2. --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- opsqueue/Cargo.toml | 12 +++++++++++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 26c655e..948f7b4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2085,7 +2085,7 @@ dependencies = [ [[package]] name = "opsqueue" -version = "0.35.1" +version = "0.35.2" dependencies = [ "anyhow", "arc-swap", @@ -2139,7 +2139,7 @@ dependencies = [ [[package]] name = "opsqueue_python" -version = "0.35.1" +version = "0.35.2" dependencies = [ "anyhow", "chrono", diff --git a/Cargo.toml b/Cargo.toml index 5dc6bab..c519e62 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ members = [ ] [workspace.package] -version = "0.35.1" +version = "0.35.2" [workspace.lints.clippy] cargo = { level = "warn", priority = -1 } diff --git a/opsqueue/Cargo.toml b/opsqueue/Cargo.toml index dd23ab1..e51bacb 100644 --- a/opsqueue/Cargo.toml +++ b/opsqueue/Cargo.toml @@ -5,7 +5,17 @@ edition = "2021" description = "lightweight batch processing queue for heavy loads" repository = "https://github.com/channable/opsqueue" license = "MIT" -include=["opsqueue_example_database_schema.db"] +# Cargo's `include` is an exhaustive allow-list: anything not listed here is +# stripped from `cargo package` / `cargo vendor` output. Make sure every file +# the lib + bin need at compile time is covered. +include = [ + "src/**/*", + "app/**/*", + "migrations/**/*.sql", + "build.rs", + "opsqueue_example_database_schema.db", + "README.md", +] [lib] name="opsqueue" From f2e0c5c0d783671f0cf78378b970cf552fca9258 Mon Sep 17 00:00:00 2001 From: Reinier Maas Date: Tue, 28 Apr 2026 15:10:55 +0200 Subject: [PATCH 3/7] opsqueue: ship LICENSE in published crate via symlink Cargo only auto-picks up LICENSE files in the package root, and the workspace LICENSE lives one directory up. Add a relative symlink opsqueue/LICENSE -> ../LICENSE so we keep a single source of truth; cargo follows the symlink during packaging and inlines the content into the .crate tarball. --- opsqueue/Cargo.toml | 1 + opsqueue/LICENSE | 1 + 2 files changed, 2 insertions(+) create mode 120000 opsqueue/LICENSE diff --git a/opsqueue/Cargo.toml b/opsqueue/Cargo.toml index e51bacb..60434c8 100644 --- a/opsqueue/Cargo.toml +++ b/opsqueue/Cargo.toml @@ -15,6 +15,7 @@ include = [ "build.rs", "opsqueue_example_database_schema.db", "README.md", + "LICENSE", ] [lib] diff --git a/opsqueue/LICENSE b/opsqueue/LICENSE new file mode 120000 index 0000000..ea5b606 --- /dev/null +++ b/opsqueue/LICENSE @@ -0,0 +1 @@ +../LICENSE \ No newline at end of file From bc90eddbb9ad431e8e4ed6e23cb8ed40f581535a Mon Sep 17 00:00:00 2001 From: Reinier Maas Date: Tue, 28 Apr 2026 15:13:13 +0200 Subject: [PATCH 4/7] ci: add package-check to guard opsqueue cargo packaging Adds a 'just package-check' recipe that runs 'cargo package -p opsqueue' and asserts the resulting file list contains src/lib.rs, app/main.rs, build.rs, LICENSE, opsqueue_example_database_schema.db, and at least one migrations/*.sql. Wires it into CI as its own job so future regressions of the include allow-list in opsqueue/Cargo.toml fail before merge instead of breaking downstream git-source consumers. --- .github/workflows/ci.yml | 11 +++++++++++ justfile | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 354e224..4273f22 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,6 +16,17 @@ jobs: with: bins: cargo-nextest, cargo-insta@1.28.0 - run: just test-unit + package-check: + name: cargo package check (opsqueue) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@0c366fd6a839edf440554fa01a7085ccba70ac98 + - uses: extractions/setup-crate@4993624604c307fbca528d28a3c8b60fa5ecc859 # v1.4.0 + with: + repo: casey/just + version: 1.42.4 + - uses: moonrepo/setup-rust@ede6de059f8046a5e236c94046823e2af11ca670 # v1.2.2 + - run: just package-check test-integration: name: Integration test (& build all in dev-mode) runs-on: ubuntu-latest diff --git a/justfile b/justfile index ee1baa4..6a5f968 100644 --- a/justfile +++ b/justfile @@ -101,3 +101,36 @@ nix-build-python: (_nix-build "python.pkgs.opsqueue_python") _nix-build +TARGETS: nix build --file nix/nixpkgs-pinned.nix --print-out-paths --print-build-logs --no-link --option sandbox true {{TARGETS}} + +# Verify `cargo package` for the opsqueue crate contains every file the lib + +# bin + embedded migrations need at compile time. Catches regressions where the +# `include` allow-list in opsqueue/Cargo.toml strips required files from the +# published / vendored crate (broke downstream git-source consumers in the past). +[group('test')] +package-check: + #!/usr/bin/env bash + set -euo pipefail + files=$(cargo package -p opsqueue --list --allow-dirty) + required=( + "src/lib.rs" + "app/main.rs" + "build.rs" + "LICENSE" + "opsqueue_example_database_schema.db" + ) + missing=() + for f in "${required[@]}"; do + if ! grep -qxF "$f" <<<"$files"; then + missing+=("$f") + fi + done + if ! grep -qE '^migrations/.*\.sql$' <<<"$files"; then + missing+=("migrations/*.sql") + fi + if ((${#missing[@]})); then + echo "package-check: missing from cargo package output:" >&2 + printf ' - %s\n' "${missing[@]}" >&2 + exit 1 + fi + cargo package -p opsqueue --no-verify --allow-dirty >/dev/null + echo "package-check: OK" From 75e2bacaa835116a6f5e9527e10e3b3a3a205428 Mon Sep 17 00:00:00 2001 From: Reinier Maas Date: Tue, 28 Apr 2026 15:13:47 +0200 Subject: [PATCH 5/7] opsqueue: ship .sqlx/ offline query metadata in published crate Downstream consumers (e.g. Frida) build via Crane in Nix, which uses cargo offline mode. Without the .sqlx/query-*.json metadata in the packaged crate, the sqlx query macros under the server-logic feature cannot be type-checked at build time and require a live SQLite database to compile. Add .sqlx/**/*.json to the include allow-list and extend the package-check guard to assert at least one query-*.json file is present. --- justfile | 3 +++ opsqueue/Cargo.toml | 3 +++ 2 files changed, 6 insertions(+) diff --git a/justfile b/justfile index 6a5f968..6f862ff 100644 --- a/justfile +++ b/justfile @@ -127,6 +127,9 @@ package-check: if ! grep -qE '^migrations/.*\.sql$' <<<"$files"; then missing+=("migrations/*.sql") fi + if ! grep -qE '^\.sqlx/query-.*\.json$' <<<"$files"; then + missing+=(".sqlx/query-*.json") + fi if ((${#missing[@]})); then echo "package-check: missing from cargo package output:" >&2 printf ' - %s\n' "${missing[@]}" >&2 diff --git a/opsqueue/Cargo.toml b/opsqueue/Cargo.toml index 60434c8..b1c0bd6 100644 --- a/opsqueue/Cargo.toml +++ b/opsqueue/Cargo.toml @@ -12,6 +12,9 @@ include = [ "src/**/*", "app/**/*", "migrations/**/*.sql", + # sqlx offline query metadata; required for offline (e.g. Crane / Nix) + # builds of downstream consumers that enable the `server-logic` feature. + ".sqlx/**/*.json", "build.rs", "opsqueue_example_database_schema.db", "README.md", From 2a19ac69d45a46c69c061022b2cf30ccf332a8c1 Mon Sep 17 00:00:00 2001 From: Reinier Maas Date: Tue, 28 Apr 2026 15:21:48 +0200 Subject: [PATCH 6/7] opsqueue: refresh stale sqlx offline query cache Regenerated with cargo sqlx prepare against the example DB so the .sqlx/ metadata reflects the current schema and query set. Without this refresh, downstream offline (Crane/Nix) builds of the published crate that enable the server-logic feature would still fail with "no cached data for this query" or type-inference errors on the sqlx query macros. --- ...238c6ea5d468ba73a8b4b1d5f2df9e4bd39b0.json | 5 +- ...01d98962ad16441f4205139a0654e2aa0ba22.json | 12 ++++ ...5a9da0a4e3a22d1291bc431afe6b976156ca5.json | 10 +++- ...bab496b9e37ce482189f38eef19b20fc447f4.json | 7 ++- ...23e1d009a0612eeecf94ec68401d36d5434e1.json | 12 ---- ...6c0624c112f61a5816d4c4528f9b3151713e4.json | 10 +++- ...77a8248470ba43a498508f4ccebaf09050ff7.json | 56 +++++++++++++++++++ ...28d8ae98d1fb97195f47c36a7c45038edb7e8.json | 12 ---- ...f6340f180a1afde82dd1c08dc4b2b650fbfe2.json | 7 ++- ...9d11f88e91b1cfcef1d93e814ab2da07addcb.json | 4 +- ...215295874fe2684ed6096c27a43a5449282e5.json | 12 ++++ ...61f40f095482ff9f86a641506a0bbdaa6761.json} | 26 +++++++-- ...33aca1fce450c2d842a2af63f0e4c128424f7.json | 10 +++- ...d7c98aad292a3c52002dd8031d46da35851af.json | 12 ++++ ...43c8f71b1c6e73e73ce5f7687db469377c137.json | 4 +- ...00ef32cdbb82ea189329c7d2fb556232459e4.json | 56 +++++++++++++++++++ ...308af3c683ba3cca9c97677072243289cb322.json | 4 +- ...7a34acf1328802fda82eb2281b59a792820de.json | 4 +- ...3c650e1e04bcf51db8f97cbfb85a3e3d0c3bc.json | 4 +- ...47176104b93c64a7a9fb85e2fd1e88ec13143.json | 4 +- ...c84c4c24fe58c21165e6a80d0a5bfae1a3cd7.json | 4 +- ...4a519eba5773d88c91635f5ffb01b1b5302fa.json | 4 +- ...16ba9d04e56ffdbb41bb152ae5762475b5c78.json | 10 +++- ...6626d1f6d8fd8020f4bce41b239de4d8939f.json} | 29 +++++++--- ...600dd598dddd4ee9412522b22127e5bceedc1.json | 5 +- ...1485efd45597a65e4bb7ae8d2888112b3a272.json | 4 +- ...ea241062c3f39e110300ea849d1ad64b94580.json | 12 ++++ ...7f097eb0ec213e5a9a4027563c44f4a05bca3.json | 8 ++- ...f97bc8ca1d36a9305fdb959ef0e577846d606.json | 4 +- ...4cb3f2b7e422cefb1ecc00cf17299edec83c8.json | 8 ++- ...955f377d4059478a2bda4e5bd39ecd836e838.json | 5 +- ...fb791a5585629b14baab7a35185469c2e2e85.json | 8 ++- 32 files changed, 313 insertions(+), 59 deletions(-) create mode 100644 opsqueue/.sqlx/query-0dd811053b68ee41e20c7ff47de01d98962ad16441f4205139a0654e2aa0ba22.json delete mode 100644 opsqueue/.sqlx/query-13b72b517c04819669c5139d0a823e1d009a0612eeecf94ec68401d36d5434e1.json create mode 100644 opsqueue/.sqlx/query-1b27625aa012537f26c3883690577a8248470ba43a498508f4ccebaf09050ff7.json delete mode 100644 opsqueue/.sqlx/query-1b3e8cc0730f75e690337f1834d28d8ae98d1fb97195f47c36a7c45038edb7e8.json create mode 100644 opsqueue/.sqlx/query-374244f899617c0d53ce0ae73ac215295874fe2684ed6096c27a43a5449282e5.json rename opsqueue/.sqlx/{query-17ef938e2fc0ac7bdc09690094b055db5edcb4af140151dc389548d010de4b5f.json => query-3c775bc61256133ed6ea9b46ef0961f40f095482ff9f86a641506a0bbdaa6761.json} (54%) create mode 100644 opsqueue/.sqlx/query-3f8357ea4d8060e1271c7c5de41d7c98aad292a3c52002dd8031d46da35851af.json create mode 100644 opsqueue/.sqlx/query-4e132448643131446b3e7a7a47800ef32cdbb82ea189329c7d2fb556232459e4.json rename opsqueue/.sqlx/{query-c7d9c26e33f222d9b685d3a74a69c3cdd4bce3f9c4fc19e518b1d48930ba793d.json => query-c30f478c0ff9f52daeed0cd1b70f6626d1f6d8fd8020f4bce41b239de4d8939f.json} (55%) create mode 100644 opsqueue/.sqlx/query-df0c7f76822d1c39794f0d9f876ea241062c3f39e110300ea849d1ad64b94580.json diff --git a/opsqueue/.sqlx/query-08fd98126c44dcbd07eb449d09e238c6ea5d468ba73a8b4b1d5f2df9e4bd39b0.json b/opsqueue/.sqlx/query-08fd98126c44dcbd07eb449d09e238c6ea5d468ba73a8b4b1d5f2df9e4bd39b0.json index 1999ee0..c4b61f5 100644 --- a/opsqueue/.sqlx/query-08fd98126c44dcbd07eb449d09e238c6ea5d468ba73a8b4b1d5f2df9e4bd39b0.json +++ b/opsqueue/.sqlx/query-08fd98126c44dcbd07eb449d09e238c6ea5d468ba73a8b4b1d5f2df9e4bd39b0.json @@ -17,7 +17,10 @@ "parameters": { "Right": 2 }, - "nullable": [false, false] + "nullable": [ + false, + false + ] }, "hash": "08fd98126c44dcbd07eb449d09e238c6ea5d468ba73a8b4b1d5f2df9e4bd39b0" } diff --git a/opsqueue/.sqlx/query-0dd811053b68ee41e20c7ff47de01d98962ad16441f4205139a0654e2aa0ba22.json b/opsqueue/.sqlx/query-0dd811053b68ee41e20c7ff47de01d98962ad16441f4205139a0654e2aa0ba22.json new file mode 100644 index 0000000..136f9af --- /dev/null +++ b/opsqueue/.sqlx/query-0dd811053b68ee41e20c7ff47de01d98962ad16441f4205139a0654e2aa0ba22.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "DELETE FROM submissions_metadata\n WHERE submission_id IN (\n SELECT id FROM submissions_cancelled WHERE cancelled_at < julianday($1)\n );", + "describe": { + "columns": [], + "parameters": { + "Right": 1 + }, + "nullable": [] + }, + "hash": "0dd811053b68ee41e20c7ff47de01d98962ad16441f4205139a0654e2aa0ba22" +} diff --git a/opsqueue/.sqlx/query-0f5c290f571f139bc5651240ec05a9da0a4e3a22d1291bc431afe6b976156ca5.json b/opsqueue/.sqlx/query-0f5c290f571f139bc5651240ec05a9da0a4e3a22d1291bc431afe6b976156ca5.json index 7e11e91..50f4005 100644 --- a/opsqueue/.sqlx/query-0f5c290f571f139bc5651240ec05a9da0a4e3a22d1291bc431afe6b976156ca5.json +++ b/opsqueue/.sqlx/query-0f5c290f571f139bc5651240ec05a9da0a4e3a22d1291bc431afe6b976156ca5.json @@ -42,7 +42,15 @@ "parameters": { "Right": 4 }, - "nullable": [false, true, false, false, true, false, true] + "nullable": [ + false, + true, + false, + false, + true, + false, + true + ] }, "hash": "0f5c290f571f139bc5651240ec05a9da0a4e3a22d1291bc431afe6b976156ca5" } diff --git a/opsqueue/.sqlx/query-11d4e8c27b08ec013a154838137bab496b9e37ce482189f38eef19b20fc447f4.json b/opsqueue/.sqlx/query-11d4e8c27b08ec013a154838137bab496b9e37ce482189f38eef19b20fc447f4.json index 502dfc8..ca92921 100644 --- a/opsqueue/.sqlx/query-11d4e8c27b08ec013a154838137bab496b9e37ce482189f38eef19b20fc447f4.json +++ b/opsqueue/.sqlx/query-11d4e8c27b08ec013a154838137bab496b9e37ce482189f38eef19b20fc447f4.json @@ -27,7 +27,12 @@ "parameters": { "Right": 2 }, - "nullable": [false, false, true, false] + "nullable": [ + false, + false, + true, + false + ] }, "hash": "11d4e8c27b08ec013a154838137bab496b9e37ce482189f38eef19b20fc447f4" } diff --git a/opsqueue/.sqlx/query-13b72b517c04819669c5139d0a823e1d009a0612eeecf94ec68401d36d5434e1.json b/opsqueue/.sqlx/query-13b72b517c04819669c5139d0a823e1d009a0612eeecf94ec68401d36d5434e1.json deleted file mode 100644 index 60f8a28..0000000 --- a/opsqueue/.sqlx/query-13b72b517c04819669c5139d0a823e1d009a0612eeecf94ec68401d36d5434e1.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "SQLite", - "query": "DELETE FROM submissions_metadata\n WHERE submission_id = (\n SELECT id FROM submissions_failed WHERE failed_at < julianday($1)\n );", - "describe": { - "columns": [], - "parameters": { - "Right": 1 - }, - "nullable": [] - }, - "hash": "13b72b517c04819669c5139d0a823e1d009a0612eeecf94ec68401d36d5434e1" -} diff --git a/opsqueue/.sqlx/query-18f783ff8500f06825c985530486c0624c112f61a5816d4c4528f9b3151713e4.json b/opsqueue/.sqlx/query-18f783ff8500f06825c985530486c0624c112f61a5816d4c4528f9b3151713e4.json index b84195d..1090456 100644 --- a/opsqueue/.sqlx/query-18f783ff8500f06825c985530486c0624c112f61a5816d4c4528f9b3151713e4.json +++ b/opsqueue/.sqlx/query-18f783ff8500f06825c985530486c0624c112f61a5816d4c4528f9b3151713e4.json @@ -42,7 +42,15 @@ "parameters": { "Right": 1 }, - "nullable": [false, true, false, false, true, true, false] + "nullable": [ + false, + true, + false, + false, + true, + true, + false + ] }, "hash": "18f783ff8500f06825c985530486c0624c112f61a5816d4c4528f9b3151713e4" } diff --git a/opsqueue/.sqlx/query-1b27625aa012537f26c3883690577a8248470ba43a498508f4ccebaf09050ff7.json b/opsqueue/.sqlx/query-1b27625aa012537f26c3883690577a8248470ba43a498508f4ccebaf09050ff7.json new file mode 100644 index 0000000..c603a83 --- /dev/null +++ b/opsqueue/.sqlx/query-1b27625aa012537f26c3883690577a8248470ba43a498508f4ccebaf09050ff7.json @@ -0,0 +1,56 @@ +{ + "db_name": "SQLite", + "query": "\n SELECT\n id AS \"id: SubmissionId\"\n , prefix\n , chunks_total AS \"chunks_total: ChunkCount\"\n , chunks_done AS \"chunks_done: ChunkCount\"\n , metadata\n , ( SELECT json_group_object(metadata_key, metadata_value)\n FROM submissions_metadata\n WHERE submission_id = submissions_cancelled.id\n ) AS \"strategic_metadata: sqlx::types::Json\"\n , cancelled_at AS \"cancelled_at: DateTime\"\n FROM submissions_cancelled WHERE id = $1\n ", + "describe": { + "columns": [ + { + "name": "id: SubmissionId", + "ordinal": 0, + "type_info": "Integer" + }, + { + "name": "prefix", + "ordinal": 1, + "type_info": "Text" + }, + { + "name": "chunks_total: ChunkCount", + "ordinal": 2, + "type_info": "Integer" + }, + { + "name": "chunks_done: ChunkCount", + "ordinal": 3, + "type_info": "Integer" + }, + { + "name": "metadata", + "ordinal": 4, + "type_info": "Blob" + }, + { + "name": "strategic_metadata: sqlx::types::Json", + "ordinal": 5, + "type_info": "Null" + }, + { + "name": "cancelled_at: DateTime", + "ordinal": 6, + "type_info": "Datetime" + } + ], + "parameters": { + "Right": 1 + }, + "nullable": [ + false, + true, + false, + false, + true, + null, + false + ] + }, + "hash": "1b27625aa012537f26c3883690577a8248470ba43a498508f4ccebaf09050ff7" +} diff --git a/opsqueue/.sqlx/query-1b3e8cc0730f75e690337f1834d28d8ae98d1fb97195f47c36a7c45038edb7e8.json b/opsqueue/.sqlx/query-1b3e8cc0730f75e690337f1834d28d8ae98d1fb97195f47c36a7c45038edb7e8.json deleted file mode 100644 index 9d1b07a..0000000 --- a/opsqueue/.sqlx/query-1b3e8cc0730f75e690337f1834d28d8ae98d1fb97195f47c36a7c45038edb7e8.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "SQLite", - "query": "DELETE FROM submissions_metadata\n WHERE submission_id = (\n SELECT id FROM submissions_completed WHERE completed_at < julianday($1)\n );", - "describe": { - "columns": [], - "parameters": { - "Right": 1 - }, - "nullable": [] - }, - "hash": "1b3e8cc0730f75e690337f1834d28d8ae98d1fb97195f47c36a7c45038edb7e8" -} diff --git a/opsqueue/.sqlx/query-207eb97fe104f49008ebe798860f6340f180a1afde82dd1c08dc4b2b650fbfe2.json b/opsqueue/.sqlx/query-207eb97fe104f49008ebe798860f6340f180a1afde82dd1c08dc4b2b650fbfe2.json index f0c2f70..f185e59 100644 --- a/opsqueue/.sqlx/query-207eb97fe104f49008ebe798860f6340f180a1afde82dd1c08dc4b2b650fbfe2.json +++ b/opsqueue/.sqlx/query-207eb97fe104f49008ebe798860f6340f180a1afde82dd1c08dc4b2b650fbfe2.json @@ -27,7 +27,12 @@ "parameters": { "Right": 2 }, - "nullable": [false, false, true, false] + "nullable": [ + false, + false, + true, + false + ] }, "hash": "207eb97fe104f49008ebe798860f6340f180a1afde82dd1c08dc4b2b650fbfe2" } diff --git a/opsqueue/.sqlx/query-2b77ed3badfb9fe0fd7b88635ef9d11f88e91b1cfcef1d93e814ab2da07addcb.json b/opsqueue/.sqlx/query-2b77ed3badfb9fe0fd7b88635ef9d11f88e91b1cfcef1d93e814ab2da07addcb.json index b724699..8d7fe34 100644 --- a/opsqueue/.sqlx/query-2b77ed3badfb9fe0fd7b88635ef9d11f88e91b1cfcef1d93e814ab2da07addcb.json +++ b/opsqueue/.sqlx/query-2b77ed3badfb9fe0fd7b88635ef9d11f88e91b1cfcef1d93e814ab2da07addcb.json @@ -12,7 +12,9 @@ "parameters": { "Right": 0 }, - "nullable": [false] + "nullable": [ + false + ] }, "hash": "2b77ed3badfb9fe0fd7b88635ef9d11f88e91b1cfcef1d93e814ab2da07addcb" } diff --git a/opsqueue/.sqlx/query-374244f899617c0d53ce0ae73ac215295874fe2684ed6096c27a43a5449282e5.json b/opsqueue/.sqlx/query-374244f899617c0d53ce0ae73ac215295874fe2684ed6096c27a43a5449282e5.json new file mode 100644 index 0000000..ac7f974 --- /dev/null +++ b/opsqueue/.sqlx/query-374244f899617c0d53ce0ae73ac215295874fe2684ed6096c27a43a5449282e5.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "DELETE FROM submissions_cancelled WHERE cancelled_at < julianday($1);", + "describe": { + "columns": [], + "parameters": { + "Right": 1 + }, + "nullable": [] + }, + "hash": "374244f899617c0d53ce0ae73ac215295874fe2684ed6096c27a43a5449282e5" +} diff --git a/opsqueue/.sqlx/query-17ef938e2fc0ac7bdc09690094b055db5edcb4af140151dc389548d010de4b5f.json b/opsqueue/.sqlx/query-3c775bc61256133ed6ea9b46ef0961f40f095482ff9f86a641506a0bbdaa6761.json similarity index 54% rename from opsqueue/.sqlx/query-17ef938e2fc0ac7bdc09690094b055db5edcb4af140151dc389548d010de4b5f.json rename to opsqueue/.sqlx/query-3c775bc61256133ed6ea9b46ef0961f40f095482ff9f86a641506a0bbdaa6761.json index e475140..7f43e2a 100644 --- a/opsqueue/.sqlx/query-17ef938e2fc0ac7bdc09690094b055db5edcb4af140151dc389548d010de4b5f.json +++ b/opsqueue/.sqlx/query-3c775bc61256133ed6ea9b46ef0961f40f095482ff9f86a641506a0bbdaa6761.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "\n SELECT\n id AS \"id: SubmissionId\"\n , prefix\n , chunks_total AS \"chunks_total: ChunkCount\"\n , chunk_size AS \"chunk_size: ChunkSize\"\n , metadata\n , completed_at AS \"completed_at: DateTime\"\n , otel_trace_carrier\n FROM submissions_completed WHERE id = $1\n ", + "query": "\n SELECT\n id AS \"id: SubmissionId\"\n , prefix\n , chunks_total AS \"chunks_total: ChunkCount\"\n , chunk_size AS \"chunk_size!: ChunkSize\"\n , metadata\n , ( SELECT json_group_object(metadata_key, metadata_value)\n FROM submissions_metadata\n WHERE submission_id = submissions_completed.id\n ) AS \"strategic_metadata: sqlx::types::Json\"\n , completed_at AS \"completed_at: DateTime\"\n , otel_trace_carrier\n FROM submissions_completed WHERE id = $1\n ", "describe": { "columns": [ { @@ -19,7 +19,7 @@ "type_info": "Integer" }, { - "name": "chunk_size: ChunkSize", + "name": "chunk_size!: ChunkSize", "ordinal": 3, "type_info": "Integer" }, @@ -29,20 +29,34 @@ "type_info": "Blob" }, { - "name": "completed_at: DateTime", + "name": "strategic_metadata: sqlx::types::Json", "ordinal": 5, + "type_info": "Null" + }, + { + "name": "completed_at: DateTime", + "ordinal": 6, "type_info": "Datetime" }, { "name": "otel_trace_carrier", - "ordinal": 6, + "ordinal": 7, "type_info": "Text" } ], "parameters": { "Right": 1 }, - "nullable": [false, true, false, true, true, false, false] + "nullable": [ + false, + true, + false, + true, + true, + null, + false, + false + ] }, - "hash": "17ef938e2fc0ac7bdc09690094b055db5edcb4af140151dc389548d010de4b5f" + "hash": "3c775bc61256133ed6ea9b46ef0961f40f095482ff9f86a641506a0bbdaa6761" } diff --git a/opsqueue/.sqlx/query-3dde3eaab357df88cd1c0e0e8e833aca1fce450c2d842a2af63f0e4c128424f7.json b/opsqueue/.sqlx/query-3dde3eaab357df88cd1c0e0e8e833aca1fce450c2d842a2af63f0e4c128424f7.json index 64daa6a..d7d6e63 100644 --- a/opsqueue/.sqlx/query-3dde3eaab357df88cd1c0e0e8e833aca1fce450c2d842a2af63f0e4c128424f7.json +++ b/opsqueue/.sqlx/query-3dde3eaab357df88cd1c0e0e8e833aca1fce450c2d842a2af63f0e4c128424f7.json @@ -42,7 +42,15 @@ "parameters": { "Right": 3 }, - "nullable": [false, true, false, false, true, false, true] + "nullable": [ + false, + true, + false, + false, + true, + false, + true + ] }, "hash": "3dde3eaab357df88cd1c0e0e8e833aca1fce450c2d842a2af63f0e4c128424f7" } diff --git a/opsqueue/.sqlx/query-3f8357ea4d8060e1271c7c5de41d7c98aad292a3c52002dd8031d46da35851af.json b/opsqueue/.sqlx/query-3f8357ea4d8060e1271c7c5de41d7c98aad292a3c52002dd8031d46da35851af.json new file mode 100644 index 0000000..0d89f28 --- /dev/null +++ b/opsqueue/.sqlx/query-3f8357ea4d8060e1271c7c5de41d7c98aad292a3c52002dd8031d46da35851af.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "DELETE FROM submissions_metadata\n WHERE submission_id IN (\n SELECT id FROM submissions_completed WHERE completed_at < julianday($1)\n );", + "describe": { + "columns": [], + "parameters": { + "Right": 1 + }, + "nullable": [] + }, + "hash": "3f8357ea4d8060e1271c7c5de41d7c98aad292a3c52002dd8031d46da35851af" +} diff --git a/opsqueue/.sqlx/query-40e96fd79c38c8338bcc2f18fbc43c8f71b1c6e73e73ce5f7687db469377c137.json b/opsqueue/.sqlx/query-40e96fd79c38c8338bcc2f18fbc43c8f71b1c6e73e73ce5f7687db469377c137.json index 1ce8f24..0dc519c 100644 --- a/opsqueue/.sqlx/query-40e96fd79c38c8338bcc2f18fbc43c8f71b1c6e73e73ce5f7687db469377c137.json +++ b/opsqueue/.sqlx/query-40e96fd79c38c8338bcc2f18fbc43c8f71b1c6e73e73ce5f7687db469377c137.json @@ -12,7 +12,9 @@ "parameters": { "Right": 1 }, - "nullable": [true] + "nullable": [ + true + ] }, "hash": "40e96fd79c38c8338bcc2f18fbc43c8f71b1c6e73e73ce5f7687db469377c137" } diff --git a/opsqueue/.sqlx/query-4e132448643131446b3e7a7a47800ef32cdbb82ea189329c7d2fb556232459e4.json b/opsqueue/.sqlx/query-4e132448643131446b3e7a7a47800ef32cdbb82ea189329c7d2fb556232459e4.json new file mode 100644 index 0000000..e3e6602 --- /dev/null +++ b/opsqueue/.sqlx/query-4e132448643131446b3e7a7a47800ef32cdbb82ea189329c7d2fb556232459e4.json @@ -0,0 +1,56 @@ +{ + "db_name": "SQLite", + "query": "\n INSERT INTO submissions_cancelled\n (id, chunks_total, prefix, metadata, cancelled_at, chunks_done)\n SELECT id, chunks_total, prefix, metadata, julianday($1), chunks_done FROM submissions WHERE id = $2;\n\n DELETE FROM submissions WHERE id = $3 RETURNING *;\n ", + "describe": { + "columns": [ + { + "name": "id", + "ordinal": 0, + "type_info": "Integer" + }, + { + "name": "prefix", + "ordinal": 1, + "type_info": "Text" + }, + { + "name": "chunks_total", + "ordinal": 2, + "type_info": "Integer" + }, + { + "name": "chunks_done", + "ordinal": 3, + "type_info": "Integer" + }, + { + "name": "metadata", + "ordinal": 4, + "type_info": "Blob" + }, + { + "name": "otel_trace_carrier", + "ordinal": 5, + "type_info": "Text" + }, + { + "name": "chunk_size", + "ordinal": 6, + "type_info": "Integer" + } + ], + "parameters": { + "Right": 3 + }, + "nullable": [ + false, + true, + false, + false, + true, + false, + true + ] + }, + "hash": "4e132448643131446b3e7a7a47800ef32cdbb82ea189329c7d2fb556232459e4" +} diff --git a/opsqueue/.sqlx/query-5d1f0e786821af3135eb9022004308af3c683ba3cca9c97677072243289cb322.json b/opsqueue/.sqlx/query-5d1f0e786821af3135eb9022004308af3c683ba3cca9c97677072243289cb322.json index 0a4cd49..925fa44 100644 --- a/opsqueue/.sqlx/query-5d1f0e786821af3135eb9022004308af3c683ba3cca9c97677072243289cb322.json +++ b/opsqueue/.sqlx/query-5d1f0e786821af3135eb9022004308af3c683ba3cca9c97677072243289cb322.json @@ -12,7 +12,9 @@ "parameters": { "Right": 0 }, - "nullable": [false] + "nullable": [ + false + ] }, "hash": "5d1f0e786821af3135eb9022004308af3c683ba3cca9c97677072243289cb322" } diff --git a/opsqueue/.sqlx/query-5f7d80f5b4990d9d4e0cca6491d7a34acf1328802fda82eb2281b59a792820de.json b/opsqueue/.sqlx/query-5f7d80f5b4990d9d4e0cca6491d7a34acf1328802fda82eb2281b59a792820de.json index 505b3bc..dfc6939 100644 --- a/opsqueue/.sqlx/query-5f7d80f5b4990d9d4e0cca6491d7a34acf1328802fda82eb2281b59a792820de.json +++ b/opsqueue/.sqlx/query-5f7d80f5b4990d9d4e0cca6491d7a34acf1328802fda82eb2281b59a792820de.json @@ -12,7 +12,9 @@ "parameters": { "Right": 0 }, - "nullable": [false] + "nullable": [ + false + ] }, "hash": "5f7d80f5b4990d9d4e0cca6491d7a34acf1328802fda82eb2281b59a792820de" } diff --git a/opsqueue/.sqlx/query-62b1b5988a509f9722489522fbe3c650e1e04bcf51db8f97cbfb85a3e3d0c3bc.json b/opsqueue/.sqlx/query-62b1b5988a509f9722489522fbe3c650e1e04bcf51db8f97cbfb85a3e3d0c3bc.json index 55aa8c1..57d858b 100644 --- a/opsqueue/.sqlx/query-62b1b5988a509f9722489522fbe3c650e1e04bcf51db8f97cbfb85a3e3d0c3bc.json +++ b/opsqueue/.sqlx/query-62b1b5988a509f9722489522fbe3c650e1e04bcf51db8f97cbfb85a3e3d0c3bc.json @@ -12,7 +12,9 @@ "parameters": { "Right": 0 }, - "nullable": [false] + "nullable": [ + false + ] }, "hash": "62b1b5988a509f9722489522fbe3c650e1e04bcf51db8f97cbfb85a3e3d0c3bc" } diff --git a/opsqueue/.sqlx/query-6c3fac07b6b1b07ccdaaf0d296647176104b93c64a7a9fb85e2fd1e88ec13143.json b/opsqueue/.sqlx/query-6c3fac07b6b1b07ccdaaf0d296647176104b93c64a7a9fb85e2fd1e88ec13143.json index 8dd9d5e..8e8e87c 100644 --- a/opsqueue/.sqlx/query-6c3fac07b6b1b07ccdaaf0d296647176104b93c64a7a9fb85e2fd1e88ec13143.json +++ b/opsqueue/.sqlx/query-6c3fac07b6b1b07ccdaaf0d296647176104b93c64a7a9fb85e2fd1e88ec13143.json @@ -12,7 +12,9 @@ "parameters": { "Right": 0 }, - "nullable": [false] + "nullable": [ + false + ] }, "hash": "6c3fac07b6b1b07ccdaaf0d296647176104b93c64a7a9fb85e2fd1e88ec13143" } diff --git a/opsqueue/.sqlx/query-833bc5d955f1c2455e06e9762dec84c4c24fe58c21165e6a80d0a5bfae1a3cd7.json b/opsqueue/.sqlx/query-833bc5d955f1c2455e06e9762dec84c4c24fe58c21165e6a80d0a5bfae1a3cd7.json index 257cff9..864d748 100644 --- a/opsqueue/.sqlx/query-833bc5d955f1c2455e06e9762dec84c4c24fe58c21165e6a80d0a5bfae1a3cd7.json +++ b/opsqueue/.sqlx/query-833bc5d955f1c2455e06e9762dec84c4c24fe58c21165e6a80d0a5bfae1a3cd7.json @@ -12,7 +12,9 @@ "parameters": { "Right": 2 }, - "nullable": [false] + "nullable": [ + false + ] }, "hash": "833bc5d955f1c2455e06e9762dec84c4c24fe58c21165e6a80d0a5bfae1a3cd7" } diff --git a/opsqueue/.sqlx/query-91d3b5ff8e68c788d3209b4f1234a519eba5773d88c91635f5ffb01b1b5302fa.json b/opsqueue/.sqlx/query-91d3b5ff8e68c788d3209b4f1234a519eba5773d88c91635f5ffb01b1b5302fa.json index d74b332..addcaea 100644 --- a/opsqueue/.sqlx/query-91d3b5ff8e68c788d3209b4f1234a519eba5773d88c91635f5ffb01b1b5302fa.json +++ b/opsqueue/.sqlx/query-91d3b5ff8e68c788d3209b4f1234a519eba5773d88c91635f5ffb01b1b5302fa.json @@ -12,7 +12,9 @@ "parameters": { "Right": 0 }, - "nullable": [false] + "nullable": [ + false + ] }, "hash": "91d3b5ff8e68c788d3209b4f1234a519eba5773d88c91635f5ffb01b1b5302fa" } diff --git a/opsqueue/.sqlx/query-c149e54e9a57cd5ded5e9e2656116ba9d04e56ffdbb41bb152ae5762475b5c78.json b/opsqueue/.sqlx/query-c149e54e9a57cd5ded5e9e2656116ba9d04e56ffdbb41bb152ae5762475b5c78.json index 1419ef9..43924ea 100644 --- a/opsqueue/.sqlx/query-c149e54e9a57cd5ded5e9e2656116ba9d04e56ffdbb41bb152ae5762475b5c78.json +++ b/opsqueue/.sqlx/query-c149e54e9a57cd5ded5e9e2656116ba9d04e56ffdbb41bb152ae5762475b5c78.json @@ -42,7 +42,15 @@ "parameters": { "Right": 1 }, - "nullable": [false, true, false, false, true, true, false] + "nullable": [ + false, + true, + false, + false, + true, + true, + false + ] }, "hash": "c149e54e9a57cd5ded5e9e2656116ba9d04e56ffdbb41bb152ae5762475b5c78" } diff --git a/opsqueue/.sqlx/query-c7d9c26e33f222d9b685d3a74a69c3cdd4bce3f9c4fc19e518b1d48930ba793d.json b/opsqueue/.sqlx/query-c30f478c0ff9f52daeed0cd1b70f6626d1f6d8fd8020f4bce41b239de4d8939f.json similarity index 55% rename from opsqueue/.sqlx/query-c7d9c26e33f222d9b685d3a74a69c3cdd4bce3f9c4fc19e518b1d48930ba793d.json rename to opsqueue/.sqlx/query-c30f478c0ff9f52daeed0cd1b70f6626d1f6d8fd8020f4bce41b239de4d8939f.json index 4373470..17d85c2 100644 --- a/opsqueue/.sqlx/query-c7d9c26e33f222d9b685d3a74a69c3cdd4bce3f9c4fc19e518b1d48930ba793d.json +++ b/opsqueue/.sqlx/query-c30f478c0ff9f52daeed0cd1b70f6626d1f6d8fd8020f4bce41b239de4d8939f.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "\n SELECT\n id AS \"id: SubmissionId\"\n , prefix\n , chunks_total AS \"chunks_total: ChunkCount\"\n , chunk_size AS \"chunk_size: ChunkSize\"\n , metadata\n , failed_at AS \"failed_at: DateTime\"\n , failed_chunk_id AS \"failed_chunk_id: ChunkIndex\"\n , otel_trace_carrier\n FROM submissions_failed WHERE id = $1\n ", + "query": "\n SELECT\n id AS \"id: SubmissionId\"\n , prefix\n , chunks_total AS \"chunks_total: ChunkCount\"\n , chunk_size AS \"chunk_size!: ChunkSize\"\n , metadata\n , ( SELECT json_group_object(metadata_key, metadata_value)\n FROM submissions_metadata\n WHERE submission_id = submissions_failed.id\n ) AS \"strategic_metadata: sqlx::types::Json\"\n , failed_at AS \"failed_at: DateTime\"\n , failed_chunk_id AS \"failed_chunk_id: ChunkIndex\"\n , otel_trace_carrier\n FROM submissions_failed WHERE id = $1\n ", "describe": { "columns": [ { @@ -19,7 +19,7 @@ "type_info": "Integer" }, { - "name": "chunk_size: ChunkSize", + "name": "chunk_size!: ChunkSize", "ordinal": 3, "type_info": "Integer" }, @@ -29,25 +29,40 @@ "type_info": "Blob" }, { - "name": "failed_at: DateTime", + "name": "strategic_metadata: sqlx::types::Json", "ordinal": 5, + "type_info": "Null" + }, + { + "name": "failed_at: DateTime", + "ordinal": 6, "type_info": "Datetime" }, { "name": "failed_chunk_id: ChunkIndex", - "ordinal": 6, + "ordinal": 7, "type_info": "Integer" }, { "name": "otel_trace_carrier", - "ordinal": 7, + "ordinal": 8, "type_info": "Text" } ], "parameters": { "Right": 1 }, - "nullable": [false, true, false, true, true, false, false, false] + "nullable": [ + false, + true, + false, + true, + true, + null, + false, + false, + false + ] }, - "hash": "c7d9c26e33f222d9b685d3a74a69c3cdd4bce3f9c4fc19e518b1d48930ba793d" + "hash": "c30f478c0ff9f52daeed0cd1b70f6626d1f6d8fd8020f4bce41b239de4d8939f" } diff --git a/opsqueue/.sqlx/query-c4fc111b75ae4036c16042be654600dd598dddd4ee9412522b22127e5bceedc1.json b/opsqueue/.sqlx/query-c4fc111b75ae4036c16042be654600dd598dddd4ee9412522b22127e5bceedc1.json index 12d8ee5..0b7d0be 100644 --- a/opsqueue/.sqlx/query-c4fc111b75ae4036c16042be654600dd598dddd4ee9412522b22127e5bceedc1.json +++ b/opsqueue/.sqlx/query-c4fc111b75ae4036c16042be654600dd598dddd4ee9412522b22127e5bceedc1.json @@ -17,7 +17,10 @@ "parameters": { "Right": 6 }, - "nullable": [false, false] + "nullable": [ + false, + false + ] }, "hash": "c4fc111b75ae4036c16042be654600dd598dddd4ee9412522b22127e5bceedc1" } diff --git a/opsqueue/.sqlx/query-d5aa781509794455e2e8e16b2ba1485efd45597a65e4bb7ae8d2888112b3a272.json b/opsqueue/.sqlx/query-d5aa781509794455e2e8e16b2ba1485efd45597a65e4bb7ae8d2888112b3a272.json index 2aa293e..ad184b9 100644 --- a/opsqueue/.sqlx/query-d5aa781509794455e2e8e16b2ba1485efd45597a65e4bb7ae8d2888112b3a272.json +++ b/opsqueue/.sqlx/query-d5aa781509794455e2e8e16b2ba1485efd45597a65e4bb7ae8d2888112b3a272.json @@ -12,7 +12,9 @@ "parameters": { "Right": 0 }, - "nullable": [false] + "nullable": [ + false + ] }, "hash": "d5aa781509794455e2e8e16b2ba1485efd45597a65e4bb7ae8d2888112b3a272" } diff --git a/opsqueue/.sqlx/query-df0c7f76822d1c39794f0d9f876ea241062c3f39e110300ea849d1ad64b94580.json b/opsqueue/.sqlx/query-df0c7f76822d1c39794f0d9f876ea241062c3f39e110300ea849d1ad64b94580.json new file mode 100644 index 0000000..291c7e8 --- /dev/null +++ b/opsqueue/.sqlx/query-df0c7f76822d1c39794f0d9f876ea241062c3f39e110300ea849d1ad64b94580.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "DELETE FROM submissions_metadata\n WHERE submission_id IN (\n SELECT id FROM submissions_failed WHERE failed_at < julianday($1)\n );", + "describe": { + "columns": [], + "parameters": { + "Right": 1 + }, + "nullable": [] + }, + "hash": "df0c7f76822d1c39794f0d9f876ea241062c3f39e110300ea849d1ad64b94580" +} diff --git a/opsqueue/.sqlx/query-e282079ded2d608817a2b2d27917f097eb0ec213e5a9a4027563c44f4a05bca3.json b/opsqueue/.sqlx/query-e282079ded2d608817a2b2d27917f097eb0ec213e5a9a4027563c44f4a05bca3.json index 81d6fa0..c834102 100644 --- a/opsqueue/.sqlx/query-e282079ded2d608817a2b2d27917f097eb0ec213e5a9a4027563c44f4a05bca3.json +++ b/opsqueue/.sqlx/query-e282079ded2d608817a2b2d27917f097eb0ec213e5a9a4027563c44f4a05bca3.json @@ -32,7 +32,13 @@ "parameters": { "Right": 2 }, - "nullable": [false, false, true, false, false] + "nullable": [ + false, + false, + true, + false, + false + ] }, "hash": "e282079ded2d608817a2b2d27917f097eb0ec213e5a9a4027563c44f4a05bca3" } diff --git a/opsqueue/.sqlx/query-e73afd2c8d84e6c3044f0662525f97bc8ca1d36a9305fdb959ef0e577846d606.json b/opsqueue/.sqlx/query-e73afd2c8d84e6c3044f0662525f97bc8ca1d36a9305fdb959ef0e577846d606.json index 50317dd..7cb97e7 100644 --- a/opsqueue/.sqlx/query-e73afd2c8d84e6c3044f0662525f97bc8ca1d36a9305fdb959ef0e577846d606.json +++ b/opsqueue/.sqlx/query-e73afd2c8d84e6c3044f0662525f97bc8ca1d36a9305fdb959ef0e577846d606.json @@ -12,7 +12,9 @@ "parameters": { "Right": 3 }, - "nullable": [false] + "nullable": [ + false + ] }, "hash": "e73afd2c8d84e6c3044f0662525f97bc8ca1d36a9305fdb959ef0e577846d606" } diff --git a/opsqueue/.sqlx/query-e92c5478fe8f1e5dee3d5e73ecf4cb3f2b7e422cefb1ecc00cf17299edec83c8.json b/opsqueue/.sqlx/query-e92c5478fe8f1e5dee3d5e73ecf4cb3f2b7e422cefb1ecc00cf17299edec83c8.json index 9b017ac..2d45cac 100644 --- a/opsqueue/.sqlx/query-e92c5478fe8f1e5dee3d5e73ecf4cb3f2b7e422cefb1ecc00cf17299edec83c8.json +++ b/opsqueue/.sqlx/query-e92c5478fe8f1e5dee3d5e73ecf4cb3f2b7e422cefb1ecc00cf17299edec83c8.json @@ -32,7 +32,13 @@ "parameters": { "Right": 6 }, - "nullable": [false, false, true, false, false] + "nullable": [ + false, + false, + true, + false, + false + ] }, "hash": "e92c5478fe8f1e5dee3d5e73ecf4cb3f2b7e422cefb1ecc00cf17299edec83c8" } diff --git a/opsqueue/.sqlx/query-eda8781445cef23e17446ca9007955f377d4059478a2bda4e5bd39ecd836e838.json b/opsqueue/.sqlx/query-eda8781445cef23e17446ca9007955f377d4059478a2bda4e5bd39ecd836e838.json index a3e64a8..c7b33a5 100644 --- a/opsqueue/.sqlx/query-eda8781445cef23e17446ca9007955f377d4059478a2bda4e5bd39ecd836e838.json +++ b/opsqueue/.sqlx/query-eda8781445cef23e17446ca9007955f377d4059478a2bda4e5bd39ecd836e838.json @@ -17,7 +17,10 @@ "parameters": { "Right": 1 }, - "nullable": [false, false] + "nullable": [ + false, + false + ] }, "hash": "eda8781445cef23e17446ca9007955f377d4059478a2bda4e5bd39ecd836e838" } diff --git a/opsqueue/.sqlx/query-ef677e899bf812760d0d24c9fa1fb791a5585629b14baab7a35185469c2e2e85.json b/opsqueue/.sqlx/query-ef677e899bf812760d0d24c9fa1fb791a5585629b14baab7a35185469c2e2e85.json index 4d82179..3135c80 100644 --- a/opsqueue/.sqlx/query-ef677e899bf812760d0d24c9fa1fb791a5585629b14baab7a35185469c2e2e85.json +++ b/opsqueue/.sqlx/query-ef677e899bf812760d0d24c9fa1fb791a5585629b14baab7a35185469c2e2e85.json @@ -32,7 +32,13 @@ "parameters": { "Right": 0 }, - "nullable": [false, false, false, false, true] + "nullable": [ + false, + false, + false, + false, + true + ] }, "hash": "ef677e899bf812760d0d24c9fa1fb791a5585629b14baab7a35185469c2e2e85" } From d5440e790c8dad36a5e8eb0c338b904dcaf71c0f Mon Sep 17 00:00:00 2001 From: Reinier Maas Date: Tue, 28 Apr 2026 15:30:54 +0200 Subject: [PATCH 7/7] ci: add sqlx-check + pre-commit hook to keep .sqlx/ in sync Adds a "just sqlx-check" recipe (cargo sqlx prepare --check -- --all-targets) and wires it into .pre-commit-config.yaml so any commit touching opsqueue/src/*.rs, migrations, or .sqlx/ verifies the offline query cache matches the source. Without this guard, a stale .sqlx/ silently breaks downstream Crane/Nix builds of the published crate (we already paid for this once, see preceding commit). --- .pre-commit-config.yaml | 6 ++++++ justfile | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 672f66c..071fe6f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -31,6 +31,12 @@ repos: language: system types: [rust] pass_filenames: false + - id: sqlx-prepare-check + name: sqlx prepare --check (offline query cache fresh) + entry: just sqlx-check + language: system + files: ^opsqueue/(src/.*\.rs|migrations/.*\.sql|\.sqlx/.*)$ + pass_filenames: false - id: nixfmt name: nixfmt entry: nixfmt --strict diff --git a/justfile b/justfile index 6f862ff..c3a2d62 100644 --- a/justfile +++ b/justfile @@ -137,3 +137,16 @@ package-check: fi cargo package -p opsqueue --no-verify --allow-dirty >/dev/null echo "package-check: OK" + +# Verify the sqlx offline query cache (`opsqueue/.sqlx/`) is in sync with the +# `query!`/`query_as!` invocations in the source tree. Required so downstream +# offline (Crane/Nix) builds of the published crate that enable `server-logic` +# can compile without a live SQLite database. +[group('lint')] +sqlx-check: + #!/usr/bin/env bash + set -euo pipefail + cd opsqueue + DATABASE_URL="sqlite://$PWD/opsqueue_example_database_schema.db" \ + cargo sqlx prepare --check -- --all-targets + echo "sqlx-check: OK"