Skip to content

Commit ff106d5

Browse files
committed
fix(plugins): include codex in shared version bump
Signed-off-by: phernandez <paul@basicmachines.co>
1 parent ce4b5d4 commit ff106d5

6 files changed

Lines changed: 32 additions & 11 deletions

File tree

.claude/commands/release/beta.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ The justfile target handles:
3030
- ✅ Beta version format validation (supports b1, b2, rc1, etc.)
3131
- ✅ Git status and branch checks
3232
- ✅ Quality checks (`just check` - lint, format, type-check, tests)
33-
- ✅ Version update in `src/basic_memory/__init__.py`
33+
- ✅ Version update across all consolidated manifests via `just set-version` (Python
34+
package + Claude Code plugin/marketplaces + Codex plugin + Hermes + OpenClaw)
3435
- ✅ Automatic commit with proper message
3536
- ✅ Tag creation and pushing to GitHub
3637
- ✅ Beta release workflow trigger
@@ -90,6 +91,6 @@ Monitor release: https://github.com/basicmachines-co/basic-memory/actions
9091
- Beta releases are pre-releases for testing new features
9192
- Automatically published to PyPI with pre-release flag
9293
- Uses the automated justfile target for consistency
93-
- Version is automatically updated in `__init__.py`
94+
- Version is automatically updated across all consolidated manifests via `just set-version`
9495
- Ideal for validating changes before stable release
95-
- Supports both beta (b1, b2) and release candidate (rc1, rc2) versions
96+
- Supports both beta (b1, b2) and release candidate (rc1, rc2) versions

.claude/commands/release/release.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ The justfile target handles:
4242
- ✅ Version format validation
4343
- ✅ Git status and branch checks
4444
- ✅ Quality checks (`just check` - lint, format, type-check, tests)
45-
- ✅ Version update across all consolidated manifests via `just set-version` (Python package + Claude Code plugin/marketplaces + Hermes + OpenClaw)
45+
- ✅ Version update across all consolidated manifests via `just set-version` (Python
46+
package + Claude Code plugin/marketplaces + Codex plugin + Hermes + OpenClaw)
4647
- ✅ Automatic commit with proper message
4748
- ✅ Tag creation and pushing to GitHub
4849
- ✅ Release workflow trigger (automatic on tag push)
@@ -194,12 +195,13 @@ Users can now upgrade:
194195
- Version is automatically updated across **all** consolidated manifests via
195196
`just set-version <version>` (which calls `scripts/update_versions.py`): the
196197
Python package (`__init__.py`, `server.json`) **and** the plugin/agent artifacts
197-
(Claude Code `plugin.json` + root/local marketplaces, Hermes `plugin.yaml` +
198-
`__init__.py`, OpenClaw `package.json`). To bump only the plugin/agent artifacts
198+
(Claude Code `plugin.json` + root/local marketplaces, Codex `plugin.json`,
199+
Hermes `plugin.yaml` + `__init__.py`, OpenClaw `package.json`). To bump only
200+
the plugin/agent artifacts
199201
out of band, use `just set-packages-version <version>` (preview with
200202
`just set-packages-version-dry-run <version>`).
201203
- Triggers automated GitHub release with changelog
202204
- Package is published to PyPI for `pip` and `uv` users
203205
- Homebrew formula is automatically updated for stable releases
204206
- MCP Registry is updated manually via `mcp-publisher publish`
205-
- Supports multiple installation methods (uv, pip, Homebrew)
207+
- Supports multiple installation methods (uv, pip, Homebrew)

justfile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ set-version version scope="all":
307307
set-version-dry-run version scope="all":
308308
python3 scripts/update_versions.py "{{version}}" --scope "{{scope}}" --dry-run
309309

310-
# Set the version for just the plugin/agent artifacts (plugin, marketplaces, Hermes, OpenClaw)
310+
# Set the version for just the plugin/agent artifacts (plugins, marketplaces, Hermes, OpenClaw)
311311
set-packages-version version:
312312
just set-version "{{version}}" packages
313313

@@ -369,6 +369,7 @@ release version:
369369
.claude-plugin/marketplace.json \
370370
plugins/claude-code/.claude-plugin/plugin.json \
371371
plugins/claude-code/.claude-plugin/marketplace.json \
372+
plugins/codex/.codex-plugin/plugin.json \
372373
integrations/hermes/plugin.yaml \
373374
integrations/hermes/__init__.py \
374375
integrations/openclaw/package.json
@@ -442,6 +443,7 @@ beta version:
442443
.claude-plugin/marketplace.json \
443444
plugins/claude-code/.claude-plugin/plugin.json \
444445
plugins/claude-code/.claude-plugin/marketplace.json \
446+
plugins/codex/.codex-plugin/plugin.json \
445447
integrations/hermes/plugin.yaml \
446448
integrations/hermes/__init__.py \
447449
integrations/openclaw/package.json

