From 5e730f0137922872a82893644d600aeaa7cd90d8 Mon Sep 17 00:00:00 2001 From: Marius1311 Date: Tue, 13 Oct 2026 12:05:09 +0200 Subject: [PATCH 1/2] Release 0.2.1; the version bump is the whole release The marketplace now follows main, so a plugin.json version bump releases; a workflow tags vX.Y.Z on merge. Co-Authored-By: Claude Opus 5.5 --- .claude-plugin/plugin.json | 2 +- .github/workflows/tag.yaml | 22 ++++++++++++++++++++++ README.md | 7 ++++--- pyproject.toml | 2 +- skills/sci-figures/references/setup.md | 4 ++-- uv.lock | 2 +- 6 files changed, 31 insertions(+), 8 deletions(-) create mode 100644 .github/workflows/tag.yaml diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 02272a3..c959aa1 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "sci-figures", - "version": "0.2.0", + "version": "0.2.1", "description": "Nature-style research figures and their legends: message and outline first, then layout, visual conventions, export to one PDF per figure with editable Arial text, legend writing and independent layout and legend reviews. Ships a skill and the scifig Python package.", "author": { "name": "quadbio" diff --git a/.github/workflows/tag.yaml b/.github/workflows/tag.yaml new file mode 100644 index 0000000..4db17d1 --- /dev/null +++ b/.github/workflows/tag.yaml @@ -0,0 +1,22 @@ +name: Tag release + +on: + push: + branches: [main] + paths: [.claude-plugin/plugin.json] + +permissions: + contents: write + +jobs: + tag: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v5 + - name: Tag the version in plugin.json, if new + run: | + tag="v$(jq -r .version .claude-plugin/plugin.json)" + if ! git ls-remote --exit-code --tags origin "refs/tags/$tag" > /dev/null; then + git tag "$tag" + git push origin "$tag" + fi diff --git a/README.md b/README.md index 02daac0..174526b 100644 --- a/README.md +++ b/README.md @@ -50,9 +50,10 @@ For live package edits in a figure repo, depend on the checkout instead: ## Release -Bump `version` in both `pyproject.toml` and `.claude-plugin/plugin.json` and the pin in -`skills/sci-figures/references/setup.md` (tests check they agree), tag `vX.Y.Z`, then bump the `ref` in -[quadbio/claude-plugins](https://github.com/quadbio/claude-plugins). +Bump `version` in `pyproject.toml`, `.claude-plugin/plugin.json` and the pin in +`skills/sci-figures/references/setup.md` (tests check they agree). +That is the release: the marketplace follows `main`, users update when the version changes, and the merge tags +`vX.Y.Z`, which figure repos pin. ## License diff --git a/pyproject.toml b/pyproject.toml index e318f09..68191a5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ requires = [ "hatchling" ] [project] name = "scifig" -version = "0.2.0" +version = "0.2.1" description = "Style, mm layout, recurring elements and export for Nature-style research figures with editable text." readme = "README.md" license = "MIT" diff --git a/skills/sci-figures/references/setup.md b/skills/sci-figures/references/setup.md index 16c9045..d50dc0b 100644 --- a/skills/sci-figures/references/setup.md +++ b/skills/sci-figures/references/setup.md @@ -6,9 +6,9 @@ The machine steps (Arial, TeX) are once per machine. If one needs rights or soft In the figure repo's `pixi.toml`: ```toml [pypi-dependencies] -scifig = { git = "https://github.com/quadbio/sci-figures", tag = "v0.2.0" } +scifig = { git = "https://github.com/quadbio/sci-figures", tag = "v0.2.1" } ``` -With uv: `uv add "scifig @ git+https://github.com/quadbio/sci-figures@v0.2.0"`. For live edits to scifig, depend on a +With uv: `uv add "scifig @ git+https://github.com/quadbio/sci-figures@v0.2.1"`. For live edits to scifig, depend on a checkout instead: `scifig = { path = "../sci-figures", editable = true }`. ## Figure conventions diff --git a/uv.lock b/uv.lock index 448055d..a120297 100644 --- a/uv.lock +++ b/uv.lock @@ -3365,7 +3365,7 @@ wheels = [ [[package]] name = "scifig" -version = "0.2.0" +version = "0.2.1" source = { editable = "." } dependencies = [ { name = "matplotlib" }, From 50e1685f59d29c401e25c4bdf3ea008266b595c5 Mon Sep 17 00:00:00 2001 From: Marius1311 Date: Tue, 13 Oct 2026 12:14:38 +0200 Subject: [PATCH 2/2] Release: plugin.json holds the only version; no tag workflow, no pinned versions in docs Co-Authored-By: Claude Opus 5.5 --- .github/workflows/tag.yaml | 22 ---------------------- README.md | 6 ++---- pyproject.toml | 4 +++- skills/sci-figures/references/setup.md | 6 +++--- tests/test_plugin.py | 19 ------------------- uv.lock | 1 - 6 files changed, 8 insertions(+), 50 deletions(-) delete mode 100644 .github/workflows/tag.yaml delete mode 100644 tests/test_plugin.py diff --git a/.github/workflows/tag.yaml b/.github/workflows/tag.yaml deleted file mode 100644 index 4db17d1..0000000 --- a/.github/workflows/tag.yaml +++ /dev/null @@ -1,22 +0,0 @@ -name: Tag release - -on: - push: - branches: [main] - paths: [.claude-plugin/plugin.json] - -permissions: - contents: write - -jobs: - tag: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v5 - - name: Tag the version in plugin.json, if new - run: | - tag="v$(jq -r .version .claude-plugin/plugin.json)" - if ! git ls-remote --exit-code --tags origin "refs/tags/$tag" > /dev/null; then - git tag "$tag" - git push origin "$tag" - fi diff --git a/README.md b/README.md index 174526b..6bc60c8 100644 --- a/README.md +++ b/README.md @@ -50,10 +50,8 @@ For live package edits in a figure repo, depend on the checkout instead: ## Release -Bump `version` in `pyproject.toml`, `.claude-plugin/plugin.json` and the pin in -`skills/sci-figures/references/setup.md` (tests check they agree). -That is the release: the marketplace follows `main`, users update when the version changes, and the merge tags -`vX.Y.Z`, which figure repos pin. +Bump `version` in `.claude-plugin/plugin.json` and merge: the marketplace follows `main`, and users update when the +version changes. ## License diff --git a/pyproject.toml b/pyproject.toml index 68191a5..7b01d0c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,6 @@ requires = [ "hatchling" ] [project] name = "scifig" -version = "0.2.1" description = "Style, mm layout, recurring elements and export for Nature-style research figures with editable text." readme = "README.md" license = "MIT" @@ -16,6 +15,7 @@ classifiers = [ "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", ] +dynamic = [ "version" ] dependencies = [ "matplotlib>=3.8" ] optional-dependencies.examples = [ "anndata", "pyyaml", "scanpy>=1.10" ] optional-dependencies.spatial-examples = [ @@ -36,6 +36,8 @@ urls.Source = "https://github.com/quadbio/sci-figures" dev = [ "pre-commit", "pytest" ] [tool.hatch] +version.path = ".claude-plugin/plugin.json" +version.pattern = '"version": "(?P[^"]+)"' build.targets.wheel.packages = [ "src/scifig" ] [tool.ruff] diff --git a/skills/sci-figures/references/setup.md b/skills/sci-figures/references/setup.md index d50dc0b..fb70b4b 100644 --- a/skills/sci-figures/references/setup.md +++ b/skills/sci-figures/references/setup.md @@ -3,12 +3,12 @@ The machine steps (Arial, TeX) are once per machine. If one needs rights or software you don't have, tell the user. ## scifig -In the figure repo's `pixi.toml`: +In the figure repo's `pixi.toml` (its lock pins the commit): ```toml [pypi-dependencies] -scifig = { git = "https://github.com/quadbio/sci-figures", tag = "v0.2.1" } +scifig = { git = "https://github.com/quadbio/sci-figures" } ``` -With uv: `uv add "scifig @ git+https://github.com/quadbio/sci-figures@v0.2.1"`. For live edits to scifig, depend on a +With uv: `uv add "scifig @ git+https://github.com/quadbio/sci-figures"`. For live edits to scifig, depend on a checkout instead: `scifig = { path = "../sci-figures", editable = true }`. ## Figure conventions diff --git a/tests/test_plugin.py b/tests/test_plugin.py deleted file mode 100644 index e22ca77..0000000 --- a/tests/test_plugin.py +++ /dev/null @@ -1,19 +0,0 @@ -"""The plugin manifest and the Python package describe the same release.""" - -import json -import tomllib -from pathlib import Path - -ROOT = Path(__file__).parents[1] - - -def test_versions_agree(): - plugin = json.loads((ROOT / ".claude-plugin" / "plugin.json").read_text()) - package = tomllib.loads((ROOT / "pyproject.toml").read_text())["project"] - assert plugin["version"] == package["version"] - - -def test_setup_pins_this_release(): - version = tomllib.loads((ROOT / "pyproject.toml").read_text())["project"]["version"] - setup = (ROOT / "skills" / "sci-figures" / "references" / "setup.md").read_text() - assert f'tag = "v{version}"' in setup and f"sci-figures@v{version}" in setup diff --git a/uv.lock b/uv.lock index a120297..2c0fa73 100644 --- a/uv.lock +++ b/uv.lock @@ -3365,7 +3365,6 @@ wheels = [ [[package]] name = "scifig" -version = "0.2.1" source = { editable = "." } dependencies = [ { name = "matplotlib" },