Skip to content

Commit e3e50a2

Browse files
committed
docs: add governance baseline and tighter public positioning
1 parent 6aaa874 commit e3e50a2

7 files changed

Lines changed: 77 additions & 3 deletions

File tree

.github/ISSUE_TEMPLATE/config.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
blank_issues_enabled: false
2+
contact_links:
3+
- name: Reuse and adoption guidance
4+
url: https://github.com/junjapp/oss-maintainer-workflows/blob/main/README.md
5+
about: Read the README first if you are deciding whether to copy the full scaffold or only keep a lighter subset.
6+
- name: Security reporting path
7+
url: https://github.com/junjapp/oss-maintainer-workflows/blob/main/SECURITY.md
8+
about: Use the security policy for vulnerability reports instead of opening a public issue.

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ All notable changes to this project will be documented in this file.
44

55
## [Unreleased]
66

7+
- Added a lightweight code of conduct and issue-template chooser config so copied repositories get a clearer public governance baseline.
8+
- Tightened the public description so the repository reads as a maintainer operations kit for small public OSS repositories.
79
- Clarified that the validation script describes the source-repository baseline and can be replaced or trimmed by downstream repositories.
810
- Tightened the reuse guidance around release/version alignment and example adoption notes.
911
- Clarified the maintainer-layer problem this repository is meant to solve for small public OSS projects.

CODE_OF_CONDUCT.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Code of Conduct
2+
3+
This repository aims to keep maintainer-facing work public, respectful, and workable for contributors and maintainers.
4+
5+
## Expected behavior
6+
7+
- Assume good intent, then be specific about what is unclear or broken.
8+
- Prefer narrow, actionable feedback over pile-on commentary.
9+
- Keep issue and pull request discussion tied to repository behavior, docs, templates, or release workflow.
10+
- Respect different levels of OSS experience and explain context when a workflow is not obvious yet.
11+
12+
## Unacceptable behavior
13+
14+
- Harassment, abuse, threats, or personal attacks
15+
- Repeatedly derailing issue or pull request threads
16+
- Sharing private or sensitive information without permission
17+
- Demanding unpaid work or treating maintainers like a support queue
18+
19+
## Enforcement
20+
21+
If a thread stops being workable, repository maintainers may edit, lock, hide, or close the conversation, and may limit future participation when needed.
22+
23+
For conduct concerns, use the maintainer or security contact path listed in this repository instead of escalating inside a public issue thread.
24+
25+
## Attribution
26+
27+
This document is adapted from the Contributor Covenant project and keeps only the parts that fit this repository's smaller public maintainer workflow.

README.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# oss-maintainer-workflows
22

3-
A reusable workflow kit for open-source maintainers.
3+
Reusable maintainer operations kit for small public OSS repositories.
44

55
## What this repository is for
66

@@ -14,6 +14,14 @@ This repository gives OSS maintainers a small, reusable starting point for day-t
1414

1515
It is intentionally not an app starter. It is a repository operations starter.
1616

17+
## What this repository is not trying to do
18+
19+
- It is not a universal community playbook for every OSS project shape.
20+
- It is not a replacement for project-specific product docs or contributor onboarding.
21+
- It is not the right fit if your repository only needs one or two local templates and nothing else.
22+
23+
If your project only needs a lighter setup, copy the smallest useful pieces instead of keeping the whole scaffold.
24+
1725
## Why this layer matters
1826

1927
Small OSS projects often rebuild the same maintainer-facing surface from scratch:
@@ -41,11 +49,13 @@ This repository exists to keep that layer reusable, inspectable, and easy to ada
4149