plugins/codex/.codex-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "codex",
3-
"version": "0.1.0+codex.20260604201213",
3+
"version": "0.21.6",
44
"description": "A Codex-native bridge to Basic Memory for durable engineering context, decisions, and resumable checkpoints.",
55
"author": {
66
"name": "Basic Machines",

scripts/update_versions.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ def set_package_version(data: dict[str, Any], version: str) -> None:
9999
# Version scopes. The two groups map to the two distribution tracks:
100100
# core — the Python package and its MCP registry manifest
101101
# packages — the host-native agent artifacts (Claude Code plugin + marketplaces,
102-
# Hermes, OpenClaw). These are the "plugin/agent artifacts."
102+
# Codex plugin, Hermes, OpenClaw). These are the "plugin/agent artifacts."
103103
# `all` writes both. Lockstep releases use `all`; targeted fixes can use one group.
104104
SCOPES = ("all", "core", "packages")
105105

@@ -134,6 +134,11 @@ def _update_packages(version: str, *, dry_run: bool) -> None:
134134
lambda data: set_claude_marketplace_version(data, version),
135135
dry_run=dry_run,
136136
)
137+
update_json(
138+
"plugins/codex/.codex-plugin/plugin.json",
139+
lambda data: set_package_version(data, npm_package_version(version)),
140+
dry_run=dry_run,
141+
)
137142
update_text(
138143
"integrations/hermes/plugin.yaml",
139144
r"^version:\s*.*$",
@@ -174,7 +179,7 @@ def main() -> None:
174179
choices=SCOPES,
175180
default="all",
176181
help="Which artifacts to update: all (default), core (Python + server.json), "
177-
"or packages (Claude Code plugin, marketplaces, Hermes, OpenClaw)",
182+
"or packages (Claude Code plugin, Codex plugin, marketplaces, Hermes, OpenClaw)",
178183
)
179184
parser.add_argument("--dry-run", action="store_true", help="Preview changes without writing")
180185
args = parser.parse_args()

tests/test_update_versions.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ def write(path: str, content: str) -> None:
6767
write("integrations/hermes/plugin.yaml", "version: 0.0.0\n")
6868
write("integrations/hermes/__init__.py", '__version__ = "0.0.0"\n')
6969
write("integrations/openclaw/package.json", json.dumps(package_manifest) + "\n")
70+
write("plugins/codex/.codex-plugin/plugin.json", json.dumps(package_manifest) + "\n")
7071

7172
update_versions.update_versions("v0.21.3b1", dry_run=False)
7273

@@ -76,6 +77,8 @@ def write(path: str, content: str) -> None:
7677
)
7778
openclaw_package = json.loads((tmp_path / "integrations/openclaw/package.json").read_text())
7879
assert openclaw_package["version"] == "0.21.3-beta.1"
80+
codex_plugin = json.loads((tmp_path / "plugins/codex/.codex-plugin/plugin.json").read_text())
81+
assert codex_plugin["version"] == "0.21.3-beta.1"
7982

8083

8184
def _seed_repo(tmp_path: Path) -> None:
@@ -108,13 +111,19 @@ def write(path: str, content: str) -> None:
108111
write("integrations/hermes/plugin.yaml", "version: 0.0.0\n")
109112
write("integrations/hermes/__init__.py", '__version__ = "0.0.0"\n')
110113
write("integrations/openclaw/package.json", json.dumps(package_manifest) + "\n")
114+
write("plugins/codex/.codex-plugin/plugin.json", json.dumps(package_manifest) + "\n")
111115

112116

113117
def _plugin_version(tmp_path: Path) -> str:
114118
path = tmp_path / "plugins/claude-code/.claude-plugin/plugin.json"
115119
return json.loads(path.read_text())["version"]
116120

117121

122+
def _codex_plugin_version(tmp_path: Path) -> str:
123+
path = tmp_path / "plugins/codex/.codex-plugin/plugin.json"
124+
return json.loads(path.read_text())["version"]
125+
126+
118127
def test_scope_packages_leaves_core_untouched(
119128
monkeypatch: pytest.MonkeyPatch, tmp_path: Path
120129
) -> None:
@@ -127,6 +136,7 @@ def test_scope_packages_leaves_core_untouched(
127136
assert (tmp_path / "src/basic_memory/__init__.py").read_text() == '__version__ = "0.0.0"\n'
128137
assert json.loads((tmp_path / "server.json").read_text())["version"] == "0.0.0"
129138
assert _plugin_version(tmp_path) == "0.21.6"
139+
assert _codex_plugin_version(tmp_path) == "0.21.6"
130140

131141

132142
def test_scope_core_leaves_packages_untouched(
@@ -139,6 +149,7 @@ def test_scope_core_leaves_packages_untouched(
139149

140150
assert (tmp_path / "src/basic_memory/__init__.py").read_text() == '__version__ = "0.21.6"\n'
141151
assert _plugin_version(tmp_path) == "0.0.0"
152+
assert _codex_plugin_version(tmp_path) == "0.0.0"
142153

143154

144155
def test_invalid_scope_raises(monkeypatch: pytest.MonkeyPatch, tmp_path: Path) -> None:

0 commit comments

Comments
 (0)