@juangadm/pre-post 1.0.0 → 1.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 +99 -20
- package/dist/baseline.d.ts +208 -0
- package/dist/baseline.d.ts.map +1 -0
- package/dist/baseline.js +413 -0
- package/dist/baseline.js.map +1 -0
- package/dist/bin/cli.js +87 -42
- package/dist/bin/cli.js.map +1 -1
- package/dist/browser.d.ts +31 -3
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +291 -97
- package/dist/browser.js.map +1 -1
- package/dist/commands/compare.d.ts.map +1 -1
- package/dist/commands/compare.js +21 -3
- package/dist/commands/compare.js.map +1 -1
- package/dist/commands/detect.d.ts +5 -0
- package/dist/commands/detect.d.ts.map +1 -1
- package/dist/commands/detect.js +4 -1
- package/dist/commands/detect.js.map +1 -1
- package/dist/commands/doctor.d.ts +32 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +90 -9
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/login.js +1 -1
- package/dist/commands/pr.d.ts +4 -0
- package/dist/commands/pr.d.ts.map +1 -1
- package/dist/commands/pr.js +157 -51
- package/dist/commands/pr.js.map +1 -1
- package/dist/commands/prune.js +1 -1
- package/dist/commands/prune.js.map +1 -1
- package/dist/comparison.d.ts +104 -0
- package/dist/comparison.d.ts.map +1 -0
- package/dist/comparison.js +241 -0
- package/dist/comparison.js.map +1 -0
- package/dist/config.d.ts +12 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +25 -3
- package/dist/config.js.map +1 -1
- package/dist/deployments.d.ts +71 -0
- package/dist/deployments.d.ts.map +1 -0
- package/dist/deployments.js +204 -0
- package/dist/deployments.js.map +1 -0
- package/dist/diff-pool.d.ts.map +1 -1
- package/dist/diff-pool.js +5 -2
- package/dist/diff-pool.js.map +1 -1
- package/dist/diff-worker.d.ts +3 -0
- package/dist/diff-worker.d.ts.map +1 -1
- package/dist/diff-worker.js +1 -0
- package/dist/diff-worker.js.map +1 -1
- package/dist/diff.d.ts +10 -0
- package/dist/diff.d.ts.map +1 -1
- package/dist/diff.js +117 -7
- package/dist/diff.js.map +1 -1
- package/dist/doctor.d.ts +42 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +73 -7
- package/dist/doctor.js.map +1 -1
- package/dist/git.d.ts +41 -3
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +103 -7
- package/dist/git.js.map +1 -1
- package/dist/github.d.ts +92 -2
- package/dist/github.d.ts.map +1 -1
- package/dist/github.js +191 -20
- package/dist/github.js.map +1 -1
- package/dist/landing.d.ts +48 -0
- package/dist/landing.d.ts.map +1 -0
- package/dist/landing.js +93 -0
- package/dist/landing.js.map +1 -0
- package/dist/pkg.d.ts +9 -0
- package/dist/pkg.d.ts.map +1 -1
- package/dist/pkg.js +14 -0
- package/dist/pkg.js.map +1 -1
- package/dist/report.d.ts.map +1 -1
- package/dist/report.js +59 -28
- package/dist/report.js.map +1 -1
- package/dist/routes.d.ts +27 -0
- package/dist/routes.d.ts.map +1 -1
- package/dist/routes.js +98 -23
- package/dist/routes.js.map +1 -1
- package/dist/run.d.ts +88 -8
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +224 -28
- package/dist/run.js.map +1 -1
- package/dist/sameness.d.ts +91 -0
- package/dist/sameness.d.ts.map +1 -0
- package/dist/sameness.js +157 -0
- package/dist/sameness.js.map +1 -0
- package/dist/sessions.d.ts.map +1 -1
- package/dist/sessions.js +7 -1
- package/dist/sessions.js.map +1 -1
- package/dist/shift.d.ts +67 -0
- package/dist/shift.d.ts.map +1 -0
- package/dist/shift.js +184 -0
- package/dist/shift.js.map +1 -0
- package/dist/types.d.ts +83 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +17 -0
- package/dist/types.js.map +1 -1
- package/dist/url.d.ts +12 -0
- package/dist/url.d.ts.map +1 -0
- package/dist/url.js +30 -0
- package/dist/url.js.map +1 -0
- package/package.json +1 -1
- package/skill/SKILL.md +40 -7
package/dist/git.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Thin git helpers. Every call is a single short-lived subprocess.
|
|
3
3
|
*/
|
|
4
4
|
import { execFileSync } from 'child_process';
|
|
5
|
+
import { NeedsHumanError } from './errors.js';
|
|
5
6
|
export function git(args, cwd = process.cwd()) {
|
|
6
7
|
return execFileSync('git', args, { cwd, encoding: 'utf-8', stdio: ['ignore', 'pipe', 'pipe'] }).trim();
|
|
7
8
|
}
|
|
@@ -62,21 +63,116 @@ export function defaultBranch(cwd) {
|
|
|
62
63
|
}
|
|
63
64
|
/** Merge base between HEAD and the default branch, or null when unknown. */
|
|
64
65
|
export function mergeBase(cwd) {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
return mergeBaseWith(defaultBranch(cwd), cwd);
|
|
67
|
+
}
|
|
68
|
+
function mergeBaseWith(branch, cwd) {
|
|
69
|
+
return tryGit(['merge-base', `origin/${branch}`, 'HEAD'], cwd)
|
|
70
|
+
|| tryGit(['merge-base', branch, 'HEAD'], cwd);
|
|
71
|
+
}
|
|
72
|
+
/** True when this clone was made with --depth, so its history may be missing. */
|
|
73
|
+
export function isShallow(cwd) {
|
|
74
|
+
return tryGit(['rev-parse', '--is-shallow-repository'], cwd) === 'true';
|
|
75
|
+
}
|
|
76
|
+
/** The branch this work forked from: the CI hint first, then origin's default. */
|
|
77
|
+
export function baseBranchName(cwd) {
|
|
78
|
+
// GitHub Actions sets this on pull_request events, and it is more reliable
|
|
79
|
+
// than origin/HEAD in a checkout that has neither.
|
|
80
|
+
const env = process.env.GITHUB_BASE_REF?.trim();
|
|
81
|
+
return env || defaultBranch(cwd);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Make the base branch reachable in a clone that does not have it.
|
|
85
|
+
*
|
|
86
|
+
* Sandbox and web environments check a branch out with `--depth 1
|
|
87
|
+
* --single-branch`, which leaves no origin/<base> ref and no shared history to
|
|
88
|
+
* fork from. Widen in three steps, stopping as soon as a merge base appears, so
|
|
89
|
+
* the common case costs one shallow fetch rather than the whole history.
|
|
90
|
+
*/
|
|
91
|
+
function fetchBase(branch, cwd) {
|
|
92
|
+
const refspec = `+refs/heads/${branch}:refs/remotes/origin/${branch}`;
|
|
93
|
+
const attempts = [
|
|
94
|
+
['fetch', '--no-tags', '--depth=50', 'origin', refspec],
|
|
95
|
+
['fetch', '--no-tags', '--deepen=200', 'origin', refspec],
|
|
96
|
+
['fetch', '--no-tags', '--unshallow', 'origin', refspec],
|
|
97
|
+
];
|
|
98
|
+
for (const args of attempts) {
|
|
99
|
+
// A deepen or unshallow against a complete clone is an error, not a result.
|
|
100
|
+
if (tryGit(args, cwd) === null)
|
|
101
|
+
continue;
|
|
102
|
+
if (mergeBaseWith(branch, cwd))
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* git's empty tree. Diffing against it lists every tracked file, which is the
|
|
109
|
+
* honest answer in a repository whose first commit has not happened yet.
|
|
110
|
+
*/
|
|
111
|
+
export const EMPTY_TREE = '4b825dc642cb6eb9a060e54bf8d69288fbee4904';
|
|
112
|
+
/**
|
|
113
|
+
* The commit this branch forked from, or null when that cannot be established.
|
|
114
|
+
*
|
|
115
|
+
* Null is a real answer and callers must treat it as one: diffing against HEAD
|
|
116
|
+
* instead reports only uncommitted work, so a branch whose changes are
|
|
117
|
+
* committed comes back as "nothing changed" — the wrong answer, stated
|
|
118
|
+
* confidently.
|
|
119
|
+
*/
|
|
120
|
+
export function resolveBase(cwd = process.cwd(), opts = {}) {
|
|
121
|
+
if (opts.explicit) {
|
|
122
|
+
const sha = tryGit(['rev-parse', '--verify', '--quiet', `${opts.explicit}^{commit}`], cwd);
|
|
123
|
+
if (!sha)
|
|
124
|
+
throw new NeedsHumanError(`--base ${opts.explicit} is not a commit in this repository.`);
|
|
125
|
+
return { sha, source: 'explicit' };
|
|
126
|
+
}
|
|
127
|
+
// No commits yet: everything in the tree is new, and there is nothing to
|
|
128
|
+
// fork from. Not a failure — a repository at its very beginning.
|
|
129
|
+
if (!headSha(cwd))
|
|
130
|
+
return { sha: EMPTY_TREE, source: 'head' };
|
|
131
|
+
const branch = baseBranchName(cwd);
|
|
132
|
+
const local = mergeBaseWith(branch, cwd);
|
|
133
|
+
if (local)
|
|
134
|
+
return { sha: local, source: 'merge-base', branch };
|
|
135
|
+
if (opts.fetch !== false) {
|
|
136
|
+
opts.log?.(`No local history for ${branch}; fetching it to see what this branch changed.`);
|
|
137
|
+
if (fetchBase(branch, cwd)) {
|
|
138
|
+
const sha = mergeBaseWith(branch, cwd);
|
|
139
|
+
if (sha)
|
|
140
|
+
return { sha, source: 'fetched', branch };
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Standing on the base branch with nothing to fork from: the change under
|
|
144
|
+
// review is whatever is uncommitted, which is what diffing HEAD reports.
|
|
145
|
+
if (currentBranch(cwd) === branch) {
|
|
146
|
+
const head = headSha(cwd);
|
|
147
|
+
if (head)
|
|
148
|
+
return { sha: head, source: 'head', branch };
|
|
149
|
+
}
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
/** `resolveBase`, with the one sentence a human needs when it comes back null. */
|
|
153
|
+
export function requireBase(cwd, opts = {}) {
|
|
154
|
+
const base = resolveBase(cwd, opts);
|
|
155
|
+
if (base)
|
|
156
|
+
return base;
|
|
157
|
+
const branch = baseBranchName(cwd);
|
|
158
|
+
throw new NeedsHumanError(`Cannot tell what this branch changed: this clone shares no history with ${branch}` +
|
|
159
|
+
`${isShallow(cwd) ? ' (it is a shallow checkout)' : ''}. ` +
|
|
160
|
+
`Run \`git fetch origin ${branch}\`, or pass --base <ref>.`);
|
|
68
161
|
}
|
|
69
162
|
function lines(out) {
|
|
70
163
|
return out ? out.split('\n').map(l => l.trim()).filter(Boolean) : [];
|
|
71
164
|
}
|
|
72
165
|
/**
|
|
73
|
-
* Files changed
|
|
74
|
-
*
|
|
166
|
+
* Files changed relative to `diffTarget`, plus anything staged, unstaged, or
|
|
167
|
+
* untracked. Paths are relative to the repo root.
|
|
168
|
+
*
|
|
169
|
+
* The target is required: working it out is `resolveBase`'s job, because
|
|
170
|
+
* guessing it wrong here is silent and reports an empty diff.
|
|
75
171
|
*/
|
|
76
|
-
export function changedFiles(cwd
|
|
172
|
+
export function changedFiles(cwd, diffTarget) {
|
|
77
173
|
const files = new Set();
|
|
78
174
|
const root = repoRoot(cwd);
|
|
79
|
-
const target = diffTarget
|
|
175
|
+
const target = diffTarget;
|
|
80
176
|
lines(tryGit(['diff', '--name-only', target], root)).forEach(f => files.add(f));
|
|
81
177
|
lines(tryGit(['diff', '--name-only', '--cached'], root)).forEach(f => files.add(f));
|
|
82
178
|
lines(tryGit(['diff', '--name-only'], root)).forEach(f => files.add(f));
|
package/dist/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
|
package/dist/github.d.ts
CHANGED
|
@@ -9,15 +9,90 @@
|
|
|
9
9
|
*/
|
|
10
10
|
export { GitHubError } from './errors.js';
|
|
11
11
|
export declare const API_BASE: string;
|
|
12
|
+
/** Where a token came from. Which one it is decides how a rejection is fixed. */
|
|
13
|
+
export type TokenSource = 'GH_TOKEN' | 'GITHUB_TOKEN' | 'gh';
|
|
14
|
+
export interface FoundToken {
|
|
15
|
+
token: string;
|
|
16
|
+
source: TokenSource;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* The token this run will use, and where it came from.
|
|
20
|
+
*
|
|
21
|
+
* The source is not bookkeeping: the env vars take precedence over the `gh`
|
|
22
|
+
* CLI, so advice aimed at the wrong one is advice that cannot work. Someone
|
|
23
|
+
* whose `GH_TOKEN` is refused gains nothing from `gh auth login`, because the
|
|
24
|
+
* variable still wins on the next run.
|
|
25
|
+
*/
|
|
26
|
+
export declare function findToken(): FoundToken | null;
|
|
12
27
|
export declare function getToken(): string | null;
|
|
13
|
-
/** A token, or the one sentence telling the human how to get one. */
|
|
14
|
-
export declare function requireToken(purpose?: string):
|
|
28
|
+
/** A token and its source, or the one sentence telling the human how to get one. */
|
|
29
|
+
export declare function requireToken(purpose?: string): FoundToken;
|
|
15
30
|
export declare class GitHub {
|
|
16
31
|
private readonly token;
|
|
17
32
|
private readonly base;
|
|
18
33
|
constructor(token: string, base?: string);
|
|
19
34
|
request<T = any>(method: string, path: string, body?: unknown): Promise<T>;
|
|
20
35
|
}
|
|
36
|
+
/** What one write attempt established about this token's access to a repository. */
|
|
37
|
+
export type WriteAccess =
|
|
38
|
+
/** The token wrote an object. It may still be refused a ref by a ruleset. */
|
|
39
|
+
{
|
|
40
|
+
writable: true;
|
|
41
|
+
}
|
|
42
|
+
/** GitHub refused the write. Nothing this run publishes will land. */
|
|
43
|
+
| {
|
|
44
|
+
writable: false;
|
|
45
|
+
reason: 'rejected';
|
|
46
|
+
}
|
|
47
|
+
/** Nobody answered, or answered something that is not about access. */
|
|
48
|
+
| {
|
|
49
|
+
writable: false;
|
|
50
|
+
reason: 'unknown';
|
|
51
|
+
detail: string;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Can this token write to `ownerRepo`?
|
|
55
|
+
*
|
|
56
|
+
* `getToken()` checks that a token exists, which is a different question. A
|
|
57
|
+
* GitHub Actions job that maps `secrets.GITHUB_TOKEN` gets one that reads
|
|
58
|
+
* everything this tool reads and writes nothing: measured on this repository,
|
|
59
|
+
* `GET /repos/juangadm/pre-post` answers 200 with `permissions.push: false`
|
|
60
|
+
* and `POST .../git/blobs` answers 403. Those reads are the ones `pr` makes
|
|
61
|
+
* before it captures, so without this the run spends its screenshots first and
|
|
62
|
+
* discovers the refusal after.
|
|
63
|
+
*
|
|
64
|
+
* The probe is the first write `publishAssets` makes, on the one piece of
|
|
65
|
+
* content that cannot add anything: the empty blob already exists in every
|
|
66
|
+
* repository, so a successful call stores nothing new. A read cannot stand in
|
|
67
|
+
* for it — `permissions.push` describes the account's access to the repository,
|
|
68
|
+
* not the scopes the token carries, so it can report `true` for a credential
|
|
69
|
+
* the write still refuses. That is the confident all-clear this check exists to
|
|
70
|
+
* avoid, which is why it writes.
|
|
71
|
+
*
|
|
72
|
+
* What it proves is bounded: the token may write objects. Creating the assets
|
|
73
|
+
* *ref* is a separate permission a ruleset can refuse, so `writable: true` is
|
|
74
|
+
* "not this failure", never "the publish will work".
|
|
75
|
+
*/
|
|
76
|
+
export declare function checkWriteAccess(gh: GitHub, ownerRepo: string): Promise<WriteAccess>;
|
|
77
|
+
/**
|
|
78
|
+
* The one thing to do about a token that cannot publish.
|
|
79
|
+
*
|
|
80
|
+
* It follows the credential that was actually chosen, not just the
|
|
81
|
+
* environment. Being inside a runner does not make `permissions:` the fix: a
|
|
82
|
+
* workflow that sets `GH_TOKEN` to a PAT is refused by that PAT, and rewriting
|
|
83
|
+
* the job's permissions changes only the `GITHUB_TOKEN` the run never reaches.
|
|
84
|
+
* The same holds the other way round on a laptop, where `gh auth login` cannot
|
|
85
|
+
* help while an env var is shadowing it.
|
|
86
|
+
*
|
|
87
|
+
* The runner sentence names both permissions, though only `contents` is what
|
|
88
|
+
* this check tested. Naming `contents` alone would be advice that fails on its
|
|
89
|
+
* own terms: a `permissions:` block sets every scope it omits to none, so
|
|
90
|
+
* following it leaves a token that uploads the screenshots and is then refused
|
|
91
|
+
* the PR description — measured on this repository, `PATCH /pulls/23` answers
|
|
92
|
+
* 403 with only `contents: write` and 200 with `pull-requests: write` beside it.
|
|
93
|
+
* A second trip through a full capture is not worth the tighter sentence.
|
|
94
|
+
*/
|
|
95
|
+
export declare function cannotPublishHint(ownerRepo: string, source: TokenSource): string;
|
|
21
96
|
export interface PullRequestRef {
|
|
22
97
|
number: number;
|
|
23
98
|
html_url: string;
|
|
@@ -27,6 +102,7 @@ export interface PullRequestRef {
|
|
|
27
102
|
};
|
|
28
103
|
base: {
|
|
29
104
|
ref: string;
|
|
105
|
+
sha: string;
|
|
30
106
|
};
|
|
31
107
|
title: string;
|
|
32
108
|
}
|
|
@@ -60,6 +136,20 @@ export interface CommentResult {
|
|
|
60
136
|
* Create or update the single pre-post comment on a PR, identified by `marker`.
|
|
61
137
|
*/
|
|
62
138
|
export declare function upsertStickyComment(gh: GitHub, ownerRepo: string, prNumber: number, body: string, marker: string): Promise<CommentResult>;
|
|
139
|
+
export interface DescriptionResult {
|
|
140
|
+
html_url: string;
|
|
141
|
+
/** False when the PR body could not be edited and nothing was written. */
|
|
142
|
+
updated: boolean;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Write `body` into a marked block in the PR description, replacing the block
|
|
146
|
+
* from a previous run. The description is where reviewers look first, so this
|
|
147
|
+
* is preferred over a comment.
|
|
148
|
+
*
|
|
149
|
+
* Returns updated: false when the token cannot edit the PR (a fork, or no write
|
|
150
|
+
* access), so the caller can fall back to a comment instead of failing.
|
|
151
|
+
*/
|
|
152
|
+
export declare function upsertPrDescription(gh: GitHub, ownerRepo: string, prNumber: number, body: string, marker: string): Promise<DescriptionResult>;
|
|
63
153
|
export interface PruneResult {
|
|
64
154
|
removed: string[];
|
|
65
155
|
kept: string[];
|
package/dist/github.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../src/github.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,eAAO,MAAM,QAAQ,QAAyD,CAAC;AAE/E,wBAAgB,QAAQ,IAAI,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../src/github.ts"],"names":[],"mappings":"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"}
|
package/dist/github.js
CHANGED
|
@@ -11,24 +11,36 @@ import { execFileSync } from 'child_process';
|
|
|
11
11
|
import { GitHubError, NeedsHumanError, GH_LOGIN_HINT } from './errors.js';
|
|
12
12
|
export { GitHubError } from './errors.js';
|
|
13
13
|
export const API_BASE = process.env.GITHUB_API_URL || 'https://api.github.com';
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
/**
|
|
15
|
+
* The token this run will use, and where it came from.
|
|
16
|
+
*
|
|
17
|
+
* The source is not bookkeeping: the env vars take precedence over the `gh`
|
|
18
|
+
* CLI, so advice aimed at the wrong one is advice that cannot work. Someone
|
|
19
|
+
* whose `GH_TOKEN` is refused gains nothing from `gh auth login`, because the
|
|
20
|
+
* variable still wins on the next run.
|
|
21
|
+
*/
|
|
22
|
+
export function findToken() {
|
|
23
|
+
if (process.env.GH_TOKEN)
|
|
24
|
+
return { token: process.env.GH_TOKEN, source: 'GH_TOKEN' };
|
|
25
|
+
if (process.env.GITHUB_TOKEN)
|
|
26
|
+
return { token: process.env.GITHUB_TOKEN, source: 'GITHUB_TOKEN' };
|
|
18
27
|
try {
|
|
19
28
|
const out = execFileSync('gh', ['auth', 'token'], { encoding: 'utf-8', stdio: ['ignore', 'pipe', 'ignore'] }).trim();
|
|
20
|
-
return out
|
|
29
|
+
return out ? { token: out, source: 'gh' } : null;
|
|
21
30
|
}
|
|
22
31
|
catch {
|
|
23
32
|
return null;
|
|
24
33
|
}
|
|
25
34
|
}
|
|
26
|
-
|
|
35
|
+
export function getToken() {
|
|
36
|
+
return findToken()?.token ?? null;
|
|
37
|
+
}
|
|
38
|
+
/** A token and its source, or the one sentence telling the human how to get one. */
|
|
27
39
|
export function requireToken(purpose = 'publish screenshots') {
|
|
28
|
-
const
|
|
29
|
-
if (!
|
|
40
|
+
const found = findToken();
|
|
41
|
+
if (!found)
|
|
30
42
|
throw new NeedsHumanError(`GitHub access is needed to ${purpose}. ${GH_LOGIN_HINT}`);
|
|
31
|
-
return
|
|
43
|
+
return found;
|
|
32
44
|
}
|
|
33
45
|
export class GitHub {
|
|
34
46
|
token;
|
|
@@ -67,6 +79,80 @@ export class GitHub {
|
|
|
67
79
|
return json;
|
|
68
80
|
}
|
|
69
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Can this token write to `ownerRepo`?
|
|
84
|
+
*
|
|
85
|
+
* `getToken()` checks that a token exists, which is a different question. A
|
|
86
|
+
* GitHub Actions job that maps `secrets.GITHUB_TOKEN` gets one that reads
|
|
87
|
+
* everything this tool reads and writes nothing: measured on this repository,
|
|
88
|
+
* `GET /repos/juangadm/pre-post` answers 200 with `permissions.push: false`
|
|
89
|
+
* and `POST .../git/blobs` answers 403. Those reads are the ones `pr` makes
|
|
90
|
+
* before it captures, so without this the run spends its screenshots first and
|
|
91
|
+
* discovers the refusal after.
|
|
92
|
+
*
|
|
93
|
+
* The probe is the first write `publishAssets` makes, on the one piece of
|
|
94
|
+
* content that cannot add anything: the empty blob already exists in every
|
|
95
|
+
* repository, so a successful call stores nothing new. A read cannot stand in
|
|
96
|
+
* for it — `permissions.push` describes the account's access to the repository,
|
|
97
|
+
* not the scopes the token carries, so it can report `true` for a credential
|
|
98
|
+
* the write still refuses. That is the confident all-clear this check exists to
|
|
99
|
+
* avoid, which is why it writes.
|
|
100
|
+
*
|
|
101
|
+
* What it proves is bounded: the token may write objects. Creating the assets
|
|
102
|
+
* *ref* is a separate permission a ruleset can refuse, so `writable: true` is
|
|
103
|
+
* "not this failure", never "the publish will work".
|
|
104
|
+
*/
|
|
105
|
+
export async function checkWriteAccess(gh, ownerRepo) {
|
|
106
|
+
try {
|
|
107
|
+
await gh.request('POST', `/repos/${ownerRepo}/git/blobs`, { content: '', encoding: 'utf-8' });
|
|
108
|
+
return { writable: true };
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
// 401/403 arrive as NeedsHumanError from `request`; a repository an
|
|
112
|
+
// installation cannot write is often hidden as 404 rather than refused.
|
|
113
|
+
if (err instanceof NeedsHumanError)
|
|
114
|
+
return { writable: false, reason: 'rejected' };
|
|
115
|
+
if (err instanceof GitHubError) {
|
|
116
|
+
if (err.status === 404)
|
|
117
|
+
return { writable: false, reason: 'rejected' };
|
|
118
|
+
return { writable: false, reason: 'unknown', detail: `GitHub answered ${err.status}` };
|
|
119
|
+
}
|
|
120
|
+
return { writable: false, reason: 'unknown', detail: err instanceof Error ? err.message : String(err) };
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* The one thing to do about a token that cannot publish.
|
|
125
|
+
*
|
|
126
|
+
* It follows the credential that was actually chosen, not just the
|
|
127
|
+
* environment. Being inside a runner does not make `permissions:` the fix: a
|
|
128
|
+
* workflow that sets `GH_TOKEN` to a PAT is refused by that PAT, and rewriting
|
|
129
|
+
* the job's permissions changes only the `GITHUB_TOKEN` the run never reaches.
|
|
130
|
+
* The same holds the other way round on a laptop, where `gh auth login` cannot
|
|
131
|
+
* help while an env var is shadowing it.
|
|
132
|
+
*
|
|
133
|
+
* The runner sentence names both permissions, though only `contents` is what
|
|
134
|
+
* this check tested. Naming `contents` alone would be advice that fails on its
|
|
135
|
+
* own terms: a `permissions:` block sets every scope it omits to none, so
|
|
136
|
+
* following it leaves a token that uploads the screenshots and is then refused
|
|
137
|
+
* the PR description — measured on this repository, `PATCH /pulls/23` answers
|
|
138
|
+
* 403 with only `contents: write` and 200 with `pull-requests: write` beside it.
|
|
139
|
+
* A second trip through a full capture is not worth the tighter sentence.
|
|
140
|
+
*/
|
|
141
|
+
export function cannotPublishHint(ownerRepo, source) {
|
|
142
|
+
const inActions = process.env.GITHUB_ACTIONS === 'true';
|
|
143
|
+
const perms = '"permissions: { contents: write, pull-requests: write }"';
|
|
144
|
+
const nowhere = `cannot write to ${ownerRepo}, so the screenshots would have nowhere to go`;
|
|
145
|
+
if (source === 'gh') {
|
|
146
|
+
return `The gh CLI login ${nowhere}: run gh auth login as someone with write access, or set GH_TOKEN to a token carrying repo scope.`;
|
|
147
|
+
}
|
|
148
|
+
if (inActions && source === 'GITHUB_TOKEN') {
|
|
149
|
+
return `This workflow's GITHUB_TOKEN ${nowhere}: give the job ${perms} and re-run.`;
|
|
150
|
+
}
|
|
151
|
+
if (inActions) {
|
|
152
|
+
return `The GH_TOKEN this workflow sets ${nowhere}: give that credential write access, or unset it so the job's own GITHUB_TOKEN is used with ${perms}.`;
|
|
153
|
+
}
|
|
154
|
+
return `The ${source} set in this environment ${nowhere}: set it to a token carrying repo scope, or unset it to fall back on your gh CLI login.`;
|
|
155
|
+
}
|
|
70
156
|
export async function findOpenPr(gh, ownerRepo, branch) {
|
|
71
157
|
const owner = ownerRepo.split('/')[0];
|
|
72
158
|
const prs = await gh.request('GET', `/repos/${ownerRepo}/pulls?state=open&head=${encodeURIComponent(`${owner}:${branch}`)}&per_page=1`);
|
|
@@ -168,6 +254,47 @@ export async function upsertStickyComment(gh, ownerRepo, prNumber, body, marker)
|
|
|
168
254
|
const created = await gh.request('POST', `/repos/${ownerRepo}/issues/${prNumber}/comments`, { body });
|
|
169
255
|
return { html_url: created.html_url, created: true };
|
|
170
256
|
}
|
|
257
|
+
/**
|
|
258
|
+
* Write `body` into a marked block in the PR description, replacing the block
|
|
259
|
+
* from a previous run. The description is where reviewers look first, so this
|
|
260
|
+
* is preferred over a comment.
|
|
261
|
+
*
|
|
262
|
+
* Returns updated: false when the token cannot edit the PR (a fork, or no write
|
|
263
|
+
* access), so the caller can fall back to a comment instead of failing.
|
|
264
|
+
*/
|
|
265
|
+
export async function upsertPrDescription(gh, ownerRepo, prNumber, body, marker) {
|
|
266
|
+
const open = `<!-- ${marker}:start -->`;
|
|
267
|
+
const close = `<!-- ${marker}:end -->`;
|
|
268
|
+
const pr = await gh.request('GET', `/repos/${ownerRepo}/pulls/${prNumber}`);
|
|
269
|
+
const section = `${open}\n${body}\n${close}`;
|
|
270
|
+
const existing = pr.body ?? '';
|
|
271
|
+
const start = existing.indexOf(open);
|
|
272
|
+
const end = existing.indexOf(close);
|
|
273
|
+
// Prepend: the screenshots are the first thing a reviewer should see.
|
|
274
|
+
const next = start !== -1 && end > start
|
|
275
|
+
? existing.slice(0, start) + section + existing.slice(end + close.length)
|
|
276
|
+
: section + (existing.trim() ? '\n\n' + existing.trimStart() : '');
|
|
277
|
+
if (next === existing)
|
|
278
|
+
return { html_url: pr.html_url, updated: true };
|
|
279
|
+
try {
|
|
280
|
+
await gh.request('PATCH', `/repos/${ownerRepo}/pulls/${prNumber}`, { body: next });
|
|
281
|
+
}
|
|
282
|
+
catch {
|
|
283
|
+
return { html_url: pr.html_url, updated: false };
|
|
284
|
+
}
|
|
285
|
+
return { html_url: pr.html_url, updated: true };
|
|
286
|
+
}
|
|
287
|
+
const ASSETS_README_PATH = 'README.md';
|
|
288
|
+
/** Kept so pruning the last folder does not ask the API for an empty tree. */
|
|
289
|
+
const ASSETS_README = `# pre-post assets
|
|
290
|
+
|
|
291
|
+
Screenshots published by [pre-post](https://github.com/juangadm/pre-post), one folder per
|
|
292
|
+
pull request (\`pr-<number>/\`). Nothing here is edited by hand.
|
|
293
|
+
|
|
294
|
+
\`pre-post prune\` removes folders for pull requests closed more than \`pruneDays\` ago. This
|
|
295
|
+
file is what keeps the branch from becoming an empty tree, which the GitHub tree API
|
|
296
|
+
refuses to create.
|
|
297
|
+
`;
|
|
171
298
|
/**
|
|
172
299
|
* Remove `pr-<n>/` folders on the assets branch whose PR closed more than
|
|
173
300
|
* `olderThanDays` ago. One commit; no history rewrite.
|
|
@@ -225,16 +352,60 @@ export async function pruneAssets(gh, ownerRepo, branch, olderThanDays, dryRun =
|
|
|
225
352
|
});
|
|
226
353
|
if (dryRun || deletions.length === 0)
|
|
227
354
|
return { removed, kept };
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
355
|
+
// Deleting every blob would leave an empty tree, and git's empty tree is not
|
|
356
|
+
// something the API will build: `tree: []` is refused as "Invalid tree info"
|
|
357
|
+
// (422), and the canonical empty-tree SHA is not resolvable through the REST
|
|
358
|
+
// API either (404) even though every repository contains that object. So the
|
|
359
|
+
// last folder could never be removed -- prune worked in every case except the
|
|
360
|
+
// one that finishes the job.
|
|
361
|
+
//
|
|
362
|
+
// The branch therefore keeps one file. `README.md` is chosen over an empty
|
|
363
|
+
// marker because the branch is otherwise undocumented, and it is inert on
|
|
364
|
+
// both sides: prune only ever counts `pr-<n>/` paths, and publish adds to
|
|
365
|
+
// whatever tree it finds.
|
|
366
|
+
const doomed = new Set(deletions);
|
|
367
|
+
const survivors = tree.tree.filter(e => e.type === 'blob' && !doomed.has(e.path));
|
|
368
|
+
// Rebuilding from scratch is only safe on a complete listing. A truncated one
|
|
369
|
+
// does not show every entry, so "nothing survives" would be a statement about
|
|
370
|
+
// the page that came back rather than about the branch, and the rebuild would
|
|
371
|
+
// silently drop whatever GitHub left out. Subtracting from `base_tree` is the
|
|
372
|
+
// safe answer there, and it cannot empty the tree either: truncation means
|
|
373
|
+
// there are more entries than the ones being removed.
|
|
374
|
+
const rebuild = survivors.length === 0 && !tree.truncated;
|
|
375
|
+
try {
|
|
376
|
+
const newTree = await gh.request('POST', `/repos/${ownerRepo}/git/trees`, rebuild
|
|
377
|
+
// No base_tree: the surviving tree is this file and nothing else.
|
|
378
|
+
? { tree: [{ path: ASSETS_README_PATH, mode: '100644', type: 'blob', content: ASSETS_README }] }
|
|
379
|
+
: {
|
|
380
|
+
base_tree: commit.tree.sha,
|
|
381
|
+
tree: deletions.map(p => ({ path: p, mode: '100644', type: 'blob', sha: null })),
|
|
382
|
+
});
|
|
383
|
+
const newCommit = await gh.request('POST', `/repos/${ownerRepo}/git/commits`, {
|
|
384
|
+
message: `Prune screenshots for ${removed.length} closed PR(s)`,
|
|
385
|
+
tree: newTree.sha,
|
|
386
|
+
parents: [headSha],
|
|
387
|
+
});
|
|
388
|
+
await gh.request('PATCH', `/repos/${ownerRepo}/git/refs/${encodeURIComponent(`heads/${branch}`)}`, { sha: newCommit.sha });
|
|
389
|
+
return { removed, kept, sha: newCommit.sha };
|
|
390
|
+
}
|
|
391
|
+
catch (err) {
|
|
392
|
+
// Everything above this point was a read, so a write that fails here has
|
|
393
|
+
// left the branch untouched and the run is always safe to repeat. What
|
|
394
|
+
// changes is what the human should do about it, and naming the wrong cause
|
|
395
|
+
// is worse than naming none: `request` has already turned 401 and 403 into
|
|
396
|
+
// NeedsHumanError, so what reaches here is a refusal disguised as a 404, a
|
|
397
|
+
// race, or GitHub being unwell -- and only the first is about permissions.
|
|
398
|
+
if (err instanceof GitHubError) {
|
|
399
|
+
if (err.status === 409 || err.status === 422) {
|
|
400
|
+
throw new NeedsHumanError(`Another run moved ${branch} while prune was working on it; nothing was changed, so run pre-post prune again.`);
|
|
401
|
+
}
|
|
402
|
+
if (err.status === 429 || err.status >= 500) {
|
|
403
|
+
throw new NeedsHumanError(`GitHub could not finish pruning ${branch} (it answered ${err.status}); nothing was changed, so run pre-post prune again in a few minutes.`);
|
|
404
|
+
}
|
|
405
|
+
throw new NeedsHumanError(`Could not update the ${branch} branch to prune ${removed.length} folder(s) (GitHub answered ${err.status}); ` +
|
|
406
|
+
`check that your token still has contents: write on ${ownerRepo}, then run pre-post prune again.`);
|
|
407
|
+
}
|
|
408
|
+
throw err;
|
|
409
|
+
}
|
|
239
410
|
}
|
|
240
411
|
//# sourceMappingURL=github.js.map
|
package/dist/github.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.js","sourceRoot":"","sources":["../src/github.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../src/github.ts"],"names":[],"mappings":"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"}
|