Proceso completo para publicar SnapContext en los tres canales oficiales.
Procedimiento vigente desde B9.63. Antes de B9.63 la versión se subía a mano en varios sitios; esa descripción ya no aplica.
VERSION en la raíz. Es la única fuente de verdad: el resto de
superficies se deriva de ella.python3 scripts/version_sync.py sync
python3 scripts/version_sync.py check # debe salir con código 0
sync reescribe vscode/package.json, vscode/package-lock.json,
jetbrains/gradle.properties, jetbrains/build.gradle.kts y
jetbrains/src/main/resources/META-INF/plugin.xml. check es de solo lectura
y es el gate que ejecuta CI.
pyproject.toml no lleva versión literal: usa
dynamic = ["version"] con version = {file = ["VERSION"]}.snapcontext.VERSION y la versión de FastAPI se derivan de VERSION.CHANGELOG.md.python3 -m build
python3 scripts/verify_release.py --tag vX.Y.Z
python3 -m pytest -q
git add -A && git commit -m "chore: bump version to X.Y.Z"
git push origin main
git tag vX.Y.Z
git push origin vX.Y.Z
Con el tag, GitHub Actions ejecuta tres workflows:
| Workflow | Canal | Requisito previo |
|---|---|---|
python-package.yml |
PyPI (trusted publishing, OIDC) | tener el “publisher” NicolasBruna24/snapcontext + environment pypi dado de alta en pypi.org (solo la primera vez) |
vsce-publish.yml |
VS Code Marketplace | secreto VSCE_PAT (PAT con scope Marketplace:Manage) |
pages-deploy.yml |
Landing (GitHub Pages) | Pages habilitado en Settings → Pages → Source: GitHub Actions |
El workflow de PyPI siempre publica. El de VS Code empaqueta el .vsix y lo
sube como artifact siempre; solo publica al Marketplace si VSCE_PAT existe.
cd vscode
npm ci && npm run compile
npx @vscode/vsce package -o snapcontext-ai.vsix
npx @vscode/vsce publish -p TU_VSCE_PAT # o sube el .vsix desde la web
jetbrains/gradle.properties: publishToken=... y publishChannel=defaultPUBLISH_TOKEN y PUBLISH_CHANNELNo existe una variable
JETBRAINS_TOKEN. La documentación anterior de esta guía la mencionaba por error; el plugin no la lee.
La primera publicación de un plugin en JetBrains Marketplace debe hacerse manualmente desde la web; Gradle solo publica versiones posteriores.
cd jetbrains
./gradlew buildPlugin # → build/distributions/*.zip
./gradlew publishPlugin # sube al canal indicado (por defecto "default")
Requiere JDK 17+ (kotlin { jvmToolchain(17) }). La primera ejecución descarga
el SDK de IntelliJ. No hay pipeline de CI para este canal: la publicación es
siempre manual.
La ficha pública (https://plugins.jetbrains.com/plugin/33750-snapcontext) tiene metadata que no se deriva del repositorio y que hay que revisar a mano:
plugin.xml no representa literalmente la
descripción que ve el usuario: lo publicado puede diferir de lo que hay en el
repositorio. Al cambiar la descripción, comprobar en la ficha qué texto está
realmente publicado y editarlo en el panel si hace falta.plugin.xml.Website, Source code, Bug tracker,
Privacy policy): se configuran en el panel del Marketplace; plugin.xml no
los propaga automáticamente.VERSION con la versión más
reciente que muestra la ficha.La publicación del canal JetBrains continúa siendo manual. No automatizarla sin revisar antes el gate
verify-releasey la compatibilidad declarada.
El canal JetBrains no está automatizado. Su versión sí está sincronizada con
VERSION(build.gradle.kts,gradle.properties:pluginVersion,plugin.xml), yverify_release.pylo comprueba (I6), pero la subida al Marketplace es un paso manual que hay que ejecutar explícitamente.
pip install snapcontext==X.Y.Z && snapcontext --versionVSCE_PAT el job empaqueta pero no publica).snapcontext estuviera ocupado en PyPI, el fallback documentado es
snapcontext-cli (ver PUBLISHING.md).