diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3490121df..15818add8 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -683,6 +683,8 @@ jobs: 'tools/CompareVI.Tools/CompareVI.Tools.psd1', 'tools/Compare-VIHistory.ps1', 'tools/Compare-RefsToTemp.ps1', + 'tools/Get-LabVIEWContainerShellContract.ps1', + 'tools/Run-NILinuxContainerCompare.ps1', 'scripts/CompareVI.psm1' )) { $candidate = Join-Path $bundleDir.FullName $relativePath diff --git a/CHANGELOG.md b/CHANGELOG.md index 639a46e3d..f892c9308 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,27 @@ The format is based on Keep a Changelog, and this project adheres to Semantic Ve ## [Unreleased] +## [v0.6.9] - 2026-03-30 + +### Fixed + +- The published `CompareVI.Tools` bundle now includes the hosted NI Linux + runner helper `tools/Get-LabVIEWContainerShellContract.ps1`, restoring the + executable consumer contract for released VI-history downstreams that import + the bundle instead of a maintainer checkout. + +### Added + +- Release-time bundle certification now asserts the hosted NI Linux runner + contract files are present in the extracted `CompareVI.Tools` archive before + publication succeeds. + +### Documentation + +- Updated the release helper packet for the `v0.6.9` maintenance cut and + recorded the required coordination step to repin `comparevi-history` after + publication. + ## [v0.6.7] - 2026-03-30 ### Changed diff --git a/Directory.Build.props b/Directory.Build.props index 96c96a247..eb5b0923f 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -7,9 +7,9 @@ false true true - 0.6.7 - 0.6.7.0 - 0.6.7.0 + 0.6.9 + 0.6.9.0 + 0.6.9.0 $(Version)+local package-first project diff --git a/docs/archive/releases/RELEASE_NOTES_v0.6.9.md b/docs/archive/releases/RELEASE_NOTES_v0.6.9.md new file mode 100644 index 000000000..a93aeba68 --- /dev/null +++ b/docs/archive/releases/RELEASE_NOTES_v0.6.9.md @@ -0,0 +1,42 @@ +# Release Notes v0.6.9 + +`v0.6.9` is a maintenance release that repairs the published +`CompareVI.Tools` bundle so released VI-history downstreams can execute the +hosted NI Linux contract without a maintainer checkout. + +## Highlights + +- The published `CompareVI.Tools` archive now includes + `tools/Get-LabVIEWContainerShellContract.ps1`, restoring the executable + hosted NI Linux consumer contract in the released bundle. +- Release-time bundle certification now fails closed if the published archive + omits the hosted NI Linux support scripts required by VI-history consumers. +- This cut is intentionally narrow. It repairs the released bundle contract; it + does not broaden the public VI-history product surface. + +## Included maintenance slice + +- `#2051` fix: ship complete NI Linux bundle contract + +## Validation highlights + +- Release branch `release/v0.6.9` updates the stable backend version surfaces + to `0.6.9`. +- Direct bundle proof validated the repair before publication: + - extracted bundle contains both + `tools/Run-NILinuxContainerCompare.ps1` + and + `tools/Get-LabVIEWContainerShellContract.ps1` + - bundle certification summary reports `status: producer-native-ready` +- Post-publication coordination for this cut is explicit: + - repin `comparevi-history` to `v0.6.9` + - rerun the canonical `DrawIcon.vi` proof on the released backend + - keep the public history surface constrained to characterization until the + developer-decision proof is satisfied + +## Consumer impact + +- Stable consumers should move from `@v0.6.8` to `@v0.6.9` to pick up the + repaired hosted NI Linux bundle contract. +- `comparevi-history` should treat `v0.6.9` as the minimum backend ref for the + canonical `DrawIcon.vi` proof going forward. diff --git a/docs/knowledgebase/VICompare-Refs-Workflow.md b/docs/knowledgebase/VICompare-Refs-Workflow.md index c66e2dcbf..e2a6bce2f 100644 --- a/docs/knowledgebase/VICompare-Refs-Workflow.md +++ b/docs/knowledgebase/VICompare-Refs-Workflow.md @@ -129,10 +129,13 @@ - `compare_fail_fast` (`true`/`false`): stop iterating after the first detected diff (still uploads results, does not fail the job). - `compare_fail_on_diff` (`true`/`false`): exit the job with failure status if any LVCompare run reports differences. - `compare_modes` (string): comma-separated compare modes. Recognised values: - - `default` - compare with no ignore flags (full detail). - - `attributes` - apply `-noattr` to suppress attribute-only differences when you want a quieter run. - - `front-panel` - apply `-nofp`/`-nofppos` to suppress front panel layout changes. - - `block-diagram` - apply `-nobdcosm` to suppress block diagram cosmetic tweaks. + - `default` - legacy suppressed bundle (`-nobd -noattr -nofp -nofppos -nobdcosm`). + - `attributes` - keep attribute diffs visible while suppressing front panel + and block diagram surfaces. + - `front-panel` - keep front panel diffs visible while suppressing + attributes and block diagram surfaces. + - `block-diagram` - keep block diagram diffs visible while suppressing + attributes and front panel surfaces. - `full` - run LVCompare with no ignore flags (`-nobd`, `-noattr`, `-nofp`, `-nofppos`, `-nobdcosm` all disabled). Use when you need every cosmetic and functional change. - `all` - alias for `full` (deprecated; the helper rewrites to `full` and emits a warning). diff --git a/docs/release/PR_NOTES.md b/docs/release/PR_NOTES.md index 478c4d0d4..84b7391a7 100644 --- a/docs/release/PR_NOTES.md +++ b/docs/release/PR_NOTES.md @@ -1,34 +1,34 @@ -# Release v0.6.7 - PR Notes Helper +# Release v0.6.9 - PR Notes Helper -Reference sheet for the `v0.6.7` maintenance release. This cut ships the -merge-aware VI history start-ref repair from `develop` without bundling the -separate mode-semantics correction work. +Reference sheet for the `v0.6.9` maintenance release. This cut repairs the +published `CompareVI.Tools` bundle so released downstream consumers can execute +the hosted NI Linux VI-history contract without a maintainer checkout. ## 1. Summary -Release `v0.6.7` focuses on three themes: +Release `v0.6.9` focuses on three themes: -- **Merge-aware history anchors**: `tools/Compare-VIHistory.ps1` now preserves - a requested merge commit as the start of the history window when the target - VI changed through that merge. -- **Canonical single-VI recovery**: this is the backend cut required for the - `comparevi-history` `DrawIcon.vi` proof to render real comparisons instead of - honestly failing closed with zero executed pairs. -- **Narrow maintenance scope**: this cut does not claim to solve the separate - question of which public history modes are decision-useful; that remains the - next product-semantic slice. +- **Executable released bundle**: `CompareVI.Tools-v0.6.9.zip` now carries the + hosted NI Linux helper `tools/Get-LabVIEWContainerShellContract.ps1` instead + of shipping an incomplete runtime contract. +- **Released-backend recovery**: downstream VI-history consumers can once again + rely on the published bundle rather than a maintainer override or local + source tree to execute the canonical proof path. +- **Narrow maintenance scope**: this cut only repairs released bundle + executability. It does not expand the public VI-history surface or add new + product claims. ## 2. Maintenance Highlights -- History start-ref resolution now uses merge-aware path detection - (`git diff-tree --root -m ...`) instead of merge-blind detection, so - merge-only VI touches stay inside the emitted history plan. -- The shipped backend can now preserve `startRef=47ae...` for the canonical - `DrawIcon.vi` proof instead of collapsing that proof to - `startRef=endRef=fe98...` and zero comparisons. -- Stable release surfaces now pin `0.6.7`, isolating the backend repair in an - immutable stable cut before the separate mode-semantics work begins. +- `tools/Publish-CompareVIToolsArtifact.ps1` now places + `tools/Get-LabVIEWContainerShellContract.ps1` in the bundle and advertises it + through the published hosted-runner contract metadata. +- `tools/Test-CompareVIHistoryBundleCertification.ps1` now fails closed if the + extracted bundle omits the hosted NI Linux support scripts required by the + released consumer path. +- Stable release surfaces now pin `0.6.9`, isolating the bundle-contract repair + in an immutable stable cut after the broken `v0.6.8` publication. ## 3. Validation Snapshot @@ -38,17 +38,16 @@ Release `v0.6.7` focuses on three themes: - `smoke-gate` - `Policy Guard (Upstream) / policy-guard` - `commit-integrity` -- [x] Direct backend proof preserved the requested merge-aware history window: - - real-history stub proof preserved `startRef=47ae...` and processed four - comparison pairs across the requested modes - - synthetic merge-history proof preserved a merge commit as `startRef` while - the legacy probe reported no path touch -- [ ] `node tools/npm/run-script.mjs release:finalize -- 0.6.7` completes from +- [x] Direct bundle proof restored the published hosted NI Linux contract: + - extracted bundle contains both `tools/Run-NILinuxContainerCompare.ps1` and + `tools/Get-LabVIEWContainerShellContract.ps1` + - bundle certification summary reports `status: producer-native-ready` +- [ ] `node tools/npm/run-script.mjs release:finalize -- 0.6.9` completes from a clean helper lane and writes fresh finalize metadata under `tests/results/_agent/release/` -- [ ] Published release `v0.6.7` includes the signed distribution assets, +- [ ] Published release `v0.6.9` includes the signed distribution assets, `SHA256SUMS.txt`, `sbom.spdx.json`, and `provenance.json` -- [ ] `comparevi-history` repins `comparevi-backend-ref.txt` to `v0.6.7` +- [ ] `comparevi-history` repins `comparevi-backend-ref.txt` to `v0.6.9` before the canonical `DrawIcon.vi` product proof is rerun ## 4. Reviewer Focus @@ -57,21 +56,22 @@ Release `v0.6.7` focuses on three themes: - `package.json` - `Directory.Build.props` - `tools/CompareVI.Tools/CompareVI.Tools.psd1` -- Review the start-ref repair for correctness: - - `tools/Compare-VIHistory.ps1` - - `tests/CompareVI.History.Tests.ps1` +- Review the released bundle contract repair for correctness: + - `tools/Publish-CompareVIToolsArtifact.ps1` + - `tools/Test-CompareVIHistoryBundleCertification.ps1` + - `docs/schemas/comparevi-history-bundle-certification-v1.schema.json` - Review the release helper packet for consistency: - `CHANGELOG.md` - `docs/release/TAG_PREP_CHECKLIST.md` - - `docs/archive/releases/RELEASE_NOTES_v0.6.7.md` + - `docs/archive/releases/RELEASE_NOTES_v0.6.9.md` ## 5. Follow-Up After Stable -1. Re-pin `comparevi-history` from `v0.6.6` to `v0.6.7` and rerun the +1. Re-pin `comparevi-history` from `v0.6.8` to `v0.6.9` and rerun the canonical `DrawIcon.vi` proof on the released backend. -2. Take the separate mode-semantics correction before treating the emitted - public history modes as trustworthy decision surfaces. -3. Reduce the public mode surface if the rerun product proof only justifies a - narrower mode set. +2. Re-evaluate the current emitted history surface against the real developer + question before treating any mode as decision-ready. +3. Reduce the public mode surface again if the rerun product proof only + justifies a narrower mode set. ---- Updated: 2026-03-30 (prepared for the `v0.6.7` maintenance cut). +--- Updated: 2026-03-30 (prepared for the `v0.6.9` maintenance cut). diff --git a/docs/release/TAG_PREP_CHECKLIST.md b/docs/release/TAG_PREP_CHECKLIST.md index adce2e9c2..78befb22c 100644 --- a/docs/release/TAG_PREP_CHECKLIST.md +++ b/docs/release/TAG_PREP_CHECKLIST.md @@ -1,14 +1,14 @@ -# v0.6.7 Tag Preparation Checklist +# v0.6.9 Tag Preparation Checklist -Helper reference for cutting or replaying the `v0.6.7` maintenance release. +Helper reference for cutting or replaying the `v0.6.9` maintenance release. Aligns with the archived release notes -(`../archive/releases/RELEASE_NOTES_v0.6.7.md`) and the checked-in stable +(`../archive/releases/RELEASE_NOTES_v0.6.9.md`) and the checked-in stable release surfaces. ## 1. Pre-flight Verification -- [ ] Work from `release/v0.6.7` and ensure it contains the final maintenance +- [ ] Work from `release/v0.6.9` and ensure it contains the final maintenance changes. - [ ] CI is green on the release branch (`lint`, `pester / normalize`, `smoke-gate`, `Policy Guard (Upstream) / policy-guard`, @@ -22,29 +22,30 @@ release surfaces. ## 2. Version & Metadata Consistency - [ ] `CHANGELOG.md` contains a finalized - `## [v0.6.7] - 2026-03-30` section. -- [ ] Stable docs reference `v0.6.6` consistently until `v0.6.7` publication - completes, and the release helper packet references `v0.6.7` + `## [v0.6.9] - 2026-03-30` section. +- [ ] Stable docs reference `v0.6.8` consistently until `v0.6.9` publication + completes, and the release helper packet references `v0.6.9` consistently. - [ ] `package.json`, `Directory.Build.props`, and - `tools/CompareVI.Tools/CompareVI.Tools.psd1` all report `0.6.7`. + `tools/CompareVI.Tools/CompareVI.Tools.psd1` all report `0.6.9`. - [ ] `docs/action-outputs.md` still matches `action.yml`. - [ ] Update `docs/documentation-manifest.json` if release-doc coverage changed. -## 3. Start-Ref Regression Validation +## 3. Bundle Contract Regression Validation -- [ ] Focused history regression tests pass locally: +- [ ] Focused bundle regression tests pass locally: ```bash -pwsh -NoLogo -NoProfile -Command "Invoke-Pester -Path 'tests/CompareVI.History.Tests.ps1' -Output Detailed -CI" +pwsh -NoLogo -NoProfile -File tools/Test-CompareVIHistoryBundleCertification.ps1 -BundleArchivePath tests/results/_agent/bundle-fix/artifacts/CompareVI.Tools-v0.6.9.zip -ResultsDir tests/results/_agent/bundle-fix/certification -SummaryJsonPath tests/results/_agent/bundle-fix/certification/summary.json ``` -- [ ] Confirm the direct backend proofs preserve the requested history start: +- [ ] Confirm the published bundle preserves the hosted NI Linux consumer contract: -- [ ] Real-history stub proof preserves `startRef=47ae...` for - `DrawIcon.vi` and processes four comparison pairs. -- [ ] Synthetic merge-history proof preserves the merge commit as `startRef` - while the legacy non-merge-aware probe reports no touch. +- [ ] The extracted bundle contains: + `tools/Run-NILinuxContainerCompare.ps1` + and + `tools/Get-LabVIEWContainerShellContract.ps1` +- [ ] Bundle certification reports `status: producer-native-ready` - [ ] `comparevi-history` pin-bump coordination is queued immediately after publication so the canonical product proof uses the released backend instead of a maintainer override. @@ -52,9 +53,9 @@ pwsh -NoLogo -NoProfile -Command "Invoke-Pester -Path 'tests/CompareVI.History.T ## 4. Release Materials Review - [ ] `PR_NOTES.md`, this checklist, and - `../archive/releases/RELEASE_NOTES_v0.6.7.md` are consistent. -- [ ] `README.md` and `docs/USAGE_GUIDE.md` still treat `v0.6.6` as the - previously released stable pin until `v0.6.7` publication completes. + `../archive/releases/RELEASE_NOTES_v0.6.9.md` are consistent. +- [ ] `README.md` and `docs/USAGE_GUIDE.md` still treat `v0.6.8` as the + previously released stable pin until `v0.6.9` publication completes. ## 5. Tag Creation @@ -62,7 +63,7 @@ pwsh -NoLogo -NoProfile -Command "Invoke-Pester -Path 'tests/CompareVI.History.T ```pwsh node tools/npm/run-script.mjs priority:release:signing:readiness -node tools/npm/run-script.mjs priority:release:conductor -- --apply --channel stable --version 0.6.7 +node tools/npm/run-script.mjs priority:release:conductor -- --apply --channel stable --version 0.6.9 ``` - [ ] Confirm `tests/results/_agent/release/release-signing-readiness.json` @@ -73,31 +74,31 @@ node tools/npm/run-script.mjs priority:release:conductor -- --apply --channel st - [ ] Create an annotated stable tag: ```pwsh -git tag -a v0.6.7 -m "v0.6.7: publish merge-aware VI history start-ref repair" +git tag -a v0.6.9 -m "v0.6.9: repair CompareVI.Tools hosted bundle contract" ``` - [ ] Push the tag: ```pwsh -git push origin v0.6.7 +git push origin v0.6.9 ``` ## 6. Validation After Publish -- [ ] Run `node tools/npm/run-script.mjs release:finalize -- 0.6.7` from a +- [ ] Run `node tools/npm/run-script.mjs release:finalize -- 0.6.9` from a clean helper lane to fast-forward `main` and `develop`, then record the finalize metadata. -- [ ] Install the action via `@v0.6.7` in a sample workflow and confirm a - merge-aware VI history run preserves the requested start ref. -- [ ] Re-pin `comparevi-history` to `v0.6.7` and confirm the canonical - `DrawIcon.vi` proof reaches real comparisons instead of failing closed on - zero executed pairs. +- [ ] Install the bundle via `@v0.6.9` in a sample workflow and confirm the + released hosted NI Linux VI-history contract executes without a local + source-tree override. +- [ ] Re-pin `comparevi-history` to `v0.6.9` and confirm the canonical + `DrawIcon.vi` proof reaches real comparisons on the released backend. ## 7. Communication -- [ ] Announce the maintenance cut, calling out the merge-aware history - start-ref repair and the required `comparevi-history` repin. -- [ ] Notify consumers that `v0.6.7` supersedes `v0.6.6` as the supported +- [ ] Announce the maintenance cut, calling out the released bundle-contract + repair and the required `comparevi-history` repin. +- [ ] Notify consumers that `v0.6.9` supersedes `v0.6.8` as the supported stable pin. ---- Updated: 2026-03-30 (prepared for the `v0.6.7` maintenance cut). +--- Updated: 2026-03-30 (prepared for the `v0.6.9` maintenance cut). diff --git a/docs/schemas/comparevi-history-bundle-certification-v1.schema.json b/docs/schemas/comparevi-history-bundle-certification-v1.schema.json index e0a4f0886..f2b0967c0 100644 --- a/docs/schemas/comparevi-history-bundle-certification-v1.schema.json +++ b/docs/schemas/comparevi-history-bundle-certification-v1.schema.json @@ -145,7 +145,12 @@ "bundleImportPath", "bundleImportPathExists", "releaseAssetPattern", - "contractPathResolutions" + "contractPathResolutions", + "hostedRunnerEntryScriptPath", + "hostedRunnerEntryScriptExists", + "hostedRunnerSupportScriptPaths", + "hostedRunnerSupportScriptsExist", + "hostedRunnerMissingSupportScripts" ], "properties": { "status": { @@ -236,6 +241,24 @@ }, "additionalProperties": false } + }, + "hostedRunnerEntryScriptPath": { + "type": [ + "string", + "null" + ] + }, + "hostedRunnerEntryScriptExists": { + "type": "boolean" + }, + "hostedRunnerSupportScriptPaths": { + "$ref": "#/$defs/stringArray" + }, + "hostedRunnerSupportScriptsExist": { + "type": "boolean" + }, + "hostedRunnerMissingSupportScripts": { + "$ref": "#/$defs/stringArray" } }, "additionalProperties": false @@ -276,6 +299,8 @@ "bundleContractPinResolved", "bundleImportPathExists", "bundleContractPathsResolved", + "hostedRunnerEntryScriptExists", + "hostedRunnerSupportScriptsExist", "passed" ], "properties": { @@ -342,6 +367,12 @@ "bundleContractPathsResolved": { "type": "boolean" }, + "hostedRunnerEntryScriptExists": { + "type": "boolean" + }, + "hostedRunnerSupportScriptsExist": { + "type": "boolean" + }, "passed": { "type": "boolean" } diff --git a/docs/test-requirements/vi-history-reporting.md b/docs/test-requirements/vi-history-reporting.md index 0e0a1bc80..10440c25b 100644 --- a/docs/test-requirements/vi-history-reporting.md +++ b/docs/test-requirements/vi-history-reporting.md @@ -8,10 +8,16 @@ This document tracks the atomic test requirements for `tools/Compare-VIHistory.p 1. Manifest shall record `mode` equal to the requested value. 1. Each comparison entry shall record `mode` equal to the requested value. 1. `manifest.flags` shall contain the expected flag bundle per mode: - - `default`: no ignore flags present. - - `attributes`: includes `-noattr` only. - - `front-panel`: includes `-nofp`, `-nofppos` only. - - `block-diagram`: includes `-nobdcosm` only. + - `default`: includes the legacy suppression bundle + (`-nobd`, `-noattr`, `-nofp`, `-nofppos`, `-nobdcosm`). + - `attributes`: keeps attribute diffs visible while still suppressing + block-diagram and front-panel surfaces + (`-nobd`, `-nofp`, `-nofppos`, `-nobdcosm`). + - `front-panel`: keeps front-panel diffs visible while still suppressing + attributes and block-diagram surfaces (`-nobd`, `-noattr`, + `-nobdcosm`). + - `block-diagram`: keeps block-diagram diffs visible while still suppressing + attributes and front-panel surfaces (`-noattr`, `-nofp`, `-nofppos`). - `full`: no ignore flags present (all ignore flags disabled). - `all`: legacy alias for `full` (the tooling rewrites it and warns). - `custom`: flag list matches explicit inputs. diff --git a/package-lock.json b/package-lock.json index 421ff4d8f..cceb48561 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "compare-vi-cli-action", - "version": "0.6.7", + "version": "0.6.9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "compare-vi-cli-action", - "version": "0.6.7", + "version": "0.6.9", "license": "BSD-3-Clause", "dependencies": { "argparse": "^2.0.1", diff --git a/package.json b/package.json index a73212210..2fd6d5c5b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "compare-vi-cli-action", "private": true, - "version": "0.6.7", + "version": "0.6.9", "license": "BSD-3-Clause", "type": "module", "scripts": { diff --git a/tests/CompareVI.History.Tests.ps1 b/tests/CompareVI.History.Tests.ps1 index 7b59c02d9..0a638c927 100644 --- a/tests/CompareVI.History.Tests.ps1 +++ b/tests/CompareVI.History.Tests.ps1 @@ -938,7 +938,7 @@ exit 0 $manifest.comparisons.Count | Should -Be 1 } - It 'drops block diagram cosmetic ignore when block-diagram mode is selected' { + It 'keeps block diagram diffs visible when block-diagram mode is selected' { if (-not $_pairs) { Set-ItResult -Skipped -Because 'Missing commit data'; return } $env:STUB_COMPARE_DIFF = '0' $pair = $_pairs[0] @@ -959,8 +959,8 @@ exit 0 $aggregate = Get-Content -LiteralPath $suitePath -Raw | ConvertFrom-Json $modeEntry = $aggregate.modes | Where-Object { $_.slug -eq 'block-diagram' } $modeEntry | Should -Not -BeNullOrEmpty + ($modeEntry.flags -contains '-nobd') | Should -BeFalse ($modeEntry.flags -contains '-nobdcosm') | Should -BeFalse - $modeEntry.flags | Should -Contain '-nobd' $modeEntry.flags | Should -Contain '-noattr' $modeEntry.flags | Should -Contain '-nofp' $modeEntry.flags | Should -Contain '-nofppos' @@ -968,8 +968,8 @@ exit 0 Test-Path -LiteralPath $modeEntry.manifestPath | Should -BeTrue $manifest = Get-Content -LiteralPath $modeEntry.manifestPath -Raw | ConvertFrom-Json $manifest.mode | Should -Be 'block-diagram' + ($manifest.flags -contains '-nobd') | Should -BeFalse ($manifest.flags -contains '-nobdcosm') | Should -BeFalse - $manifest.flags | Should -Contain '-nobd' $manifest.flags | Should -Contain '-noattr' $manifest.flags | Should -Contain '-nofp' $manifest.flags | Should -Contain '-nofppos' diff --git a/tools/Compare-VIHistory.ps1 b/tools/Compare-VIHistory.ps1 index f8b154b2a..d669c5caf 100644 --- a/tools/Compare-VIHistory.ps1 +++ b/tools/Compare-VIHistory.ps1 @@ -118,6 +118,7 @@ $modeDefinitions = @{ slug = 'block-diagram' presetFlags = $null adjustments = @{ + ForceNoBd = $false FlagNoBdCosm = $false } } diff --git a/tools/CompareVI.Tools/CompareVI.Tools.psd1 b/tools/CompareVI.Tools/CompareVI.Tools.psd1 index 70220b554..39a3ba310 100644 --- a/tools/CompareVI.Tools/CompareVI.Tools.psd1 +++ b/tools/CompareVI.Tools/CompareVI.Tools.psd1 @@ -1,6 +1,6 @@ @{ RootModule = 'CompareVI.Tools.psm1' - ModuleVersion = '0.6.7' + ModuleVersion = '0.6.9' GUID = '1f9b5f7f-1ab6-4db9-8e36-6b7a6d5e9c8f' Author = 'LabVIEW Community CI' CompanyName = 'LabVIEW Community' diff --git a/tools/Publish-CompareVIToolsArtifact.ps1 b/tools/Publish-CompareVIToolsArtifact.ps1 index 8cfba1556..879109424 100644 --- a/tools/Publish-CompareVIToolsArtifact.ps1 +++ b/tools/Publish-CompareVIToolsArtifact.ps1 @@ -165,6 +165,7 @@ $requiredRelativePaths = @( 'tools/HostRamBudget.psm1', 'tools/Compare-VIHistory.ps1', 'tools/Compare-RefsToTemp.ps1', + 'tools/Get-LabVIEWContainerShellContract.ps1', 'tools/Invoke-LVCompare.ps1', 'tools/Invoke-NILinuxReviewSuite.ps1', 'tools/Invoke-VIHistoryLocalRefinement.ps1', @@ -498,7 +499,8 @@ try { entryScriptPath = 'tools/Run-NILinuxContainerCompare.ps1' supportScriptPaths = @( 'tools/Assert-DockerRuntimeDeterminism.ps1', - 'tools/Compare-ExitCodeClassifier.ps1' + 'tools/Compare-ExitCodeClassifier.ps1', + 'tools/Get-LabVIEWContainerShellContract.ps1' ) captureFileName = 'ni-linux-container-capture.json' defaultImage = $hostedNiLinuxDefaultImage diff --git a/tools/Test-CompareVIHistoryBundleCertification.ps1 b/tools/Test-CompareVIHistoryBundleCertification.ps1 index aba19bca2..1782bfa19 100644 --- a/tools/Test-CompareVIHistoryBundleCertification.ps1 +++ b/tools/Test-CompareVIHistoryBundleCertification.ps1 @@ -495,6 +495,11 @@ $bundleDistributionModel = $null $bundleImportPath = $null $bundleReleaseAssetPattern = $null $bundleContractPathResolutions = @() +$hostedRunnerEntryScriptPath = $null +$hostedRunnerEntryScriptExists = $false +$hostedRunnerSupportScriptPaths = @() +$hostedRunnerSupportScriptsExist = $false +$hostedRunnerMissingSupportScripts = @() if ($bundleMetadataPresent) { $bundleMetadata = Get-Content -LiteralPath $bundleMetadataPath -Raw | ConvertFrom-Json -Depth 12 @@ -540,13 +545,34 @@ if ($bundleMetadataPresent) { $bundleContractPathResolutions = @($pathResolutions.ToArray()) } + $hostedRunnerContract = $bundleMetadata.consumerContract.hostedNiLinuxRunner + if ($null -ne $hostedRunnerContract) { + $hostedRunnerEntryScriptPath = [string]$hostedRunnerContract.entryScriptPath + if (-not [string]::IsNullOrWhiteSpace($hostedRunnerEntryScriptPath)) { + $hostedRunnerEntryScriptExists = Test-Path -LiteralPath (Join-Path $executionRoot $hostedRunnerEntryScriptPath) -PathType Leaf + } + + $hostedRunnerSupportScriptPaths = @( + $hostedRunnerContract.supportScriptPaths | + ForEach-Object { [string]$_ } | + Where-Object { -not [string]::IsNullOrWhiteSpace($_) } + ) + $hostedRunnerMissingSupportScripts = @( + $hostedRunnerSupportScriptPaths | + Where-Object { -not (Test-Path -LiteralPath (Join-Path $executionRoot $_) -PathType Leaf) } + ) + $hostedRunnerSupportScriptsExist = ($hostedRunnerMissingSupportScripts.Count -eq 0) + } + if ($bundleContractRequired) { $bundleContractStatus = if ($bundleMetadataSchemaMatches -and ` $viHistoryCapabilityPresent -and ` $viHistoryCapabilityProducerNative -and ` $bundleContractPinResolved -and ` $bundleImportPathExists -and ` - $bundleContractPathsResolved) { + $bundleContractPathsResolved -and ` + $hostedRunnerEntryScriptExists -and ` + $hostedRunnerSupportScriptsExist) { 'producer-native-ready' } else { 'producer-native-incomplete' @@ -561,7 +587,9 @@ $bundleContractPassed = if ($bundleContractRequired) { $viHistoryCapabilityProducerNative -and ` $bundleContractPinResolved -and ` $bundleImportPathExists -and ` - $bundleContractPathsResolved + $bundleContractPathsResolved -and ` + $hostedRunnerEntryScriptExists -and ` + $hostedRunnerSupportScriptsExist } else { $true } @@ -632,6 +660,12 @@ if (-not $passed) { $unresolvedPaths = @($bundleContractPathResolutions | Where-Object { -not $_.resolved } | ForEach-Object { $_.path }) $failureReasons.Add(("vi-history contract paths did not resolve: {0}" -f ($unresolvedPaths -join ', '))) | Out-Null } + if ($bundleContractRequired -and -not $hostedRunnerEntryScriptExists) { + $failureReasons.Add(("hosted NI Linux runner entry script missing from extracted archive: {0}" -f $hostedRunnerEntryScriptPath)) | Out-Null + } + if ($bundleContractRequired -and -not $hostedRunnerSupportScriptsExist) { + $failureReasons.Add(("hosted NI Linux runner support scripts missing from extracted archive: {0}" -f ($hostedRunnerMissingSupportScripts -join ', '))) | Out-Null + } throw ("Multi-mode history bundle certification failed: {0}" -f ($failureReasons -join '; ')) } @@ -684,6 +718,11 @@ $summaryObject = [ordered]@{ bundleImportPathExists = $bundleImportPathExists releaseAssetPattern = $bundleReleaseAssetPattern contractPathResolutions = $bundleContractPathResolutions + hostedRunnerEntryScriptPath = $hostedRunnerEntryScriptPath + hostedRunnerEntryScriptExists = $hostedRunnerEntryScriptExists + hostedRunnerSupportScriptPaths = @($hostedRunnerSupportScriptPaths) + hostedRunnerSupportScriptsExist = $hostedRunnerSupportScriptsExist + hostedRunnerMissingSupportScripts = @($hostedRunnerMissingSupportScripts) } historyFacade = [ordered]@{ schema = [string]$historySummary.schema @@ -717,6 +756,8 @@ $summaryObject = [ordered]@{ bundleContractPinResolved = $bundleContractPinResolved bundleImportPathExists = $bundleImportPathExists bundleContractPathsResolved = $bundleContractPathsResolved + hostedRunnerEntryScriptExists = $hostedRunnerEntryScriptExists + hostedRunnerSupportScriptsExist = $hostedRunnerSupportScriptsExist passed = $true } } @@ -740,6 +781,8 @@ $summaryLines += ('- Producer-native vi-history capability: `{0}`' -f $bundleCon if ($bundleMetadataPresent) { $summaryLines += ('- Authoritative consumer pin: `{0}` ({1})' -f $bundleAuthoritativeConsumerPin, $bundleAuthoritativeConsumerPinKind) $summaryLines += ('- Distribution role/model: `{0}` / `{1}`' -f $bundleDistributionRole, $bundleDistributionModel) + $summaryLines += ('- Hosted NI Linux runner entry present: `{0}`' -f $hostedRunnerEntryScriptExists.ToString().ToLowerInvariant()) + $summaryLines += ('- Hosted NI Linux support scripts present: `{0}`' -f $hostedRunnerSupportScriptsExist.ToString().ToLowerInvariant()) } $summaryLines += '' $summaryLines += '| Mode | Processed | Diffs | Signal | Collapsed Noise | Stop Reason |'