refactor(scripts): align linting and tests with CIHelpers#401
refactor(scripts): align linting and tests with CIHelpers#401WilliamBerryiii merged 6 commits intomainfrom
Conversation
There was a problem hiding this comment.
Pull request overview
Refactors linting and security PowerShell scripts to standardize CI integration via the shared CIHelpers module, and updates tests/mocks/docs to match the new CI helper APIs and behaviors.
Changes:
- Expanded
CIHelpers.psm1with new helpers (notably CI env-var support and bulk annotation emission) and added/updated Pester coverage. - Updated linting and security scripts to use CI helper outputs/annotations and introduced skip-main patterns to make scripts more testable.
- Updated Pester tests and mocks to use CI-focused environment helpers instead of GitHub-specific helpers, and refreshed linting documentation.
Reviewed changes
Copilot reviewed 24 out of 24 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| scripts/tests/security/Update-ActionSHAPinning.Tests.ps1 | Switches tests to dot-source the script with HVE_SKIP_MAIN and uses CI environment mocks. |
| scripts/tests/security/Test-SHAStaleness.Tests.ps1 | Switches tests to dot-source the script with HVE_SKIP_MAIN and uses CI environment mocks. |
| scripts/tests/linting/Validate-MarkdownFrontmatter.Tests.ps1 | Updates tests to CI naming and validates CI annotation integration paths. |
| scripts/tests/linting/Markdown-Link-Check.Tests.ps1 | Updates tests to dot-source with HVE_SKIP_MAIN for function access without executing main. |
| scripts/tests/linting/LintingHelpers.Tests.ps1 | Removes GitHub-helper-focused coverage and narrows tests to core linting helper behaviors. |
| scripts/tests/linting/Link-Lang-Check.Tests.ps1 | Updates tests to dot-source with HVE_SKIP_MAIN for function access without executing main. |
| scripts/tests/linting/Invoke-YamlLint.Tests.ps1 | Updates mocks/assertions from GitHub helpers to CI helpers (Set-CIOutput, Write-CIAnnotation, etc.). |
| scripts/tests/linting/Invoke-PSScriptAnalyzer.Tests.ps1 | Updates mocks/assertions from GitHub helpers to CI helpers and CI integration naming. |
| scripts/tests/linting/Invoke-LinkLanguageCheck.Tests.ps1 | Adds unit coverage for the new core flow and updates CI helper export expectations. |
| scripts/tests/linting/FrontmatterValidation.Tests.ps1 | Updates tests to validate Write-CIAnnotations behavior. |
| scripts/tests/lib/CIHelpers.Tests.ps1 | Adds/updates coverage for new CI helper APIs (including env var helper and bulk annotation helper). |
| scripts/tests/Mocks/GitMocks.psm1 | Renames and generalizes mock helpers from GitHub-specific to CI-oriented environment helpers. |
| scripts/security/Update-ActionSHAPinning.ps1 | Improves response parsing/error handling and adds HVE_SKIP_MAIN to prevent executing main during tests. |
| scripts/security/Test-SHAStaleness.ps1 | Adds HVE_SKIP_MAIN guard around main execution for testability. |
| scripts/linting/Validate-MarkdownFrontmatter.ps1 | Replaces GitHub-only checks with Test-CIEnvironment and CI helper annotation/summary/env helpers. |
| scripts/linting/README.md | Updates linting documentation to describe CI helper integration and exported helper APIs. |
| scripts/linting/Modules/LintingHelpers.psm1 | Removes GitHub-specific helper implementations and aligns module surface toward CI helpers + file/git helpers. |
| scripts/linting/Modules/FrontmatterValidation.psm1 | Removes GitHub-specific annotation helper implementation from the module. |
| scripts/linting/Markdown-Link-Check.ps1 | Adds HVE_SKIP_MAIN and replaces GitHub helper usage with CI helper annotations/summary/env helpers. |
| scripts/linting/Link-Lang-Check.ps1 | Adds HVE_SKIP_MAIN and replaces GitHub-only failure annotation with CI helper annotation. |
| scripts/linting/Invoke-YamlLint.ps1 | Replaces GitHub helper outputs/annotations/summary/env with CI helpers. |
| scripts/linting/Invoke-PSScriptAnalyzer.ps1 | Replaces GitHub helper outputs/annotations/summary/env with CI helpers and maps severities to CI levels. |
| scripts/linting/Invoke-LinkLanguageCheck.ps1 | Refactors into a testable core function and switches annotations/outputs/env/summary to CI helpers. |
| scripts/lib/Modules/CIHelpers.psm1 | Adds CI env var helper and bulk annotation helper; expands exported CI integration surface. |
Comments suppressed due to low confidence (1)
scripts/security/Test-SHAStaleness.ps1:83
- Even when
$env:HVE_SKIP_MAINis set (tests dot-source this script), the script still creates the log directory at import time. This is a side effect outside the guarded main block and can cause tests to write to the repo filesystem unexpectedly. Consider moving the log directory creation behind the skip-main guard (or lazily creating it insideWrite-SecurityLog) so loading functions for tests is side-effect free.
$script:SkipMain = $env:HVE_SKIP_MAIN -eq '1'
# Ensure logging directory exists
$LogDir = Split-Path -Parent $LogPath
if (!(Test-Path $LogDir)) {
New-Item -ItemType Directory -Path $LogDir -Force | Out-Null
}
- replace GitHub Actions helpers across linting scripts - extend CIHelpers for env and annotations with tests - update linting and security test mocks for CI integration - document CIHelpers usage in linting README 🔧 - Generated by Copilot
- Standardize SPDX-License-Identifier headers across 7 files - Fix HVE_SKIP_MAIN handling in integration test contexts - Add ErrorAction Continue to prevent terminating errors in catch blocks - Remove legacy Created date headers from script files 🔧 - Generated by Copilot Co-authored-by: littleKitchen <55852668+littleKitchen@users.noreply.github.com>
fbd8cc4 to
d680c7d
Compare
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned FilesNone |
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #401 +/- ##
===========================================
+ Coverage 60.96% 74.66% +13.70%
===========================================
Files 19 19
Lines 3233 3296 +63
===========================================
+ Hits 1971 2461 +490
+ Misses 1262 835 -427
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
|
@littleKitchen - This PR is ready for review! It incorporates the learnings from your work on PR #379 and implements the script-as-orchestrator pattern we discussed. Changes in latest commits:
Would appreciate your eyes on it when you have a chance. 🙏 |
- sanitize file paths in step summaries for AzDO injection prevention - move Set-StrictMode inside SkipMain guard to prevent test scope leak - add ExcludePaths param to mock scripts in Link-Lang-Check tests - update README documentation for LintingHelpers module exports 🔒 - Generated by Copilot
- replace direct ::error:: output with Write-CIAnnotation - aligns with CIHelpers convention used elsewhere 🔧 - Generated by Copilot
- Use delimiter-based format for Set-CIEnv GitHub env file writes - Add variable name validation for GitHub Actions env vars - Add -ErrorAction Continue to Write-Error in catch blocks - Update CIHelpers tests for new delimiter format 🔧 - Generated by Copilot
🤖 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>
Description
Refactored CI helper usage in linting and security scripts, expanded CI helper APIs, and aligned tests and documentation with the new behavior.
Related Issue(s)
Related to #351
Type of Change
Select all that apply:
Code & Documentation:
Infrastructure & Configuration:
AI Artifacts:
prompt-builderagent and addressed all feedback.github/instructions/*.instructions.md).github/prompts/*.prompt.md).github/agents/*.agent.md)Other:
.ps1,.sh,.py)Testing
Checklist
Required Checks
Required Automated Checks
The following validation commands must pass before merging:
npm run lint:mdnpm run spell-checknpm run lint:frontmatternpm run lint:md-linksnpm run lint:psSecurity Considerations