@mparticle/web-sdk 3.29.1 → 3.30.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
@@ -220,14 +220,75 @@ copy its release tag; optionally preview and run Step 2 for each needed
220
220
  release-order branch; finally run Step 3 with `dryRun=true`, then
221
221
  `dryRun=false`.
222
222
 
223
- Shadow v3 candidate packaging: when the `V3_PACKAGE_CANDIDATE` repository
224
- variable is `true`, a real V3 Step 1 run also runs **Package V3 candidate
225
- (shadow)** after the release. It packages the release tag's committed
226
- bundles into a `v3-candidate-<run id>-<run attempt>` artifact, kept for 7 days.
227
- It never runs for v2 or dry runs, has read-only access, and its failure does
228
- not fail the Step 1 run. It does keep the Step 1 run open until it finishes,
229
- so wait for the whole run to finish before starting Step 2 or Step 3. To turn
230
- it off, delete the variable or set it to anything other than `true`.
223
+ V3 candidate packaging, upload, and staging: a real **V3 Release - Step 1**
224
+ (`v3-release-step-1.yml`, `dryRun=false`) runs **Package V3 candidate
225
+ (shadow)** after the release to package the release tag's committed bundles
226
+ into a `v3-candidate-<run id>-<run attempt>` artifact (kept for 7 days). Once
227
+ **Publish V3 kits** and **Audit V3 kits on npm** have also succeeded, it runs
228
+ **Upload and stage V3 candidate**, which dispatches **V3 shadow
229
+ release: upload candidate** (`v3-shadow-candidate.yml`) on `main` with
230
+ `release_gate=true` and waits up to 120 minutes (the child jobs' 110-minute
231
+ ceiling plus 10 minutes of queue time, inside a 130-minute job timeout) for it
232
+ to succeed. A failed read of the child run's status (a 5xx or rate-limit reply)
233
+ is retried until that deadline. If the job fails, times out or is cancelled
234
+ before the child run completes, it cancels the child run. A refused cancel (a
235
+ 5xx or rate-limit reply) is retried with a doubling backoff (6 tries, 5 seconds
236
+ apart at first) until GitHub accepts it or the child run reads completed, first
237
+ by the wait step and then by the cleanup step. Release-gate dispatches for one
238
+ Step 1 run share one concurrency group (`v3-shadow-candidate-gate-STEP1_RUN_ID`),
239
+ so a re-run's child queues behind a leftover child instead of staging the same
240
+ build in parallel with it. A newer gate dispatch for the same Step 1 run takes
241
+ the group's single pending slot from an older pending one, which then fails its
242
+ own Step 1 wait. A manual dispatch with `release_gate=false` or a transition
243
+ `workflow_run` runs in another group, so it cannot displace a pending gate run.
244
+
245
+ If the dispatch request succeeds but its reply is lost or carries no
246
+ `workflow_run_id`, the job fails with no child run ID, so nothing cancels that
247
+ child. Before re-running Step 1, open the **V3 shadow release: upload
248
+ candidate** runs, find any run dispatched after the failed Step 1 run started,
249
+ and cancel it if it is still running. If it is missed, the shared concurrency
250
+ group still makes the re-run's child wait for it to finish.
251
+
252
+ Release-gate mode accepts both an in-progress `v3-release-step-1.yml`
253
+ parent run and one that has already
254
+ completed without being cancelled (so a maintainer can also dispatch
255
+ `v3-shadow-candidate.yml` manually with `release_gate=true` for repair after
256
+ Step 1 finishes), provided **Perform Release** and **Package V3 candidate
257
+ (shadow)** succeeded and one unexpired candidate artifact exists. Release-gate
258
+ mode also requires npm parity to pass: every package must be on npm with the
259
+ candidate's integrity. **Audit V3 kits on npm** only warns about a kit npm does
260
+ not show yet, and npm can take minutes to show a version it has accepted. So
261
+ while npm parity reads pending (a version npm does not show yet) or unavailable
262
+ (an `npm view` error or an unexpected reply), the candidate workflow reads npm
263
+ again with a doubling backoff (15 seconds at first, at most 2 minutes apart)
264
+ for up to 10 minutes, with a last read when the 10 minutes run out. A fail
265
+ reading (a published package with another integrity) fails the gate at once,
266
+ and a read stops at the first package that differs. A package still pending
267
+ or unavailable after the last read fails the gate instead of uploading. Each
268
+ `npm view` gets at most 30 seconds, and each read of every package at most 2
269
+ minutes. A package the read has no time left for reads unavailable. If `sleep`
270
+ fails between reads, the check fails instead of reading npm again at once. A
271
+ transition `workflow_run`, or a manual dispatch with `release_gate=false`,
272
+ reads npm once. The **Check the candidate against the release** job's
273
+ 25-minute timeout covers the 10 minutes, a last read of at most 2 minutes and
274
+ its other checks.
275
+ A failure in packaging, candidate verification, S3
276
+ upload, or `v3-staging` pointer staging fails the Step 1 release. In
277
+ release-gate mode, `V3_SHADOW_PODS` must include all five production pods
278
+ (`us1`, `us2`, `st1`, `eu1`, `au1`); `qa` is optional (if `qa` is listed in
279
+ `V3_SHADOW_PODS`, it runs in the same matrix and blocks the release on failure;
280
+ if `qa` is omitted from `V3_SHADOW_PODS`, only the five
281
+ production pods block the release and `qa` can run separately). Stage moves each
282
+ pod's `v3-staging` pointer independently in parallel, so if one pod fails, the
283
+ other pods have already moved to the new candidate; re-running failed jobs on
284
+ Step 1 (within the 7-day artifact window) re-runs **Upload and stage V3
285
+ candidate**, dispatches the candidate workflow again, and repairs the remaining
286
+ pods so every pod converges (`resumeKitReleaseTag` skips packaging and upload
287
+ as before). During the transition before a V3 release's Step 3 brings these
288
+ workflow updates to `main`, the shared **Staging Release - Step 1**
289
+ (`staging-step-1.yml`, `track=v3`) still uses the `V3_PACKAGE_CANDIDATE`
290
+ repository variable and the `workflow_run` trigger on `main`, so
291
+ `V3_PACKAGE_CANDIDATE` stays `true` until that transition release finishes.
231
292
 
232
293
  ### Recover an incomplete v3 kit publication
233
294
 
@@ -245,7 +306,13 @@ A real v3 Step 1 run can publish core and create the GitHub Release before all
245
306
  and the same two inputs instead.
246
307
  5. Wait for recovery to verify core and all 33 kits at that version on `next`.
247
308
  Existing byte-identical packages are skipped and only missing kits publish.
248
- 6. Continue to Step 2 or Step 3 only after the recovery run is green.
309
+ 6. If the failed run was **V3 Release - Step 1**, it did not upload or stage
310
+ its candidate, because that job waits for the kits. Dispatch **V3 shadow
311
+ release: upload candidate** (`v3-shadow-candidate.yml`) on `main` with
312
+ `step1_run_id` set to the failed run's ID and `release_gate=true`, within
313
+ the candidate's 7 days.
314
+ 7. Continue to Step 2 or Step 3 only after the recovery run and the candidate
315
+ upload are green.
249
316
 
250
317
  If recovery reports that the tagged core version is missing from npm, stop the
251
318
  kit recovery. Semantic-release may have pushed the generated staging commit and