Skip to main content

Build Workflows

HVE Core uses GitHub Actions for continuous integration, quality validation, security scanning, and release automation. The workflow architecture emphasizes reusable components and parallel execution for fast feedback.

Pipeline Overview

Workflow Inventory

WorkflowTriggerPurpose
pr-validation.ymlPull request, manualPre-merge quality gate with parallel validation
release-stable.ymlPush to main, manualPost-merge validation and release automation
weekly-security-maintenance.ymlSunday 2 AM UTC, manualScheduled security posture review
security-scan.ymlPush to main/developCodeQL security validation
release-marketplace-stable.ymlManualVS Code extension marketplace publishing
release-marketplace-prerelease.ymlManualVS Code extension pre-release publishing
copilot-setup-steps.ymlManualCoding agent environment setup
release-prerelease.ymlPR closedPre-release tag and publish on merge to main
release-prerelease-pr.ymlPush to mainPre-release companion PR management
scorecard.ymlSchedule, pushOpenSSF Scorecard security analysis
codeql-analysis.ymlScheduleWeekly CodeQL security scan (also reusable)
dependency-review.ymlPull requestDependency vulnerability review (also reusable)
sha-staleness-check.ymlManualSHA reference freshness check (also reusable)

Reusable Workflows

Individual validation workflows called by orchestration workflows:

WorkflowPurposenpm Script
markdown-lint.ymlMarkdownlint validationnpm run lint:md
spell-check.ymlcspell dictionary checknpm run spell-check
frontmatter-validation.ymlAI artifact frontmatter schemasnpm run lint:frontmatter
markdown-link-check.ymlBroken link detectionnpm run lint:md-links
link-lang-check.ymlLink language validationnpm run lint:links
yaml-lint.ymlYAML syntax validationnpm run lint:yaml
ps-script-analyzer.ymlPowerShell static analysisnpm run lint:ps
table-format.ymlMarkdown table formattingnpm run format:tables
pester-tests.ymlPowerShell unit testsnpm run test:ps
skill-validation.ymlSkill structure validationnpm run validate:skills
dependency-pinning-scan.ymlDependency pinning validationN/A (PowerShell direct)
sha-staleness-check.ymlSHA reference freshness*N/A (PowerShell direct)
codeql-analysis.ymlCodeQL security scanning*N/A (GitHub native)
dependency-review.ymlDependency vulnerability review*N/A (GitHub native)
extension-package.ymlVS Code extension packagingnpm run extension:package
copyright-headers.ymlCopyright header validationnpm run validate:copyright
gitleaks-scan.ymlSecret detection scanningN/A (gitleaks direct)
plugin-package.ymlPlugin collection packagingN/A
plugin-validation.ymlPlugin and collection metadatanpm run lint:collections-metadata
extension-marketplace-publish.ymlExtension marketplace publishingN/A

Workflows marked with * are dual-purpose: they accept workflow_call for reuse by orchestration workflows and also run independently via their own triggers.

PR Validation Pipeline

The pr-validation.yml workflow serves as the primary quality gate for all pull requests. It runs 16 parallel jobs covering linting, security, and testing.

Jobs

JobReusable WorkflowValidates
spell-checkspell-check.ymlSpelling across all files
markdown-lintmarkdown-lint.ymlMarkdown formatting rules
table-formattable-format.ymlMarkdown table structure
psscriptanalyzerps-script-analyzer.ymlPowerShell code quality
yaml-lintyaml-lint.ymlYAML syntax
pester-testspester-tests.ymlPowerShell unit tests
frontmatter-validationfrontmatter-validation.ymlAI artifact metadata
skill-validationskill-validation.ymlSkill directory structure
link-lang-checklink-lang-check.ymlLink accessibility
markdown-link-checkmarkdown-link-check.ymlBroken links
dependency-pinning-checkdependency-pinning-scan.ymlDependency pinning
npm-auditInlinenpm dependency vulnerabilities
codeqlcodeql-analysis.ymlCode security patterns
copyright-headerscopyright-headers.ymlCopyright header compliance
plugin-validationplugin-validation.ymlPlugin and collection metadata
gitleaks-scangitleaks-scan.ymlSecret detection

All jobs run in parallel with no dependencies, enabling fast feedback (typically under 3 minutes).

Main Branch Pipeline

The release-stable.yml workflow runs after merges to main, performing validation and release automation.

Release-please v4 handles chore-type commits natively. They are not releasable and do not produce spurious release PRs, so no commit-message guard is needed.

Main Branch Jobs

JobPurposeDependencies
spell-checkPost-merge spelling validationNone
markdown-lintPost-merge markdown validationNone
table-formatPost-merge table validationNone
dependency-pinning-scanSecurity pinning checkNone
gitleaks-scanSecret detection scanningNone
pester-testsPowerShell unit testsNone
release-pleaseAutomated release managementAll validation jobs
reset-prereleaseReset pre-release trackingrelease-please
extension-package-releaseBuild release VSIXrelease-please (conditional)
plugin-package-releaseBuild release plugin packagesrelease-please (conditional)
generate-dependency-sbomGenerate dependency SBOMrelease-please (conditional)
attest-and-uploadSign and upload VSIXrelease-please, extension-package-release, generate-dependency-sbom
upload-plugin-packagesUpload plugin packagesrelease-please, plugin-package-release
sbom-diffCompare SBOM changesrelease-please, generate-dependency-sbom
publish-releaseFinalize GitHub Releaserelease-please, attest-and-upload, upload-plugin-packages, sbom-diff

