Skip to content

feat: add info request for PET metadata including version and build ID#470

Merged
StellaHuang95 merged 2 commits into
mainfrom
sympathetic-eagle
Jun 5, 2026
Merged

feat: add info request for PET metadata including version and build ID#470
StellaHuang95 merged 2 commits into
mainfrom
sympathetic-eagle

Conversation

@eleanorjboyd

Copy link
Copy Markdown
Member

No description provided.

@eleanorjboyd eleanorjboyd requested a review from Copilot May 29, 2026 21:52
@github-actions

github-actions Bot commented May 29, 2026

Copy link
Copy Markdown

Test Coverage Report (Linux)

Metric Value
Current Coverage 79.9%
Base Branch Coverage 79.9%
Delta 0% ➖

Coverage unchanged.

@github-actions

github-actions Bot commented May 29, 2026

Copy link
Copy Markdown

Performance Report (Linux) ➖

Metric PR (P50) PR (P95) Baseline (P50) Delta Change
Server Startup 1ms 1ms 1ms 0ms 0%
Full Refresh 67ms 122ms 54ms 13ms 20.0%

Results based on 10 iterations. P50 = median, P95 = 95th percentile.


Legend
  • 🚀 Significant speedup (>100ms faster)
  • ✅ Faster than baseline
  • ➖ No significant change
  • 🔺 Slower than baseline (>100ms)
  • ⚠️ Significant slowdown (>500ms)

@github-actions

github-actions Bot commented May 29, 2026

Copy link
Copy Markdown

Performance Report (macOS)

Metric PR (P50) PR (P95) Baseline (P50) Delta
Server Startup 66ms 543ms 76ms -10ms
Full Refresh 118ms 26281ms 140ms -22ms

Results based on 10 iterations. P50 = median, P95 = 95th percentile.


Legend
  • 🚀 Significant speedup (>100ms faster)
  • ✅ Faster than baseline
  • ➖ No significant change
  • 🔺 Slower than baseline (>100ms)
  • ⚠️ Significant slowdown (>500ms)

@github-actions

github-actions Bot commented May 29, 2026

Copy link
Copy Markdown

Performance Report (Windows) ✅

Metric PR (P50) PR (P95) Baseline (P50) Delta Change
Server Startup 8ms 13ms 8ms 0ms 0%
Full Refresh 124ms 685ms 134ms -10ms -7.5%

Results based on 10 iterations. P50 = median, P95 = 95th percentile.


Legend
  • 🚀 Significant speedup (>100ms faster)
  • ✅ Faster than baseline
  • ➖ No significant change
  • 🔺 Slower than baseline (>100ms)
  • ⚠️ Significant slowdown (>500ms)

@github-actions

github-actions Bot commented May 29, 2026

Copy link
Copy Markdown

Test Coverage Report (Windows)

Metric Value
Current Coverage 76.9%
Base Branch Coverage 76.91%
Delta -0.01% ❌

Coverage decreased. Please add tests for new code.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a JSONRPC info request so clients can retrieve PET binary metadata for telemetry and diagnostics.

Changes:

  • Documents the new info request and InfoResponse shape.
  • Adds server handling for info, returning package version and optional CI build ID.
  • Adds unit/integration test coverage and a test client helper for the new request.
Show a summary per file
File Description
docs/JSONRPC.md Documents the new info JSONRPC API.
crates/pet/src/jsonrpc.rs Registers and implements the info request handler.
crates/pet/build.rs Embeds an optional build ID from CI/build environment variables.
crates/pet/tests/jsonrpc_client.rs Adds test client response type and helper for info.
crates/pet/tests/jsonrpc_server_test.rs Adds an integration test for the info request.

Copilot's findings

  • Files reviewed: 5/5 changed files
  • Comments generated: 1

Comment thread docs/JSONRPC.md Outdated
@eleanorjboyd eleanorjboyd requested a review from rchiodo May 29, 2026 21:59
Comment thread crates/pet/src/jsonrpc.rs
@@ -1512,6 +1536,17 @@ mod tests {
);
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot generated:
-1552

