CI: Install the built module from a local repository to verify install-time dependency behaviour
Nessuno ha ancora preso questa issue.
- Lingua principale
- PowerShell
- Stelle
- 145
- Fork
- 27
- Merge medio
- 10h 16m
- PR unite (30g)
- 34
Descrizione
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.
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia con scratchpad/local-repo-test/Invoke-LocalRepoProbe.ps1, quindi esamina il workflow locale al repository insieme alla chiamata condivisa a ModuleCI.yml. Verifica il comportamento isolato di Save-Module e dell’importazione su PowerShell 7 e Windows PowerShell 5.1, incluse le versioni delle dipendenze e il controllo negativo. Il lavoro è completato quando CI viene eseguito con successo su entrambe le edizioni e fallisce per una dipendenza non soddisfacibile.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- powershell
- Ambito
- ci-cd, testing-qa
- Tipo di issue
- Funzionalità
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Attiva
- Chiarezza
- Specificata chiaramente
- Idoneità per principianti
- 68/100