squally-reporter 0.10.2 → 0.12.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 CHANGED
@@ -17,21 +17,30 @@ npm install -D squally-reporter
17
17
 
18
18
  ## Config
19
19
 
20
- Set two env vars (e.g. in CI secrets or `.env`):
20
+ Set one env var (e.g. as a CI secret):
21
21
 
22
22
  ```bash
23
- SQUALLY_INGEST_URL=https://app.squally.dev
24
23
  SQUALLY_INGEST_KEY=your-project-ingest-key
25
24
  ```
26
25
 
27
- Find your ingest key on your project's Settings page in the Squally dashboard.
26
+ Find your ingest key in the Squally dashboard under **Settings › Project ›
27
+ Ingest key**.
28
+
29
+ **Since 0.12.0 the URL defaults to `https://app.squally.dev`.** Set
30
+ `SQUALLY_INGEST_URL` only to report to another Squally. Without a key the
31
+ reporter sends nothing and says so once.
28
32
 
29
33
  **Renamed in 0.9.0.** These were `SQUALLY_API_URL` and `SQUALLY_API_KEY`. The
30
34
  old names still work for now, with a deprecation warning in the CI log - but
31
- they belong to Squally's read API now, so rename them. A read key
32
- (`sqly_ro_...`) in `SQUALLY_API_KEY` is never sent: the reporter says so and
33
- reports nothing. `SQUALLY_API_URL` is only used together with
34
- `SQUALLY_API_KEY`, never on its own.
35
+ they belong to Squally's read API now, so rename them. `SQUALLY_API_URL` is
36
+ only used together with `SQUALLY_API_KEY`, never on its own - and when it is
37
+ set but not used, the reporter sends nothing rather than falling back to the
38
+ default URL, since the variable says you meant another target.
39
+
40
+ **A read key is never sent.** A key starting with `sqly_ro_` is a read API key,
41
+ for scripts and agents; reporting needs the ingest key. Since 0.12.0 the
42
+ reporter refuses one in any of `SQUALLY_INGEST_KEY`, `SQUALLY_API_KEY` or the
43
+ `apiKey` option before sending anything, and says which one to fix.
35
44
 
36
45
  Then add the reporter to `playwright.config.ts`:
37
46
 
@@ -61,8 +70,8 @@ reporter: [
61
70
  ],
