You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Prepare v3.6.0 release notes and publishing doc (#117)
Rename the Unreleased section to v3.6.0 with today's
date and add the matching tag link reference. Rewrite
the publishing how-to to use npm version (per the
Release Process in the Version Control Standard) and
add the GitHub Release step mandated by that standard.
Copy file name to clipboardExpand all lines: RELEASE_NOTES.md
+2-1Lines changed: 2 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,7 +4,7 @@ All notable user-visible changes to MARR are documented here. The format follows
4
4
5
5
This file is the canonical, in-repo history. Each section is mirrored in a corresponding [GitHub Release](https://github.com/virtualian/marr/releases).
6
6
7
-
## Unreleased
7
+
## [v3.6.0] — 2026-05-10
8
8
9
9
### Added
10
10
-`marr update --project` — refresh canonical standards into a previously-installed project. Hash manifest at `.claude/marr/.marr-version.json` distinguishes locally-edited files (prompted) from canonical advancement (silent refresh). Flags: `--check` (drift report, non-zero exit), `--prune` (remove orphans), `--dry-run`, `--force`. `marr init --project` now writes the manifest so first-time installs are tracked. (closes [#111](https://github.com/virtualian/marr/issues/111), partially addresses [#86](https://github.com/virtualian/marr/issues/86))
@@ -108,6 +108,7 @@ First public npm release as `@virtualian/marr`.
108
108
### Changed
109
109
- Project rebranded from `repo-setup` to `marr` ([#9](https://github.com/virtualian/marr/pull/9))
This guide covers how to publish a new MARR release to npm.
3
+
This guide publishes a new MARR release to npm and GitHub.
4
+
5
+
The Version Control Standard requires every tagged release to have **both** an updated section in `RELEASE_NOTES.md` and a published GitHub Release. This procedure produces both.
4
6
5
7
## Before Publishing
6
8
7
-
1.**Run the test suite** — See [testing.md](./testing.md)
8
-
2.**Verify all tests pass** in the testuser account
9
-
3.**Check you're on main** with a clean working directory
9
+
1.**All PRs for the release are merged to main**
10
+
2.**Local main is up to date** — `git checkout main && git pull`
11
+
3.**Working directory is clean** — `git status` shows nothing
12
+
4.**Tests pass** — `npm test` (see [testing.md](./testing.md))
13
+
5.**`RELEASE_NOTES.md` is up to date** — rename the `## Unreleased` heading to `## [vX.Y.Z] — YYYY-MM-DD` and add a matching `[vX.Y.Z]: https://github.com/virtualian/marr/releases/tag/vX.Y.Z` link reference at the bottom of the file
14
+
6.**`KNOWN_ISSUES.md` reflects current state** — new issues added, resolved issues removed
15
+
7.**You are logged in to npm** — `npm whoami` returns the publishing account; if not, run `npm login`
10
16
11
-
## Release Process
17
+
Steps 1–6 must be merged to main via PR before continuing. Do not run the release commands on a feature branch.
12
18
13
-
### 1. Bump Version
19
+
##Release Process
14
20
15
-
Use the release script:
21
+
### 1. Bump Version, Commit, and Tag
16
22
17
23
```bash
18
-
./scripts/release.sh patch #2.0.0 → 2.0.1
19
-
./scripts/release.sh minor #2.0.0 → 2.1.0
20
-
./scripts/release.sh major #2.0.0 → 3.0.0
24
+
npm version patch #3.6.0 → 3.6.1 (bug fixes only)
25
+
npm version minor #3.6.0 → 3.7.0 (new features, backward-compatible)
26
+
npm version major #3.6.0 → 4.0.0 (breaking changes)
21
27
```
22
28
23
-
This script:
24
-
- Updates version in package.json
25
-
- Builds the TypeScript
26
-
- Creates a git commit and tag
29
+
`npm version` updates `package.json` and `package-lock.json`, creates a commit containing only the version bump, and creates an annotated tag — atomically.
27
30
28
-
### 2. Push to GitHub
31
+
### 2. Push Commit and Tag
29
32
30
33
```bash
31
-
git push origin main --tags
34
+
git push && git push --tags
32
35
```
33
36
34
37
### 3. Publish to npm
@@ -37,15 +40,25 @@ git push origin main --tags
37
40
npm publish --access public
38
41
```
39
42
40
-
### 4. Verify Publication
43
+
The `prepublishOnly` hook re-runs the binary check, build, and tests as a final gate before the package is uploaded.
44
+
45
+
### 4. Create the GitHub Release
46
+
47
+
The Release body must mirror the new version's section in `RELEASE_NOTES.md`. Extract that section to a temporary file, then publish:
41
48
42
49
```bash
43
-
# Check npm registry
44
-
npm view @virtualian/marr
50
+
# Replace vX.Y.Z with the tag you just pushed
51
+
gh release create vX.Y.Z \
52
+
--title "vX.Y.Z" \
53
+
--notes-file <path-to-extracted-section.md>
54
+
```
55
+
56
+
### 5. Verify Publication
45
57
46
-
# Test installation
47
-
npm install -g @virtualian/marr
48
-
marr --version
58
+
```bash
59
+
npm view @virtualian/marr version # should match the new tag
60
+
gh release view vX.Y.Z # should show the published Release
61
+
npm install -g @virtualian/marr && marr --version
49
62
```
50
63
51
64
## Versioning Guidelines
@@ -54,14 +67,18 @@ Follow semantic versioning:
54
67
55
68
| Change Type | Version Bump | Example |
56
69
|-------------|--------------|---------|
57
-
| Bug fixes, doc updates | patch |2.0.0 → 2.0.1 |
58
-
| New features (backward compatible) | minor |2.0.0 → 2.1.0 |
59
-
| Breaking changes | major |2.0.0 → 3.0.0 |
70
+
| Bug fixes, doc updates | patch |3.6.0 → 3.6.1 |
71
+
| New features (backward compatible) | minor |3.6.0 → 3.7.0 |
72
+
| Breaking changes | major |3.6.0 → 4.0.0 |
60
73
61
74
## Troubleshooting
62
75
63
-
**403 Forbidden** — Run `npm login` and verify with `npm whoami`
76
+
**401 / 403 from npm** — Run `npm login` and verify with `npm whoami`
64
77
65
78
**Package name taken** — MARR uses `@virtualian/marr` (scoped package)
66
79
67
-
**Version already exists** — You cannot republish the same version; bump and try again
80
+
**Version already exists on npm** — You cannot republish the same version; bump and try again
81
+
82
+
**Tag pushed but `gh release create` fails** — The tag is on origin without a published Release. Re-run `gh release create vX.Y.Z` against the same tag.
83
+
84
+
**`prepublishOnly` failed** — The build or tests failed inside `npm publish`. Fix the issue on a feature branch, merge, and re-tag with the next patch version. Never reuse a published or pushed tag.
0 commit comments