The build_id assertion .is_none_or(|build_id| !build_id.is_empty()) is tautological — InfoResponse::current() already filters empty strings via .filter(|value| !value.is_empty()), so build_id can only ever be None or Some(non_empty). This assertion cannot fail regardless of implementation behavior. Consider adding a brief comment explaining why the assertion is intentionally weak (env var absent in local builds), or simply drop the build_id check and only assert pet_version.

[verified]

@rchiodo rchiodo left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved via Review Center.

@StellaHuang95

Copy link
Copy Markdown
Contributor

Briefly looked into how to map envs extension version number to PET commit sha from telemetry, so we can correlate regressions to PET changes. I am thinking about this mechanism, will get to the implementation details next week.

image

eleanorjboyd and others added 2 commits June 5, 2026 13:52
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
@StellaHuang95 StellaHuang95 merged commit 7a432f1 into main Jun 5, 2026
30 checks passed
@StellaHuang95 StellaHuang95 deleted the sympathetic-eagle branch June 5, 2026 21:30
eleanorjboyd pushed a commit that referenced this pull request Jun 9, 2026
…ression tracking (#473)

## Background

PET (Python Environment Tools) is a Rust-based JSONRPC server used by
the VS Code Python extension to discover Python environments. PET does
not send its own telemetry — instead, it returns metadata to the calling
extension (vscode-python-environments), which forwards it via telemetry.

To help catch regressions, we need a way to know exactly which PET build
a user is running by querying telemetry. [PR
#470](#470)
added a JSONRPC `info` request that returns PET's version and an
optional CI build ID. However, the build number alone isn't enough to
pinpoint the exact source code — we also need the git commit hash.

This PR extends the `info` response to include the **git commit SHA**
baked into the binary at build time. On the extension side, the
companion PR
([vscode-python-environments#1548](microsoft/vscode-python-environments#1548))
passes this information along to telemetry, so we can correlate
user-reported issues or regressions back to the specific PET commit.

## What Changed

### 1. Build script (`crates/pet/build.rs`)

- Added support for three new environment variables that CI systems set
automatically:
  - `PET_COMMIT_SHA` — explicit override (highest priority)
  - `BUILD_SOURCEVERSION` — set by Azure Pipelines
  - `GITHUB_SHA` — set by GitHub Actions
- When any of these is present and non-empty, the value is embedded into
the binary as a compile-time constant via
`cargo:rustc-env=PET_COMMIT_SHA=...`.

### 2. JSONRPC response (`crates/pet/src/jsonrpc.rs`)

- Added a new optional `commit_sha` field to the `InfoResponse` struct.
- `InfoResponse::current()` populates it from the compile-time
`PET_COMMIT_SHA` env var (same pattern used for `build_id`).
- For local dev builds where no CI env var is set, the field is `None`
and omitted from the JSON response.

### 3. JSONRPC documentation (`docs/JSONRPC.md`)

- Updated the `InfoResponse` TypeScript interface to document the new
`commitSha?: string` field, including where the value is sourced from.

### 4. Tests (`crates/pet/src/jsonrpc.rs`,
`crates/pet/tests/jsonrpc_server_test.rs`,
`crates/pet/tests/jsonrpc_client.rs`)

- Added `commit_sha` field to the test client's `PetInfoResponse`
struct.
- Added assertions that `commit_sha`, when present, is non-empty
(mirrors existing `build_id` assertion pattern).
- Added clarifying comments explaining that both `build_id` and
`commit_sha` are `None` in local dev builds and only populated in CI.

## How It Works

```
CI build (Azure Pipelines / GitHub Actions)
  ↓ sets BUILD_SOURCEVERSION or GITHUB_SHA
build.rs captures it → bakes into binary as PET_COMMIT_SHA
  ↓
JSONRPC `info` request → returns { petVersion, buildId, commitSha }
  ↓
vscode-python-environments extension → includes commitSha in telemetry
  ↓
Team queries telemetry → correlates regressions to exact PET commit
```

## Related PRs

- [PET PR
#470](#470) —
Added the `info` JSONRPC request with version and build ID (merged)
- [vscode-python-environments PR
#1548](microsoft/vscode-python-environments#1548)
— Extension-side: passes PET version/build/commit info to telemetry
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants