putitoutthere 0.1.43 → 0.1.45
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/CHANGELOG.md +115 -0
- package/MIGRATIONS.md +632 -0
- package/README.md +342 -94
- package/action.yml +5 -5
- package/dist/action.js +2 -2
- package/dist/action.js.map +1 -1
- package/dist/cascade.d.ts +1 -1
- package/dist/cascade.js +2 -2
- package/dist/cli.d.ts +9 -6
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +12 -426
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +13 -61
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +31 -45
- package/dist/config.js.map +1 -1
- package/dist/git.js +1 -1
- package/dist/git.js.map +1 -1
- package/dist/handlers/npm-platform.d.ts.map +1 -1
- package/dist/handlers/npm-platform.js +5 -1
- package/dist/handlers/npm-platform.js.map +1 -1
- package/dist/handlers/pypi.d.ts.map +1 -1
- package/dist/handlers/pypi.js +29 -6
- package/dist/handlers/pypi.js.map +1 -1
- package/dist/plan.d.ts +0 -1
- package/dist/plan.d.ts.map +1 -1
- package/dist/plan.js +19 -18
- package/dist/plan.js.map +1 -1
- package/dist/preflight.js +1 -1
- package/dist/preflight.js.map +1 -1
- package/dist/publish.d.ts +0 -10
- package/dist/publish.d.ts.map +1 -1
- package/dist/publish.js +6 -52
- package/dist/publish.js.map +1 -1
- package/dist/types.d.ts +1 -21
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +5 -3
- package/dist/auth.d.ts +0 -68
- package/dist/auth.d.ts.map +0 -1
- package/dist/auth.js +0 -285
- package/dist/auth.js.map +0 -1
- package/dist/doctor.d.ts +0 -115
- package/dist/doctor.d.ts.map +0 -1
- package/dist/doctor.js +0 -292
- package/dist/doctor.js.map +0 -1
- package/dist/init.d.ts +0 -59
- package/dist/init.d.ts.map +0 -1
- package/dist/init.js +0 -181
- package/dist/init.js.map +0 -1
- package/dist/keyring.d.ts +0 -35
- package/dist/keyring.d.ts.map +0 -1
- package/dist/keyring.js +0 -88
- package/dist/keyring.js.map +0 -1
- package/dist/oidc-policy.d.ts +0 -145
- package/dist/oidc-policy.d.ts.map +0 -1
- package/dist/oidc-policy.js +0 -383
- package/dist/oidc-policy.js.map +0 -1
- package/dist/preflight-run.d.ts +0 -47
- package/dist/preflight-run.d.ts.map +0 -1
- package/dist/preflight-run.js +0 -197
- package/dist/preflight-run.js.map +0 -1
- package/dist/registries/crates-trust.d.ts +0 -69
- package/dist/registries/crates-trust.d.ts.map +0 -1
- package/dist/registries/crates-trust.js +0 -95
- package/dist/registries/crates-trust.js.map +0 -1
- package/dist/release.d.ts +0 -36
- package/dist/release.d.ts.map +0 -1
- package/dist/release.js +0 -102
- package/dist/release.js.map +0 -1
- package/dist/templates.d.ts +0 -43
- package/dist/templates.d.ts.map +0 -1
- package/dist/templates.js +0 -310
- package/dist/templates.js.map +0 -1
- package/dist/token-scope.d.ts +0 -65
- package/dist/token-scope.d.ts.map +0 -1
- package/dist/token-scope.js +0 -163
- package/dist/token-scope.js.map +0 -1
- package/dist/token.d.ts +0 -211
- package/dist/token.d.ts.map +0 -1
- package/dist/token.js +0 -719
- package/dist/token.js.map +0 -1
package/dist/doctor.js
DELETED
|
@@ -1,292 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `putitoutthere doctor` — pre-flight validator.
|
|
3
|
-
*
|
|
4
|
-
* Validates: config parses; every package has a resolvable kind; every
|
|
5
|
-
* package has usable credentials (OIDC or per-kind token). Returns a
|
|
6
|
-
* structured report rather than throwing so the CLI can render it as
|
|
7
|
-
* a table.
|
|
8
|
-
*
|
|
9
|
-
* When `checkArtifacts` is on, also walks the plan and checks each
|
|
10
|
-
* expected artifact directory. Silent-skips when plan can't run (no
|
|
11
|
-
* git state / no commits) so `doctor` stays useful in contexts that
|
|
12
|
-
* don't have a release history yet.
|
|
13
|
-
*
|
|
14
|
-
* Issue #23. Plan: §21.1, §16.4.7. Artifact check: #89.
|
|
15
|
-
*/
|
|
16
|
-
import { existsSync } from 'node:fs';
|
|
17
|
-
import { join } from 'node:path';
|
|
18
|
-
import { expectedLayout } from './completeness.js';
|
|
19
|
-
import { loadConfig } from './config.js';
|
|
20
|
-
import { checkEnvironment, checkPermissions, checkPublishInvocation, diffEnvironment, diffWorkflowFilename, findPublishWorkflows, inferFromGithubWorkflowRef, } from './oidc-policy.js';
|
|
21
|
-
import { diffCratesTrust, fetchCratesTrustPolicy, } from './registries/crates-trust.js';
|
|
22
|
-
import { plan } from './plan.js';
|
|
23
|
-
import { checkAuth } from './preflight.js';
|
|
24
|
-
import { deepCheck } from './token-scope.js';
|
|
25
|
-
export async function doctor(opts) {
|
|
26
|
-
const issues = [];
|
|
27
|
-
let config = null;
|
|
28
|
-
/* v8 ignore next -- tests always pass an explicit cwd */
|
|
29
|
-
const cfgPath = opts.configPath ?? `${opts.cwd.replace(/\/+$/, '')}/putitoutthere.toml`;
|
|
30
|
-
try {
|
|
31
|
-
config = loadConfig(cfgPath);
|
|
32
|
-
/* v8 ignore start -- non-Error catch fallback path */
|
|
33
|
-
}
|
|
34
|
-
catch (err) {
|
|
35
|
-
issues.push(`config: ${err instanceof Error ? err.message : String(err)}`);
|
|
36
|
-
}
|
|
37
|
-
/* v8 ignore stop */
|
|
38
|
-
const packages = [];
|
|
39
|
-
if (config) {
|
|
40
|
-
const auth = checkAuth(config.packages);
|
|
41
|
-
for (const pkg of config.packages) {
|
|
42
|
-
const row = auth.results.find((r) => r.package === pkg.name);
|
|
43
|
-
/* v8 ignore next -- every cascaded package has a row in checkAuth */
|
|
44
|
-
const via = row?.via ?? 'missing';
|
|
45
|
-
packages.push({ name: pkg.name, kind: pkg.kind, auth: via });
|
|
46
|
-
if (via === 'missing') {
|
|
47
|
-
issues.push(`auth: ${pkg.name} (${pkg.kind}) needs ${row?.acceptedEnvVars.join(' or ') ?? '<env-var>'} or OIDC`);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
if (opts.deep) {
|
|
51
|
-
const scopable = config.packages.filter((p) => {
|
|
52
|
-
const r = auth.results.find((x) => x.package === p.name);
|
|
53
|
-
return r !== undefined && r.via === 'token';
|
|
54
|
-
});
|
|
55
|
-
const envVarForPackage = new Map();
|
|
56
|
-
for (const p of scopable) {
|
|
57
|
-
const r = auth.results.find((x) => x.package === p.name);
|
|
58
|
-
/* v8 ignore next -- filter above guarantees a row */
|
|
59
|
-
if (r !== undefined)
|
|
60
|
-
envVarForPackage.set(p.name, r.envVar);
|
|
61
|
-
}
|
|
62
|
-
const rows = await deepCheck({
|
|
63
|
-
packages: scopable,
|
|
64
|
-
envVarForPackage,
|
|
65
|
-
...(opts.inspectFn !== undefined ? { inspect: opts.inspectFn } : {}),
|
|
66
|
-
});
|
|
67
|
-
for (const row of rows) {
|
|
68
|
-
const pkgEntry = packages.find((p) => p.name === row.package);
|
|
69
|
-
/* v8 ignore next -- deepCheck rows always correspond to a scoped package */
|
|
70
|
-
if (pkgEntry === undefined)
|
|
71
|
-
continue;
|
|
72
|
-
pkgEntry.scope = row.scope;
|
|
73
|
-
pkgEntry.scope_match = row.match;
|
|
74
|
-
if (row.match === 'mismatch' || row.match === 'error') {
|
|
75
|
-
issues.push(`scope: ${row.package} (${row.kind}) — ${row.detail ?? 'token scope does not match config'}`);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
const artifacts = opts.checkArtifacts && config
|
|
81
|
-
? await checkArtifacts(opts, cfgPath, issues)
|
|
82
|
-
: undefined;
|
|
83
|
-
const workflows = findPublishWorkflows(opts.cwd);
|
|
84
|
-
const trustPolicy = checkTrustPolicyLocal(workflows, issues);
|
|
85
|
-
const trustPolicyDeclared = config
|
|
86
|
-
? checkTrustPolicyDeclared(config.packages, workflows, issues)
|
|
87
|
-
: undefined;
|
|
88
|
-
const trustPolicyCratesIo = config
|
|
89
|
-
? await checkTrustPolicyCratesIo(config.packages, issues, opts.cratesIoFetch)
|
|
90
|
-
: undefined;
|
|
91
|
-
return {
|
|
92
|
-
ok: issues.length === 0,
|
|
93
|
-
issues,
|
|
94
|
-
packages,
|
|
95
|
-
...(artifacts !== undefined ? { artifacts } : {}),
|
|
96
|
-
...(trustPolicy !== undefined ? { trustPolicy } : {}),
|
|
97
|
-
...(trustPolicyDeclared !== undefined ? { trustPolicyDeclared } : {}),
|
|
98
|
-
...(trustPolicyCratesIo !== undefined ? { trustPolicyCratesIo } : {}),
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Trust-policy (local) phase. Additive; runs after auth-availability.
|
|
103
|
-
* Deferred to a follow-up: filename-vs-registry diff and environment-
|
|
104
|
-
* name-vs-registry diff (Option C of #162).
|
|
105
|
-
*/
|
|
106
|
-
function checkTrustPolicyLocal(workflows, issues) {
|
|
107
|
-
if (workflows.length === 0)
|
|
108
|
-
return undefined;
|
|
109
|
-
const report = { workflows: [] };
|
|
110
|
-
for (const wf of workflows) {
|
|
111
|
-
const wfIssues = [];
|
|
112
|
-
const invocation = checkPublishInvocation(wf);
|
|
113
|
-
if (invocation !== null) {
|
|
114
|
-
wfIssues.push(`trust-policy: ${wf.filename}: no clearly-identifiable publish step (commented out?)`);
|
|
115
|
-
}
|
|
116
|
-
const perms = checkPermissions(wf);
|
|
117
|
-
for (const p of perms) {
|
|
118
|
-
wfIssues.push(`trust-policy: ${wf.filename}: job \`${p.job}\` is missing \`${p.permission}\` permission — add it to the job or to workflow-level \`permissions:\``);
|
|
119
|
-
}
|
|
120
|
-
const env = checkEnvironment(wf);
|
|
121
|
-
if (env !== null) {
|
|
122
|
-
wfIssues.push(`trust-policy: ${wf.filename}: job \`${env.job}\` has no \`environment:\` key — many trust policies pin an environment; add one (e.g. \`environment: release\`) matching the registry registration`);
|
|
123
|
-
}
|
|
124
|
-
for (const line of wfIssues)
|
|
125
|
-
issues.push(line);
|
|
126
|
-
report.workflows.push({
|
|
127
|
-
filename: wf.filename,
|
|
128
|
-
permissions_ok: perms.length === 0,
|
|
129
|
-
environment_ok: env === null,
|
|
130
|
-
invocation_ok: invocation === null,
|
|
131
|
-
issues: wfIssues,
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
return report;
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Exported for CLI rendering: the explicit "what's NOT checked" line
|
|
138
|
-
* we surface below the trust-policy phase so a green doctor output
|
|
139
|
-
* doesn't imply the filename landmine is caught.
|
|
140
|
-
*/
|
|
141
|
-
export const TRUST_POLICY_SCOPE_NOTE = 'note: declare `[package.trust_policy]` to have `doctor` diff workflow + environment against the config. Registry cross-check is crates.io-only (set `CRATES_IO_DOCTOR_TOKEN`); PyPI and npm are declaration-only.';
|
|
142
|
-
/**
|
|
143
|
-
* Declared-diff phase (#189). For each package with a `[package.trust_policy]`
|
|
144
|
-
* block, diffs the declaration against:
|
|
145
|
-
* - the local workflow file that `findPublishWorkflows` identified
|
|
146
|
-
* - `GITHUB_WORKFLOW_REF` when running inside Actions
|
|
147
|
-
* Returns `undefined` when no package has a declaration.
|
|
148
|
-
*/
|
|
149
|
-
function checkTrustPolicyDeclared(packages, workflows, issues) {
|
|
150
|
-
const declared = packages.filter((p) => p.trust_policy !== undefined);
|
|
151
|
-
if (declared.length === 0)
|
|
152
|
-
return undefined;
|
|
153
|
-
const report = { packages: [] };
|
|
154
|
-
const localWorkflow = workflows[0]?.filename;
|
|
155
|
-
const inferred = inferFromGithubWorkflowRef();
|
|
156
|
-
for (const pkg of declared) {
|
|
157
|
-
const policy = pkg.trust_policy;
|
|
158
|
-
/* v8 ignore next -- filter guarantees trust_policy is set */
|
|
159
|
-
if (policy === undefined)
|
|
160
|
-
continue;
|
|
161
|
-
const pkgIssues = [];
|
|
162
|
-
let workflowOk = true;
|
|
163
|
-
let environmentOk = true;
|
|
164
|
-
let refOk = true;
|
|
165
|
-
if (localWorkflow !== undefined) {
|
|
166
|
-
const mismatch = diffWorkflowFilename(policy.workflow, localWorkflow);
|
|
167
|
-
if (mismatch !== null) {
|
|
168
|
-
workflowOk = false;
|
|
169
|
-
pkgIssues.push(renderWorkflowMismatch(pkg.name, mismatch));
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
if (policy.environment !== undefined) {
|
|
173
|
-
for (const wf of workflows) {
|
|
174
|
-
const envMismatch = diffEnvironment(policy.environment, wf);
|
|
175
|
-
if (envMismatch !== null) {
|
|
176
|
-
environmentOk = false;
|
|
177
|
-
pkgIssues.push(renderEnvironmentMismatch(pkg.name, envMismatch));
|
|
178
|
-
break;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
if (inferred !== null && inferred.workflow !== policy.workflow) {
|
|
183
|
-
refOk = false;
|
|
184
|
-
pkgIssues.push(`trust-policy: ${pkg.name}: GITHUB_WORKFLOW_REF says the running workflow is ${inferred.workflow}, but [package.trust_policy].workflow is ${policy.workflow}`);
|
|
185
|
-
}
|
|
186
|
-
for (const line of pkgIssues)
|
|
187
|
-
issues.push(line);
|
|
188
|
-
report.packages.push({
|
|
189
|
-
name: pkg.name,
|
|
190
|
-
workflow_ok: workflowOk,
|
|
191
|
-
environment_ok: environmentOk,
|
|
192
|
-
ref_ok: refOk,
|
|
193
|
-
issues: pkgIssues,
|
|
194
|
-
});
|
|
195
|
-
}
|
|
196
|
-
return report;
|
|
197
|
-
}
|
|
198
|
-
function renderWorkflowMismatch(pkgName, m) {
|
|
199
|
-
return `trust-policy: ${pkgName}: declared workflow ${m.declared} does not match local workflow ${m.actual} — update [package.trust_policy].workflow or rename the workflow file back`;
|
|
200
|
-
}
|
|
201
|
-
function renderEnvironmentMismatch(pkgName, m) {
|
|
202
|
-
const actual = m.actual ?? '(none)';
|
|
203
|
-
return `trust-policy: ${pkgName}: declared environment ${m.declared} does not match workflow ${m.workflow}'s environment ${actual}`;
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* Opt-in crates.io cross-check (#189). Silent-skip when
|
|
207
|
-
* `CRATES_IO_DOCTOR_TOKEN` is unset. For each `kind = "crates"` package
|
|
208
|
-
* with a declared `trust_policy`, fetches the registered configs and
|
|
209
|
-
* diffs against the declaration. Transient failures are neutral-skipped
|
|
210
|
-
* so a bad crates.io minute doesn't turn doctor red; 401 fails.
|
|
211
|
-
*/
|
|
212
|
-
async function checkTrustPolicyCratesIo(packages, issues, fetchFn = fetchCratesTrustPolicy) {
|
|
213
|
-
const crates = packages.filter((p) => p.kind === 'crates' && p.trust_policy !== undefined);
|
|
214
|
-
if (crates.length === 0)
|
|
215
|
-
return undefined;
|
|
216
|
-
const token = process.env.CRATES_IO_DOCTOR_TOKEN;
|
|
217
|
-
if (token === undefined || token.length === 0) {
|
|
218
|
-
return {
|
|
219
|
-
status: 'skipped',
|
|
220
|
-
reason: 'set CRATES_IO_DOCTOR_TOKEN to enable crates.io trust-policy cross-check',
|
|
221
|
-
crates: [],
|
|
222
|
-
};
|
|
223
|
-
}
|
|
224
|
-
const report = { status: 'ran', crates: [] };
|
|
225
|
-
for (const pkg of crates) {
|
|
226
|
-
const crateName = pkg.name;
|
|
227
|
-
const result = await fetchFn(crateName, token);
|
|
228
|
-
if (result.kind === 'skip-transient') {
|
|
229
|
-
report.crates.push({ name: crateName, status: 'skip-transient', reason: result.reason });
|
|
230
|
-
continue;
|
|
231
|
-
}
|
|
232
|
-
if (result.kind === 'auth-failed') {
|
|
233
|
-
report.crates.push({ name: crateName, status: 'auth-failed', reason: result.reason });
|
|
234
|
-
issues.push(`trust-policy: ${crateName}: ${result.reason}`);
|
|
235
|
-
continue;
|
|
236
|
-
}
|
|
237
|
-
const policy = pkg.trust_policy;
|
|
238
|
-
const mismatches = diffCratesTrust(crateName, {
|
|
239
|
-
workflow: policy.workflow,
|
|
240
|
-
...(policy.environment !== undefined ? { environment: policy.environment } : {}),
|
|
241
|
-
...(policy.repository !== undefined ? { repository: policy.repository } : {}),
|
|
242
|
-
}, result.configs);
|
|
243
|
-
if (mismatches.length === 0) {
|
|
244
|
-
report.crates.push({ name: crateName, status: 'ok' });
|
|
245
|
-
}
|
|
246
|
-
else {
|
|
247
|
-
report.crates.push({ name: crateName, status: 'mismatch', mismatches });
|
|
248
|
-
for (const m of mismatches) {
|
|
249
|
-
issues.push(`trust-policy: ${crateName}: crates.io has ${m.field} = ${m.registered ?? '(none)'}, config declares ${m.declared}`);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
return report;
|
|
254
|
-
}
|
|
255
|
-
async function checkArtifacts(opts, cfgPath, issues) {
|
|
256
|
-
let matrix;
|
|
257
|
-
try {
|
|
258
|
-
matrix = (await plan({ cwd: opts.cwd, configPath: cfgPath }));
|
|
259
|
-
}
|
|
260
|
-
catch (err) {
|
|
261
|
-
// Plan needs a git repo with at least one commit. In a scratch
|
|
262
|
-
// checkout (no git state yet) we can't walk the plan at all, so
|
|
263
|
-
// we note it as a soft issue and move on.
|
|
264
|
-
/* v8 ignore next -- non-Error catch fallback path */
|
|
265
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
266
|
-
issues.push(`artifacts: cannot walk plan (${message})`);
|
|
267
|
-
return [];
|
|
268
|
-
}
|
|
269
|
-
const root = join(opts.cwd, 'artifacts');
|
|
270
|
-
const rows = [];
|
|
271
|
-
for (const row of matrix) {
|
|
272
|
-
// Vanilla npm publishes from the source tree; there's no separate
|
|
273
|
-
// artifact dir to check. Mirrors completeness.ts's carve-out.
|
|
274
|
-
if (row.kind === 'npm' && row.target === 'noarch')
|
|
275
|
-
continue;
|
|
276
|
-
const dir = join(root, row.artifact_name);
|
|
277
|
-
const present = existsSync(dir);
|
|
278
|
-
const expected = expectedLayout(row);
|
|
279
|
-
rows.push({
|
|
280
|
-
package: row.name,
|
|
281
|
-
target: row.target,
|
|
282
|
-
artifact_name: row.artifact_name,
|
|
283
|
-
present,
|
|
284
|
-
expected,
|
|
285
|
-
});
|
|
286
|
-
if (!present) {
|
|
287
|
-
issues.push(`artifacts: ${row.name} (${row.target}) missing; expected ${expected}`);
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
return rows;
|
|
291
|
-
}
|
|
292
|
-
//# sourceMappingURL=doctor.js.map
|
package/dist/doctor.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/init.d.ts
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `putitoutthere init` — scaffold a new repo.
|
|
3
|
-
*
|
|
4
|
-
* Writes:
|
|
5
|
-
* - `putitoutthere.toml` (skeleton with `version = 1`, no packages)
|
|
6
|
-
* - `putitoutthere/AGENTS.md` (trailer convention doc per plan.md §17.3)
|
|
7
|
-
* - `.github/workflows/release.yml` + `.github/workflows/putitoutthere-check.yml`
|
|
8
|
-
* - Appends `@putitoutthere/AGENTS.md` to `CLAUDE.md` (creates if missing)
|
|
9
|
-
*
|
|
10
|
-
* Idempotency (plan.md §17.4):
|
|
11
|
-
* - Existing `putitoutthere.toml` → skip unless `--force`.
|
|
12
|
-
* - Existing workflow → if byte-identical, mark already-present (no .bak);
|
|
13
|
-
* otherwise rename to `.bak` before writing (#148).
|
|
14
|
-
* - Existing `CLAUDE.md` already containing the import line → skip the append.
|
|
15
|
-
*
|
|
16
|
-
* Issue #20 / #25. Plan: §9, §17.
|
|
17
|
-
*/
|
|
18
|
-
import { type Cadence } from './templates.js';
|
|
19
|
-
export interface InitOptions {
|
|
20
|
-
cwd: string;
|
|
21
|
-
/** Overwrite `putitoutthere.toml` even if it exists. */
|
|
22
|
-
force?: boolean;
|
|
23
|
-
/** Reserved for v0.1. Only `claude` supported today. */
|
|
24
|
-
agent?: 'claude' | 'cursor';
|
|
25
|
-
/** Release cadence; selects which release.yml template to emit. */
|
|
26
|
-
cadence?: Cadence;
|
|
27
|
-
}
|
|
28
|
-
export interface InitResult {
|
|
29
|
-
wrote: string[];
|
|
30
|
-
/**
|
|
31
|
-
* Files skipped because they already exist and `--force` would
|
|
32
|
-
* overwrite them. Just `putitoutthere.toml` today.
|
|
33
|
-
*/
|
|
34
|
-
skipped: string[];
|
|
35
|
-
/**
|
|
36
|
-
* Files already in a correct state (AGENTS.md exists untouched,
|
|
37
|
-
* CLAUDE.md already imports the trailer doc, etc.). `--force`
|
|
38
|
-
* would not change these, so the CLI shouldn't suggest it.
|
|
39
|
-
*/
|
|
40
|
-
alreadyPresent: string[];
|
|
41
|
-
backedUp: string[];
|
|
42
|
-
/**
|
|
43
|
-
* Short notes for the CLI to surface to the user — e.g. "detected
|
|
44
|
-
* existing v* tags; suggested tag_format = \"v{version}\" in the
|
|
45
|
-
* skeleton." Not errors; just signal about automatic decisions.
|
|
46
|
-
*/
|
|
47
|
-
notes: string[];
|
|
48
|
-
}
|
|
49
|
-
export declare function init(opts: InitOptions): InitResult;
|
|
50
|
-
/**
|
|
51
|
-
* Shape returned when the repo already carries a `v{X.Y.Z}` tag
|
|
52
|
-
* history. The caller embeds a `tag_format = "v{version}"` line in
|
|
53
|
-
* the emitted TOML skeleton and surfaces a note to the user.
|
|
54
|
-
*/
|
|
55
|
-
export interface TagFormatSuggestion {
|
|
56
|
-
tag_format: 'v{version}';
|
|
57
|
-
detectedTags: string[];
|
|
58
|
-
}
|
|
59
|
-
//# sourceMappingURL=init.d.ts.map
|
package/dist/init.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,OAAO,EAAkD,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9F,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,wDAAwD;IACxD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,wDAAwD;IACxD,KAAK,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,mEAAmE;IACnE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB;;;OAGG;IACH,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB;;;;OAIG;IACH,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;;;OAIG;IACH,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,UAAU,CAiFlD;AAgCD;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,YAAY,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB"}
|
package/dist/init.js
DELETED
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `putitoutthere init` — scaffold a new repo.
|
|
3
|
-
*
|
|
4
|
-
* Writes:
|
|
5
|
-
* - `putitoutthere.toml` (skeleton with `version = 1`, no packages)
|
|
6
|
-
* - `putitoutthere/AGENTS.md` (trailer convention doc per plan.md §17.3)
|
|
7
|
-
* - `.github/workflows/release.yml` + `.github/workflows/putitoutthere-check.yml`
|
|
8
|
-
* - Appends `@putitoutthere/AGENTS.md` to `CLAUDE.md` (creates if missing)
|
|
9
|
-
*
|
|
10
|
-
* Idempotency (plan.md §17.4):
|
|
11
|
-
* - Existing `putitoutthere.toml` → skip unless `--force`.
|
|
12
|
-
* - Existing workflow → if byte-identical, mark already-present (no .bak);
|
|
13
|
-
* otherwise rename to `.bak` before writing (#148).
|
|
14
|
-
* - Existing `CLAUDE.md` already containing the import line → skip the append.
|
|
15
|
-
*
|
|
16
|
-
* Issue #20 / #25. Plan: §9, §17.
|
|
17
|
-
*/
|
|
18
|
-
import { execFileSync } from 'node:child_process';
|
|
19
|
-
import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
|
|
20
|
-
import { dirname, join } from 'node:path';
|
|
21
|
-
import { AGENTS_MD, CHECK_YML, releaseYml, tomlSkeleton } from './templates.js';
|
|
22
|
-
export function init(opts) {
|
|
23
|
-
const cwd = opts.cwd;
|
|
24
|
-
const force = Boolean(opts.force);
|
|
25
|
-
const agent = opts.agent ?? 'claude';
|
|
26
|
-
const cadence = opts.cadence ?? 'immediate';
|
|
27
|
-
const result = {
|
|
28
|
-
wrote: [],
|
|
29
|
-
skipped: [],
|
|
30
|
-
alreadyPresent: [],
|
|
31
|
-
backedUp: [],
|
|
32
|
-
notes: [],
|
|
33
|
-
};
|
|
34
|
-
// 1. putitoutthere.toml -- `--force`-gated.
|
|
35
|
-
// Detect single-package shape + existing v* tag history so we suggest
|
|
36
|
-
// `tag_format = "v{version}"` instead of leaving the commented-out
|
|
37
|
-
// default — which would fork a parallel {name}-v{version} timeline on
|
|
38
|
-
// repos that already tag as v*. #204.
|
|
39
|
-
const suggestion = detectTagFormatSuggestion(cwd);
|
|
40
|
-
const tomlPath = join(cwd, 'putitoutthere.toml');
|
|
41
|
-
if (existsSync(tomlPath) && !force) {
|
|
42
|
-
result.skipped.push('putitoutthere.toml');
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
const seeds = suggestion
|
|
46
|
-
? {
|
|
47
|
-
tag_format: suggestion.tag_format,
|
|
48
|
-
tag_format_reason: `existing v*-style tag history (${suggestion.detectedTags
|
|
49
|
-
.slice(0, 3)
|
|
50
|
-
.join(', ')}${suggestion.detectedTags.length > 3 ? ', …' : ''})`,
|
|
51
|
-
}
|
|
52
|
-
: null;
|
|
53
|
-
writeAtomic(tomlPath, tomlSkeleton(seeds));
|
|
54
|
-
result.wrote.push('putitoutthere.toml');
|
|
55
|
-
if (suggestion !== null) {
|
|
56
|
-
result.notes.push(`tag_format: detected existing \`v*\` tags (${suggestion.detectedTags.slice(0, 3).join(', ')}${suggestion.detectedTags.length > 3 ? ', …' : ''}); suggested \`tag_format = "v{version}"\` in putitoutthere.toml to keep the existing timeline. Edit the file to override.`);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
// 2. putitoutthere/AGENTS.md -- not `--force`-gated; users edit this.
|
|
60
|
-
const agentsPath = join(cwd, 'putitoutthere', 'AGENTS.md');
|
|
61
|
-
if (existsSync(agentsPath)) {
|
|
62
|
-
result.alreadyPresent.push('putitoutthere/AGENTS.md');
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
writeAtomic(agentsPath, AGENTS_MD);
|
|
66
|
-
result.wrote.push('putitoutthere/AGENTS.md');
|
|
67
|
-
}
|
|
68
|
-
// 3. CLAUDE.md / .cursorrules -- append-only; skip if already imported.
|
|
69
|
-
if (agent === 'claude') {
|
|
70
|
-
const claudePath = join(cwd, 'CLAUDE.md');
|
|
71
|
-
const importLine = '@putitoutthere/AGENTS.md';
|
|
72
|
-
const existing = existsSync(claudePath) ? readFileSync(claudePath, 'utf8') : '';
|
|
73
|
-
if (existing.includes(importLine)) {
|
|
74
|
-
result.alreadyPresent.push('CLAUDE.md');
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
const sep = existing.length > 0 && !existing.endsWith('\n') ? '\n' : '';
|
|
78
|
-
writeAtomic(claudePath, `${existing}${sep}${importLine}\n`);
|
|
79
|
-
result.wrote.push('CLAUDE.md');
|
|
80
|
-
}
|
|
81
|
-
/* v8 ignore start -- cursor path is stub-level until requested */
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
const cursorPath = join(cwd, '.cursorrules');
|
|
85
|
-
const existing = existsSync(cursorPath) ? readFileSync(cursorPath, 'utf8') : '';
|
|
86
|
-
if (existing.includes('Release signaling for Put It Out There')) {
|
|
87
|
-
result.alreadyPresent.push('.cursorrules');
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
writeAtomic(cursorPath, `${existing}${existing.length > 0 ? '\n' : ''}${AGENTS_MD}`);
|
|
91
|
-
result.wrote.push('.cursorrules');
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
/* v8 ignore stop */
|
|
95
|
-
// 4. Workflows
|
|
96
|
-
writeWorkflow(cwd, 'release.yml', releaseYml(cadence), result);
|
|
97
|
-
writeWorkflow(cwd, 'putitoutthere-check.yml', CHECK_YML, result);
|
|
98
|
-
return result;
|
|
99
|
-
}
|
|
100
|
-
/* ---------------------------- internals ---------------------------- */
|
|
101
|
-
function writeWorkflow(cwd, name, contents, result) {
|
|
102
|
-
const target = join(cwd, '.github', 'workflows', name);
|
|
103
|
-
const rel = `.github/workflows/${name}`;
|
|
104
|
-
if (existsSync(target)) {
|
|
105
|
-
// #148: skip the `.bak` dance when the existing file is already
|
|
106
|
-
// byte-identical to what init would write. Otherwise re-running init
|
|
107
|
-
// pollutes the working tree with a fresh .bak each time.
|
|
108
|
-
const existing = readFileSync(target, 'utf8');
|
|
109
|
-
if (existing === contents) {
|
|
110
|
-
result.alreadyPresent.push(rel);
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
const bak = `${target}.bak`;
|
|
114
|
-
renameSync(target, bak);
|
|
115
|
-
result.backedUp.push(rel);
|
|
116
|
-
}
|
|
117
|
-
writeAtomic(target, contents);
|
|
118
|
-
result.wrote.push(rel);
|
|
119
|
-
}
|
|
120
|
-
function writeAtomic(path, contents) {
|
|
121
|
-
// lgtm[js/insecure-temporary-file] -- writes into opts.cwd, which
|
|
122
|
-
// is the user's project root in production; only the test harness
|
|
123
|
-
// passes an os.tmpdir() subpath here, and that's controlled input.
|
|
124
|
-
mkdirSync(dirname(path), { recursive: true, mode: 0o755 });
|
|
125
|
-
writeFileSync(path, contents, { encoding: 'utf8', mode: 0o644 });
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Look for strict-semver `v*` tags on the current checkout. When
|
|
129
|
-
* present (and no `<name>-v*` tags are also present), suggest
|
|
130
|
-
* `tag_format = "v{version}"` in the skeleton so the adopter's next
|
|
131
|
-
* release stays on their existing tag timeline instead of starting a
|
|
132
|
-
* parallel `{name}-v{version}` one. #204.
|
|
133
|
-
*
|
|
134
|
-
* Returns null in any of these cases (default `{name}-v{version}` is
|
|
135
|
-
* right):
|
|
136
|
-
* - Not a git repo / `git` not on PATH.
|
|
137
|
-
* - No `v{X.Y.Z}` tags.
|
|
138
|
-
* - `<name>-v*` tags already exist (the repo is polyglot-shaped).
|
|
139
|
-
*/
|
|
140
|
-
function detectTagFormatSuggestion(cwd) {
|
|
141
|
-
let vTags;
|
|
142
|
-
try {
|
|
143
|
-
const out = execFileSync('git', ['tag', '-l', 'v*.*.*'], {
|
|
144
|
-
cwd,
|
|
145
|
-
encoding: 'utf8',
|
|
146
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
147
|
-
})
|
|
148
|
-
.trim()
|
|
149
|
-
.split('\n')
|
|
150
|
-
.filter((l) => /^v\d+\.\d+\.\d+$/.test(l));
|
|
151
|
-
vTags = out;
|
|
152
|
-
}
|
|
153
|
-
catch {
|
|
154
|
-
return null;
|
|
155
|
-
}
|
|
156
|
-
if (vTags.length === 0)
|
|
157
|
-
return null;
|
|
158
|
-
// If any `<name>-v*` tag exists, the repo is polyglot-shaped; don't
|
|
159
|
-
// hijack the default.
|
|
160
|
-
/* v8 ignore start -- defensive: the first git call succeeded above,
|
|
161
|
-
* so this one with a different glob is vanishingly unlikely to fail.
|
|
162
|
-
* Kept as belt-and-braces for unusual filesystems. */
|
|
163
|
-
try {
|
|
164
|
-
const out = execFileSync('git', ['tag', '-l', '*-v*.*.*'], {
|
|
165
|
-
cwd,
|
|
166
|
-
encoding: 'utf8',
|
|
167
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
168
|
-
})
|
|
169
|
-
.trim()
|
|
170
|
-
.split('\n')
|
|
171
|
-
.filter((l) => /^.+-v\d+\.\d+\.\d+$/.test(l));
|
|
172
|
-
if (out.length > 0)
|
|
173
|
-
return null;
|
|
174
|
-
}
|
|
175
|
-
catch {
|
|
176
|
-
/* fall through */
|
|
177
|
-
}
|
|
178
|
-
/* v8 ignore stop */
|
|
179
|
-
return { tag_format: 'v{version}', detectedTags: vTags };
|
|
180
|
-
}
|
|
181
|
-
//# sourceMappingURL=init.js.map
|
package/dist/init.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
package/dist/keyring.d.ts
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Keyring — persistent storage for the user access token obtained
|
|
3
|
-
* through `auth login`.
|
|
4
|
-
*
|
|
5
|
-
* Ships with a file-backed implementation (chmod 0600 in an XDG-
|
|
6
|
-
* compliant config dir). The `Keyring` interface is the seam for
|
|
7
|
-
* swapping in an OS keychain binding (e.g. `keytar`) later; see #105.
|
|
8
|
-
*
|
|
9
|
-
* Token values are never logged. Callers pass the whole `StoredAuth`
|
|
10
|
-
* in and out; this module does not expose a "read just the access
|
|
11
|
-
* token" affordance that could encourage stringification.
|
|
12
|
-
*/
|
|
13
|
-
export interface StoredAuth {
|
|
14
|
-
/** GitHub login of the account that approved the Device Flow. */
|
|
15
|
-
account: string;
|
|
16
|
-
access_token: string;
|
|
17
|
-
refresh_token: string;
|
|
18
|
-
/** Epoch seconds. */
|
|
19
|
-
access_token_expires_at: number;
|
|
20
|
-
/** Epoch seconds. */
|
|
21
|
-
refresh_token_expires_at: number;
|
|
22
|
-
}
|
|
23
|
-
export interface Keyring {
|
|
24
|
-
get(): Promise<StoredAuth | null>;
|
|
25
|
-
set(auth: StoredAuth): Promise<void>;
|
|
26
|
-
delete(): Promise<void>;
|
|
27
|
-
}
|
|
28
|
-
export interface FileKeyringOptions {
|
|
29
|
-
/** Override the resolved config dir. Tests inject a tmp path. */
|
|
30
|
-
dir?: string;
|
|
31
|
-
}
|
|
32
|
-
export declare function fileKeyring(opts?: FileKeyringOptions): Keyring;
|
|
33
|
-
/** Returned for production callers. */
|
|
34
|
-
export declare function defaultKeyring(): Keyring;
|
|
35
|
-
//# sourceMappingURL=keyring.d.ts.map
|
package/dist/keyring.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"keyring.d.ts","sourceRoot":"","sources":["../src/keyring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAaH,MAAM,WAAW,UAAU;IACzB,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB;IACrB,uBAAuB,EAAE,MAAM,CAAC;IAChC,qBAAqB;IACrB,wBAAwB,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,OAAO;IACtB,GAAG,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAClC,GAAG,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,iEAAiE;IACjE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,WAAW,CAAC,IAAI,GAAE,kBAAuB,GAAG,OAAO,CA4BlE;AAED,uCAAuC;AACvC,wBAAgB,cAAc,IAAI,OAAO,CAExC"}
|