From d00ba70122b0cb744170148a8b376dc5a9c6dd2e Mon Sep 17 00:00:00 2001 From: Nico Loesch Date: Thu, 23 Jul 2026 02:38:56 +0000 Subject: [PATCH 1/3] Widen sibling dependency pins to semver ranges, add lowest-direct CI and Dependabot --- .github/dependabot.yml | 13 +++++++++++++ .github/workflows/ci.yml | 12 ++++++++++++ pyproject.toml | 12 ++++++------ 3 files changed, 31 insertions(+), 6 deletions(-) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..a8dfd22 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,13 @@ +version: 2 +updates: + - package-ecosystem: "uv" + directory: "/" + schedule: + interval: "weekly" + versioning-strategy: "lockfile-only" + labels: + - "dependencies" + allow: + - dependency-name: "omop-alchemy" + - dependency-name: "oa-configurator" + - dependency-name: "omop-emb" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ffb226f..33f3fbe 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,3 +17,15 @@ jobs: uv run omop-config configure omop_graph \ --max-depth 6 \ --max-paths 20 + build-test-lowest-direct: + uses: AustralianCancerDataNetwork/cava-devops/.github/workflows/build-test.yml@main + with: + resolution: lowest-direct + setup-commands: | + uv run omop-config configure omop_alchemy \ + --dialect sqlite \ + --database-name test.db \ + --cdm-schema main + uv run omop-config configure omop_graph \ + --max-depth 6 \ + --max-paths 20 diff --git a/pyproject.toml b/pyproject.toml index f2457fd..631a9e2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,23 +33,23 @@ classifiers = [ ] dependencies = [ - "omop-alchemy==0.8.0", + "omop-alchemy>=0.8.0,<1.0.0", "typing-extensions>=4.15.0", "typer>=0.12", "rich>=13.0", "oaklib", - "oa-configurator==0.1.2" + "oa-configurator>=0.1.2,<1.0.0" ] [project.optional-dependencies] emb = [ - "omop-emb==1.1.1", + "omop-emb>=1.1.1,<2.0.0", ] faiss-cpu = [ - "omop-emb[faiss-cpu]==1.1.1", + "omop-emb[faiss-cpu]>=1.1.1,<2.0.0", ] pgvector = [ - "omop-emb[pgvector]==1.1.1", + "omop-emb[pgvector]>=1.1.1,<2.0.0", ] postgres = [ "omop-alchemy[postgres]", @@ -70,7 +70,7 @@ dev = [ "mkdocs-mermaid2-plugin", "mkdocs-table-reader-plugin", "mkdocs-macros-plugin", - "oa-configurator[postgres]>=0.1.1", + "oa-configurator[postgres]>=0.1.2,<1.0.0", ] [project.scripts] From a20f9bef87c929a1a2149a3f714ad1a8f2807807 Mon Sep 17 00:00:00 2001 From: Nico Loesch Date: Thu, 23 Jul 2026 03:50:57 +0000 Subject: [PATCH 2/3] Update uv.lock file --- pyproject.toml | 2 +- uv.lock | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 631a9e2..7a9d39b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -52,7 +52,7 @@ pgvector = [ "omop-emb[pgvector]>=1.1.1,<2.0.0", ] postgres = [ - "omop-alchemy[postgres]", + "omop-alchemy[postgres]>=0.8.0,<1.0.0", ] diff --git a/uv.lock b/uv.lock index 7fee82f..db05e12 100644 --- a/uv.lock +++ b/uv.lock @@ -1861,18 +1861,18 @@ requires-dist = [ { name = "mkdocs-mermaid2-plugin", marker = "extra == 'dev'" }, { name = "mkdocs-table-reader-plugin", marker = "extra == 'dev'" }, { name = "mkdocstrings", extras = ["python"], marker = "extra == 'dev'" }, - { name = "oa-configurator", specifier = "==0.1.2" }, - { name = "oa-configurator", extras = ["postgres"], marker = "extra == 'dev'", specifier = ">=0.1.1" }, + { name = "oa-configurator", specifier = ">=0.1.2,<1.0.0" }, + { name = "oa-configurator", extras = ["postgres"], marker = "extra == 'dev'", specifier = ">=0.1.2,<1.0.0" }, { name = "oaklib" }, - { name = "omop-alchemy", specifier = "==0.8.0" }, + { name = "omop-alchemy", specifier = ">=0.8.0,<1.0.0" }, { name = "omop-alchemy", extras = ["postgres"], marker = "extra == 'dev'" }, { name = "omop-alchemy", extras = ["postgres"], marker = "extra == 'postgres'" }, - { name = "omop-emb", marker = "extra == 'dev'", specifier = "==1.1.1" }, - { name = "omop-emb", marker = "extra == 'emb'", specifier = "==1.1.1" }, - { name = "omop-emb", extras = ["faiss-cpu"], marker = "extra == 'dev'", specifier = "==1.1.1" }, - { name = "omop-emb", extras = ["faiss-cpu"], marker = "extra == 'faiss-cpu'", specifier = "==1.1.1" }, - { name = "omop-emb", extras = ["pgvector"], marker = "extra == 'dev'", specifier = "==1.1.1" }, - { name = "omop-emb", extras = ["pgvector"], marker = "extra == 'pgvector'", specifier = "==1.1.1" }, + { name = "omop-emb", marker = "extra == 'dev'", specifier = ">=1.1.1,<2.0.0" }, + { name = "omop-emb", marker = "extra == 'emb'", specifier = ">=1.1.1,<2.0.0" }, + { name = "omop-emb", extras = ["faiss-cpu"], marker = "extra == 'dev'", specifier = ">=1.1.1,<2.0.0" }, + { name = "omop-emb", extras = ["faiss-cpu"], marker = "extra == 'faiss-cpu'", specifier = ">=1.1.1,<2.0.0" }, + { name = "omop-emb", extras = ["pgvector"], marker = "extra == 'dev'", specifier = ">=1.1.1,<2.0.0" }, + { name = "omop-emb", extras = ["pgvector"], marker = "extra == 'pgvector'", specifier = ">=1.1.1,<2.0.0" }, { name = "pytest", marker = "extra == 'dev'", specifier = ">=9.0.2" }, { name = "pytest-cov", marker = "extra == 'dev'", specifier = ">=7.0.0" }, { name = "rich", specifier = ">=13.0" }, From 7c995cfd202d344f95ff8a97f9e40b1eba4a438e Mon Sep 17 00:00:00 2001 From: Nico Loesch Date: Fri, 24 Jul 2026 06:03:30 +0000 Subject: [PATCH 3/3] Update to new cava-devops, pre-commit hooks --- .githooks/pre-commit | 37 +++++++++++++++++++++++++++++++++++++ .github/dependabot.yml | 13 ------------- .github/workflows/ci.yml | 12 ------------ 3 files changed, 37 insertions(+), 25 deletions(-) create mode 100755 .githooks/pre-commit delete mode 100644 .github/dependabot.yml diff --git a/.githooks/pre-commit b/.githooks/pre-commit new file mode 100755 index 0000000..398202d --- /dev/null +++ b/.githooks/pre-commit @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +# Canonical CAVA pre-commit hook: keeps uv.lock in sync with pyproject.toml. +# +# If pyproject.toml is staged, finds the specific dependency line(s) that +# changed (added, removed, or had their version spec edited) and refreshes +# only those packages in uv.lock via `uv lock --upgrade-package`. Does not +# touch any other package -- this is a targeted sync, not a blanket +# `uv lock`, so it never pulls in an unrelated upstream release. +set -euo pipefail + +if ! git diff --cached --name-only | grep -q '^pyproject\.toml$'; then + exit 0 +fi + +if ! command -v uv >/dev/null 2>&1; then + echo "pre-commit: uv not found on PATH, skipping uv.lock sync" >&2 + exit 0 +fi + +changed_names=$(git diff --cached -- pyproject.toml \ + | grep -E '^[+-]\s*"[A-Za-z0-9][A-Za-z0-9._-]*' \ + | sed -E 's/^[+-]\s*"([A-Za-z0-9][A-Za-z0-9._-]*).*/\1/' \ + | sort -u) + +if [ -z "$changed_names" ]; then + exit 0 +fi + +upgrade_args=() +while IFS= read -r name; do + upgrade_args+=(--upgrade-package "$name") +done <<< "$changed_names" + +echo "pre-commit: syncing uv.lock for changed dependencies:" +echo "$changed_names" | sed 's/^/ - /' +uv lock "${upgrade_args[@]}" +git add uv.lock diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index a8dfd22..0000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,13 +0,0 @@ -version: 2 -updates: - - package-ecosystem: "uv" - directory: "/" - schedule: - interval: "weekly" - versioning-strategy: "lockfile-only" - labels: - - "dependencies" - allow: - - dependency-name: "omop-alchemy" - - dependency-name: "oa-configurator" - - dependency-name: "omop-emb" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 33f3fbe..ffb226f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,15 +17,3 @@ jobs: uv run omop-config configure omop_graph \ --max-depth 6 \ --max-paths 20 - build-test-lowest-direct: - uses: AustralianCancerDataNetwork/cava-devops/.github/workflows/build-test.yml@main - with: - resolution: lowest-direct - setup-commands: | - uv run omop-config configure omop_alchemy \ - --dialect sqlite \ - --database-name test.db \ - --cdm-schema main - uv run omop-config configure omop_graph \ - --max-depth 6 \ - --max-paths 20