⚠ This page is served via a proxy. Original site: https://github.com
This service does not collect credentials or authentication data.
Skip to content

Conversation

@bschnurr
Copy link
Member

Summary

This PR introduces comprehensive multi-platform build, signing, and publishing support for the Python Debugger extension, along with improvements to how debugpy dependencies are downloaded during the build process.

Key Changes

🏗️ Multi-Platform Build Pipeline

  • Added support for building platform-specific VSIX packages for:
    • linux-x64, linux-arm64, linux-armhf
    • darwin-x64, darwin-arm64
    • win32-x64, win32-arm64
    • Universal (platform-agnostic)
  • Created new reusable templates:
    • package.yml - Handles multi-platform build matrix with per-platform jobs
    • publish-extension.yml - Orchestrates signing, GitHub releases, and marketplace publishing
    • createGitHubRelease.yml - Automates GitHub release creation
    • modify-extension-version.yml - Manages extension versioning
    • setup.yml - Common setup steps (Node.js, Python, npm auth)

🔐 Enhanced Signing Pipeline

  • Refactored sign.yml to support signing multiple platform-specific VSIX files
  • Each platform gets its own subfolder to avoid filename collisions
  • Added detailed logging and validation steps for signing operations
  • Updated sign.proj to support the new directory structure

📦 Improved Dependency Management (noxfile.py)

  • Replaced direct URL downloads with pip download for fetching debugpy wheels
  • New download_debugpy_via_pip() function respects pip configuration (proxy, internal index/mirror, certs)
  • Added _parse_wheel_info() to extract version and platform info from wheel URLs
  • Enables builds in environments that cannot access files.pythonhosted.org directly

🚀 Publishing Improvements

  • Separated Build and Publish into distinct pipeline stages
  • Added GitHub release creation with automatic tagging (v{version})
  • Updated publish.yml to handle multi-platform artifact publishing
  • Support for both pre-release and stable release workflows

📝 Other Changes

  • Updated @vscode/vsce to latest version in package.json
  • Added NuGet.config for signing package restoration
  • Updated localization files with new entries
  • Disabled automatic tag-triggered stable releases (now manual via publishExtension parameter)

Pipeline Flow

Build Stage                          Publish Stage
┌─────────────────────┐             ┌─────────────────────┐
│ Build Jobs (matrix) │             │     Sign Job        │
│ ├── linux-x64       │ artifacts   │ ├── Download all    │
│ ├── linux-arm64     │ ─────────►  │ ├── Sign all        │
│ ├── darwin-x64      │             │ └── Publish artifact│
│ ├── darwin-arm64    │             └─────────┬───────────┘
│ ├── win32-x64       │                       │
│ ├── win32-arm64     │             ┌─────────▼───────────┐
│ └── universal       │             │    Publish Job      │
└─────────────────────┘             │ ├── GitHub Release  │
                                    │ └── Marketplace     │
                                    └─────────────────────┘

Testing

  • Verified nox --session install_bundled_libs works with pip-based downloads
  • Pipeline tested with pre-release builds

Breaking Changes

Note: this break previous pipelines due to checking in loc files

…p download + wheel extraction, instead of urllib.request.urlopen() against the pinned URLs in debugpy_info.json. This makes the download respect your pip configuration (proxy, internal index/mirror, certs) and avoids hard-coded files.pythonhosted.org URLs.

Added _infer_debugpy_version() so the build can still determine which debugpy==... to download:
uses DEBUGPY_VERSION if set, otherwise parses the version out of debugpy_info.json (so you don’t have to change version management right now).
Added download_debugpy_via_pip() which downloads the appropriate wheels for the target:
If VSCETARGET is win32-x64, linux-x64, or darwin*, it downloads cp310/cp311/cp312 wheels for that platform (same intent as the old JSON approach).
If VSCETARGET is missing/unknown, it downloads the universal none-any wheel via a valid pip “target tag” (--python-version 39 --implementation cp --abi none --platform any).
Verified locally: python -m nox --session install_bundled_libs now succeeds (after fixing the fallback pip arguments).
…dation

- Add publish-extension.yml template with Sign, WaitForValidation, and Publish jobs
- Add createGitHubRelease.yml template for GitHub release creation
- Update publish.yml to iterate over buildPlatforms and publish each platform
- Rename artifact folder from 'drop' to 'extension'
- Rename pipeline stage from 'Sign' to 'Publish'
- Add manual validation gate before marketplace publishing (default enabled)
- Download platform-specific artifacts (vsix-universal, vsix-linux-arm64, etc.)
- Extract version from VSIX filename for GitHub release tagging
…iles"

```

```
Done. Updated folder usage is now:

| Folder | Purpose |
|--------|---------|
| `$(Build.BinariesDirectory)/vsix-*` | Downloaded VSIX inputs |
| `$(Agent.TempDirectory)/vsix-extracted` | Temporary extraction for reading version |
| `$(Build.StagingDirectory)\extension` | Signing working directory & output artifact |
| `$(Build.ArtifactStagingDirectory)` | Reserved for final artifact staging (Publish job) |

Made changes.
@bschnurr bschnurr added the debt Covers everything internal: CI, testing, refactoring of the codebase, etc. label Jan 13, 2026
@bschnurr bschnurr closed this Jan 13, 2026
@bschnurr bschnurr reopened this Jan 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

debt Covers everything internal: CI, testing, refactoring of the codebase, etc.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants