Skip to content

refactor(scripts): extract Invoke-PackageExtension for testability#343

Merged
WilliamBerryiii merged 3 commits intomainfrom
fix/263-package-extension-testability
Jan 30, 2026
Merged

refactor(scripts): extract Invoke-PackageExtension for testability#343
WilliamBerryiii merged 3 commits intomainfrom
fix/263-package-extension-testability

Conversation

@WilliamBerryiii
Copy link
Member

Description

Extracted the main packaging logic from Package-Extension.ps1 into a testable Invoke-PackageExtension orchestrator function with explicit path parameters. The main execution block is now a thin wrapper that delegates to this function, enabling comprehensive unit testing of the packaging workflow.

  • Introduced Invoke-PackageExtension orchestrator with ExtensionDirectory, RepoRoot, Version, DevPatchNumber, ChangelogPath, and PreRelease parameters
  • Refactored main execution to call the new function, eliminating script-level variable scope issues
  • Added 8 new Pester tests covering error handling paths: invalid directories, missing package.json, invalid JSON, manifest validation failures, and version format validation
  • Increased test coverage from baseline to 78.4% for Package-Extension.ps1

Related Issue(s)

Fixes #263

Type of Change

Select all that apply:

Code & Documentation:

  • Bug fix (non-breaking change fixing an issue)
  • New feature (non-breaking change adding functionality)
  • Breaking change (fix or feature causing existing functionality to change)
  • Documentation update

Infrastructure & Configuration:

  • GitHub Actions workflow
  • Linting configuration (markdown, PowerShell, etc.)
  • Security configuration
  • DevContainer configuration
  • Dependency update

AI Artifacts:

  • Reviewed contribution with prompt-builder agent and addressed all feedback
  • Copilot instructions (.github/instructions/*.instructions.md)
  • Copilot prompt (.github/prompts/*.prompt.md)
  • Copilot agent (.github/agents/*.agent.md)

Other:

  • Script/automation (.ps1, .sh, .py)
  • Other (please describe):

Sample Prompts (for AI Artifact Contributions)

N/A - This PR contains script changes only.

Testing

  • Ran full Pester test suite: 640+ tests pass, 0 failures
  • Verified Package-Extension.ps1 coverage at 78.4% (149 covered, 41 missed lines)
  • Remaining uncovered lines are orchestrator integration paths and main execution guard

Checklist

Required Checks

  • Documentation is updated (if applicable)
  • Files follow existing naming conventions
  • Changes are backwards compatible (if applicable)
  • Tests added for new functionality (if applicable)

AI Artifact Contributions

N/A

Required Automated Checks

The following validation commands must pass before merging:

  • Markdown linting: npm run lint:md
  • Spell checking: npm run spell-check
  • Frontmatter validation: npm run lint:frontmatter
  • Link validation: npm run lint:md-links
  • PowerShell analysis: npm run lint:ps

Security Considerations

  • This PR does not contain any sensitive or NDA information
  • Any new dependencies have been reviewed for security issues
  • Security-related scripts follow the principle of least privilege

Additional Notes

The Invoke-PackageExtension function returns a structured hashtable with Success, OutputPath, Version, and ErrorMessage properties, providing consistent error handling for CI/CD integration.

🔧 - Generated by Copilot

@WilliamBerryiii WilliamBerryiii requested a review from a team as a code owner January 29, 2026 04:19
Copilot AI review requested due to automatic review settings January 29, 2026 04:19
@github-actions
Copy link

github-actions bot commented Jan 29, 2026

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

None

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Refactors the VS Code extension packaging script to extract the entry-point workflow into a testable Invoke-PackageExtension function and expands Pester coverage for packaging error paths.

Changes:

  • Added Invoke-PackageExtension orchestrator that performs path validation, manifest/version resolution, packaging invocation, and cleanup.
  • Refactored the script entry point to delegate to Invoke-PackageExtension and return structured results.
  • Expanded Pester tests for vsce discovery, manifest validation, version validation, and orchestrator error handling.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 5 comments.

File Description
scripts/extension/Package-Extension.ps1 Extracts orchestration into Invoke-PackageExtension, updates vsce invocation, and adds standardized result returns/cleanup.
scripts/tests/extension/Package-Extension.Tests.ps1 Adds new Pester cases for vsce discovery and multiple orchestrator/validation error paths.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@WilliamBerryiii WilliamBerryiii force-pushed the fix/263-package-extension-testability branch from ee61583 to 5023900 Compare January 29, 2026 04:37
@codecov-commenter
Copy link

codecov-commenter commented Jan 29, 2026

Codecov Report

❌ Patch coverage is 73.68421% with 20 lines in your changes missing coverage. Please review.
✅ Project coverage is 48.25%. Comparing base (d58541c) to head (ed20404).

Files with missing lines Patch % Lines
scripts/extension/Package-Extension.ps1 73.68% 20 Missing ⚠️
Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main     #343      +/-   ##
==========================================
+ Coverage   44.26%   48.25%   +3.98%     
==========================================
  Files          15       15              
  Lines        2826     2810      -16     
==========================================
+ Hits         1251     1356     +105     
+ Misses       1575     1454     -121     
Flag Coverage Δ
pester 48.25% <73.68%> (+3.98%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
scripts/extension/Package-Extension.ps1 83.85% <73.68%> (+57.41%) ⬆️

... and 1 file with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copilot AI review requested due to automatic review settings January 29, 2026 04:57
@WilliamBerryiii WilliamBerryiii force-pushed the fix/263-package-extension-testability branch from 5023900 to 9a6f018 Compare January 29, 2026 04:57
@WilliamBerryiii WilliamBerryiii force-pushed the fix/263-package-extension-testability branch from 9a6f018 to b254e10 Compare January 29, 2026 04:59
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated 4 comments.

- add Invoke-PackageExtension orchestrator with explicit path parameters
- simplify Main Execution to thin wrapper delegating to new function
- add 8 tests covering error handling and validation paths

🔧 - Generated by Copilot
@WilliamBerryiii WilliamBerryiii force-pushed the fix/263-package-extension-testability branch from b254e10 to c21e2f8 Compare January 29, 2026 05:33
Copilot AI review requested due to automatic review settings January 30, 2026 21:10
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

…-platform tests

- wrap Set-Content in finally block with try/catch to prevent IO failures from masking results

- replace sh with pwsh in exit code test for Windows CI compatibility

🐛 - Generated by Copilot
@WilliamBerryiii WilliamBerryiii merged commit 858a1be into main Jan 30, 2026
16 checks passed
@WilliamBerryiii WilliamBerryiii deleted the fix/263-package-extension-testability branch January 30, 2026 22:15
WilliamBerryiii added a commit that referenced this pull request Feb 4, 2026
🤖 I have created a release *beep* *boop*
---


##
[2.1.0](hve-core-v2.0.1...hve-core-v2.1.0)
(2026-02-04)


### ✨ Features

* add PowerShell script to validate copyright headers
([#370](#370))
([92fce72](92fce72))
* **docs:** Replace deprecated chat.modeFilesLocations with
chat.agentFilesLocations
([#413](#413))
([67fb2ab](67fb2ab))
* **scripts:** add CIHelpers module for CI platform abstraction
([#348](#348))
([23e7a7e](23e7a7e))
* **scripts:** add SecurityHelpers and CIHelpers modules
([#354](#354))
([b93d990](b93d990))
* **workflow:** add copilot-setup-steps.yml for Coding Agent environment
([#398](#398))
([085a38b](085a38b))


### 🐛 Bug Fixes

* **build:** increase release-please search depths to prevent 250-commit
window issue ([#342](#342))
([4bb857d](4bb857d))
* **build:** patch @isaacs/brace-expansion critical vulnerability
([#404](#404))
([292ef51](292ef51))
* **ci:** disable errexit during spell check exit code capture
([#356](#356))
([ed6ed46](ed6ed46))
* **ci:** exclude extension/README.md from frontmatter validation
([#362](#362))
([e0d7378](e0d7378))
* exclude test fixtures from markdown link checker
([#345](#345))
([58147f9](58147f9))
* **extension:** resolve path resolution issues in Windows/WSL
environments ([#407](#407))
([8529725](8529725))
* **linting:** use Write-Error instead of Write-Host for error output
([#377](#377))
([2ca766b](2ca766b))
* **scripts:** apply CI output escaping to infrastructure scripts
([#369](#369))
([251021e](251021e))
* **scripts:** apply CI output escaping to linting scripts
([#367](#367))
([fdd75ed](fdd75ed))
* **scripts:** apply CI output escaping to security scripts
([#368](#368))
([1237c9a](1237c9a))
* **scripts:** ensure reliable array count operations in linting and
security scripts
([#395](#395))
([de43e73](de43e73))
* **scripts:** standardize PowerShell requirements header block
([#385](#385))
([6e26282](6e26282))


### 📚 Documentation

* add doc-ops agent to CUSTOM-AGENTS reference
([#358](#358))
([15f7185](15f7185))
* add memory agent to CUSTOM-AGENTS.md
([#359](#359))
([d92c4e1](d92c4e1))
* add missing agents to extension README
([#357](#357))
([d58541c](d58541c))
* add task-reviewer agent to CUSTOM-AGENTS.md
([#363](#363))
([0efb722](0efb722))
* **contributing:** add copyright header guidelines
([#382](#382))
([881a567](881a567))
* **scripts:** update README.md with missing directory sections
([#355](#355))
([ac2966f](ac2966f))


### ♻️ Refactoring

* **scripts:** align linting and tests with CIHelpers
([#401](#401))
([3587e6a](3587e6a))
* **scripts:** extract Invoke-PackageExtension for testability
([#343](#343))
([858a1be](858a1be))
* **scripts:** extract orchestration function for Prepare-Extension
testability ([#344](#344))
([9fd4bd1](9fd4bd1))
* **scripts:** replace raw GITHUB_OUTPUT with Set-CIOutput in
Package-Extension
([#391](#391))
([74a30bb](74a30bb))
* **security:** move DependencyViolation and ComplianceReport to shared
module ([#378](#378))
([1dd31ad](1dd31ad))


### 🔧 Maintenance

* add copyright headers to PowerShell scripts
([#381](#381))
([d19c9b3](d19c9b3))
* add copyright headers to shell scripts
([#380](#380))
([284b456](284b456))
* **deps-dev:** bump cspell from 9.6.1 to 9.6.2 in the npm-dependencies
group ([#387](#387))
([23c2b9f](23c2b9f))
* **workflows:** simplify Copilot setup steps workflow triggers
([#414](#414))
([492a7b1](492a7b1))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

Co-authored-by: hve-core-release-please[bot] <254602402+hve-core-release-please[bot]@users.noreply.github.com>
Co-authored-by: Bill Berry <wberry@microsoft.com>
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.

[Issue]: Refactor Package-Extension.ps1 entry point for testability

3 participants