62
71
  ```
63
72
 
64
- That's it - run your tests as usual (`npx playwright test`) and results will
65
- be sent to Squally after the run finishes.
73
+ That's it - run your tests as usual (`npx playwright test`); results stream
74
+ to Squally while the suite runs (see *How results reach Squally* below).
66
75
 
67
76
  ## Artifact upload (screenshot, trace, browser console)
68
77
 
@@ -119,12 +128,14 @@ reporter prints. The numbers below are therefore Squally's current ones rather
119
128
  than anything this package guarantees, and can change server-side without a new
120
129
  release of it:
121
130
 
122
- - **50 MB per individual file**, the same on every plan. A larger screenshot or
123
- trace is rejected before any bytes are uploaded; the reporter logs a
124
- `console.warn` naming the file and moves on. The test result itself is
125
- reported as usual, and the run's outcome and exit code are untouched. In the
126
- dashboard that artifact is shown as skipped, with the reason, rather than
127
- silently missing.
131
+ - **50 MB per screenshot or trace, 4 MB per browser console**, the same on
132
+ every plan. A larger file is rejected before any bytes are uploaded; the
133
+ reporter logs a `console.warn` naming the file and its limit and moves on.
134
+ The test result itself is reported as usual, and the run's outcome and exit
135
+ code are untouched. In the dashboard that artifact is shown as skipped, with
136
+ the reason, rather than silently missing.
137
+ - **At most 250 artifacts per shard.** Squally keeps the first 250 and skips
138
+ the rest with the reason `limit`, which the reporter explains in one line.
128
139
  - **A total storage cap per organization, depending on your Squally plan.**
129
140
  Once it is reached, further uploads are rejected the same way until you free
130
141
  up space or upgrade. Note that a fully instrumented suite now produces up to
@@ -151,15 +162,19 @@ dashboard stays close to real time even for a long suite. A batch goes out on
151
162
  whichever of these comes first:
152
163
 
153
164
  - **25 results.** Fixed, and the same whether you shard or not.
154
- - **A timer, 2 seconds × the number of shards, capped at 30 seconds.** An
155
- unsharded run flushes every 2 seconds; four shards every 8; eight shards
156
- every 16; fifteen shards and above every 30, where the cap holds it.
165
+ - **A timer: 2 seconds, or 0.4 seconds × the number of shards when that is
166
+ longer, capped at 30 seconds** (0.12.0). Up to five shards every shard
167
+ flushes every 2 seconds; eight shards every 3.2; sixteen every 6.4; from 75
168
+ shards the cap holds it at 30.
157
169
 
158
170
  Only the timer scales. All shards of a run share one rate budget on Squally's
159
- side, so without this a sixteen-shard suite would send sixteen times the
160
- requests of an unsharded one and throttle itself. The 25-result threshold is
161
- left alone deliberately: it bounds how long a *fast* suite waits, and
162
- stretching it would delay results without bounding the burst any better.
171
+ side (300 requests a minute per key), and the timer keeps all of them
172
+ together at about half of it. The 25-result threshold is left alone
173
+ deliberately: it bounds how long a *fast* suite waits, and stretching it would
174
+ delay results without bounding the burst any better.
175
+
176
+ A batch also stays under 3 MB (0.12.0): results with long error texts or many
177
+ steps simply go out in more, smaller requests.
163
178
 
164
179
  There is no longer a single-request size limit that could discard a whole run -
165
180
  a very large suite simply takes more, smaller requests. As a courtesy the
@@ -171,6 +186,23 @@ If Squally is unreachable partway through, results already sent stay in the
171
186
  dashboard; only what could not be delivered is lost, and your test run's exit
172
187
  code is never affected either way.
173
188
 
189
+ ## Steps (0.12.0)
190
+
191
+ For an attempt that **failed, or needed a retry**, the reporter also sends the
192
+ steps Playwright recorded - hooks, fixtures, actions, assertions and your own
193
+ `test.step`s, with their durations and `file:line`. Squally shows them on the
194
+ attempt page, the failing step marked. An attempt that passed on its first try
195
+ sends none.
196
+
197
+ - **Typed values never leave your runner.** The value of a `fill`, `type` or
198
+ `pressSequentially` is replaced: `Fill "•••" getByLabel('Password')`. Every
199
+ title also goes through the same secret masking as error texts.
200
+ - **At most 300 steps per attempt, 200 characters per title.** A longer list
201
+ keeps the failing step and the steps it sits in, then the rest in order, and
202
+ tells Squally how many were left out.
203
+ - Nothing to configure: steps come from Playwright's own report, with or
204
+ without tracing.
205
+
174
206
  **Only actual test runs appear.** A run shows up in Squally once your first
175
207
  test starts, so commands that never run a test create nothing: `--list`,
176
208
  a `globalSetup` or `webServer` that fails to start, a `--grep` that matches
@@ -187,6 +219,11 @@ count against the test.
187
219
 
188
220
  ## Cancelled runs
189
221
 
222
+ **Cancelled in Squally.** An admin can cancel a running run from its page in
223
+ Squally. That marks the run there; it does not stop your CI job. What the job
224
+ sends afterwards is discarded, and from 0.12.0 the reporter says so in one
225
+ line - "This run was cancelled in Squally" - instead of advice about job keys.
226
+
190
227
  A run stopped with SIGINT - Ctrl+C, or a cancelled CI job - shows in Squally
191
228
  as **Cancelled**: the reporter sends what finished and tells Squally the run
192
229
  was interrupted. Your exit code stays Playwright's own (130). This needs
@@ -208,7 +245,7 @@ runners). Other CI systems deliver a cancel in their own way - check that
208
245
  Playwright is the process that receives it.
209
246
 
210
247
  Without that - or after any hard kill (SIGKILL) - the reporter never gets to
211
- report the end: the run stays *running* until Squally's daily check marks it
248
+ report the end: the run stays *running* until Squally's hourly check marks it
212
249
  **incomplete** once the project's run timeout (60 minutes by default) has
213
250
  passed. A run stopped before its first test starts sends nothing, like any
214
251
  run that never ran a test, and `globalTimeout` running out is not a cancel -
@@ -236,8 +273,11 @@ which CI system it is running on from that system's own environment:
236
273
 
237
274
  - **`CI` counts only as `true` or `1`.** `CI=false` or `CI=0` is a local run -
238
275
  unless one of the providers above is recognised, which always wins. A run
239
- that is none of these is local, and local runs are stored but not counted
240
- in Squally's test metrics.
276
+ that is none of these is local. Local runs are listed with all other runs,
277
+ and have numbers of their own: Squally's figures count CI runs by default,
278
+ and the **All · CI · Local** switch shows local runs on their own, or both.
279
+ A local run never posts a GitHub check, a pull-request comment or a Slack
280
+ message.
241
281
  - **Pull requests are reported under their own head commit and source
242
282
  branch**, not the merge commit CI checks out - that is the commit Squally's
243
283
  GitHub check and pull-request comment have to find. The commit message and
@@ -256,6 +296,22 @@ which CI system it is running on from that system's own environment:
256
296
  `SQUALLY_DISABLE_HEAD_COMMIT_FETCH=true` turns the fetch off.
257
297
  - **A tag build has no branch.** A detached checkout never reports `HEAD` as a
258
298
  branch name, and `refs/heads/` or `origin/` prefixes are removed.
299
+ - **A link to the CI run (0.11.0).** The reporter sends the page of the CI run,
300
+ so Squally can link a run to it. It is read from each provider's own
301
+ variable, sent only as an `https://` URL of at most 2,048 characters, and
302
+ never opened by Squally - only shown as a link:
303
+
304
+ | Provider | Link |
305
+ |---|---|
306
+ | GitHub Actions | `GITHUB_SERVER_URL`/`GITHUB_REPOSITORY`/actions/runs/`GITHUB_RUN_ID`/attempts/`GITHUB_RUN_ATTEMPT` |
307
+ | GitLab CI | `CI_PIPELINE_URL` |
308
+ | Jenkins | `BUILD_URL` (only with Jenkins served over https) |
309
+ | Buildkite | `BUILDKITE_BUILD_URL` |
310
+ | Travis CI | `TRAVIS_BUILD_WEB_URL` |
311
+ | Drone | `DRONE_BUILD_LINK` |
312
+
313
+ Other providers send no link. It is the run's page, never one job's, and it
314
+ is the same with `SQUALLY_CI_RUN_ID` set.
259
315
 