When release-please creates a release, parallel jobs build the extension VSIX (extension-package-release), package plugin collections (plugin-package-release), and generate an SBOM (generate-dependency-sbom). The attest-and-upload job signs the VSIX with Sigstore attestation, upload-plugin-packages uploads collection artifacts, and sbom-diff compares dependency changes. The publish-release job finalizes the GitHub Release after all artifacts are ready.

Security Workflows

Weekly Security Maintenance

The weekly-security-maintenance.yml workflow runs every Sunday at 2AM UTC, providing scheduled security posture review.

JobPurpose
validate-pinningVerify dependency pinning compliance
check-stalenessDetect outdated SHA references
codeql-analysisFull CodeQL security scan
summaryAggregate security status report

Security Validation Tools

ToolScriptChecks
Dependency PinningTest-DependencyPinning.ps1Actions use SHA refs; npm uses exact versions
SHA StalenessTest-SHAStaleness.ps1SHAs reference recent commits
npm Auditnpm auditKnown vulnerabilities in dependencies
CodeQLGitHub nativeCode patterns indicating security issues
GitleaksgitleaksSecret detection in repository history
Dependency ReviewGitHub nativeDependency vulnerability analysis

Extension Publishing

The release-marketplace-stable.yml and release-marketplace-prerelease.yml workflows handle VS Code extension marketplace publishing through manual dispatch. Both workflows use collection-based packaging to produce and publish a separate VSIX per collection.

Publishing Jobs

JobPurposeWorkflow
normalize-versionEnsure version consistencyrelease-marketplace-stable.yml
validate-versionEnforce odd minor version for pre-release channelrelease-marketplace-prerelease.yml
package (matrix)Build one VSIX per collection using extension-package.ymlBoth
publish (matrix)Upload each VSIX to VS Code Marketplace via OIDC + vsceBoth

Collection-Based Packaging

Collection manifests in collections/*.collection.yml define collection-scoped subsets of the full artifact set. The extension-package.yml reusable workflow discovers these manifests, filters by maturity and channel, and packages each as an independent VSIX.

CollectionMaturityIncluded In
hve-core-allStableStable, PreRelease
hve-coreStableStable, PreRelease
adoStableStable, PreRelease
githubStableStable, PreRelease
project-planningStableStable, PreRelease
coding-standardsStableStable, PreRelease
data-scienceStableStable, PreRelease
security-planningStableStable, PreRelease
design-thinkingPreviewStable, PreRelease
installerStableStable, PreRelease
experimentalExperimentalPreRelease only

Maturity filtering rules:

Maturity LevelBuild Inclusion
DeprecatedAlways excluded
ExperimentalExcluded from Stable channel builds
PreviewIncluded in both Stable and PreRelease channels
StableIncluded in all channel builds

Version Channels

ChannelVersion PatternMarketplace
StableEven minor (1.2.0)Main listing
Pre-releaseOdd minor (1.3.0)Pre-release flag

npm Script Mapping

Workflows invoke validation through npm scripts defined in package.json:

npm ScriptCommandUsed By
lint:mdmarkdownlint-cli2markdown-lint.yml
lint:md:fixmarkdownlint-cli2 --fixLocal
spell-checkcspellspell-check.yml
spell-check:fixcspell --show-suggestionsLocal
lint:frontmatterValidate-MarkdownFrontmatter.ps1frontmatter-validation.yml
lint:md-linksMarkdown-Link-Check.ps1markdown-link-check.yml
lint:linksInvoke-LinkLanguageCheck.ps1link-lang-check.yml
lint:yamlInvoke-YamlLint.ps1yaml-lint.yml
lint:psInvoke-PSScriptAnalyzer.ps1ps-script-analyzer.yml
lint:collections-metadataValidate-Collections.ps1plugin-validation.yml
lint:marketplaceValidate-Marketplace.ps1plugin-validation.yml
lint:version-consistencyTest-ActionVersionConsistency.ps1Local
lint:allChains all lintersLocal
format:tablesmarkdown-table-formattertable-format.yml
test:psInvoke-PesterTests.ps1pester-tests.yml
validate:skillsValidate-SkillStructure.ps1skill-validation.yml
validate:copyrightTest-CopyrightHeaders.ps1copyright-headers.yml
extension:preparePrepare-Extension.ps1extension-package.yml
extension:prepare:prereleasePrepare-Extension.ps1 -Channel PreReleaseextension-package.yml
extension:packagePackage-Extension.ps1extension-package.yml
package:extensionAlias for extension:packageextension-package.yml
extension:package:prereleasePackage-Extension.ps1 -PreReleaseextension-package.yml
plugin:generateGenerate-Plugins.ps1 + post-processplugin-package.yml
plugin:validateAlias for lint:collections-metadataplugin-validation.yml

🤖 Crafted with precision by ✨Copilot following brilliant human instruction, then carefully refined by our team of discerning human reviewers.