CI: Install the built module from a local repository to verify install-time dependency behaviour
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- PowerShell
- Estrellas
- 145
- Forks
- 27
- Merge medio
- 10 h 16 min
- PR fusionados (30 d)
- 34
Descripción
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.
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza con scratchpad/local-repo-test/Invoke-LocalRepoProbe.ps1 y, a continuación, inspecciona el flujo de trabajo local del repositorio junto con la llamada compartida a ModuleCI.yml. Verifica el comportamiento aislado de Save-Module y de la importación en PowerShell 7 y Windows PowerShell 5.1, incluidas las versiones de las dependencias y el control negativo. Se considera terminado cuando CI se ejecuta correctamente en ambas ediciones y falla ante una dependencia no satisfacible.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- powershell
- Área
- ci-cd, testing-qa
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Activo
- Claridad
- Bien especificado
- Aptitud para principiantes
- 68/100