260
316
  ## Tests marked with `test.fail()`
261
317
 
@@ -302,24 +358,70 @@ invocations, set `SQUALLY_CI_RUN_ID` to the same value for every shard of one
302
358
  run - anything unique per CI run and shared by its shards works, e.g. a build
303
359
  number your CI system already exposes.
304
360
 
305
- **Several jobs in one CI run need their own id.** The id is shared by
306
- everything in one CI run, so two jobs that are *not* shards of each other -
307
- say a GitHub Actions matrix over browsers, run without `--shard` - would report
308
- into the same Squally run, and the second job's results are refused once the
309
- first job has finished it. The reporter then says so once and sends nothing
310
- more for that job. Give each job its own id, shared only by its own shards:
361
+ **Several jobs in one CI run need their own key (0.11.0).** The id is shared
362
+ by everything in one CI run, so two jobs that are *not* shards of each other -
363
+ a GitHub Actions matrix over browsers run without `--shard`, or an `api` and a
364
+ `ui` suite - would report into the same Squally run. Give each job its own
365
+ `SQUALLY_CI_JOB_KEY`, shared only by that job's own shards:
311
366
 
312
367
  ```yaml
313
- env:
314
- SQUALLY_CI_RUN_ID: ${{ github.run_id }}-${{ github.run_attempt }}-${{ matrix.browser }}
368
+ jobs:
369
+ test:
370
+ strategy:
371
+ matrix:
372
+ browser: [chromium, firefox]
373
+ env:
374
+ SQUALLY_CI_JOB_KEY: ${{ matrix.browser }}
375
+ steps:
376
+ - run: exec ./node_modules/.bin/playwright test --project=${{ matrix.browser }}
315
377
  ```
316
378
 
