CI: Install the built module from a local repository to verify install-time dependency behaviour
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 68/100
- Issue 类型
- 功能
- 描述清晰度
- 描述清楚
- 活跃度
- 活跃
- 技术栈
- powershell
- 领域
- ci-cd, testing-qa
调研方向
从 scratchpad/local-repo-test/Invoke-LocalRepoProbe.ps1 开始,然后检查仓库本地工作流以及对共享 ModuleCI.yml 的调用。验证 PowerShell 7 和 Windows PowerShell 5.1 上隔离的 Save-Module 和导入行为,包括依赖项版本和负对照。完成的标准是 CI 在两个版本上都运行并通过,并且对于无法满足的依赖项会失败。
由索引模型根据 Issue 内容生成。
描述
CI builds this module on every push and has never once installed it. The v1.0.0 roadmap (#120) records why that matters: several breaks this cycle are install-time — RequiredModules now demands psake 5.0.4 and Pester 6.0.0, and PlatyPS was removed from it — and none of them can be observed from a build. Until now the plan covered that gap with a 1.0.0-rc1 gallery prerelease and a seven-day soak. That prerelease has been dropped (decision recorded on #120, 2026-09-04), and this test is the safeguard that replaces it.
What the test does
Publish the built module into a temporary file-share repository alongside mirrored copies of its three dependencies, then in a fresh process whose PSModulePath holds only an empty directory, Save-Module it from that repository and import the result. That exercises, without touching the PowerShell Gallery or the machine's module store:
- every
RequiredModulesentry is declared correctly and resolves - the generated nuspec's
<dependencies>match the manifest — verified today to be exactly BuildHelpers 2.0.16, Pester 6.0.0, psake 5.0.4, with no PlatyPS - the saved module imports its required modules from the isolated path and exports its commands
- on both PowerShell 7 and Windows PowerShell 5.1
Prototyped and measured, 2026-09-04
Both editions: Save-Module succeeded, all three dependencies resolved at the declared versions, the module imported and exported 12 functions plus the PowerShellBuild.IB.Tasks alias. The negative control — manifest edited to require psake 99.0.0 — failed on both editions with ProviderFailToDownloadFile and nothing on disk, so the test can fail.
Two traps the prototype hit that the implementation must avoid:
Save-Modulerestores the defaultPSModulePathwhen it returns. The first attempt imported the machine's installed 0.8.2 and loaded Pester 6.1.0 instead of the saved 6.0.0. Re-assert the isolated path afterSave-Moduleand import by explicit manifest path.- Everything is already installed on a developer machine. Without the empty-
PSModulePathisolation the test is vacuous.
On Windows PowerShell 5.1, stage PowerShellGet 2.2.5 from the WindowsPowerShell module path; the PowerShell 7 copy's PackageManagement ships coreclr binaries only and fails to load there.
The re-runnable prototype, including the negative control, is at scratchpad/local-repo-test/Invoke-LocalRepoProbe.ps1 on the maintainer's machine and should be the starting point.
What it does not cover, deliberately
A local repository is a snapshot: it does not resolve against the live dependency graph (newest-satisfying Pester 6.x rather than the 6.0.0 floor), transitive dependency drift, gallery ingestion, or real network transport on 5.1. Also note that with PowerShellGet 2.x a file-share repository gets prerelease gating wrong — Find-Module without -AllowPrerelease returns a prerelease — so this test must not be used to verify prerelease behaviour; PSResourceGet against the same folder gates correctly.
One thing worth recording because it changed the release decision: Publish-Module itself refuses to publish a package whose RequiredModules cannot be resolved on the destination repository (UnableToResolveModuleDependency), and the same code path runs against PSGallery. A 1.0.0 with an unsatisfiable dependency fails at publish rather than reaching consumers.
Options
- A repository-local workflow that runs on every push, alongside the shared
ModuleCI.ymlcall. Simplest; covers this repository only. - Add it to the shared
psake/.githubworkflow as an opt-in step. More work; benefits psake too. - Run it as a documented pre-flight step on #160 only. Cheapest, but the coverage is lost the day after the release.
Option 1 is the straightforward first step and can be promoted to 2 later.
Done when
The test runs in CI on both editions, passes against main, and has been shown to fail against a manifest with an unsatisfiable dependency.
- 主要语言
- PowerShell
- 星标
- 145
- 派生
- 27
- 平均合并
- 10 小时 16 分钟
- 30 天内合并 PR
- 34
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
psake/PowerShellBuild 的其他 Issue
-
bug
难度 2/5 1-3 小时 新手友好度 72/100
psake/PowerShellBuild#218 · 1 条评论 ·
-
bug
难度 2/5 1-3 小时 新手友好度 74/100
psake/PowerShellBuild#211 · 1 条评论 ·
-
bug
难度 3/5 1-2 天 新手友好度 55/100
psake/PowerShellBuild#222 ·
-
bug
难度 4/5 3-5 天 新手友好度 68/100
psake/PowerShellBuild#221 ·
-
bug
难度 3/5 1-2 天 新手友好度 55/100
psake/PowerShellBuild#220 ·
查看 psake/PowerShellBuild 的全部 Issue
相似的 Issue
-
kind/bug Ubuntu 24
难度 2/5 1-3 小时 新手友好度 72/100
kubernetes-sigs/kubespray#13532 ·
-
Needs Design Priority: Wishlist
难度 2/5 1-3 小时 新手友好度 84/100
elementary/flatpak-platform#253 ·
-
tagbot-manual
难度 2/5 1-3 小时 新手友好度 68/100
-
难度 2/5 1-3 小时 新手友好度 62/100
-
难度 2/5 1-3 小时 新手友好度 70/100