4250
- root documentation:
4351
- `README.md`
52+
- `CODE_OF_CONDUCT.md`
4453
- `CONTRIBUTING.md`
4554
- `SECURITY.md`
4655
- `CHANGELOG.md`
4756
- repository workflow assets:
4857
- `.github/ISSUE_TEMPLATE/*.yml`
58+
- `.github/ISSUE_TEMPLATE/config.yml`
4959
- `.github/pull_request_template.md`
5060
- `.github/CODEOWNERS`
5161
- `.github/workflows/*.yml`
@@ -101,6 +111,7 @@ If you want to see what that first downstream pass can look like, start with `ex
101111
## Common adjustments
102112

103113
- replace the generic project description with the actual repository purpose
114+
- keep only the governance files your repository is willing to maintain in public
104115
- review the issue templates and remove anything your repository will not maintain
105116
- confirm `README.md`, `CODEOWNERS`, `SECURITY.md`, and release notes reflect real maintainers
106117
- align package metadata, changelog sections, and release checks before the next release

package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "oss-maintainer-workflows",
33
"version": "0.1.4",
4-
"description": "A reusable workflow kit for open-source maintainers.",
4+
"description": "Reusable maintainer operations kit for small public OSS repositories.",
55
"type": "module",
66
"private": false,
77
"scripts": {
@@ -15,7 +15,9 @@
1515
"open-source",
1616
"maintainer",
1717
"github-actions",
18-
"workflow-template"
18+
"workflow-template",
19+
"issue-templates",
20+
"repository-governance"
1921
],
2022
"license": "MIT"
2123
}

scripts/validate-repo.mjs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@ export const requiredPaths = [
66
"package-lock.json",
77
"README.md",
88
"LICENSE",
9+
"CODE_OF_CONDUCT.md",
910
"CONTRIBUTING.md",
1011
"SECURITY.md",
1112
"CHANGELOG.md",
1213
".github/CODEOWNERS",
1314
".github/release.yml",
1415
".github/pull_request_template.md",
16+
".github/ISSUE_TEMPLATE/config.yml",
1517
".github/ISSUE_TEMPLATE/bug-report.yml",
1618
".github/ISSUE_TEMPLATE/docs-request.yml",
1719
".github/ISSUE_TEMPLATE/workflow-improvement.yml",

tests/public-surface.test.mjs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ import { spawnSync } from "node:child_process";
66

77
const publicFiles = [
88
"README.md",
9+
"CODE_OF_CONDUCT.md",
910
"CONTRIBUTING.md",
1011
"docs/maintenance-cadence.md",
1112
"docs/project-roadmap.md",
1213
"docs/release-playbook.md",
14+
".github/ISSUE_TEMPLATE/config.yml",
1315
".github/workflows/validate.yml",
1416
".github/workflows/release-check.yml",
1517
".github/release.yml",
@@ -104,20 +106,36 @@ test("public docs describe a concrete adoption and release path", async () => {
104106
const packageJson = JSON.parse(
105107
await fs.readFile(path.join(repoRoot, "package.json"), "utf8"),
106108
);
109+
const codeOfConduct = await fs.readFile(
110+
path.join(repoRoot, "CODE_OF_CONDUCT.md"),
111+
"utf8",
112+
);
113+
const issueTemplateConfig = await fs.readFile(
114+
path.join(repoRoot, ".github", "ISSUE_TEMPLATE", "config.yml"),
115+
"utf8",
116+
);
107117

108118
assert.match(readme, /Minimal rollout path/);
109119
assert.match(readme, /Replace before reuse/);
110120
assert.match(readme, /Validation baseline/);
111121
assert.match(readme, /What tends to belong here/);
122+
assert.match(readme, /What this repository is not trying to do/);
123+
assert.match(readme, /If your project only needs a lighter setup/);
112124
assert.doesNotMatch(readme, /README\.zh-CN\.md/);
113125
assert.match(readme, /README\.md`?, `?CODEOWNERS`?, and `?SECURITY\.md/);
114126
assert.match(readme, /This repository keeps active maintainer values for its own public operation/);
115127
assert.match(readme, /maintainer-workflows\.paths\.json/);
116128
assert.match(readme, /first downstream pass can look like/);
129+
assert.match(readme, /CODE_OF_CONDUCT\.md/);
130+
assert.match(readme, /\.github\/ISSUE_TEMPLATE\/config\.yml/);
117131
assert.match(codeowners, /Replace this entry before reusing the scaffold/);
118132
assert.match(codeowners, /This repository keeps an active owner entry because it is the live source repository/);
119133
assert.match(security, /Replace the contact path before you reuse this scaffold/);
120134
assert.match(security, /contact the active maintainer directly for this repository/);
135+
assert.match(codeOfConduct, /Contributor Covenant/);
136+
assert.match(codeOfConduct, /public, respectful, and workable/);
137+
assert.match(issueTemplateConfig, /blank_issues_enabled: false/);
138+
assert.match(issueTemplateConfig, /contact_links:/);
121139
assert.match(releasePlaybook, /Versioning notes/);
122140
assert.match(releasePlaybook, /Release note/);
123141
assert.match(releasePlaybook, /Pre-tag command sequence/);
@@ -140,4 +158,8 @@ test("public docs describe a concrete adoption and release path", async () => {
140158
assert.match(roadmap, /copy and cleanup cycle/);
141159
assert.match(roadmap, /real downstream first pass/);
142160
assert.equal(packageJson.version, "0.1.4");
161+
assert.equal(
162+
packageJson.description,
163+
"Reusable maintainer operations kit for small public OSS repositories.",
164+
);
143165
});

0 commit comments

Comments
 (0)