Thanks for contributing.
This guide explains how to set up a local development environment, run checks, and submit changes.
- Report bugs and edge cases
- Improve docs and examples
- Add tests for real-world proxy and offline scenarios
- Submit bug fixes and small improvements
From the repository root:
uv sync --group devRun the full quality gate before opening a PR:
uv run ruff check .
uv run ruff format .
uv run ty check
uv run pytest srcBy default, slow tests are skipped.
Run only slow tests:
uv run pytest src --slow --no-covsrc/uvscem/api_client.py: Marketplace API calls and metadata shapingsrc/uvscem/code_manager.py: VS Code CLI/socket discoverysrc/uvscem/extension_manager.py: CLI commands and extension workflowssrc/tests/: unit and integration tests
- Keep changes minimal and focused
- Preserve sync-first behavior unless a change explicitly requires otherwise
- Reuse existing helpers before adding new code paths
- Keep tests deterministic where possible
- Do not leak secrets/tokens in logs or error messages
Please include:
- What changed and why
- How you tested it
- Any behavior changes users should know about
Small, focused PRs are preferred.
- CI workflows are in
.github/workflows/ - Releases are tag-based and require signed tags (
vX.Y.Z) publish.ymlverifies tag signatures before publishing
Repository variables used by release verification:
PYPI_TAG_SIGNER_GITHUB_LOGIN(required)PYPI_TAG_SIGNER(optional)
uVSCEM verifies extension signatures with vsce-sign and supports signed offline manifests.
Useful commands:
uvscem export --config-name ./devcontainer.json --manifest-signing-key YOUR_GPG_KEY_ID
uvscem import --bundle-path ./uvscem-offline-bundle --verify-manifest-signature