fix(ci): zot test schema parity + dockerignore theme path + hadolint DL3059
Some checks failed
CI / skinny-install (aco) (push) Successful in 1m7s
CI / skinny-install (api) (push) Successful in 35s
CI / skinny-install (bcda) (push) Successful in 36s
CI / skinny-install (bib) (push) Successful in 35s
CI / skinny-install (bls) (push) Successful in 32s
CI / skinny-install (ccw) (push) Successful in 35s
CI / skinny-install (cli) (push) Successful in 39s
CI / skinny-install (cms) (push) Failing after 0s
CI / skinny-install (conf) (push) Successful in 39s
CI / skinny-install (opps) (push) Successful in 36s
CI / skinny-install (perf) (push) Failing after 1s
CI / skinny-install (pfs) (push) Successful in 41s
CI / skinny-install (rex) (push) Successful in 36s
Deploy / build-scan-report (push) Failing after 39s
CI / lint-test (push) Failing after 10m14s
Some checks failed
CI / skinny-install (aco) (push) Successful in 1m7s
CI / skinny-install (api) (push) Successful in 35s
CI / skinny-install (bcda) (push) Successful in 36s
CI / skinny-install (bib) (push) Successful in 35s
CI / skinny-install (bls) (push) Successful in 32s
CI / skinny-install (ccw) (push) Successful in 35s
CI / skinny-install (cli) (push) Successful in 39s
CI / skinny-install (cms) (push) Failing after 0s
CI / skinny-install (conf) (push) Successful in 39s
CI / skinny-install (opps) (push) Successful in 36s
CI / skinny-install (perf) (push) Failing after 1s
CI / skinny-install (pfs) (push) Successful in 41s
CI / skinny-install (rex) (push) Successful in 36s
Deploy / build-scan-report (push) Failing after 39s
CI / lint-test (push) Failing after 10m14s
- tests/zot/test_db.py: seed itemTypes/fields/creatorTypes tables before Db.__init__ so _verify_schema_parity passes. Update hardcoded constant assertions to match Zotero 7 schema IDs. - .dockerignore: un-exclude intermediate infra/marimo/ dir so BuildKit can descend into infra/marimo/theme/ (COPY was erroring with "not found" even though theme/** was un-excluded). - .hadolint.yaml: suppress DL3059 (consecutive RUN — intentional for cache-layer control in docs.Dockerfile).
This commit is contained in:
@@ -15,10 +15,15 @@ tests/
|
||||
infra/
|
||||
# Carve out the pieces that feed image builds so they ride along in the
|
||||
# build context. `infra/` is otherwise heavy (certs, state, configs).
|
||||
# Docker needs each intermediate directory un-excluded explicitly:
|
||||
# `!infra/marimo/` un-excludes the dir entry itself so BuildKit can
|
||||
# descend into it; `!infra/marimo/theme/**` un-excludes the contents.
|
||||
!infra/marimo/
|
||||
!infra/marimo/theme/
|
||||
!infra/marimo/theme/**
|
||||
!infra/gitea/
|
||||
!infra/gitea/**
|
||||
!infra/images/
|
||||
assets/
|
||||
cloud/
|
||||
mirrors/
|
||||
|
||||
@@ -6,3 +6,4 @@ ignored:
|
||||
- DL4006 # Pipe to bash (accepted for zotero installer script)
|
||||
- SC2015 # A && B || C pattern (intentional in multi-stage builds)
|
||||
- SC2012 # ls vs find (ls is fine for known-safe filenames in our builds)
|
||||
- DL3059 # Multiple consecutive RUN (intentional for cache-layer granularity)
|
||||
|
||||
@@ -132,9 +132,38 @@ CREATE TABLE IF NOT EXISTS itemNotes (
|
||||
note TEXT,
|
||||
title TEXT
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS itemTypes (
|
||||
itemTypeID INTEGER PRIMARY KEY,
|
||||
typeName TEXT
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS creatorTypes (
|
||||
creatorTypeID INTEGER PRIMARY KEY,
|
||||
creatorType TEXT
|
||||
);
|
||||
"""
|
||||
|
||||
|
||||
def _seed_schema_maps(con: sqlite3.Connection) -> None:
|
||||
"""Populate lookup tables so ``_verify_schema_parity`` passes."""
|
||||
for name, tid in TYPE_MAP.items():
|
||||
con.execute(
|
||||
"INSERT OR IGNORE INTO itemTypes (itemTypeID, typeName) VALUES (?, ?)",
|
||||
(tid, name),
|
||||
)
|
||||
for name, fid in FIELD_MAP.items():
|
||||
con.execute(
|
||||
"INSERT OR IGNORE INTO fields (fieldID, fieldName) VALUES (?, ?)",
|
||||
(fid, name),
|
||||
)
|
||||
for name, cid in CREATOR_TYPES.items():
|
||||
con.execute(
|
||||
"INSERT OR IGNORE INTO creatorTypes (creatorTypeID, creatorType) VALUES (?, ?)",
|
||||
(cid, name),
|
||||
)
|
||||
|
||||
|
||||
def _seed_fields(con: sqlite3.Connection) -> None:
|
||||
"""Insert field definitions so get_fields() can join by name."""
|
||||
for name, fid in FIELD_MAP.items():
|
||||
@@ -156,9 +185,11 @@ def db(tmp_path) -> Db:
|
||||
path = str(tmp_path / "zotero.sqlite")
|
||||
con = sqlite3.connect(path)
|
||||
con.executescript(ZOTERO_SCHEMA)
|
||||
# Seed lookup tables BEFORE Db.__init__ so _verify_schema_parity passes.
|
||||
_seed_schema_maps(con)
|
||||
con.commit()
|
||||
con.close()
|
||||
d = Db(path)
|
||||
_seed_fields(d.con)
|
||||
yield d
|
||||
d.close()
|
||||
|
||||
@@ -481,7 +512,7 @@ class TestContextManager:
|
||||
|
||||
class TestConstants:
|
||||
def test_type_map_has_all_standard_types(self):
|
||||
assert len(TYPE_MAP) == 36
|
||||
assert len(TYPE_MAP) == 40
|
||||
assert "journalArticle" in TYPE_MAP
|
||||
assert "statute" in TYPE_MAP
|
||||
assert "report" in TYPE_MAP
|
||||
@@ -490,16 +521,16 @@ class TestConstants:
|
||||
|
||||
def test_field_map_has_core_fields(self):
|
||||
assert len(FIELD_MAP) >= 100
|
||||
assert FIELD_MAP["title"] == 110
|
||||
assert FIELD_MAP["url"] == 1
|
||||
assert FIELD_MAP["abstractNote"] == 90
|
||||
assert FIELD_MAP["extra"] == 22
|
||||
assert FIELD_MAP["DOI"] == 26
|
||||
assert FIELD_MAP["title"] == 1
|
||||
assert FIELD_MAP["url"] == 10
|
||||
assert FIELD_MAP["abstractNote"] == 2
|
||||
assert FIELD_MAP["extra"] == 19
|
||||
assert FIELD_MAP["DOI"] == 8
|
||||
|
||||
def test_creator_types_complete(self):
|
||||
assert len(CREATOR_TYPES) == 29
|
||||
assert CREATOR_TYPES["author"] == 1
|
||||
assert CREATOR_TYPES["editor"] == 3
|
||||
assert len(CREATOR_TYPES) == 37
|
||||
assert CREATOR_TYPES["author"] == 10
|
||||
assert CREATOR_TYPES["editor"] == 12
|
||||
|
||||
|
||||
# ── Structured reads ─────────────────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user