@@ -355,49 +355,79 @@ The workflow inspects this structure to decide what to compile, document, and pu
355355
356356# # Phase details
357357
358- # ## Discover and Plan
358+ # ## Get settings
359359
360+ The Get-Settings job initializes the workflow by reading and processing configuration settings, determining the module name, and establishing
361+ the test execution matrix. This phase ensures all downstream jobs operate with consistent, repository-specific parameters.
360362
363+ **What it does:**
361364
362- # ## Build Module
365+ 1. Gets settings from the `.github/PSModule.yml` (or equivalent JSON/PSD1 file).
366+ 2. Determines the module name, defaulting to the repository name.
367+ 3. Constructs test suites for PSModule framework tests, and module tests, filtering by operating system (Linux, macOS, Windows),
368+ depending on settings.
369+ 4. Outputs the processed settings as JSON for consumption by subsequent jobs, enabling dynamic workflow behavior.
363370
364- Compiles each module by invoking [`PSModule/Build-PSModule`](https://github.com/PSModule/Build-PSModule). Supports
365- script modules and manifest modules. Targets PowerShell 7.4+ .
371+ This phase provides the foundation for conditional job execution, ensuring that builds, tests, and publishing align with repository-specific
372+ requirements and event contexts .
366373
367- **Pipeline steps:**
374+ # ## Repository Linter
368375
369- 1. Discovers module name (fallback : repository name) and stages `outputs/module/<ModuleName>`.
370- 2. Executes repository `*build.ps1` scripts alphabetically for preprocessing.
371- 3. Copies `src/` into staging, skipping any existing root module.
372- 4. Rebuilds module manifest from staged content plus repository metadata.
373- 5. Composes root module `.psm1` from staged scripts, classes, variables, and support files.
374- 6. Uploads `module` artifact and exposes `ModuleOutputFolderPath` for downstream jobs.
376+ Runs [super-linter](https://github.com/super-linter/super-linter) to enforce code quality and style guidelines.
377+ - Honors `.github/linters/` configurations for Markdown, PowerShell, and text linting.
378+ - Configurable settings via the `Linter.env` key in the `.github/PSModule.yml` file.
375379
376- **Root module composition:**
380+ # ## Build Module
377381
378- 1. Adds `header.ps1` (when present) to the top of `<ModuleName>.psm1`.
379- 2. Injects a data loader so resources in `data/` become `$script:`-scoped variables.
380- 3. Appends content from `init`, `classes/private`, `classes/public`, `functions/private`, `functions/public`,
381- ` variables/private` , `variables/public`, and root-level `*.ps1` files in alphabetical order.
382- 4. Registers public classes and enums using type accelerators.
383- 5. Emits trailing `Export-ModuleMember` statement exporting only members from `public` folders.
382+ Compiles each module by invoking [`PSModule/Build-PSModule`](https://github.com/PSModule/Build-PSModule).
383+ Supports script modules and manifest modules. Targets PowerShell 7.4+.
384+
385+ **Pipeline steps:**
386+
387+ 1. Executes `*build.ps1` scripts alphabetically for preprocessing in `src/`.
388+ 2. Copies `src/` into staging, skipping any existing root module.
389+ 3. Builds the module manifest from data in `src/`.
390+ 1. Uses the partial `src/manifest.psd1` if provided; otherwise creates new manifest.
391+ 2. Sets baseline metadata : ` RootModule` , `ModuleVersion`, `Author`, `CompanyName`, `Description`.
392+ 3. Populates `FileList`, `ModuleList`, `RequiredAssemblies`, `NestedModules`, `ScriptsToProcess`, `TypesToProcess`,
393+ ` FormatsToProcess` , `DscResourcesToExport`, and export lists.
394+ 4. Gathers `#requires` statements to update `RequiredModules`, `PowerShellVersion`, `CompatiblePSEditions`.
395+ 5. Derives `Tags`, `LicenseUri`, `ProjectUri`, `IconUri` from repository data.
396+ 6. Preserves optional fields (`HelpInfoURI`, `ExternalModuleDependencies`, custom `PrivateData`).
397+ 4. Composes root module `.psm1` from scripts, classes, variables, and support files.
398+ 1. Adds `header.ps1` (when present) to the top of `<ModuleName>.psm1`.
399+ 2. Injects a data loader so resources in `data/` become `$script:`-scoped variables.
400+ 3. Appends content from `init`, `classes/private`, `classes/public`, `functions/private`, `functions/public`,
401+ ` variables/private` , `variables/public`, and root-level `*.ps1` files in alphabetical order.
402+ 4. Registers public classes and enums using type accelerators.
403+ 5. Emits trailing `Export-ModuleMember` statement exporting only members from `public` folders.
404+ 5. Uploads `module` artifact and exposes `ModuleOutputFolderPath` for downstream jobs.
384405
385406**Module manifest enrichment:**
386407
387- - Reuses `manifest.psd1` when provided; otherwise creates new manifest.
388- - Sets baseline metadata : ` RootModule` , `ModuleVersion`, `Author`, `CompanyName`, `Description`.
389- - Populates `FileList`, `ModuleList`, `RequiredAssemblies`, `NestedModules`, `ScriptsToProcess`, `TypesToProcess`,
390- ` FormatsToProcess` , `DscResourcesToExport`, and export lists from staged file system.
391- - Gathers `#requires` statements to update `RequiredModules`, `PowerShellVersion`, `CompatiblePSEditions`.
392- - Derives `Tags`, `LicenseUri`, `ProjectUri`, `IconUri` from repository data when absent.
393- - Preserves optional fields (`HelpInfoURI`, `ExternalModuleDependencies`, custom `PrivateData`).
394408
395409**References:**
396410
397411- [about_Module_Manifests](https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_module_manifests)
398412- [How to write a PowerShell module manifest](https://learn.microsoft.com/powershell/scripting/developer/module/how-to-write-a-powershell-module-manifest)
399413- [PowerShellGallery publishing guidelines](https://learn.microsoft.com/powershell/gallery/concepts/publishing-guidelines)
400414
415+ # ## Build Documentation
416+
417+ Generates module documentation by invoking [`PSModule/Document-PSModule`](https://github.com/PSModule/Document-PSModule).
418+
419+ - Produces Markdown-based help files from the built module using
420+ [Microsoft.PowerShell.PlatyPS](https://github.com/PowerShell/platyPS).
421+ - Integrates conceptual documentation from `src/functions/public/` subfolders.
422+
423+ # ## Build Site
424+
425+ Creates a documentation website using [MkDocs](https://www.mkdocs.org/) and the
426+ [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/) theme.
427+
428+ - Consumes `docs/` for custom pages and `.github/mkdocs.yml` for site configuration.
429+ - Automatically generates navigation based on `src/functions/public/` structure.
430+
401431# ## Test Module
402432
403433Validates staged module by invoking [`PSModule/Test-PSModule`](https://github.com/PSModule/Test-PSModule). Executes
@@ -453,12 +483,3 @@ through [`PSModule/Publish-PSModule`](https://github.com/PSModule/Publish-PSModu
453483- Cleans up previous prereleases for the same branch when `Publish.Module.AutoCleanup` is `true` (default).
454484- On merge to default branch, promotes staged module, creates GitHub release with `VersionPrefix`, removes temporary
455485 prereleases.
456-
457- # # Contributing
458-
459- Contributions are welcome. Open an issue or pull request to discuss changes.
460-
461- # # License
462-
463- This project is licensed under the MIT License. See [LICENSE](LICENSE) for details.
464-
0 commit comments