317
- The same refusal, and the same message, happens when a CI system re-runs a
318
- job under the id of a run that has already completed: a GitLab job retry, an
319
- Azure Pipelines re-run, a Bitbucket re-run of failed steps, a Buildkite retry.
320
- On GitHub Actions each re-run attempt is its own run instead - with one catch
321
- for sharded runs: "Re-run failed jobs" starts an attempt that contains only the
322
- re-run shards, and a run that waits for all of its shards shows as incomplete.
379
+ The reporter puts the key into the id - `<GITHUB_RUN_ID>-<key>-<GITHUB_RUN_ATTEMPT>`
380
+ on GitHub Actions, `<provider id>-<key>` elsewhere - so each job is its own run
381
+ in Squally, and a re-run of one job links to that job's own earlier attempt.
382
+ The key may hold letters, digits, `.`, `_` and `-`, at most 64 characters; an
383
+ invalid key is reported once and ignored, and your test run is unaffected.
384
+ Without a key the id is exactly what it was before 0.11.0. A suite that is
385
+ sharded *and* split into jobs uses the same key for all shards of one job:
386
+ `SQUALLY_CI_JOB_KEY: ${{ matrix.suite }}` beside `--shard=${{ matrix.shard }}/2`.
387
+
388
+ **Replaces the hand-built id.** Until 0.11.0 this section suggested
389
+ `SQUALLY_CI_RUN_ID: ${{ github.run_id }}-${{ github.run_attempt }}-${{ matrix.browser }}`.
390
+ It still groups each job correctly, but Squally cannot tell its attempts apart,
391
+ so a re-run is never linked to the attempt before it. Switch to
392
+ `SQUALLY_CI_JOB_KEY`. An explicit `SQUALLY_CI_RUN_ID` still wins for the id;
393
+ the key is then only sent alongside it.
394
+
395
+ **When two jobs collide anyway, Squally refuses the second one at the start**
396
+ (squally-app with block 1b, reporter 0.11.0). The reporter prints one block,
397
+ sends nothing more for that job, and leaves your test run and its exit code
398
+ alone:
399
+
400
+ - `ci_run_collision` - another job already reports under this CI run id (and
401
+ shard). Give every job its own `SQUALLY_CI_JOB_KEY`.
402
+ - `ci_run_mixed` - the id would put a sharded job and an unsharded one, or
403
+ shards of different totals, into one run. The same fix.
404
+
405
+ Before 0.11.0 the second job was handed the first job's run instead, and its
406
+ results were refused once that run completed; a reporter older than 0.11.0
407
+ still behaves that way, and prints "Squally has already completed run …".
408
+
409
+ **Re-runs.** On GitHub Actions every re-run attempt is its own run in Squally,
410
+ linked to the attempt before it ("Re-run of #N"). "Re-run failed jobs" runs only
411
+ the shards that did not pass; that attempt waits only for those shards,
412
+ completes once they have reported, and passes or fails on the tests they ran -
413
+ the reused shards are neither waited for nor counted, and the run page shows
414
+ them as "passed in #N · not re-run". A re-run shard that never reports still
415
+ leaves the run incomplete after the run timeout.
416
+
417
+ Other CI systems re-run a job under the id of the run it belongs to - a GitLab
418
+ job retry, an Azure Pipelines re-run, a Bitbucket re-run of failed steps, a
419
+ Buildkite retry, a Travis CI restart. Since 0.11.0 Squally refuses such a
420
+ retry at the start with `ci_run_collision`: the slot is taken by the first
421
+ attempt. **`SQUALLY_CI_JOB_KEY` does not help here** - the retry is the same
422
+ job - so a retry on these systems is not reported; the first attempt stays the
423
+ run. A Drone restart is a new build with a new number, and so a new run in
424
+ Squally, not linked to the one it repeats.
323
425
 
324
426
  **`playwright merge-reports` is not part of this and is not recommended** for
325
427
  getting a single run in Squally - the automatic correlation above is the
@@ -389,9 +491,10 @@ happens, so a value that looks different in the dashboard is not a mystery.
389
491
 
390
492
  ## Troubleshooting
391
493
 
392
- Set `SQUALLY_DEBUG=1` to print detail that is otherwise kept quiet - currently
393
- the browser-console extraction: how many messages were found, or that an
394
- attempt's trace held none. Everything that is *not* ordinary (a trace that
494
+ Set `SQUALLY_DEBUG=1` to print detail that is otherwise kept quiet - the
495
+ browser-console extraction (how many messages were found, or that an attempt's
496
+ trace held none) and, since 0.11.0, a CI run link that was not sent because it
497
+ was not an `https://` URL. Everything that is *not* ordinary (a trace that
395
498
  cannot be read, an unsupported schema version, a rejected upload) is printed
396
499
  without it.
397
500
 
package/dist/index.d.ts CHANGED
@@ -43,15 +43,33 @@ interface AppendResultEntry {
43
43
  errors?: AppendErrorEntry[];
44
44
  consoleOutput: string | null;
45
45
  tags?: string[];
46
+ /**
47
+ * Playwright's steps of this attempt (0.12.0), flat, the parent by index -
48
+ * only for an attempt that did not pass on its first try (stepsForAttempt).
49
+ * Omitted otherwise, and by squally-app before 19.10.2026, which ignores
50
+ * fields it does not know.
51
+ */
52
+ steps?: StepEntry[];
53
+ /** How many steps were left out to stay within MAX_STEPS. Omitted when none. */
54
+ stepsOmitted?: number;
46
55
  browserName: string | null;
47
56
  errorContext: string | null;
48
57
  }
49
58
  type ArtifactType = "screenshot" | "trace" | "console";
