@sacho/sacho-aarch64-apple-darwin 0.1.0-dev.9 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +121 -45
- package/package.json +2 -2
- package/sacho +0 -0
package/README.md
CHANGED
|
@@ -1,6 +1,27 @@
|
|
|
1
1
|
Sacho: an opinionated changelog manager
|
|
2
2
|
=======================================
|
|
3
3
|
|
|
4
|
+
[![GitHub Releases][GitHub Releases badge]][GitHub Releases]
|
|
5
|
+
[![crates.io][crates.io badge]][crates.io]
|
|
6
|
+
[![npm][npm badge]][npm]
|
|
7
|
+
[![GitHub Actions][GitHub Actions badge]][GitHub Actions]
|
|
8
|
+
[![License: GPL-3.0-only][GPL-3.0 badge]][GPL-3.0]
|
|
9
|
+
[![GitHub Sponsors][GitHub Sponsors badge]][GitHub Sponsors]
|
|
10
|
+
|
|
11
|
+
[GitHub Releases badge]: https://img.shields.io/github/v/release/dahlia/sacho?logo=github
|
|
12
|
+
[GitHub Releases]: https://github.com/dahlia/sacho/releases
|
|
13
|
+
[crates.io badge]: https://img.shields.io/crates/v/sacho?logo=rust
|
|
14
|
+
[crates.io]: https://crates.io/crates/sacho
|
|
15
|
+
[npm badge]: https://img.shields.io/npm/v/@sacho/sacho?logo=npm
|
|
16
|
+
[npm]: https://www.npmjs.com/package/@sacho/sacho
|
|
17
|
+
[GitHub Actions badge]: https://github.com/dahlia/sacho/actions/workflows/main.yaml/badge.svg
|
|
18
|
+
[GitHub Actions]: https://github.com/dahlia/sacho/actions/workflows/main.yaml
|
|
19
|
+
[GPL-3.0 badge]: https://img.shields.io/github/license/dahlia/sacho
|
|
20
|
+
[GPL-3.0]: https://www.gnu.org/licenses/gpl-3.0.html
|
|
21
|
+
[GitHub Sponsors badge]: https://img.shields.io/github/sponsors/dahlia?logo=githubsponsors
|
|
22
|
+
[GitHub Sponsors]: https://github.com/sponsors/dahlia
|
|
23
|
+
|
|
24
|
+
|
|
4
25
|
Motivation
|
|
5
26
|
----------
|
|
6
27
|
|
|
@@ -18,7 +39,7 @@ towncrier assumes Python; changesets assumes an npm monorepo. Sacho is a single
|
|
|
18
39
|
static binary with no runtime dependencies, usable in any repository regardless
|
|
19
40
|
of language, and it does not even assume Git.
|
|
20
41
|
|
|
21
|
-
[Sacho is opinionated
|
|
42
|
+
[*Sacho is opinionated.*](./PHILOSOPHY.md) It enforces one fragment format,
|
|
22
43
|
one output style, and one set of invariants. Configuration exists to describe
|
|
23
44
|
your repository, not to customize the philosophy.
|
|
24
45
|
|
|
@@ -52,7 +73,51 @@ Without mise, npm, or Cargo, download the archive for your platform from
|
|
|
52
73
|
*sacho* (*sacho.exe* on Windows) into a directory on your `PATH`.
|
|
53
74
|
|
|
54
75
|
[mise]: https://mise.jdx.dev/
|
|
55
|
-
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
Agent Skill
|
|
79
|
+
-----------
|
|
80
|
+
|
|
81
|
+
Sacho ships an [Agent Skill] that teaches AI coding agents, such as Claude Code,
|
|
82
|
+
how to adopt and operate Sacho: writing fragments for users, cutting releases,
|
|
83
|
+
and forward-porting fixes across maintenance branches.
|
|
84
|
+
|
|
85
|
+
In Claude Code, install it as a plugin. Add this repository as a plugin
|
|
86
|
+
marketplace, then install the `sacho` plugin:
|
|
87
|
+
|
|
88
|
+
~~~~ text
|
|
89
|
+
/plugin marketplace add dahlia/sacho
|
|
90
|
+
/plugin install sacho@sacho
|
|
91
|
+
~~~~
|
|
92
|
+
|
|
93
|
+
For other agents, or to install the skill without the plugin system, use the
|
|
94
|
+
[`skills`] CLI, which reads the skill straight from this repository:
|
|
95
|
+
|
|
96
|
+
~~~~ sh
|
|
97
|
+
npx skills add dahlia/sacho
|
|
98
|
+
~~~~
|
|
99
|
+
|
|
100
|
+
Add `-a claude-code` to target one agent, `-g` to install it globally, and
|
|
101
|
+
`--skill sacho` to select the skill by name.
|
|
102
|
+
|
|
103
|
+
The skill is also bundled inside the `@sacho/sacho` npm package, following the
|
|
104
|
+
[`skills-npm`] layout. In a project that depends on that package, run
|
|
105
|
+
`npx skills-npm setup` once to link bundled skills from *node\_modules* into
|
|
106
|
+
your agent on every install.
|
|
107
|
+
|
|
108
|
+
[Agent Skill]: https://agentskills.io/
|
|
109
|
+
[`skills`]: https://github.com/vercel-labs/skills
|
|
110
|
+
[`skills-npm`]: https://github.com/antfu/skills-npm
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
Documentation
|
|
114
|
+
-------------
|
|
115
|
+
|
|
116
|
+
The [*Sacho documentation*] walks through adoption, everyday use, releases,
|
|
117
|
+
CI, and version-control integration. It also explains Sacho's core concepts and
|
|
118
|
+
provides complete command and configuration references.
|
|
119
|
+
|
|
120
|
+
[*Sacho documentation*]: https://sacho.dev/guide/getting-started
|
|
56
121
|
|
|
57
122
|
|
|
58
123
|
How it works
|
|
@@ -82,21 +147,37 @@ state that never shipped.
|
|
|
82
147
|
Basic workflow
|
|
83
148
|
--------------
|
|
84
149
|
|
|
85
|
-
With `sacho` on your `PATH`, initialize it at the repository root
|
|
86
|
-
the version you are preparing:
|
|
150
|
+
With `sacho` on your `PATH`, initialize it at the repository root:
|
|
87
151
|
|
|
88
152
|
~~~~ sh
|
|
89
153
|
sacho init
|
|
90
|
-
sacho next 1.2.0
|
|
91
154
|
~~~~
|
|
92
155
|
|
|
93
156
|
Initialization creates *sacho.toml*, *changes.d/*, and *CHANGES.md*. It also
|
|
94
157
|
sets up the merge integration supported by the detected version-control
|
|
95
158
|
system. The interactive setup can infer an issue-link template from the
|
|
96
|
-
repository URL
|
|
159
|
+
repository URL, offer headings found across an existing changelog as section
|
|
160
|
+
configuration, and offer to install a Git pre-commit hook. Repository
|
|
97
161
|
integrations use the executable that ran `init`; pass
|
|
98
162
|
`--integration-executable PATH` to use another executable.
|
|
99
163
|
|
|
164
|
+
If an existing *CHANGES.md* already has entries under `Unreleased` or
|
|
165
|
+
`Version X`, import them before creating new fragments:
|
|
166
|
+
|
|
167
|
+
~~~~ sh
|
|
168
|
+
sacho import-unreleased
|
|
169
|
+
~~~~
|
|
170
|
+
|
|
171
|
+
Sacho shows any normalization diff before writing. The import creates one root
|
|
172
|
+
fragment, or one fragment per populated configured section, records `X` as the
|
|
173
|
+
next version when present, and leaves every released section unchanged.
|
|
174
|
+
|
|
175
|
+
If the import did not infer a version, choose the version you are preparing:
|
|
176
|
+
|
|
177
|
+
~~~~ sh
|
|
178
|
+
sacho next 1.2.0
|
|
179
|
+
~~~~
|
|
180
|
+
|
|
100
181
|
Create one fragment for each user-visible change, then edit the path printed by
|
|
101
182
|
the command:
|
|
102
183
|
|
|
@@ -116,6 +197,7 @@ before committing:
|
|
|
116
197
|
|
|
117
198
|
~~~~ sh
|
|
118
199
|
sacho fmt
|
|
200
|
+
sacho resolve-links # optional: pin final redirected reference URLs
|
|
119
201
|
sacho preview
|
|
120
202
|
sacho check
|
|
121
203
|
~~~~
|
|
@@ -128,15 +210,27 @@ staged Git changes or `sacho check --base <revision>` in CI.
|
|
|
128
210
|
|
|
129
211
|
When the version is ready, compile and consume its fragments. This command
|
|
130
212
|
releases the version stored by `sacho next`, uses the current local date, and
|
|
131
|
-
|
|
213
|
+
closes the materialized unreleased region:
|
|
132
214
|
|
|
133
215
|
~~~~ sh
|
|
134
|
-
sacho release
|
|
216
|
+
sacho release
|
|
135
217
|
~~~~
|
|
136
218
|
|
|
137
219
|
If no next version has been set, pass the release version explicitly, for
|
|
138
220
|
example `sacho release 1.2.0`. Use `--date YYYY-MM-DD` when the release date
|
|
139
|
-
must be supplied rather than taken from the local clock.
|
|
221
|
+
must be supplied rather than taken from the local clock. A repository with no
|
|
222
|
+
released changelog sections can cut its first release without fragments. Later
|
|
223
|
+
empty releases require an explicit `--allow-empty`.
|
|
224
|
+
|
|
225
|
+
Commit and tag that released-only state. When development resumes, start the
|
|
226
|
+
next cycle separately:
|
|
227
|
+
|
|
228
|
+
~~~~ sh
|
|
229
|
+
sacho next 1.3.0
|
|
230
|
+
~~~~
|
|
231
|
+
|
|
232
|
+
Pass `--next 1.3.0` to `sacho release` only when the release commit should also
|
|
233
|
+
open the next cycle and retain its empty materialized region.
|
|
140
234
|
|
|
141
235
|
After committing a release, print its frozen Markdown section with `show`:
|
|
142
236
|
|
|
@@ -161,7 +255,8 @@ Version-control integration
|
|
|
161
255
|
---------------------------
|
|
162
256
|
|
|
163
257
|
Sacho can enforce that commits changing configured source paths also carry a
|
|
164
|
-
changelog fragment. Select the repository's VCS in
|
|
258
|
+
changelog fragment. Select the repository's VCS and the paths to check in
|
|
259
|
+
*sacho.toml*:
|
|
165
260
|
|
|
166
261
|
~~~~ toml
|
|
167
262
|
[vcs]
|
|
@@ -176,41 +271,6 @@ Git also supports `sacho check --staged`. The `none` preset explicitly skips
|
|
|
176
271
|
VCS-backed checks while leaving fragment validation and changelog consistency
|
|
177
272
|
checks enabled.
|
|
178
273
|
|
|
179
|
-
Each preset supplies three subprocess commands. Repositories can override one
|
|
180
|
-
command without repeating the other two:
|
|
181
|
-
|
|
182
|
-
~~~~ toml
|
|
183
|
-
[vcs]
|
|
184
|
-
preset = "git"
|
|
185
|
-
|
|
186
|
-
[vcs.commands]
|
|
187
|
-
message = ["my-vcs-wrapper", "message", "${commit}"]
|
|
188
|
-
~~~~
|
|
189
|
-
|
|
190
|
-
The first array element is the executable and every remaining element is one
|
|
191
|
-
literal argument; Sacho never invokes a shell. The commits command uses
|
|
192
|
-
`${base}`, while changed-paths and message use `${commit}`. An overridden query
|
|
193
|
-
is the complete query and does not invoke commands from its preset behind the
|
|
194
|
-
scenes. The built-in Mercurial preset handles parent comparisons internally.
|
|
195
|
-
|
|
196
|
-
The query output contracts are:
|
|
197
|
-
|
|
198
|
-
- `commits` emits zero or more nonempty UTF-8 commit identifiers, oldest
|
|
199
|
-
first and one per line. The final line may end in LF; CRLF is also
|
|
200
|
-
accepted.
|
|
201
|
-
- `changed-paths` emits concatenated NUL-terminated name-status records.
|
|
202
|
-
Ordinary records are `A\0PATH\0`, `D\0PATH\0`, `M\0PATH\0`, or
|
|
203
|
-
`T\0PATH\0`, where `T` denotes a file type change. Copy and rename records
|
|
204
|
-
are `C[SIMILARITY]\0OLD_PATH\0NEW_PATH\0` and
|
|
205
|
-
`R[SIMILARITY]\0OLD_PATH\0NEW_PATH\0`, where the optional similarity is a
|
|
206
|
-
decimal percentage from 0 through 100. Status fields are UTF-8 and paths
|
|
207
|
-
are nonempty repository-relative platform paths; path bytes need not be
|
|
208
|
-
UTF-8 on Unix. Nonempty output ends in NUL. A copied or renamed fragment
|
|
209
|
-
counts as new content only when similarity is present and below 100;
|
|
210
|
-
omitting it does not satisfy fragment coverage.
|
|
211
|
-
- `message` emits the complete UTF-8 commit message verbatim. Sacho does not
|
|
212
|
-
trim it.
|
|
213
|
-
|
|
214
274
|
`sacho init` installs Git merge attributes and drivers in Git repositories. In
|
|
215
275
|
Mercurial repositories it installs an idempotent block in *.hg/hgrc* containing
|
|
216
276
|
a successful-merge update hook and, when changelog materialization is enabled,
|
|
@@ -219,6 +279,12 @@ the changelog merge driver. These integrations invoke the executable that ran
|
|
|
219
279
|
per-path merge-driver hook; after resolving a concurrent fragment merge, run
|
|
220
280
|
`sacho sync --force`.
|
|
221
281
|
|
|
282
|
+
See [*CI and hooks*] for fragment coverage and [*Version control*] for preset,
|
|
283
|
+
merge-driver, and custom-query details.
|
|
284
|
+
|
|
285
|
+
[*CI and hooks*]: https://sacho.dev/guide/ci-and-hooks
|
|
286
|
+
[*Version control*]: https://sacho.dev/guide/version-control
|
|
287
|
+
|
|
222
288
|
|
|
223
289
|
Etymology
|
|
224
290
|
---------
|
|
@@ -243,3 +309,13 @@ is the same insistence this tool makes against generating changelogs from
|
|
|
243
309
|
commit messages after the fact.
|
|
244
310
|
|
|
245
311
|
[1]: https://en.wikipedia.org/wiki/Veritable_Records_of_the_Joseon_Dynasty#Compilation_process
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
License
|
|
315
|
+
-------
|
|
316
|
+
|
|
317
|
+
Copyright (C) 2026 Hong Minhee.
|
|
318
|
+
|
|
319
|
+
Sacho is free software licensed under the GNU General Public License version 3
|
|
320
|
+
only. It comes with no warranty, to the extent permitted by law. See
|
|
321
|
+
[*LICENSE*](./LICENSE) for the full terms.
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sacho/sacho-aarch64-apple-darwin",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "The Sacho binary for aarch64-apple-darwin",
|
|
5
5
|
"license": "GPL-3.0-only",
|
|
6
6
|
"author": "Hong Minhee <hong@minhee.org>",
|
|
7
|
-
"homepage": "https://
|
|
7
|
+
"homepage": "https://sacho.dev/",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
10
10
|
"url": "git+https://github.com/dahlia/sacho.git"
|
package/sacho
CHANGED
|
Binary file
|