Skip to content

Commit 70ea0ab

Browse files
authored
chore: document master/dev/next branch model + wire CI triggers (#709)
1 parent 38cc080 commit 70ea0ab

5 files changed

Lines changed: 48 additions & 10 deletions

File tree

.github/workflows/changeset-reminder.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ name: Changeset reminder
1010
# comments — no untrusted PR code is ever checked out or executed.
1111
on:
1212
pull_request_target:
13-
branches: [master]
13+
branches: [master, dev, next]
1414
types: [opened, synchronize, reopened]
1515

1616
permissions:
@@ -24,7 +24,7 @@ jobs:
2424
remind:
2525
runs-on: ubuntu-latest
2626
steps:
27-
- uses: actions/checkout@v6 # base branch (master) — trusted, NOT the PR head
27+
- uses: actions/checkout@v6 # PR base branch (master/dev/next) — trusted, NOT the PR head
2828
- name: Changeset reminder
2929
env:
3030
GH_TOKEN: ${{ github.token }}

.github/workflows/pr-checks.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ name: PR Checks
22

33
on:
44
pull_request:
5-
branches: [master]
5+
branches: [master, dev, next]
66
push:
7-
branches: [master]
7+
branches: [master, dev, next]
88

99
permissions:
1010
contents: read

.github/workflows/release.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ name: Release
22

33
on:
44
push:
5+
# master is the sole release branch. Under the master/dev/next model,
6+
# `dev` (features/minor) and `next` (breaking/major) accumulate work and
7+
# merge INTO master at each minor/major cut — the merge is what triggers
8+
# publishing. Do NOT add dev/next here; they must not publish directly.
59
branches:
610
- master
711

CLAUDE.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ pnpm changeset # Author a changeset for your PR (run per change)
9494
pnpm release:prepare # Pre-release validation (validate + build)
9595
# Publishing is automated: pushing to master opens a "Version Packages" PR;
9696
# merging it builds, publishes to npm via OIDC, and creates the GitHub releases.
97+
# Base branch by change type: fix/patch → master, feat/minor → dev, breaking/major → next.
9798
# Currently in PRE mode (beta dist-tag) — see "Releasing" below before cutting stable.
9899

99100
# Repo health
@@ -104,6 +105,21 @@ pnpm repo:check # knip + sherif
104105

105106
Changesets-driven. Pushing to `master` opens/updates a "Version Packages" PR; merging it publishes to npm (tokenless OIDC) and mints the GitHub releases (`.github/workflows/release.yml`).
106107

108+
### Branch model — where a PR goes by change type
109+
110+
Three long-lived branches; a PR's base is chosen by the semver impact of the change, not by its commit-type label alone:
111+
112+
| Base | Change type | Semver | Examples |
113+
|------|-------------|--------|----------|
114+
| `master` | fixes, docs, chore, refactor, tests | patch / none | `fix(...)`, `docs(...)`, `test(...)`, and any app/tooling change that ships no package version |
115+
| `dev` | new features that add public API | minor | `feat(...)` that adds a component, composable, prop, or option |
116+
| `next` | breaking changes | major | anything with a `BREAKING CHANGE:` footer |
117+
118+
- **Only `master` publishes.** `dev` and `next` accumulate work and merge **into `master`** at the next minor / major cut — that merge is what triggers the changesets release. Never publish from `dev`/`next` directly.
119+
- **`feat`/`fix` are still reserved for `packages/*` source.** A `feat(docs)` / `feat(playground)` / app-only change ships no package version, so it targets `master` (patch train) regardless of the `feat` label — prefer `docs`/`chore` for those.
120+
- **Design systems** (`@paper/*`) version independently; a DS feature still targets `dev` (it's a minor bump for that package).
121+
- CI (`pr-checks.yml`) and the changeset reminder (`changeset-reminder.yml`) run on PRs into all three branches; `release.yml` triggers on `master` pushes only.
122+
107123
### Changeset content contract
108124

109125
The `.changeset/*.md` body renders verbatim into the changelog and GitHub release notes — it is release-note copy, not a commit message. Don't budget by character count; budget by what belongs:

apps/docs/src/pages/introduction/contributing.md

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,25 @@ pnpm build # Build packages
114114

115115
## Pull Requests
116116

117+
### Branch Model
118+
119+
`@vuetify/v0` uses three long-lived branches. Open your PR against the base that matches the **semver impact** of your change:
120+
121+
| Base | Use it for | Release |
122+
|------|-----------|---------|
123+
| `master` | Bug fixes, docs, chores, refactors, tests | Patch (or no version bump) |
124+
| `dev` | New features that add public API (a component, composable, prop, or option) | Minor |
125+
| `next` | Breaking changes (anything with a `BREAKING CHANGE:` footer) | Major |
126+
127+
Only `master` publishes to npm. Work on `dev` and `next` merges into `master` at the next minor or major release, and that merge is what ships it. If you're unsure which base fits, open against `master` — a maintainer will retarget it.
128+
129+
::: tip
130+
A `feat` that only touches the docs site, playground, or other tooling (not `packages/*` source) ships no package version, so it targets `master` — prefer a `docs`/`chore` prefix for those.
131+
:::
132+
117133
### Before Submitting
118134

119-
1. Create a new branch from `master`
135+
1. Create a new branch from the right base for your change (see [Branch Model](#branch-model)): `master` for fixes, `dev` for features, `next` for breaking changes
120136
2. Make your changes
121137
3. Write tests for new functionality
122138
4. Run `pnpm lint:fix` to fix formatting
@@ -166,12 +182,14 @@ Never edit `package.json` versions by hand — release automation owns every bum
166182

167183
### Branch Naming
168184

169-
Use descriptive branch names:
185+
Use descriptive branch names; the prefix should match the base branch you target (see [Branch Model](#branch-model)):
186+
187+
- `fix/issue-description` - Bug fixes → base `master`
188+
- `feat/feature-name` - New features → base `dev`
189+
- `docs/what-changed` - Documentation updates → base `master`
190+
- `refactor/what-changed` - Code refactoring → base `master`
170191

171-
- `fix/issue-description` - Bug fixes
172-
- `feat/feature-name` - New features
173-
- `docs/what-changed` - Documentation updates
174-
- `refactor/what-changed` - Code refactoring
192+
Breaking changes target `next` regardless of prefix.
175193

176194
## Commit Messages
177195

0 commit comments

Comments
 (0)