59
+ /** One step on the wire: title, category, parent index, duration, "file:line", failed. */
60
+ interface StepEntry {
61
+ t: string;
62
+ c: string;
63
+ p: number | null;
64
+ d: number | null;
65
+ l?: string;
66
+ e?: true;
67
+ }
50
68
  declare function truncate(value: string, max: number): string;
51
69
  declare function truncateOrNull(value: string | null, max: number): string | null;
52
70
  /**
53
- * This shard's flush interval: the base cadence stretched by how many shards
54
- * share the rate budget with it.
71
+ * This shard's flush interval: the base cadence, stretched once enough shards
72
+ * share the rate budget to need it.
55
73
  *
56
74
  * Only the TIMER is scaled. FLUSH_THRESHOLD_RESULTS is not, and that is
57
75
  * deliberate: it is a latency bound on a fast suite, not a rate control, and
@@ -160,7 +178,66 @@ declare function resolveGitContext(env: NodeJS.ProcessEnv, io?: GitContextIo): G
160
178
  * to hold it - at actions/checkout's default depth of 1 it does not.
161
179
  */
162
180
  declare function resolveGitContextForRun(env: NodeJS.ProcessEnv, io?: GitContextIo): Promise<GitContext>;
163
- declare function detectCiRunId(env: NodeJS.ProcessEnv, generateFallback: () => string): string;
181
+ declare function detectCiRunId(env: NodeJS.ProcessEnv, generateFallback: () => string, jobKey?: string | null): string;
182
+ /**
183
+ * SQUALLY_CI_JOB_KEY, checked by squally-app's own rule (letters, digits,
184
+ * '.', '_' and '-', at most 64). An invalid key is a warning, never a failed
185
+ * test run: the reporter continues WITHOUT a key - the id it would have built
186
+ * without one, and no ciJobKey - rather than send a value the server refuses
187
+ * or guess a cleaned-up one. Unset or empty: no key, no warning.
188
+ */
189
+ declare function resolveCiJobKey(env: NodeJS.ProcessEnv): {
190
+ key: string | null;
191
+ warning: string | null;
192
+ };
193
+ /**
194
+ * The attempt to send as ciRunAttempt (0.11.0) - only when THIS reporter built
195
+ * the CI run id from GITHUB_RUN_ATTEMPT, so the id ends in "-<attempt>" and
196
+ * squally-app can link a re-run to the attempt before it (detectCiAttempt
197
+ * there reads the stem off that suffix). Never with SQUALLY_CI_RUN_ID: only
198
+ * the reporter knows the id is GitHub's, and an id the user wrote proves
199
+ * nothing about its suffix.
200
+ *
201
+ * GITHUB ONLY, by the providers' documentation: GitHub's attempt counts runs
202
+ * of the whole workflow run and is part of its id. GitLab's
203
+ * CI_JOB_RETRY_COUNT, Buildkite's BUILDKITE_RETRY_COUNT and Azure's job
204
+ * attempt count retries of ONE JOB inside a build whose id stays the same - not
205
+ * an attempt of the run squally-app groups - and Jenkins, Travis and Drone
206
+ * document no counter at all.
207
+ */
208
+ declare function detectCiRunAttempt(env: NodeJS.ProcessEnv): number | null;
209
+ /** An absolute https: URL with a host - squally-app's isHttpsUrl. */
210
+ declare function isHttpsUrl(value: string): boolean;
211
+ /**
212
+ * The CI run's page, sent as ciRunUrl (0.11.0) so Squally can link a run to
213
+ * its CI run. One builder per provider, from each provider's documented
214
+ * variable:
215
+ * - GitHub Actions: GITHUB_SERVER_URL/GITHUB_REPOSITORY/actions/runs/
216
+ * GITHUB_RUN_ID - the URL GitHub's own docs give - and /attempts/
217
+ * GITHUB_RUN_ATTEMPT when set, the page of exactly this attempt;
218
+ * - GitLab CI: CI_PIPELINE_URL ("The URL for the pipeline details");
219
+ * - Jenkins: BUILD_URL ("The URL where the results of this build can be
220
+ * found");
221
+ * - Buildkite: BUILDKITE_BUILD_URL ("The url for this build on Buildkite");
222
+ * - Travis CI: TRAVIS_BUILD_WEB_URL ("URL to the build log");
223
+ * - Drone: DRONE_BUILD_LINK ("a deep link the Drone build results").
224
+ * The run, never the job: the id groups a whole build's jobs, so its link is
225
+ * the build's. Independent of SQUALLY_CI_RUN_ID - the page is the same.
226
+ *
227
+ * ONLY HTTPS, AT MOST 2048 CHARACTERS (squally-app's rule). Anything else - a
228
+ * Jenkins without TLS, a value that is not a URL - is left out silently, with
229
+ * a debug line: a missing link is no reason to warn on every run.
230
+ */
231
+ declare function detectCiRunUrl(env: NodeJS.ProcessEnv): string | null;
232
+ declare function beginRefusalMessage(refusal: {
233
+ code: string | null;
234
+ message: string | null;
235
+ detail: string;
236
+ }, where: {
237
+ ciRunId: string;
238
+ shardIndex: number | null;
239
+ jobKey: string | null;
240
+ }): string;
164
241
  interface ProjectSuiteLike {
165
242
  project(): {
166
243
  name: string;
@@ -176,6 +253,54 @@ declare function resolveTestedRevision(env?: NodeJS.ProcessEnv, io?: GitContextI
176
253
  declare function toPosixPath(p: string): string;
177
254
  declare function stripAnsi(value: string): string;
178
255
  declare function maskSecrets(value: string): string;
256
+ /** The step fields this reporter reads - a structural subset of Playwright's TestStep. */
257
+ interface StepLike {
258
+ title: string;
259
+ category: string;
260
+ duration: number;
261
+ error?: unknown;
262
+ location?: {
263
+ file: string;
264
+ line: number;
265
+ };
266
+ steps?: StepLike[];
267
+ }
268
+ declare function stripTypedValue(title: string): string;
269
+ /** Whether this attempt sends its steps: a failure, a timeout, or any retry. */
270
+ declare function attemptSendsSteps(result: {
271
+ status: string;
272
+ retry: number;
273
+ }): boolean;
274
+ /**
275
+ * The attempt's steps for the wire, at most MAX_STEPS, and how many were left
276
+ * out. Null when there are none.
277
+ *
278
+ * FAILED IS MARKED ON THE DEEPEST STEP ONLY: Playwright puts the error on a
279
+ * failing expect AND on every test.step around it, and the page should point
280
+ * at the one that broke, not paint its whole ancestry red.
281
+ *
282
+ * THE CUT KEEPS THE FAILING PATH (decision 4): every marked step and its
283
+ * ancestors first, then the rest in order until MAX_STEPS. A kept step whose
284
+ * parent was cut hangs from its nearest kept ancestor.
285
+ */
286
+ declare function stepsForAttempt(steps: readonly StepLike[] | undefined, rootDir: string): {
287
+ steps: StepEntry[];
288
+ omitted: number;
289
+ } | null;
290
+ /** The result entry's step fields: none at all when there are no steps, no stepsOmitted when nothing was cut. */
291
+ declare function stepFields(payload: {
292
+ steps: StepEntry[];
293
+ omitted: number;
294
+ } | null): {
295
+ steps?: StepEntry[];
296
+ stepsOmitted?: number;
297
+ };
298
+ /**
299
+ * How many of the buffered results go into the next request: up to
300
+ * BATCH_MAX_RESULTS and BATCH_MAX_BYTES, and always at least one - a single
301
+ * result is bounded far below the byte limit by its own field limits.
302
+ */
303
+ declare function takeBatch(buffer: readonly unknown[], maxResults: number, maxBytes: number): number;
179
304
  /** One piece of free text as it goes on the wire: masked, then cut to maxChars. */
180
305
  declare function outgoingText(value: string, maxChars: number): string;
181
306
  /**
@@ -232,6 +357,9 @@ declare function outgoingResultText(raw: {
232
357
  };
233
358
  declare function attemptQualifiesForArtifacts(mappedStatus: AppendResultEntry["status"], retryCount: number): boolean;
234
359
  declare function artifactKey(testName: string, filePath: string, retryCount: number, repeatIndex: number, type: ArtifactType): string;
360
+ /** Why the app skipped an artifact, as a sentence (0.12.0: the limit per kind, and `limit`). */
361
+ declare function skipReasonMessage(reason: string, type: ArtifactType): string;
362
+ declare function artifactLabel(type: ArtifactType): string;
235
363
  declare function parseRetryAfterMs(headerValue: string | null, nowMs: number): number | null;
236
364
  declare function computeBackoffMs(retryNumber: number): number;
237
365
  declare function resolveConnection(options: SquallyReporterOptions, env: NodeJS.ProcessEnv, warned?: Set<string>): {
@@ -248,6 +376,14 @@ export default class SquallyReporter implements Reporter {
248
376
  private dispatcher;
249
377
  private ciRunId;
250
378
  private shardIndex;
379
+ /**
380
+ * 0.11.0: one per reporter process, the same on every retry of begin - a
381
+ * retried begin is the same job, another process with the same CI run id
382
+ * and shard is not (squally-app answers that one 409 ci_run_collision).
383
+ */
384
+ private readonly beginToken;
385
+ /** SQUALLY_CI_JOB_KEY, validated (resolveCiJobKey) - or null. */
386
+ private ciJobKey;
251
387
  private shardTotal;
252
388
  private projectName;
253
389
  private runTags;
@@ -335,6 +471,11 @@ export declare const __internal: {
335
471
  toPosixPath: typeof toPosixPath;
336
472
  detectCiRunId: typeof detectCiRunId;
337
473
  detectCiProvider: typeof detectCiProvider;
474
+ resolveCiJobKey: typeof resolveCiJobKey;
475
+ detectCiRunAttempt: typeof detectCiRunAttempt;
476
+ detectCiRunUrl: typeof detectCiRunUrl;
477
+ isHttpsUrl: typeof isHttpsUrl;
478
+ beginRefusalMessage: typeof beginRefusalMessage;
338
479
  resolveGitContext: typeof resolveGitContext;
339
480
  resolveGitContextForRun: typeof resolveGitContextForRun;
340
481
  fetchCommitFromOrigin: typeof fetchCommitFromOrigin;
@@ -357,6 +498,17 @@ export declare const __internal: {
357
498
  flushIntervalFor: typeof flushIntervalFor;
358
499
  attemptQualifiesForArtifacts: typeof attemptQualifiesForArtifacts;
359
500
  artifactKey: typeof artifactKey;
501
+ stepsForAttempt: typeof stepsForAttempt;
502
+ stepFields: typeof stepFields;
503
+ stripTypedValue: typeof stripTypedValue;
504
+ attemptSendsSteps: typeof attemptSendsSteps;
505
+ takeBatch: typeof takeBatch;
506
+ skipReasonMessage: typeof skipReasonMessage;
507
+ artifactLabel: typeof artifactLabel;
508
+ MAX_STEPS: number;
509
+ MAX_STEP_TITLE: number;
510
+ BATCH_MAX_BYTES: number;
511
+ DEFAULT_INGEST_URL: string;
360
512
  };
361
513
  export {};
362
514
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACX,MAAM,2BAA2B,CAAC;AAcnC,UAAU,sBAAsB;IAK9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA+CD,UAAU,gBAAgB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3D;AAED,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B;;;;OAIG;IACH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;;;;;OAMG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IACpB,gFAAgF;IAChF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAkDD,KAAK,YAAY,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAAC;AA8KvD,0FAA0F;AAC1F,UAAU,SAAS;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,IAAI,CAAC;CACV;AA8CD,iBAAS,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAIpD;AAED,iBAAS,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAExE;AA4ED;;;;;;;;;;GAUG;AACH,iBAAS,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAG3D;AA2CD,iBAAS,yBAAyB,CAAC,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,OAAO,GAAG,IAAI,CAsBxF;AAsED,iBAAS,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAI5E;AAUD,iBAAS,iBAAiB,CAAC,cAAc,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,OAAO,CAGxH;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,iBAAS,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG;IAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAE1G;AAMD;;;;;;;;;;;;;;;;;;GAkBG;AACH,iBAAS,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,GAAG,IAAI,CAIhG;AA8CD,iBAAS,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,IAAI,CAK/D;AA+DD,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AA2BD;oEACoE;AACpE,UAAU,YAAY;IACpB,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,oGAAoG;IACpG,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACnE;AAaD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,iBAAS,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,CA6B5G;AAwDD,iBAAS,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAStE;AAyRD,iBAAS,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,GAAE,YAAqC,GAAG,UAAU,CAExG;AAED;;;;;;;GAOG;AACH,iBAAe,uBAAuB,CACpC,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,EAAE,GAAE,YAAqC,GACxC,OAAO,CAAC,UAAU,CAAC,CAKrB;AAyMD,iBAAS,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,gBAAgB,EAAE,MAAM,MAAM,EAAE,MAAM,GAAE,MAAM,GAAG,IAAW,GAAG,MAAM,CAqBnH;AAED;;;;;;GAMG;AACH,iBAAS,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG;IAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAc/F;AAED;;;;;;;;;;;;;;GAcG;AACH,iBAAS,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,IAAI,CAKjE;AAED,qEAAqE;AACrE,iBAAS,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAO1C;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,iBAAS,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,IAAI,CAQ7D;AAoDD,iBAAS,mBAAmB,CAC1B,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EACxE,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC3E,MAAM,CAkCR;AA4BD,UAAU,gBAAgB;IACxB,OAAO,IAAI;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CACzC;AAED,iBAAS,kBAAkB,CAAC,aAAa,EAAE,SAAS,gBAAgB,EAAE,GAAG,MAAM,GAAG,IAAI,CAIrF;AAkCD,iBAAS,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAiB9C;AAED,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,GAAG,cAAc,CAAC;CACtC;AAkBD,iBAAS,qBAAqB,CAC5B,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,EAAE,GAAE,YAAqC,GACxC,gBAAgB,GAAG,IAAI,CAkBzB;AAgBD,iBAAS,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtC;AAkCD,iBAAS,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAExC;AAsED,iBAAS,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAU1C;AAkBD,0FAA0F;AAC1F,UAAU,QAAQ;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;CACpB;AAYD,iBAAS,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAS9C;AAED,gFAAgF;AAChF,iBAAS,iBAAiB,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAE7E;AAED;;;;;;;;;;;GAWG;AACH,iBAAS,eAAe,CACtB,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,SAAS,EACtC,OAAO,EAAE,MAAM,GACd;IAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA6ChD;AAED,iHAAiH;AACjH,iBAAS,UAAU,CACjB,OAAO,EAAE;IAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GACtD;IAAE,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAGhD;AAED;;;;GAIG;AACH,iBAAS,SAAS,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAY3F;AAqBD,mFAAmF;AACnF,iBAAS,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE7D;AAiBD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,iBAAS,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG;IACnD,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC,CAqBA;AA0BD,iBAAS,SAAS,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,GAAG,gBAAgB,EAAE,GAAG,SAAS,CAuB/E;AAqCD;;;;;;;;;;;;;;GAcG;AACH,iBAAS,kBAAkB,CAAC,GAAG,EAAE;IAC/B,MAAM,EAAE,gBAAgB,EAAE,GAAG,SAAS,CAAC;IACvC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,GAAG;IACF,MAAM,EAAE,gBAAgB,EAAE,GAAG,SAAS,CAAC;IACvC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1C,CAuBA;AA0LD,iBAAS,4BAA4B,CAAC,YAAY,EAAE,iBAAiB,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAE5G;AAeD,iBAAS,WAAW,CAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,YAAY,GACjB,MAAM,CAIR;AAYD,gGAAgG;AAChG,iBAAS,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,MAAM,CAQrE;AAQD,iBAAS,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAIjD;AAgDD,iBAAS,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOnF;AAGD,iBAAS,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAErD;AAyFD,iBAAS,iBAAiB,CACxB,OAAO,EAAE,sBAAsB,EAC/B,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,MAAM,GAAE,GAAG,CAAC,MAAM,CAAsB,GACvC;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAwDtC;AAED,MAAM,CAAC,OAAO,OAAO,eAAgB,YAAW,QAAQ;IACtD,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,MAAM,CAAM;IACpB,uEAAuE;IACvE,OAAO,CAAC,iBAAiB,CAAS;IAIlC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAc;IAkB/B,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,UAAU,CAAuB;IACzC;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,iEAAiE;IACjE,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,SAAS,CAA6B;IAE9C,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,SAAS,CAA2B;IAC5C;;;6DAGyD;IACzD,OAAO,CAAC,mBAAmB,CAAqB;IAEhD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,OAAO,CAAC,eAAe,CAAK;IAM5B,OAAO,CAAC,eAAe,CAAS;IAKhC,OAAO,CAAC,qBAAqB,CAAS;IAEtC,OAAO,CAAC,gBAAgB,CAA8C;IACtE,OAAO,CAAC,eAAe,CAA4B;IAKnD,OAAO,CAAC,UAAU,CAAS;IAO3B,OAAO,CAAC,YAAY,CAAiD;IAIrE,OAAO,CAAC,KAAK,CAAuB;gBAExB,OAAO,GAAE,sBAA2B;IAiBhD,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK;IAgExC;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ;IAYhB,WAAW;IAkBX,OAAO,CAAC,gBAAgB;IAUxB,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU;IAgN5C,KAAK,GAAU,QAAQ,UAAU,mBA6B/B;YAsBY,gBAAgB;IA6D9B,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,YAAY;YAQN,KAAK;YA+BL,SAAS;YAiFT,QAAQ;YA4GR,WAAW;YAiCX,UAAU;YA6CV,WAAW;YAyEX,eAAe;YAQf,gBAAgB;CAuK/B;AAKD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;cA59DM,MAAM;iBAAW,MAAM;iBAAW,MAAM;;;;;;;;;;;;;;;;;;;;;;CA4gEpE,CAAC"}