Welcome — and thank you for considering a contribution. PowerShellOrg maintains PowerShell open-source tools that depend on community involvement to survive. Every bug report, doc fix, and pull request matters.
This document covers org-wide expectations. Individual repos may add
project-specific guidance in their own README.md or CONTRIBUTING.md; where
they conflict with this document, the repo-level doc takes precedence.
PowerShellOrg focuses on PowerShell tooling. Before proposing a large feature or a significant design change, read GOVERNANCE.md to understand how decisions get made. For substantial proposals, open an issue first so we can align before you invest time writing code.
- Check existing issues and PRs. Someone may already be working on it.
- Read the repo's README. Each project documents its purpose, status, and any project-specific constraints.
- Agree to the license terms. By submitting a contribution you agree that your work is licensed under the repo's license (MIT unless noted otherwise). See License by contribution below.
All PowerShellOrg projects use the same build stack:
| Tool | Purpose |
|---|---|
| psake | Build automation |
| PowerShellBuild | Shared psake task library |
| Pester 5 | Testing |
| PSScriptAnalyzer | Static analysis |
Install build dependencies:
Install-Module psake -Scope CurrentUser -Force
Install-Module PowerShellBuild -Scope CurrentUser -Force
Install-Module Pester -Scope CurrentUser -Force -MinimumVersion '5.0'
Install-Module PSScriptAnalyzer -Scope CurrentUser -ForceCommon psake tasks (every repo exposes these):
Invoke-psake Init # First-time setup
Invoke-psake Clean # Remove build artifacts
Invoke-psake Build # Compile / stage the module
Invoke-psake Test # Run Pester tests
Invoke-psake Analyze # Run PSScriptAnalyzer
Invoke-psake Publish # Publish to PSGallery (CI only — never run manually)Run Invoke-psake ? to see all available tasks and their descriptions.
Target platforms: Windows PowerShell 5.1 and PowerShell 7.x on Windows, Linux, and macOS. Write code that runs on all six combinations.
- Fork the repo and work on a branch named for the thing you're changing:
fix/null-ref-in-invoke,feat/add-verbose-output,docs/update-readme. - Keep commits focused. One logical change per commit. Use the Conventional
Commits style:
fix: correct null reference in Invoke-PSDependfeat: add -WhatIf support to Install taskdocs: clarify quickstart examplechore: bump Pester to 5.6test: add coverage for empty dependency file
- Do not squash history prematurely. Maintainers may squash on merge if appropriate.
- Keep
maingreen. Never force-push tomainor shared branches.
Before opening a PR:
-
Invoke-psake Testpasses locally on at least one platform -
Invoke-psake Analyzepasses with no new warnings - New behavior has Pester test coverage
-
CHANGELOG.mdis updated for user-facing changes - Docs are updated if behavior changed
Fill out the PR template completely. PRs with empty templates or no linked issue for non-trivial changes will be asked to complete the template before review starts.
Draft PRs are welcome for early feedback. Mark them ready for review when you want the full review pass.
- Respond to review comments within 14 days. If you need more time, say so — we will wait.
- If a comment is a question, answer it. If it is a request, either make the change or explain why you disagree.
- A maintainer will make the final call. Disagreements are discussed, not escalated.
| Repo status | First response SLA | Review completion SLA |
|---|---|---|
status-active |
7 days | 30 days |
status-stable |
30 days | 60 days |
status-paused |
Suspended; security issues only, best-effort | — |
SLAs are best-effort commitments, not guarantees. If a repo is understaffed, the project's Steward will note this in the repo's README.
If a PR sits without response past the SLA, open a discussion on the relevant repository.
Releases are cut by maintainers. The process:
- Maintainer updates
CHANGELOG.mdand bumps the module version in the manifest. - Maintainer opens a PR titled
chore: release vX.Y.Z. - PR is reviewed and merged to
main. - Maintainer pushes a version tag (
vX.Y.Z) tomain. - The tag triggers
powershell-release.yml, which builds, publishes to PSGallery, and creates a GitHub Release.
Contributors do not cut releases. If you believe a release is overdue, open an issue and tag the maintainers.
By submitting a pull request or other contribution, you agree that your contribution is made under the same license as the project you are contributing to (MIT unless the repo states otherwise). You represent that you have the right to make the contribution under those terms.
If your employer has rights to code you write, ensure you have permission to contribute it before submitting.
See SUPPORT.md.