Skip to content

Commit 9c9b659

Browse files
cdeustclaude
andcommitted
ci(pypi): restore PyPI publish into release.yml as a deprecated channel
Per ADR-0050 the marketplace is the supported install path; PyPI was dropped in a2dc7e3. Reintroducing it as an explicitly DEPRECATED, best-effort secondary channel for legacy pip/uvx users, wired so it can never compromise the supported path: - build + publish-pypi jobs restored into release.yml (NOT a new workflow file) so they match the PyPI Trusted Publisher entry that is still configured for (cdeust/Cortex, release.yml, env=pypi) — the same one that published <= 3.14.7. No PyPI reconfiguration needed; OIDC, no stored secret. - publish-pypi is decoupled from github-release (both need test/build independently), so a PyPI rejection never blocks the GitHub Release or the marketplace propagation. - the publish step is continue-on-error + skip-existing=true, so a retag against an already-published version is a no-op rather than the hard failure that motivated removing PyPI in a2dc7e3. - README install section now states the marketplace is the only supported path and flags PyPI 3.14.6/3.14.7 as affected by GHSA-gvpp-v77h-5w8g. Forward-looking: fires on the next tag (v3.17.3+). Not backfilling 3.17.2 to PyPI — the marketplace already carries the fix and the legacy PyPI vulnerable versions are documented in the advisory. source: ADR-0050; GHSA-gvpp-v77h-5w8g; reverts the publish removal in a2dc7e3 with non-blocking hardening. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent e5d2e16 commit 9c9b659

2 files changed

Lines changed: 78 additions & 5 deletions

File tree

.github/workflows/release.yml

Lines changed: 74 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,21 @@
11
name: Release
22

3-
# Cortex's only supported install path is Anthropic's plugin marketplace
3+
# Cortex's SUPPORTED install path is Anthropic's plugin marketplace
44
# (`/plugin install cortex@cortex-plugins`). The marketplace consumes the
5-
# git tree directly via ``${CLAUDE_PLUGIN_ROOT}`` — no PyPI, no uvx,
6-
# no separate package channel. See ADR-0050.
5+
# git tree directly via ``${CLAUDE_PLUGIN_ROOT}``. See ADR-0050.
76
#
8-
# This workflow runs the test matrix on tag push and creates a GitHub
9-
# Release with auto-generated notes. It does NOT publish to PyPI.
7+
# PyPI is a DEPRECATED secondary channel, kept best-effort for legacy
8+
# `pip install` / `uvx` users. It is NOT the supported path and may lag
9+
# or be removed. The publish-pypi job below is intentionally
10+
# non-blocking: if PyPI rejects the upload (e.g. the Trusted Publisher
11+
# entry was removed), the GitHub Release + marketplace propagation still
12+
# succeed. Publishing uses PEP 740 Trusted Publishing (OIDC) against the
13+
# trusted-publisher entry configured for this workflow + environment
14+
# `pypi` — the same one that published versions up to 3.14.7.
15+
#
16+
# This workflow runs the tests on tag push, creates a GitHub Release with
17+
# auto-generated notes, and (best-effort) publishes to the deprecated
18+
# PyPI channel.
1019

1120
on:
1221
push:
@@ -93,3 +102,63 @@ jobs:
93102
with:
94103
body_path: changelog.txt
95104
generate_release_notes: true
105+
106+
# ── DEPRECATED PyPI channel (best-effort) ──────────────────────────────
107+
# Restored after being dropped in a2dc7e3. Marketplace (ADR-0050) is the
108+
# supported path; these jobs keep the legacy `pip install` / `uvx` users
109+
# on a non-vulnerable version. Decoupled from github-release so a PyPI
110+
# failure never blocks the supported channel.
111+
build:
112+
name: Build sdist + wheel (deprecated PyPI channel)
113+
needs: test
114+
runs-on: ubuntu-latest
115+
steps:
116+
- uses: actions/checkout@v4
117+
118+
- name: Set up Python
119+
uses: actions/setup-python@v5
120+
with:
121+
python-version: "3.12"
122+
123+
- name: Install build tools
124+
run: pip install build
125+
126+
- name: Build sdist and wheel
127+
run: python -m build
128+
129+
- name: Upload build artifacts
130+
uses: actions/upload-artifact@v4
131+
with:
132+
name: dist
133+
path: dist/
134+
135+
publish-pypi:
136+
name: Publish to PyPI (deprecated channel)
137+
needs: build
138+
runs-on: ubuntu-latest
139+
# OIDC Trusted Publishing — no stored secret. Verified by PyPI against
140+
# the trusted-publisher entry for (cdeust/Cortex, release.yml,
141+
# environment=pypi). This is the same entry that published <= 3.14.7.
142+
environment:
143+
name: pypi
144+
url: https://pypi.org/p/neuro-cortex-memory
145+
permissions:
146+
id-token: write
147+
steps:
148+
- name: Download build artifacts
149+
uses: actions/download-artifact@v4
150+
with:
151+
name: dist
152+
path: dist/
153+
154+
- name: Publish to PyPI (best-effort — must not fail the release)
155+
uses: pypa/gh-action-pypi-publish@release/v1
156+
# Deprecated channel: a rejected upload (already-exists, or the
157+
# Trusted Publisher entry was removed) must NOT red-X the release.
158+
continue-on-error: true
159+
with:
160+
verbose: true
161+
# skip-existing so a retag against an already-published version
162+
# is a no-op instead of a hard failure — this was the exact
163+
# failure mode that motivated removing PyPI in a2dc7e3.
164+
skip-existing: true

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,15 @@ Cortex is a persistent memory engine for Claude Code built on computational neur
4242

4343
## Getting Started
4444

45+
The plugin marketplace is the **only supported install path** ([ADR-0050](docs/adr/ADR-0050-marketplace-only-no-uvx.md)):
46+
4547
```bash
4648
claude plugin marketplace add cdeust/Cortex
4749
claude plugin install cortex
4850
```
4951

52+
> **PyPI / `pip install neuro-cortex-memory` is deprecated.** It is kept best-effort for legacy users only and may lag the marketplace or be removed. Versions `3.14.6` and `3.14.7` on PyPI are affected by [GHSA-gvpp-v77h-5w8g](https://github.com/cdeust/Cortex/security/advisories/GHSA-gvpp-v77h-5w8g) (local ACE, CVSS 7.8) — do not use them; install via the marketplace instead.
53+
5054
Restart your Claude Code session, then run:
5155

5256
```

0 commit comments

Comments
 (0)