@monochange/skill 0.0.0 → 0.4.2
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/LICENSE +24 -0
- package/SKILL.md +271 -0
- package/changelog.md +887 -0
- package/examples/migration.md +21 -0
- package/examples/publishing.md +21 -0
- package/examples/quickstart.md +22 -0
- package/examples/readme.md +22 -0
- package/examples/release-pr.md +20 -0
- package/package.json +40 -13
- package/readme.md +63 -0
- package/skills/adoption.md +125 -0
- package/skills/artifact-types.md +529 -0
- package/skills/changeset-guide.md +231 -0
- package/skills/changesets.md +332 -0
- package/skills/commands.md +204 -0
- package/skills/configuration.md +258 -0
- package/skills/linting.md +539 -0
- package/skills/multi-package-publishing.md +237 -0
- package/skills/readme.md +18 -0
- package/skills/reference.md +667 -0
- package/skills/trusted-publishing.md +459 -0
- package/README.md +0 -3
|
@@ -0,0 +1,459 @@
|
|
|
1
|
+
# Trusted publishing with GitHub Actions
|
|
2
|
+
|
|
3
|
+
This guide explains how to set up secure package publishing for the registries that monochange supports.
|
|
4
|
+
|
|
5
|
+
monochange uses the term **trusted publishing**. Other registries may call the same idea **OIDC publishing**, **automated publishing**, or **trusted publishers**.
|
|
6
|
+
|
|
7
|
+
The common goal is the same:
|
|
8
|
+
|
|
9
|
+
- publish directly from CI
|
|
10
|
+
- avoid long-lived registry tokens where possible
|
|
11
|
+
- restrict publish rights to a specific repository, workflow, and sometimes environment
|
|
12
|
+
|
|
13
|
+
## What monochange can do today
|
|
14
|
+
|
|
15
|
+
| Ecosystem | Registry | Registry term | GitHub-based OIDC available | What monochange can automate |
|
|
16
|
+
| -------------- | --------- | ------------------------- | --------------------------- | ------------------------------------------------------------------------------------- |
|
|
17
|
+
| npm | npm | Trusted publishing | Yes | Can verify existing trust and run `npm trust github ...` or `pnpm exec npm trust ...` |
|
|
18
|
+
| cargo | crates.io | Trusted Publishing | Yes | Can publish with a temporary token after you finish registry-side setup |
|
|
19
|
+
| deno | jsr | GitHub Actions publishing | Yes | Reports the setup URL; repository linking is still manual |
|
|
20
|
+
| dart / flutter | pub.dev | Automated publishing | Yes | Reports the setup URL; admin-page setup is still manual |
|
|
21
|
+
|
|
22
|
+
## Monochange prerequisites
|
|
23
|
+
|
|
24
|
+
Start by telling monochange that these packages are expected to publish from GitHub Actions.
|
|
25
|
+
|
|
26
|
+
```toml
|
|
27
|
+
[source]
|
|
28
|
+
provider = "github"
|
|
29
|
+
owner = "ifiokjr"
|
|
30
|
+
repo = "monochange"
|
|
31
|
+
|
|
32
|
+
[ecosystems.npm.publish]
|
|
33
|
+
trusted_publishing = true
|
|
34
|
+
|
|
35
|
+
[ecosystems.cargo.publish]
|
|
36
|
+
trusted_publishing = true
|
|
37
|
+
|
|
38
|
+
[ecosystems.deno.publish]
|
|
39
|
+
trusted_publishing = true
|
|
40
|
+
|
|
41
|
+
[ecosystems.dart.publish]
|
|
42
|
+
trusted_publishing = true
|
|
43
|
+
|
|
44
|
+
[package.cli.publish.trusted_publishing]
|
|
45
|
+
workflow = "publish.yml"
|
|
46
|
+
environment = "publisher"
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
monochange resolves the GitHub trust context from:
|
|
50
|
+
|
|
51
|
+
- `publish.trusted_publishing.repository`
|
|
52
|
+
- `publish.trusted_publishing.workflow`
|
|
53
|
+
- `publish.trusted_publishing.environment`
|
|
54
|
+
- otherwise `[source]`
|
|
55
|
+
- otherwise GitHub Actions runtime values such as `GITHUB_REPOSITORY`, `GITHUB_WORKFLOW_REF`, and `GITHUB_JOB`
|
|
56
|
+
|
|
57
|
+
If your workflow filename or environment cannot be inferred reliably, set them explicitly in config.
|
|
58
|
+
|
|
59
|
+
## GitHub Actions baseline
|
|
60
|
+
|
|
61
|
+
Most registries need the publish job to request an OIDC token.
|
|
62
|
+
|
|
63
|
+
```yaml
|
|
64
|
+
permissions:
|
|
65
|
+
contents: read
|
|
66
|
+
id-token: write
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
If you use a protected deployment environment, keep the workflow and registry settings aligned:
|
|
70
|
+
|
|
71
|
+
```yaml
|
|
72
|
+
jobs:
|
|
73
|
+
publish:
|
|
74
|
+
environment: publisher
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Use the same environment name in both places.
|
|
78
|
+
|
|
79
|
+
## Recommended monochange rollout
|
|
80
|
+
|
|
81
|
+
Use this sequence when adopting trusted publishing across an existing workspace:
|
|
82
|
+
|
|
83
|
+
1. Set `publish.trusted_publishing = true` for the target ecosystem or package.
|
|
84
|
+
2. Generate readiness with `mc publish-readiness --from HEAD --output .monochange/readiness.json`.
|
|
85
|
+
3. If readiness shows first-time package setup is needed, run `mc publish-bootstrap --from HEAD --output .monochange/bootstrap-result.json`.
|
|
86
|
+
4. Complete the registry-side trusted-publishing setup for each package.
|
|
87
|
+
5. Rerun `mc publish-readiness --from HEAD --output .monochange/readiness.json`.
|
|
88
|
+
6. Publish from CI with `mc publish --output .monochange/publish-result.json`.
|
|
89
|
+
|
|
90
|
+
Placeholder publishing is especially useful when the package name is reserved but the real release is not ready yet.
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## npm
|
|
95
|
+
|
|
96
|
+
### Registry-side setup
|
|
97
|
+
|
|
98
|
+
On npm, trusted publishing can be configured from the package settings page or through the CLI.
|
|
99
|
+
|
|
100
|
+
**UI path**
|
|
101
|
+
|
|
102
|
+
- `npmjs.com` → package → **Settings** → **Trusted publishing**
|
|
103
|
+
|
|
104
|
+
**Fields to enter for GitHub Actions**
|
|
105
|
+
|
|
106
|
+
- **Organization or user** — GitHub owner
|
|
107
|
+
- **Repository** — GitHub repository name
|
|
108
|
+
- **Workflow filename** — for example `publish.yml`
|
|
109
|
+
- **Environment name** — optional, for example `publisher`
|
|
110
|
+
|
|
111
|
+
Only the workflow filename is required, not the full `.github/workflows/...` path.
|
|
112
|
+
|
|
113
|
+
### CLI setup commands
|
|
114
|
+
|
|
115
|
+
These are the exact commands monochange models for npm trusted publishing.
|
|
116
|
+
|
|
117
|
+
List the current trusted publishers for a package:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
npm trust list <package-name> --json
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Configure a package for a GitHub workflow:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
npm trust github <package-name> \
|
|
127
|
+
--repo owner/repo \
|
|
128
|
+
--file publish.yml \
|
|
129
|
+
--yes
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Add an environment restriction:
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
npm trust github <package-name> \
|
|
136
|
+
--repo owner/repo \
|
|
137
|
+
--file publish.yml \
|
|
138
|
+
--env publisher \
|
|
139
|
+
--yes
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
If the workspace uses pnpm, use the pnpm-wrapped form:
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
pnpm exec npm trust github <package-name> \
|
|
146
|
+
--repo owner/repo \
|
|
147
|
+
--file publish.yml \
|
|
148
|
+
--env publisher \
|
|
149
|
+
--yes
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### Workflow requirements
|
|
153
|
+
|
|
154
|
+
At minimum, the publish workflow should have:
|
|
155
|
+
|
|
156
|
+
```yaml
|
|
157
|
+
permissions:
|
|
158
|
+
contents: read
|
|
159
|
+
id-token: write
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
monochange can verify existing npm trust configuration and, when needed, run the trust command automatically before `pnpm publish` or `npm publish`.
|
|
163
|
+
|
|
164
|
+
### Monochange notes
|
|
165
|
+
|
|
166
|
+
- npm is the only ecosystem where monochange currently performs bulk trusted-publishing setup itself.
|
|
167
|
+
- If approval is required in the browser, npm's own flow may still require human confirmation.
|
|
168
|
+
- pnpm workspaces stay on `pnpm exec npm trust ...` and `pnpm publish` so the workspace manager stays consistent.
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## crates.io
|
|
173
|
+
|
|
174
|
+
### Registry-side setup
|
|
175
|
+
|
|
176
|
+
crates.io supports trusted publishing for GitHub Actions and GitLab CI/CD. monochange currently focuses on GitHub workflow context.
|
|
177
|
+
|
|
178
|
+
Trusted publishing on crates.io exchanges your CI identity for a short-lived publish token, so you do not need a long-lived crates.io API token in CI.
|
|
179
|
+
|
|
180
|
+
**Prerequisites**
|
|
181
|
+
|
|
182
|
+
- the crate must already exist on `crates.io`
|
|
183
|
+
- you must be an owner of the crate on `crates.io`
|
|
184
|
+
- the repository must live on GitHub or GitLab
|
|
185
|
+
|
|
186
|
+
If the crate does not exist yet, bootstrap it first with a real initial release or `mc publish-bootstrap --from HEAD --output <path>`. The first publish still uses the normal crates.io token flow.
|
|
187
|
+
|
|
188
|
+
**UI path**
|
|
189
|
+
|
|
190
|
+
- crate page → **Settings** → **Trusted Publishing**
|
|
191
|
+
|
|
192
|
+
**Fields to enter for GitHub Actions**
|
|
193
|
+
|
|
194
|
+
- **Repository owner** — GitHub owner
|
|
195
|
+
- **Repository name** — GitHub repository name
|
|
196
|
+
- **Workflow filename** — for example `release.yml`
|
|
197
|
+
- **Environment** — optional, for example `release`
|
|
198
|
+
|
|
199
|
+
Use the workflow filename only, not the full `.github/workflows/...` path.
|
|
200
|
+
|
|
201
|
+
### Workflow setup
|
|
202
|
+
|
|
203
|
+
A typical GitHub Actions release job looks like this:
|
|
204
|
+
|
|
205
|
+
```yaml
|
|
206
|
+
name: Publish to crates.io
|
|
207
|
+
|
|
208
|
+
on:
|
|
209
|
+
push:
|
|
210
|
+
tags:
|
|
211
|
+
- "v*"
|
|
212
|
+
|
|
213
|
+
jobs:
|
|
214
|
+
publish:
|
|
215
|
+
runs-on: ubuntu-latest
|
|
216
|
+
environment: release
|
|
217
|
+
permissions:
|
|
218
|
+
contents: read
|
|
219
|
+
id-token: write
|
|
220
|
+
steps:
|
|
221
|
+
- uses: actions/checkout@v6
|
|
222
|
+
- uses: rust-lang/crates-io-auth-action@v1
|
|
223
|
+
id: auth
|
|
224
|
+
- run: cargo publish
|
|
225
|
+
env:
|
|
226
|
+
CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
If you configure an environment on crates.io, the GitHub job must use the same environment name.
|
|
230
|
+
|
|
231
|
+
### Monochange notes
|
|
232
|
+
|
|
233
|
+
- monochange does **not** create the crates.io trusted-publisher record for you yet.
|
|
234
|
+
- `mc publish-readiness` also verifies the current crate manifest before built-in crates.io publishing: `publish = false` blocks, `publish = [...]` must include `crates-io`, `description` is required, and either `license` or `license-file` is required. Workspace-inherited values are accepted.
|
|
235
|
+
- Once the registry-side configuration exists, monochange can publish with the temporary token exposed by `rust-lang/crates-io-auth-action@v1`.
|
|
236
|
+
- crates.io issues a short-lived publish token; the current docs describe these tokens as expiring after 30 minutes.
|
|
237
|
+
- Use a specific workflow filename and, when needed, a protected GitHub environment to reduce the publish attack surface.
|
|
238
|
+
- If you want the most registry-native GitHub workflow, prefer `rust-lang/crates-io-auth-action@v1` and let it own the token exchange explicitly.
|
|
239
|
+
- When you want that workflow to own the publish command directly, `mode = "external"` is usually the clearest monochange configuration.
|
|
240
|
+
- The current monochange GitHub publish workflow already includes this pattern.
|
|
241
|
+
|
|
242
|
+
Useful references:
|
|
243
|
+
|
|
244
|
+
- `https://crates.io/docs/trusted-publishing`
|
|
245
|
+
- `https://rust-lang.github.io/rfcs/3691-trusted-publishing-cratesio.html`
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## jsr
|
|
250
|
+
|
|
251
|
+
### Registry-side setup
|
|
252
|
+
|
|
253
|
+
JSR supports tokenless publishing from GitHub Actions.
|
|
254
|
+
|
|
255
|
+
**Manual setup step**
|
|
256
|
+
|
|
257
|
+
- go to your package on `jsr.io`
|
|
258
|
+
- open **Settings**
|
|
259
|
+
- link the package to the GitHub repository that is allowed to publish it
|
|
260
|
+
|
|
261
|
+
monochange currently reports the package URL and expects this repository-linking step to be completed manually.
|
|
262
|
+
|
|
263
|
+
### Workflow setup
|
|
264
|
+
|
|
265
|
+
A minimal GitHub Actions job looks like this:
|
|
266
|
+
|
|
267
|
+
```yaml
|
|
268
|
+
permissions:
|
|
269
|
+
contents: read
|
|
270
|
+
id-token: write
|
|
271
|
+
|
|
272
|
+
steps:
|
|
273
|
+
- uses: actions/checkout@v6
|
|
274
|
+
- run: npx jsr publish
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
You can also use:
|
|
278
|
+
|
|
279
|
+
```bash
|
|
280
|
+
deno publish
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
### Monochange notes
|
|
284
|
+
|
|
285
|
+
- JSR's tokenless publishing is currently GitHub Actions focused.
|
|
286
|
+
- Other CI providers still need token-based publishing.
|
|
287
|
+
- monochange does not yet link the package to the repository for you.
|
|
288
|
+
- If the package does not exist yet, a placeholder release can bootstrap the registry entry before you finish the repository-link step.
|
|
289
|
+
|
|
290
|
+
Useful references:
|
|
291
|
+
|
|
292
|
+
- `https://jsr.io/docs/publishing-packages`
|
|
293
|
+
- `https://jsr.io/docs/trust`
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
## pub.dev
|
|
298
|
+
|
|
299
|
+
### Registry-side setup
|
|
300
|
+
|
|
301
|
+
pub.dev calls this **automated publishing**.
|
|
302
|
+
|
|
303
|
+
Automated publishing on pub.dev authenticates with a temporary GitHub-signed OIDC token instead of a long-lived pub credential.
|
|
304
|
+
|
|
305
|
+
**Prerequisites**
|
|
306
|
+
|
|
307
|
+
- the package must already exist on `pub.dev`
|
|
308
|
+
- you must be an uploader or admin for the package
|
|
309
|
+
- the repository must be on GitHub
|
|
310
|
+
|
|
311
|
+
If the package does not exist yet, publish it once first or use `mc publish-bootstrap --from HEAD --output <path>`.
|
|
312
|
+
|
|
313
|
+
**UI path**
|
|
314
|
+
|
|
315
|
+
- `https://pub.dev/packages/<package>/admin`
|
|
316
|
+
- find the **Automated publishing** section
|
|
317
|
+
- click **Enable publishing from GitHub Actions**
|
|
318
|
+
|
|
319
|
+
**Fields to enter**
|
|
320
|
+
|
|
321
|
+
- **Repository** — `owner/repo`
|
|
322
|
+
- **Tag pattern** — a string containing `{{version}}`
|
|
323
|
+
|
|
324
|
+
Examples:
|
|
325
|
+
|
|
326
|
+
- single-package repo: `v{{version}}`
|
|
327
|
+
- monorepo package-specific tag: `my_package-v{{version}}`
|
|
328
|
+
|
|
329
|
+
For a monorepo, give each package its own tag pattern so a tag for one package cannot publish another package by accident. The official pub.dev guidance also recommends a separate workflow file per package when one repository publishes multiple Dart packages.
|
|
330
|
+
|
|
331
|
+
**Optional hardening**
|
|
332
|
+
|
|
333
|
+
- click **Require GitHub Actions environment** on the package admin page
|
|
334
|
+
- choose an environment name such as `pub.dev`
|
|
335
|
+
- use the same environment name in the GitHub workflow
|
|
336
|
+
|
|
337
|
+
### Workflow requirements
|
|
338
|
+
|
|
339
|
+
pub.dev only accepts GitHub Actions automated publishing when the workflow was triggered by a **tag push**. It rejects branch-triggered and manually dispatched workflows for this publishing flow.
|
|
340
|
+
|
|
341
|
+
That means the GitHub workflow trigger must align exactly with the configured tag pattern.
|
|
342
|
+
|
|
343
|
+
### Recommended reusable workflow
|
|
344
|
+
|
|
345
|
+
pub.dev strongly encourages the reusable workflow maintained by `dart-lang/setup-dart`:
|
|
346
|
+
|
|
347
|
+
```yaml
|
|
348
|
+
name: Publish to pub.dev
|
|
349
|
+
|
|
350
|
+
on:
|
|
351
|
+
push:
|
|
352
|
+
tags:
|
|
353
|
+
- "v[0-9]+.[0-9]+.[0-9]+"
|
|
354
|
+
|
|
355
|
+
jobs:
|
|
356
|
+
publish:
|
|
357
|
+
permissions:
|
|
358
|
+
id-token: write
|
|
359
|
+
uses: dart-lang/setup-dart/.github/workflows/publish.yml@v1
|
|
360
|
+
# with:
|
|
361
|
+
# working-directory: path/to/package/within/repository
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
If you require a GitHub Actions environment on pub.dev, pass the same environment name to the reusable workflow:
|
|
365
|
+
|
|
366
|
+
```yaml
|
|
367
|
+
jobs:
|
|
368
|
+
publish:
|
|
369
|
+
permissions:
|
|
370
|
+
id-token: write
|
|
371
|
+
uses: dart-lang/setup-dart/.github/workflows/publish.yml@v1
|
|
372
|
+
with:
|
|
373
|
+
environment: pub.dev
|
|
374
|
+
# working-directory: path/to/package/within/repository
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
### Custom workflow
|
|
378
|
+
|
|
379
|
+
If you need custom code generation or build steps, set up Dart yourself and publish manually after the OIDC-authenticated setup step:
|
|
380
|
+
|
|
381
|
+
```bash
|
|
382
|
+
dart pub publish --force
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
For Flutter packages, the equivalent publish command is:
|
|
386
|
+
|
|
387
|
+
```bash
|
|
388
|
+
flutter pub publish --force
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
### Monochange notes
|
|
392
|
+
|
|
393
|
+
- monochange does **not** configure pub.dev automated publishing for you yet.
|
|
394
|
+
- monochange reports the package admin URL so you can finish the setup manually.
|
|
395
|
+
- pub.dev is stricter than the others here because the workflow must be tag-triggered, not just manually dispatched or branch-triggered.
|
|
396
|
+
- The reusable workflow from `dart-lang/setup-dart` is the officially recommended path and is worth preferring unless you need custom pre-publish steps.
|
|
397
|
+
- If you want the workflow shape recommended by the Dart team, prefer `dart-lang/setup-dart/.github/workflows/publish.yml@v1`.
|
|
398
|
+
- When that reusable workflow should own the publish command directly, `mode = "external"` is usually the clearest monochange configuration.
|
|
399
|
+
- Keep the Git tag, `pubspec.yaml` version, and tag pattern aligned.
|
|
400
|
+
- Protect matching tags, and use GitHub environment protection rules when you need an approval gate before publishing.
|
|
401
|
+
|
|
402
|
+
Useful references:
|
|
403
|
+
|
|
404
|
+
- `https://dart.dev/tools/pub/automated-publishing`
|
|
405
|
+
- `https://pub.dev/packages/<package>/admin`
|
|
406
|
+
|
|
407
|
+
---
|
|
408
|
+
|
|
409
|
+
## Mapping monochange config to registry values
|
|
410
|
+
|
|
411
|
+
Use this cheat sheet when a registry asks for workflow details.
|
|
412
|
+
|
|
413
|
+
| Registry field | Value to use |
|
|
414
|
+
| ------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
|
|
415
|
+
| repository owner / organization / namespace | GitHub owner from `[source]` or `publish.trusted_publishing.repository` |
|
|
416
|
+
| repository name / project | repository part of `owner/repo` |
|
|
417
|
+
| workflow filename | `publish.trusted_publishing.workflow`, for example `publish.yml` |
|
|
418
|
+
| environment | `publish.trusted_publishing.environment`, for example `publisher` |
|
|
419
|
+
| pub.dev tag pattern | choose a tag rule that matches your release workflow, for example `v{{version}}` or `my_package-v{{version}}` |
|
|
420
|
+
|
|
421
|
+
If monochange cannot infer the GitHub repository or workflow for a package, set them explicitly in `monochange.toml`.
|
|
422
|
+
|
|
423
|
+
## Security recommendations
|
|
424
|
+
|
|
425
|
+
- prefer trusted publishing over long-lived registry tokens whenever the registry supports it
|
|
426
|
+
- keep `id-token: write` only on the publish job, not the entire workflow if you can avoid it
|
|
427
|
+
- use a protected GitHub environment such as `publisher` for high-value publish jobs
|
|
428
|
+
- restrict tag creation and release workflows to trusted maintainers
|
|
429
|
+
- use package-specific tags in monorepos when a registry supports tag-based publish authorization
|
|
430
|
+
|
|
431
|
+
## When to keep `mode = "external"`
|
|
432
|
+
|
|
433
|
+
Keep a package on `mode = "external"` when:
|
|
434
|
+
|
|
435
|
+
- the registry is private or custom
|
|
436
|
+
- you need retry or delayed requeue behavior that monochange does not manage yet
|
|
437
|
+
- your registry requires a CI pattern that differs substantially from monochange's built-in publish flow
|
|
438
|
+
|
|
439
|
+
In those cases, you can still use this guide for the registry-side OIDC setup while letting your own workflow own the actual publish command.
|
|
440
|
+
|
|
441
|
+
## Possible future automation for manual registries
|
|
442
|
+
|
|
443
|
+
monochange is intentionally conservative here.
|
|
444
|
+
|
|
445
|
+
Today, npm is the only registry where monochange performs trusted-publishing enrollment itself. For `crates.io`, `jsr`, and `pub.dev`, monochange currently focuses on setup guidance, preflight checks, and actionable diagnostics instead of trying to mutate registry-side trust records automatically.
|
|
446
|
+
|
|
447
|
+
Areas that may become more automated later, where the registry and CI contracts make it safe enough, include:
|
|
448
|
+
|
|
449
|
+
- **`crates.io`** — stronger preflight validation around explicit workflow filenames, environment alignment, and clearer checks for first-publish bootstrap versus post-bootstrap trusted publishing
|
|
450
|
+
- **`jsr`** — better repository-link diagnostics and package metadata checks before publish, especially when the package already exists but repository-side linking is incomplete
|
|
451
|
+
- **`pub.dev`** — stronger validation that tag patterns, workflow triggers, working directories, and optional environments still match the automated-publishing setup expected by pub.dev
|
|
452
|
+
|
|
453
|
+
Areas that monochange does **not** promise today:
|
|
454
|
+
|
|
455
|
+
- auto-enrolling registry-side trusted-publisher records for `crates.io`, `jsr`, or `pub.dev`
|
|
456
|
+
- bypassing browser-confirmed or admin-page-only steps that the registry intentionally keeps manual
|
|
457
|
+
- inferring enough registry-side state to claim a package is fully enrolled when the registry does not expose that state safely or consistently
|
|
458
|
+
|
|
459
|
+
Treat this as a direction of travel, not a guarantee of upcoming behavior. If you need a registry-native workflow today, keep the package on `mode = "external"` and let the registry-maintained workflow own the actual publish command.
|
package/README.md
DELETED