Skip to content

Commit 2eb8a8e

Browse files
jaracoclaude
andcommitted
Add Contributing guidance for skeleton-based projects and the skeleton itself
Add a Contributing section to the overview covering the tox-driven development loop, release notes, and releasing, and a separate skeleton-contrib document for the constraints specific to contributing to the skeleton itself (squash merges, repo-absolute references). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent d023337 commit 2eb8a8e

2 files changed

Lines changed: 68 additions & 0 deletions

File tree

index.md

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,56 @@ See [design](design.md) and [challenges](challenges.md) for more details.
99
## Alternatives
1010

1111
An alternative to maintaining this boilerplate in a shared repo is not to have the boilerplate at all, a concept implemented by the [Coherent System](/coherent-oss/system).
12+
13+
# Contributing
14+
15+
This section provides guidance on contributing to skeleton-based projects. If contributing to the skeleton itself, see the [separate guidance](skeleton-contrib.md).
16+
17+
## Running Checks
18+
19+
The skeleton relies on [tox](https://pypi.org/project/tox) to drive development tasks. See [design](design.md) for the rationale behind the tools referenced below.
20+
21+
Run all checks (tests, formatting, linting, type checks, and coverage) on the default Python with:
22+
23+
```
24+
tox
25+
```
26+
27+
To run under a specific Python:
28+
29+
```
30+
tox -e py314
31+
```
32+
33+
List the other available environments and what each does with:
34+
35+
```
36+
tox list
37+
```
38+
39+
Build the documentation with:
40+
41+
```
42+
tox -e docs
43+
```
44+
45+
Disable an individual check for a run by passing `-p no:{plugin}` through to pytest. For example, to skip coverage:
46+
47+
```
48+
tox -- -p no:cov
49+
```
50+
51+
The checks only report violations; they never modify your code. Apply formatting and lint fixes with:
52+
53+
```
54+
ruff format .
55+
ruff check --fix .
56+
```
57+
58+
## Adding release notes
59+
60+
Record every user-facing change as a [Towncrier](https://towncrier.readthedocs.io/) news fragment under `newsfragments/`; release notes are assembled from these fragments. Name the file using the issue ID (or pull request ID if no relevant issue) and scope (removal, feature, bugfix). If no issue ID is available, use some unique identifier prefixed by a `+` (i.e. `+1dbf102a.feature.rst`).
61+
62+
## Releasing
63+
64+
When main is stable, cut a release from main using `tox -e finalize`, which will assemble and commit the release notes and tag the commit. Push that commit to release to PyPI using GitHub Actions.

skeleton-contrib.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Contributing to the Skeleton
2+
3+
This guidance applies to changes to the skeleton project *itself*. Because the skeleton's history is merged into each of its downstream consumers, contributions here carry extra constraints.
4+
5+
## Validation
6+
7+
There are no checks or tests. Consider validating any changes with some downstream project first and then porting (or cherry-picking) the commit to skeleton.
8+
9+
## Squash merge pull requests
10+
11+
Always squash merge pull requests. Every commit on the skeleton's main branch is inherited by every downstream project, so collapsing each change to a single commit keeps that shared history as small and legible as possible.
12+
13+
## Use repo-absolute references
14+
15+
Always use repo-absolute references in commit messages and news fragments — for example `jaraco/skeleton#123`, never a bare `#123`. Because these commits are merged into downstream projects, a bare reference would resolve against the wrong repository and notify unrelated issues. See [Commit Integrations Mismatch](challenges.md) for rationale.

0 commit comments

Comments
 (0)