Skip to content

Commit 0cbd1ac

Browse files
HeyItsGilbertclaude
andcommitted
docs: update PSGallery key ownership and publishing policy
- Keys are minted by the Org Admin or a Council member (not Org Admin exclusively); updated in maintainer-onboarding and revival-playbook - Maintainers no longer share a PSGallery username for key issuance; replaced with a note that publishing is CI-only and they do not run Invoke-psake Publish locally - Maintainer rotation responsibility changed from "you may be asked to trigger it" to "notify Org Admin or Council if the key appears expired" - CONTRIBUTING.md: Publish task comment updated to CI-only warning Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 899816e commit 0cbd1ac

3 files changed

Lines changed: 29 additions & 25 deletions

File tree

.github/CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ Invoke-psake Clean # Remove build artifacts
5858
Invoke-psake Build # Compile / stage the module
5959
Invoke-psake Test # Run Pester tests
6060
Invoke-psake Analyze # Run PSScriptAnalyzer
61-
Invoke-psake Publish # Publish to PSGallery (maintainers only)
61+
Invoke-psake Publish # Publish to PSGallery (CI only — never run manually)
6262
```
6363

6464
Run `Invoke-psake ?` to see all available tasks and their descriptions.

docs/maintainer-onboarding.md

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,10 @@ to be fully operational on day one and productive in the first week.
2727
### PSGallery account
2828

2929
- [ ] Confirm you have a [PowerShell Gallery] account
30-
- [ ] Share your PSGallery username with the Org Admin — you will need it for
31-
the API key issuance step below
30+
31+
Note: you do not need personal PSGallery publishing credentials. All releases go
32+
through GitHub Actions CI using a scoped API key stored in the repo's Actions
33+
secrets. You never run `Invoke-psake Publish` locally.
3234

3335
---
3436

@@ -68,40 +70,42 @@ anything.
6870
PowerShellOrg uses **per-repo scoped API keys** for PSGallery. You do not get an
6971
org-wide key.
7072

71-
### Key issuance process (Org Admin action)
73+
### Key issuance process (Org Admin or Council action)
7274

73-
The Org Admin creates the key with these parameters:
75+
The Org Admin or a Council member creates the key with these parameters:
7476

75-
| Parameter | Value |
76-
| ------------ | ----------------------------------------------------------------------------- |
77+
| Parameter | Value |
78+
| ------------ | ------------------------------------------------------------------------------ |
7779
| Key name | `PowerShellOrg-<RepoName>-<YYYY-MM>` (e.g., `PowerShellOrg-PSDepend-2025-11`) |
78-
| Glob pattern | The module name exactly (e.g., `PSDepend`) |
79-
| Expiration | 365 days (the PSGallery maximum) |
80+
| Glob pattern | The module name exactly (e.g., `PSDepend`) |
81+
| Expiration | 365 days (the PSGallery maximum) |
8082

81-
The Org Admin then:
83+
They then:
8284

83-
1. Creates or updates the `PSGALLERY_API_KEY` Actions secret in the repo
84-
2. Adds a rotation reminder to the private key tracking issue (pinned to this
85-
repo)
86-
3. Notifies the maintainer that the key is in place
85+
1. Set the `PSGALLERY_API_KEY` Actions secret in the repo
86+
2. Add a rotation reminder to the Org Admin's private tracking issue
87+
3. Notify the maintainer that the key is in place
8788

8889
### Maintainer steps
8990

90-
- [ ] Confirm with the Org Admin that `PSGALLERY_API_KEY` is set in the repo's
91-
Actions secrets (**Settings****Secrets and variables****Actions**)
92-
- [ ] Note the key expiration month — the Org Admin will initiate rotation, but
93-
you may be asked to trigger it
91+
- [ ] Confirm that `PSGALLERY_API_KEY` is set in the repo's Actions secrets
92+
(**Settings****Secrets and variables****Actions**)
93+
- [ ] Run a test release (pre-release tag) to verify the workflow succeeds
94+
end-to-end
95+
96+
If the release workflow ever fails with an authentication error, the key may
97+
have expired — notify the Org Admin or Council; do not attempt to create or
98+
rotate the key yourself.
9499

95100
### Key rotation
96101

97102
Keys expire after 365 days. The Org Admin tracks rotation in a private pinned
98-
issue. When rotation is due:
103+
issue. When rotation is due, the Org Admin or a Council member:
99104

100-
1. Org Admin creates a new key on PSGallery with the same glob, new `YYYY-MM`
101-
suffix in the name
102-
2. Org Admin updates the `PSGALLERY_API_KEY` secret in the repo
103-
3. Old key is deleted from PSGallery
104-
4. Tracking issue is updated
105+
1. Creates a new key on PSGallery with the same glob, new `YYYY-MM` suffix
106+
2. Updates the `PSGALLERY_API_KEY` secret in the repo
107+
3. Deletes the old key from PSGallery
108+
4. Updates the tracking issue
105109

106110
---
107111

docs/revival-playbook.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ PSGallery setup; everything else is Steward-driven.
3030

3131
- [ ] PSGallery package ownership transferred to the PowerShellOrg PSGallery
3232
account (or new package created if publishing fresh)
33-
- [ ] Scoped API key created by the Org Admin:
33+
- [ ] Scoped API key created by the Org Admin or a Council member:
3434
`PowerShellOrg-<RepoName>-<YYYY-MM>`, glob = module name, 365-day expiry
3535
- [ ] `PSGALLERY_API_KEY` Actions secret set in the repo
3636
- [ ] Rotation reminder added to the Org Admin's private tracking issue

0 commit comments

Comments
 (0)