@hominis/fireforge 0.45.0 → 0.46.1
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 +409 -446
- package/dist/bin/fireforge.d.ts +1 -1
- package/dist/bin/fireforge.js +21 -15
- package/dist/build-info.json +4 -4
- package/dist/src/cli-usage-error.d.ts +46 -0
- package/dist/src/cli-usage-error.js +81 -0
- package/dist/src/cli.d.ts +7 -2
- package/dist/src/cli.js +47 -47
- package/dist/src/commands/bootstrap-checks.js +2 -1
- package/dist/src/commands/bootstrap.js +3 -4
- package/dist/src/commands/build.js +27 -17
- package/dist/src/commands/config.js +9 -9
- package/dist/src/commands/destructive-decision.d.ts +19 -0
- package/dist/src/commands/destructive-decision.js +31 -0
- package/dist/src/commands/discard.js +5 -5
- package/dist/src/commands/doctor-check-core.d.ts +4 -10
- package/dist/src/commands/doctor-check-core.js +0 -8
- package/dist/src/commands/doctor-external-toolchains.js +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.d.ts +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.js +20 -20
- package/dist/src/commands/doctor-furnace-jar.d.ts +1 -1
- package/dist/src/commands/doctor-furnace-jar.js +1 -1
- package/dist/src/commands/doctor-furnace.js +22 -22
- package/dist/src/commands/doctor-orphaned-harness.d.ts +10 -17
- package/dist/src/commands/doctor-orphaned-harness.js +14 -23
- package/dist/src/commands/doctor-patch-manifest.d.ts +2 -1
- package/dist/src/commands/doctor-patch-manifest.js +7 -6
- package/dist/src/commands/doctor-post-rebase-audit.js +3 -3
- package/dist/src/commands/doctor-source-pin.d.ts +12 -12
- package/dist/src/commands/doctor-source-pin.js +14 -14
- package/dist/src/commands/doctor-working-tree.d.ts +3 -3
- package/dist/src/commands/doctor-working-tree.js +3 -3
- package/dist/src/commands/doctor.d.ts +3 -1
- package/dist/src/commands/doctor.js +15 -16
- package/dist/src/commands/download.js +50 -37
- package/dist/src/commands/export-all.js +29 -12
- package/dist/src/commands/export-flow.d.ts +5 -5
- package/dist/src/commands/export-flow.js +29 -59
- package/dist/src/commands/export-placement-conflicts.d.ts +3 -3
- package/dist/src/commands/export-placement-conflicts.js +12 -12
- package/dist/src/commands/export-placement-gate.d.ts +2 -2
- package/dist/src/commands/export-placement-gate.js +7 -13
- package/dist/src/commands/export-placement-policy.d.ts +1 -1
- package/dist/src/commands/export-placement-policy.js +4 -6
- package/dist/src/commands/export-shared.d.ts +51 -32
- package/dist/src/commands/export-shared.js +17 -32
- package/dist/src/commands/export.js +14 -5
- package/dist/src/commands/furnace/apply.js +16 -16
- package/dist/src/commands/furnace/authoring-config.d.ts +13 -0
- package/dist/src/commands/furnace/authoring-config.js +19 -0
- package/dist/src/commands/furnace/chrome-doc-remove.d.ts +1 -1
- package/dist/src/commands/furnace/chrome-doc-remove.js +2 -2
- package/dist/src/commands/furnace/chrome-doc-templates.d.ts +14 -14
- package/dist/src/commands/furnace/chrome-doc-templates.js +17 -17
- package/dist/src/commands/furnace/chrome-doc-tests.d.ts +2 -2
- package/dist/src/commands/furnace/chrome-doc-tests.js +4 -4
- package/dist/src/commands/furnace/chrome-doc.d.ts +8 -8
- package/dist/src/commands/furnace/chrome-doc.js +18 -18
- package/dist/src/commands/furnace/create-browser-test.d.ts +1 -1
- package/dist/src/commands/furnace/create-browser-test.js +7 -12
- package/dist/src/commands/furnace/create-dry-run.d.ts +4 -4
- package/dist/src/commands/furnace/create-dry-run.js +6 -9
- package/dist/src/commands/furnace/create-features.d.ts +2 -2
- package/dist/src/commands/furnace/create-features.js +2 -2
- package/dist/src/commands/furnace/create-mochikit.d.ts +4 -4
- package/dist/src/commands/furnace/create-mochikit.js +7 -7
- package/dist/src/commands/furnace/create-templates.d.ts +31 -15
- package/dist/src/commands/furnace/create-templates.js +20 -19
- package/dist/src/commands/furnace/create-xpcshell.d.ts +5 -5
- package/dist/src/commands/furnace/create-xpcshell.js +8 -8
- package/dist/src/commands/furnace/create.d.ts +1 -1
- package/dist/src/commands/furnace/create.js +35 -29
- package/dist/src/commands/furnace/deploy.js +15 -6
- package/dist/src/commands/furnace/diff.js +7 -7
- package/dist/src/commands/furnace/index.js +1 -1
- package/dist/src/commands/furnace/init.js +17 -16
- package/dist/src/commands/furnace/list.js +2 -2
- package/dist/src/commands/furnace/override.d.ts +1 -1
- package/dist/src/commands/furnace/override.js +43 -34
- package/dist/src/commands/furnace/preview.js +17 -17
- package/dist/src/commands/furnace/refresh.js +15 -7
- package/dist/src/commands/furnace/remove-mutations.d.ts +9 -10
- package/dist/src/commands/furnace/remove-mutations.js +19 -19
- package/dist/src/commands/furnace/remove-state.d.ts +1 -1
- package/dist/src/commands/furnace/remove-state.js +1 -1
- package/dist/src/commands/furnace/remove.js +4 -8
- package/dist/src/commands/furnace/rename-browser-test.js +10 -15
- package/dist/src/commands/furnace/rename-xpcshell.d.ts +2 -2
- package/dist/src/commands/furnace/rename-xpcshell.js +3 -3
- package/dist/src/commands/furnace/rename.js +36 -36
- package/dist/src/commands/furnace/scan.js +3 -3
- package/dist/src/commands/furnace/status.js +19 -16
- package/dist/src/commands/furnace/sync.js +6 -6
- package/dist/src/commands/furnace/test-file-name.d.ts +28 -0
- package/dist/src/commands/furnace/test-file-name.js +39 -0
- package/dist/src/commands/furnace/validate.js +11 -12
- package/dist/src/commands/furnace/validation-output.d.ts +21 -9
- package/dist/src/commands/furnace/validation-output.js +3 -8
- package/dist/src/commands/import.js +22 -29
- package/dist/src/commands/lint-per-patch.d.ts +2 -2
- package/dist/src/commands/lint-per-patch.js +27 -12
- package/dist/src/commands/lint-per-run-checkjs.d.ts +14 -15
- package/dist/src/commands/lint-per-run-checkjs.js +14 -15
- package/dist/src/commands/lint-report.d.ts +3 -3
- package/dist/src/commands/lint-report.js +4 -4
- package/dist/src/commands/lint.d.ts +5 -4
- package/dist/src/commands/lint.js +36 -36
- package/dist/src/commands/manifest.d.ts +4 -4
- package/dist/src/commands/manifest.js +1 -1
- package/dist/src/commands/package.js +4 -6
- package/dist/src/commands/patch/compact.d.ts +2 -2
- package/dist/src/commands/patch/compact.js +19 -20
- package/dist/src/commands/patch/delete.d.ts +1 -1
- package/dist/src/commands/patch/delete.js +23 -33
- package/dist/src/commands/patch/entry-projection.d.ts +13 -0
- package/dist/src/commands/patch/entry-projection.js +24 -0
- package/dist/src/commands/patch/lint-ignore.d.ts +3 -12
- package/dist/src/commands/patch/lint-ignore.js +33 -44
- package/dist/src/commands/patch/move-files-create.d.ts +2 -2
- package/dist/src/commands/patch/move-files-create.js +29 -15
- package/dist/src/commands/patch/move-files-into.d.ts +2 -2
- package/dist/src/commands/patch/move-files-into.js +41 -37
- package/dist/src/commands/patch/move-files.js +5 -14
- package/dist/src/commands/patch/patch-context.d.ts +1 -1
- package/dist/src/commands/patch/rename.d.ts +4 -4
- package/dist/src/commands/patch/rename.js +35 -49
- package/dist/src/commands/patch/reorder.js +35 -48
- package/dist/src/commands/patch/split-plan.d.ts +7 -8
- package/dist/src/commands/patch/split-plan.js +10 -13
- package/dist/src/commands/patch/split.d.ts +2 -2
- package/dist/src/commands/patch/split.js +50 -48
- package/dist/src/commands/patch/staged-dependency-validate.d.ts +1 -1
- package/dist/src/commands/patch/staged-dependency-validate.js +3 -3
- package/dist/src/commands/patch/staged-dependency.d.ts +1 -1
- package/dist/src/commands/patch/staged-dependency.js +22 -28
- package/dist/src/commands/patch/tier.d.ts +2 -2
- package/dist/src/commands/patch/tier.js +20 -30
- package/dist/src/commands/patch-rename-map.d.ts +19 -0
- package/dist/src/commands/patch-rename-map.js +36 -0
- package/dist/src/commands/pending-resolution.d.ts +15 -0
- package/dist/src/commands/pending-resolution.js +25 -0
- package/dist/src/commands/re-export-adjacent.d.ts +25 -3
- package/dist/src/commands/re-export-adjacent.js +40 -24
- package/dist/src/commands/re-export-bulk-scan.d.ts +3 -3
- package/dist/src/commands/re-export-bulk-scan.js +23 -27
- package/dist/src/commands/re-export-drift.d.ts +10 -10
- package/dist/src/commands/re-export-drift.js +33 -33
- package/dist/src/commands/re-export-files.d.ts +2 -3
- package/dist/src/commands/re-export-files.js +52 -44
- package/dist/src/commands/re-export-lint.d.ts +29 -30
- package/dist/src/commands/re-export-lint.js +36 -29
- package/dist/src/commands/re-export-options.d.ts +1 -1
- package/dist/src/commands/re-export-options.js +1 -1
- package/dist/src/commands/re-export-register.d.ts +1 -1
- package/dist/src/commands/re-export-register.js +1 -1
- package/dist/src/commands/re-export-scan.d.ts +1 -1
- package/dist/src/commands/re-export-scan.js +12 -9
- package/dist/src/commands/re-export-single.d.ts +23 -4
- package/dist/src/commands/re-export-single.js +39 -31
- package/dist/src/commands/re-export.js +35 -17
- package/dist/src/commands/rebase/abort.js +9 -14
- package/dist/src/commands/rebase/continue.js +20 -19
- package/dist/src/commands/rebase/index.d.ts +1 -1
- package/dist/src/commands/rebase/index.js +5 -5
- package/dist/src/commands/rebase/patch-loop.d.ts +2 -2
- package/dist/src/commands/rebase/patch-loop.js +20 -24
- package/dist/src/commands/register.js +5 -5
- package/dist/src/commands/reset.js +1 -1
- package/dist/src/commands/resolve.d.ts +2 -2
- package/dist/src/commands/resolve.js +21 -13
- package/dist/src/commands/run.d.ts +0 -13
- package/dist/src/commands/run.js +38 -51
- package/dist/src/commands/setup-support.d.ts +16 -4
- package/dist/src/commands/setup-support.js +20 -20
- package/dist/src/commands/setup.js +4 -10
- package/dist/src/commands/source.js +9 -2
- package/dist/src/commands/status-check.d.ts +3 -3
- package/dist/src/commands/status-check.js +6 -6
- package/dist/src/commands/status-json.d.ts +14 -13
- package/dist/src/commands/status-json.js +9 -8
- package/dist/src/commands/status-output.d.ts +3 -3
- package/dist/src/commands/status-output.js +5 -5
- package/dist/src/commands/status-ownership.d.ts +3 -3
- package/dist/src/commands/status-ownership.js +3 -3
- package/dist/src/commands/status.js +25 -26
- package/dist/src/commands/test-build-phase.d.ts +3 -3
- package/dist/src/commands/test-build-phase.js +48 -24
- package/dist/src/commands/test-diagnose.d.ts +1 -1
- package/dist/src/commands/test-diagnose.js +20 -20
- package/dist/src/commands/test-modes.d.ts +4 -4
- package/dist/src/commands/test-modes.js +4 -5
- package/dist/src/commands/test-register.js +5 -3
- package/dist/src/commands/test-run.d.ts +11 -11
- package/dist/src/commands/test-run.js +40 -33
- package/dist/src/commands/test-stale-gate.d.ts +12 -12
- package/dist/src/commands/test-stale-gate.js +17 -17
- package/dist/src/commands/test-verdict.d.ts +19 -5
- package/dist/src/commands/test-verdict.js +26 -11
- package/dist/src/commands/test.d.ts +3 -3
- package/dist/src/commands/test.js +73 -36
- package/dist/src/commands/token-coverage.js +3 -3
- package/dist/src/commands/token-list.d.ts +26 -0
- package/dist/src/commands/token-list.js +153 -0
- package/dist/src/commands/token.js +26 -10
- package/dist/src/commands/tree.js +26 -21
- package/dist/src/commands/typecheck.d.ts +6 -6
- package/dist/src/commands/typecheck.js +16 -16
- package/dist/src/commands/verify.d.ts +3 -3
- package/dist/src/commands/verify.js +10 -10
- package/dist/src/commands/watch.js +11 -11
- package/dist/src/commands/wire.js +17 -16
- package/dist/src/core/ast-utils.d.ts +7 -7
- package/dist/src/core/ast-utils.js +8 -8
- package/dist/src/core/branding.d.ts +5 -12
- package/dist/src/core/branding.js +6 -5
- package/dist/src/core/browser-wire.d.ts +1 -1
- package/dist/src/core/browser-wire.js +10 -7
- package/dist/src/core/build-audit-platform.d.ts +32 -3
- package/dist/src/core/build-audit-platform.js +153 -13
- package/dist/src/core/build-audit-registration.d.ts +5 -5
- package/dist/src/core/build-audit-registration.js +10 -9
- package/dist/src/core/build-audit-resolve.d.ts +5 -5
- package/dist/src/core/build-audit-resolve.js +6 -6
- package/dist/src/core/build-audit-skip.d.ts +57 -0
- package/dist/src/core/build-audit-skip.js +112 -0
- package/dist/src/core/build-audit-transforms.d.ts +2 -2
- package/dist/src/core/build-audit-transforms.js +3 -3
- package/dist/src/core/build-audit.d.ts +21 -8
- package/dist/src/core/build-audit.js +142 -40
- package/dist/src/core/build-baseline-types.d.ts +19 -18
- package/dist/src/core/build-baseline-types.js +1 -1
- package/dist/src/core/build-baseline.d.ts +48 -31
- package/dist/src/core/build-baseline.js +20 -43
- package/dist/src/core/build-jar-escalation.d.ts +8 -8
- package/dist/src/core/build-jar-escalation.js +18 -17
- package/dist/src/core/build-overwrite-guard.d.ts +4 -4
- package/dist/src/core/build-overwrite-guard.js +14 -14
- package/dist/src/core/build-prepare.d.ts +4 -12
- package/dist/src/core/build-prepare.js +22 -26
- package/dist/src/core/config-mutate.js +4 -4
- package/dist/src/core/config-paths.d.ts +2 -6
- package/dist/src/core/config-paths.js +4 -2
- package/dist/src/core/config-state.d.ts +0 -6
- package/dist/src/core/config-state.js +3 -21
- package/dist/src/core/config-validate-build-audit.d.ts +8 -0
- package/dist/src/core/config-validate-build-audit.js +80 -0
- package/dist/src/core/config-validate-file-size.d.ts +1 -1
- package/dist/src/core/config-validate-file-size.js +3 -3
- package/dist/src/core/config-validate-patch-policy.d.ts +2 -2
- package/dist/src/core/config-validate-patch-policy.js +3 -3
- package/dist/src/core/config-validate-test-toolchains.d.ts +2 -2
- package/dist/src/core/config-validate-test-toolchains.js +4 -5
- package/dist/src/core/config-validate.js +22 -12
- package/dist/src/core/config.d.ts +12 -12
- package/dist/src/core/config.js +21 -25
- package/dist/src/core/coverage-extend.d.ts +16 -16
- package/dist/src/core/coverage-extend.js +20 -20
- package/dist/src/core/destructive.d.ts +14 -14
- package/dist/src/core/destructive.js +9 -9
- package/dist/src/core/diff-hunks.d.ts +2 -2
- package/dist/src/core/diff-hunks.js +7 -7
- package/dist/src/core/discard-baseline.d.ts +10 -10
- package/dist/src/core/discard-baseline.js +22 -23
- package/dist/src/core/display-state.d.ts +11 -11
- package/dist/src/core/display-state.js +12 -12
- package/dist/src/core/engine-changes.d.ts +2 -2
- package/dist/src/core/engine-changes.js +2 -2
- package/dist/src/core/engine-precondition.d.ts +5 -13
- package/dist/src/core/engine-precondition.js +5 -10
- package/dist/src/core/engine-session-lock.d.ts +18 -18
- package/dist/src/core/engine-session-lock.js +50 -54
- package/dist/src/core/export-moved-code-shape.d.ts +7 -7
- package/dist/src/core/export-moved-code-shape.js +10 -10
- package/dist/src/core/file-lock-owner.d.ts +103 -0
- package/dist/src/core/file-lock-owner.js +259 -0
- package/dist/src/core/file-lock.d.ts +14 -19
- package/dist/src/core/file-lock.js +90 -128
- package/dist/src/core/firefox-cache.d.ts +13 -1
- package/dist/src/core/firefox-cache.js +61 -36
- package/dist/src/core/firefox-download.d.ts +15 -0
- package/dist/src/core/firefox-download.js +38 -22
- package/dist/src/core/firefox-extract.d.ts +8 -7
- package/dist/src/core/firefox-extract.js +45 -27
- package/dist/src/core/firefox.d.ts +34 -36
- package/dist/src/core/firefox.js +13 -44
- package/dist/src/core/furnace-apply-dry-run.d.ts +1 -6
- package/dist/src/core/furnace-apply-dry-run.js +2 -8
- package/dist/src/core/furnace-apply-ftl.d.ts +5 -5
- package/dist/src/core/furnace-apply-ftl.js +8 -8
- package/dist/src/core/furnace-apply-helpers.d.ts +9 -20
- package/dist/src/core/furnace-apply-helpers.js +28 -39
- package/dist/src/core/furnace-apply-output.js +1 -1
- package/dist/src/core/furnace-apply-overwrite-warn.d.ts +9 -9
- package/dist/src/core/furnace-apply-overwrite-warn.js +13 -11
- package/dist/src/core/furnace-apply-undeploy-actions.d.ts +1 -1
- package/dist/src/core/furnace-apply-undeploy-actions.js +1 -1
- package/dist/src/core/furnace-apply.d.ts +4 -4
- package/dist/src/core/furnace-apply.js +50 -29
- package/dist/src/core/furnace-checksum-utils.d.ts +5 -5
- package/dist/src/core/furnace-checksum-utils.js +5 -5
- package/dist/src/core/furnace-config-custom.d.ts +1 -1
- package/dist/src/core/furnace-config-custom.js +2 -2
- package/dist/src/core/furnace-config-order.js +1 -1
- package/dist/src/core/furnace-config-tokens.d.ts +3 -3
- package/dist/src/core/furnace-config-tokens.js +3 -3
- package/dist/src/core/furnace-config-validate.js +2 -2
- package/dist/src/core/furnace-config.d.ts +5 -5
- package/dist/src/core/furnace-config.js +40 -53
- package/dist/src/core/furnace-constants.d.ts +6 -6
- package/dist/src/core/furnace-constants.js +9 -8
- package/dist/src/core/furnace-css-fragments.d.ts +6 -6
- package/dist/src/core/furnace-css-fragments.js +11 -11
- package/dist/src/core/furnace-dir-entry.d.ts +20 -0
- package/dist/src/core/furnace-dir-entry.js +21 -0
- package/dist/src/core/furnace-jsconfig.d.ts +7 -7
- package/dist/src/core/furnace-jsconfig.js +22 -20
- package/dist/src/core/furnace-operation.d.ts +22 -19
- package/dist/src/core/furnace-operation.js +38 -34
- package/dist/src/core/furnace-precondition.d.ts +10 -10
- package/dist/src/core/furnace-precondition.js +8 -8
- package/dist/src/core/furnace-refresh.d.ts +18 -6
- package/dist/src/core/furnace-refresh.js +5 -8
- package/dist/src/core/furnace-registration-ast.d.ts +2 -3
- package/dist/src/core/furnace-registration-ast.js +9 -12
- package/dist/src/core/furnace-registration-remove.d.ts +4 -4
- package/dist/src/core/furnace-registration-remove.js +6 -6
- package/dist/src/core/furnace-registration-validate.d.ts +2 -2
- package/dist/src/core/furnace-registration-validate.js +2 -2
- package/dist/src/core/furnace-registration.d.ts +7 -6
- package/dist/src/core/furnace-registration.js +29 -36
- package/dist/src/core/furnace-rollback.d.ts +1 -1
- package/dist/src/core/furnace-rollback.js +5 -5
- package/dist/src/core/furnace-scanner.js +3 -6
- package/dist/src/core/furnace-stale-export.d.ts +17 -16
- package/dist/src/core/furnace-stale-export.js +16 -15
- package/dist/src/core/furnace-staleness.d.ts +2 -2
- package/dist/src/core/furnace-staleness.js +2 -2
- package/dist/src/core/furnace-state-persist.d.ts +12 -12
- package/dist/src/core/furnace-state-persist.js +10 -10
- package/dist/src/core/furnace-step-errors.d.ts +6 -6
- package/dist/src/core/furnace-step-errors.js +6 -6
- package/dist/src/core/furnace-validate-accessibility.js +14 -14
- package/dist/src/core/furnace-validate-compatibility.js +9 -9
- package/dist/src/core/furnace-validate-registration.d.ts +2 -2
- package/dist/src/core/furnace-validate-registration.js +18 -20
- package/dist/src/core/furnace-validate-structure.d.ts +1 -1
- package/dist/src/core/furnace-validate-structure.js +4 -4
- package/dist/src/core/furnace-validate.js +9 -9
- package/dist/src/core/furnace-version-drift.d.ts +5 -5
- package/dist/src/core/furnace-version-drift.js +5 -5
- package/dist/src/core/git-base.d.ts +6 -4
- package/dist/src/core/git-base.js +29 -7
- package/dist/src/core/git-diff-new-file.d.ts +40 -0
- package/dist/src/core/git-diff-new-file.js +119 -0
- package/dist/src/core/git-diff.d.ts +13 -13
- package/dist/src/core/git-diff.js +121 -189
- package/dist/src/core/git-file-ops.d.ts +6 -13
- package/dist/src/core/git-file-ops.js +11 -35
- package/dist/src/core/git-readonly-index.d.ts +12 -14
- package/dist/src/core/git-readonly-index.js +12 -16
- package/dist/src/core/git-status.d.ts +9 -2
- package/dist/src/core/git-status.js +23 -11
- package/dist/src/core/git.d.ts +3 -9
- package/dist/src/core/git.js +28 -57
- package/dist/src/core/harness-orphans.d.ts +17 -17
- package/dist/src/core/harness-orphans.js +28 -27
- package/dist/src/core/history-log.d.ts +19 -0
- package/dist/src/core/history-log.js +29 -0
- package/dist/src/core/license-headers.d.ts +19 -18
- package/dist/src/core/license-headers.js +29 -28
- package/dist/src/core/mach-build-artifacts.d.ts +21 -21
- package/dist/src/core/mach-build-artifacts.js +23 -23
- package/dist/src/core/mach-error-hints.d.ts +5 -10
- package/dist/src/core/mach-error-hints.js +14 -14
- package/dist/src/core/mach-known-noise-filter.d.ts +42 -38
- package/dist/src/core/mach-known-noise-filter.js +57 -56
- package/dist/src/core/mach-mozconfig.d.ts +6 -6
- package/dist/src/core/mach-mozconfig.js +17 -16
- package/dist/src/core/mach-python.d.ts +3 -0
- package/dist/src/core/mach-python.js +13 -7
- package/dist/src/core/mach-resource-shim.d.ts +24 -12
- package/dist/src/core/mach-resource-shim.js +124 -21
- package/dist/src/core/mach.d.ts +59 -73
- package/dist/src/core/mach.js +47 -115
- package/dist/src/core/marionette-port.d.ts +15 -30
- package/dist/src/core/marionette-port.js +46 -89
- package/dist/src/core/marionette-preflight.d.ts +6 -6
- package/dist/src/core/marionette-preflight.js +32 -50
- package/dist/src/core/markdown-table.d.ts +9 -9
- package/dist/src/core/markdown-table.js +14 -14
- package/dist/src/core/mochitest-server-port.d.ts +8 -8
- package/dist/src/core/mochitest-server-port.js +17 -17
- package/dist/src/core/module-resolution-preflight.d.ts +8 -8
- package/dist/src/core/module-resolution-preflight.js +11 -11
- package/dist/src/core/moz-manifest-helpers.d.ts +7 -7
- package/dist/src/core/moz-manifest-helpers.js +7 -7
- package/dist/src/core/moz-manifest-register.d.ts +1 -1
- package/dist/src/core/moz-manifest-register.js +2 -2
- package/dist/src/core/moz-manifest-rules.js +46 -42
- package/dist/src/core/moz-manifest-tokenizers.js +1 -1
- package/dist/src/core/ownership-table.d.ts +5 -5
- package/dist/src/core/ownership-table.js +7 -7
- package/dist/src/core/parser-fallback.d.ts +3 -3
- package/dist/src/core/parser-fallback.js +3 -3
- package/dist/src/core/patch-apply-fuzz.d.ts +5 -5
- package/dist/src/core/patch-apply-fuzz.js +13 -13
- package/dist/src/core/patch-apply.d.ts +13 -14
- package/dist/src/core/patch-apply.js +36 -42
- package/dist/src/core/patch-export-coverage.d.ts +0 -9
- package/dist/src/core/patch-export-coverage.js +1 -30
- package/dist/src/core/patch-export-update.d.ts +21 -4
- package/dist/src/core/patch-export-update.js +7 -6
- package/dist/src/core/patch-export.d.ts +20 -30
- package/dist/src/core/patch-export.js +55 -77
- package/dist/src/core/patch-files.d.ts +0 -4
- package/dist/src/core/patch-files.js +0 -11
- package/dist/src/core/patch-identifier-suggest.d.ts +1 -1
- package/dist/src/core/patch-identifier-suggest.js +4 -4
- package/dist/src/core/patch-lint-binary.d.ts +12 -18
- package/dist/src/core/patch-lint-cache.d.ts +18 -2
- package/dist/src/core/patch-lint-cache.js +16 -19
- package/dist/src/core/patch-lint-checkjs.d.ts +55 -38
- package/dist/src/core/patch-lint-checkjs.js +78 -64
- package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +8 -9
- package/dist/src/core/patch-lint-chrome-jsdoc.js +10 -11
- package/dist/src/core/patch-lint-creators.d.ts +5 -9
- package/dist/src/core/patch-lint-creators.js +3 -3
- package/dist/src/core/patch-lint-cross.d.ts +27 -19
- package/dist/src/core/patch-lint-cross.js +67 -110
- package/dist/src/core/patch-lint-css.d.ts +1 -1
- package/dist/src/core/patch-lint-css.js +15 -11
- package/dist/src/core/patch-lint-diff-tag.d.ts +5 -5
- package/dist/src/core/patch-lint-diff-tag.js +5 -5
- package/dist/src/core/patch-lint-diff.d.ts +4 -4
- package/dist/src/core/patch-lint-diff.js +4 -4
- package/dist/src/core/patch-lint-file-size.d.ts +3 -3
- package/dist/src/core/patch-lint-file-size.js +6 -6
- package/dist/src/core/patch-lint-forward-registration.d.ts +58 -0
- package/dist/src/core/patch-lint-forward-registration.js +210 -0
- package/dist/src/core/patch-lint-jsdoc.d.ts +2 -2
- package/dist/src/core/patch-lint-jsdoc.js +46 -46
- package/dist/src/core/patch-lint-module-registration.d.ts +3 -9
- package/dist/src/core/patch-lint-module-registration.js +1 -1
- package/dist/src/core/patch-lint-mozbuild.d.ts +1 -1
- package/dist/src/core/patch-lint-mozbuild.js +10 -10
- package/dist/src/core/patch-lint-observer.d.ts +3 -3
- package/dist/src/core/patch-lint-observer.js +7 -7
- package/dist/src/core/patch-lint-ownership.d.ts +6 -6
- package/dist/src/core/patch-lint-ownership.js +6 -6
- package/dist/src/core/patch-lint-prettier.d.ts +6 -6
- package/dist/src/core/patch-lint-prettier.js +7 -7
- package/dist/src/core/patch-lint-queue-types.d.ts +60 -0
- package/dist/src/core/patch-lint-queue-types.js +12 -0
- package/dist/src/core/patch-lint-staged-registration.d.ts +61 -0
- package/dist/src/core/patch-lint-staged-registration.js +90 -0
- package/dist/src/core/patch-lint-unmanaged-companion.d.ts +23 -23
- package/dist/src/core/patch-lint-unmanaged-companion.js +26 -26
- package/dist/src/core/patch-lint.d.ts +41 -35
- package/dist/src/core/patch-lint.js +52 -49
- package/dist/src/core/patch-lock.d.ts +1 -1
- package/dist/src/core/patch-lock.js +11 -11
- package/dist/src/core/patch-manifest-consistency.d.ts +7 -7
- package/dist/src/core/patch-manifest-consistency.js +16 -17
- package/dist/src/core/patch-manifest-files-affected.d.ts +1 -1
- package/dist/src/core/patch-manifest-files-affected.js +3 -3
- package/dist/src/core/patch-manifest-io.d.ts +14 -14
- package/dist/src/core/patch-manifest-io.js +35 -34
- package/dist/src/core/patch-manifest-query.d.ts +1 -1
- package/dist/src/core/patch-manifest-query.js +4 -4
- package/dist/src/core/patch-manifest-resolve.d.ts +5 -5
- package/dist/src/core/patch-manifest-resolve.js +7 -7
- package/dist/src/core/patch-manifest-validate.js +3 -3
- package/dist/src/core/patch-manifest.d.ts +2 -2
- package/dist/src/core/patch-manifest.js +2 -2
- package/dist/src/core/patch-parse.d.ts +32 -21
- package/dist/src/core/patch-parse.js +40 -15
- package/dist/src/core/patch-policy.js +15 -27
- package/dist/src/core/patch-registration-refs.d.ts +4 -4
- package/dist/src/core/patch-registration-refs.js +7 -7
- package/dist/src/core/patch-source-metadata.d.ts +1 -3
- package/dist/src/core/patch-source-metadata.js +0 -4
- package/dist/src/core/patch-transform.d.ts +8 -16
- package/dist/src/core/patch-transform.js +13 -23
- package/dist/src/core/process-cpu-time.d.ts +1 -1
- package/dist/src/core/process-cpu-time.js +6 -6
- package/dist/src/core/rebase-session.d.ts +9 -15
- package/dist/src/core/rebase-session.js +13 -25
- package/dist/src/core/register-browser-content.js +3 -2
- package/dist/src/core/register-browser-test.js +2 -1
- package/dist/src/core/register-module.js +2 -1
- package/dist/src/core/register-result.d.ts +1 -1
- package/dist/src/core/register-result.js +1 -1
- package/dist/src/core/register-scaffold.d.ts +2 -2
- package/dist/src/core/register-scaffold.js +8 -7
- package/dist/src/core/register-shared-css.d.ts +3 -3
- package/dist/src/core/register-shared-css.js +6 -5
- package/dist/src/core/register-xpcshell-test.d.ts +2 -2
- package/dist/src/core/register-xpcshell-test.js +2 -2
- package/dist/src/core/run-log-redact.d.ts +38 -0
- package/dist/src/core/run-log-redact.js +69 -0
- package/dist/src/core/run-log.d.ts +21 -10
- package/dist/src/core/run-log.js +76 -27
- package/dist/src/core/shared-ftl.d.ts +2 -2
- package/dist/src/core/shared-ftl.js +6 -6
- package/dist/src/core/signal-critical.d.ts +2 -2
- package/dist/src/core/signal-critical.js +4 -6
- package/dist/src/core/smoke-patterns.d.ts +5 -6
- package/dist/src/core/smoke-patterns.js +15 -20
- package/dist/src/core/state-file.d.ts +15 -4
- package/dist/src/core/state-file.js +14 -1
- package/dist/src/core/status-binary.d.ts +8 -8
- package/dist/src/core/status-binary.js +12 -12
- package/dist/src/core/status-classify.d.ts +17 -17
- package/dist/src/core/status-classify.js +13 -12
- package/dist/src/core/test-changed-prefs.d.ts +12 -12
- package/dist/src/core/test-changed-prefs.js +40 -25
- package/dist/src/core/test-harness-crash.d.ts +39 -39
- package/dist/src/core/test-harness-crash.js +69 -69
- package/dist/src/core/test-harness-output.d.ts +7 -7
- package/dist/src/core/test-harness-output.js +7 -7
- package/dist/src/core/test-harness-verdict-notes.d.ts +13 -14
- package/dist/src/core/test-harness-verdict-notes.js +4 -4
- package/dist/src/core/test-path-scope.d.ts +8 -8
- package/dist/src/core/test-path-scope.js +11 -11
- package/dist/src/core/test-stale-check.d.ts +22 -23
- package/dist/src/core/test-stale-check.js +31 -30
- package/dist/src/core/test-stale-symlink.d.ts +1 -1
- package/dist/src/core/test-stale-symlink.js +1 -1
- package/dist/src/core/test-stall-triage.d.ts +9 -9
- package/dist/src/core/test-stall-triage.js +22 -22
- package/dist/src/core/test-xpcshell-retry.d.ts +26 -7
- package/dist/src/core/test-xpcshell-retry.js +14 -11
- package/dist/src/core/token-category.d.ts +35 -2
- package/dist/src/core/token-category.js +67 -58
- package/dist/src/core/token-coverage.js +4 -5
- package/dist/src/core/token-dark-mode.d.ts +9 -9
- package/dist/src/core/token-dark-mode.js +13 -25
- package/dist/src/core/token-docs.d.ts +1 -1
- package/dist/src/core/token-inventory.d.ts +56 -0
- package/dist/src/core/token-inventory.js +109 -0
- package/dist/src/core/token-manager.d.ts +4 -4
- package/dist/src/core/token-manager.js +22 -22
- package/dist/src/core/token-scaffold.d.ts +4 -4
- package/dist/src/core/token-scaffold.js +4 -4
- package/dist/src/core/token-variant.d.ts +14 -14
- package/dist/src/core/token-variant.js +52 -53
- package/dist/src/core/toolchain-preflight.d.ts +15 -15
- package/dist/src/core/toolchain-preflight.js +23 -23
- package/dist/src/core/tree-cow.d.ts +3 -5
- package/dist/src/core/tree-cow.js +8 -8
- package/dist/src/core/tree-guard.d.ts +3 -3
- package/dist/src/core/tree-guard.js +23 -23
- package/dist/src/core/tree-store.d.ts +15 -15
- package/dist/src/core/tree-store.js +39 -38
- package/dist/src/core/typecheck-shim.d.ts +16 -15
- package/dist/src/core/typecheck-shim.js +26 -25
- package/dist/src/core/typecheck.d.ts +12 -12
- package/dist/src/core/typecheck.js +33 -33
- package/dist/src/core/wire-destroy.d.ts +2 -2
- package/dist/src/core/wire-destroy.js +5 -5
- package/dist/src/core/wire-dom-fragment.d.ts +3 -3
- package/dist/src/core/wire-dom-fragment.js +12 -23
- package/dist/src/core/wire-init.d.ts +2 -2
- package/dist/src/core/wire-init.js +7 -7
- package/dist/src/core/wire-subscript.d.ts +1 -1
- package/dist/src/core/wire-subscript.js +3 -3
- package/dist/src/core/wire-utils.d.ts +9 -9
- package/dist/src/core/wire-utils.js +16 -28
- package/dist/src/core/xpcshell-appdir.d.ts +20 -20
- package/dist/src/core/xpcshell-appdir.js +28 -30
- package/dist/src/core/xpcshell-profile-dir.d.ts +3 -3
- package/dist/src/core/xpcshell-profile-dir.js +7 -7
- package/dist/src/errors/base.d.ts +69 -16
- package/dist/src/errors/base.js +95 -26
- package/dist/src/errors/build.d.ts +6 -6
- package/dist/src/errors/build.js +26 -34
- package/dist/src/errors/codes.d.ts +10 -10
- package/dist/src/errors/codes.js +10 -10
- package/dist/src/errors/config.d.ts +0 -14
- package/dist/src/errors/config.js +13 -34
- package/dist/src/errors/download.d.ts +13 -0
- package/dist/src/errors/download.js +53 -24
- package/dist/src/errors/furnace.d.ts +2 -2
- package/dist/src/errors/furnace.js +8 -9
- package/dist/src/errors/git.d.ts +9 -9
- package/dist/src/errors/git.js +21 -31
- package/dist/src/errors/patch.d.ts +3 -3
- package/dist/src/errors/patch.js +11 -13
- package/dist/src/errors/rebase.d.ts +1 -1
- package/dist/src/errors/rebase.js +8 -8
- package/dist/src/errors/run.d.ts +1 -1
- package/dist/src/errors/run.js +1 -1
- package/dist/src/index.d.ts +4 -4
- package/dist/src/index.js +4 -4
- package/dist/src/types/commands/options.d.ts +155 -200
- package/dist/src/types/commands/patches.d.ts +19 -19
- package/dist/src/types/commands/project.d.ts +3 -3
- package/dist/src/types/config.d.ts +52 -19
- package/dist/src/types/furnace.d.ts +17 -17
- package/dist/src/types/index.d.ts +0 -1
- package/dist/src/types/json.d.ts +3 -3
- package/dist/src/types/json.js +2 -2
- package/dist/src/types/typecheck.d.ts +3 -3
- package/dist/src/utils/assert.d.ts +4 -16
- package/dist/src/utils/assert.js +7 -24
- package/dist/src/utils/build-info.d.ts +6 -6
- package/dist/src/utils/build-info.js +6 -6
- package/dist/src/utils/child-env.d.ts +7 -6
- package/dist/src/utils/child-env.js +5 -5
- package/dist/src/utils/concurrency.d.ts +2 -2
- package/dist/src/utils/concurrency.js +2 -2
- package/dist/src/utils/elapsed.js +10 -1
- package/dist/src/utils/errors.d.ts +8 -8
- package/dist/src/utils/errors.js +8 -8
- package/dist/src/utils/fs.d.ts +1 -1
- package/dist/src/utils/fs.js +15 -20
- package/dist/src/utils/hash.d.ts +12 -0
- package/dist/src/utils/hash.js +16 -0
- package/dist/src/utils/line-dispatch.d.ts +15 -0
- package/dist/src/utils/line-dispatch.js +48 -0
- package/dist/src/utils/logger.d.ts +4 -4
- package/dist/src/utils/logger.js +11 -11
- package/dist/src/utils/machine-output.js +2 -2
- package/dist/src/utils/options.d.ts +14 -20
- package/dist/src/utils/options.js +26 -27
- package/dist/src/utils/package-root.js +5 -14
- package/dist/src/utils/paths.d.ts +4 -4
- package/dist/src/utils/paths.js +4 -4
- package/dist/src/utils/platform.d.ts +0 -4
- package/dist/src/utils/process-group.d.ts +10 -9
- package/dist/src/utils/process-group.js +37 -36
- package/dist/src/utils/process.d.ts +70 -55
- package/dist/src/utils/process.js +129 -179
- package/dist/src/utils/ps-duration.d.ts +4 -4
- package/dist/src/utils/ps-duration.js +9 -9
- package/dist/src/utils/regex.d.ts +4 -4
- package/dist/src/utils/regex.js +7 -7
- package/dist/src/utils/sleep.d.ts +26 -0
- package/dist/src/utils/sleep.js +31 -0
- package/dist/src/utils/stdio-drain.d.ts +7 -7
- package/dist/src/utils/stdio-drain.js +8 -8
- package/dist/src/utils/validation.d.ts +12 -49
- package/dist/src/utils/validation.js +26 -36
- package/docs/README.md +2 -2
- package/docs/configuration.md +163 -69
- package/docs/exit-codes.md +66 -49
- package/docs/furnace.md +20 -19
- package/docs/lifecycle-invariants.md +414 -247
- package/docs/machine-output.md +58 -34
- package/docs/patch-workflow.md +48 -44
- package/docs/run-logs.md +72 -28
- package/docs/testing.md +105 -98
- package/docs/verification-trees.md +23 -22
- package/package.json +7 -6
- package/dist/src/commands/rebase.d.ts +0 -4
- package/dist/src/commands/rebase.js +0 -5
- package/dist/src/core/patch-artifact-normalize.d.ts +0 -21
- package/dist/src/core/patch-artifact-normalize.js +0 -24
- package/dist/src/core/patch-lint-reexports.d.ts +0 -7
- package/dist/src/core/patch-lint-reexports.js +0 -8
- package/dist/src/core/wire-targets.d.ts +0 -7
- package/dist/src/core/wire-targets.js +0 -8
package/dist/src/core/mach.js
CHANGED
|
@@ -16,11 +16,11 @@ import { detectHarnessCrashSignature } from './test-harness-crash.js';
|
|
|
16
16
|
// This block is a frozen compatibility list, not a barrel to grow: every name
|
|
17
17
|
// here already had a `from './mach.js'` import when the module was split.
|
|
18
18
|
// New helpers belong in their own sub-module and are imported from it
|
|
19
|
-
// directly
|
|
19
|
+
// directly. Adding to this list pulls the whole sub-module into every suite
|
|
20
20
|
// that mocks `mach.js`.
|
|
21
21
|
export { attemptMozinfoRewrite, buildArtifactMismatchMessage, hasBuildArtifacts, hasRunnableBundle, } from './mach-build-artifacts.js';
|
|
22
22
|
export { generateMozconfig } from './mach-mozconfig.js';
|
|
23
|
-
export { ensurePython
|
|
23
|
+
export { ensurePython } from './mach-python.js';
|
|
24
24
|
/**
|
|
25
25
|
* Ensures mach is available in the engine directory.
|
|
26
26
|
* @param engineDir - Path to the engine directory
|
|
@@ -51,8 +51,8 @@ export async function runMach(args, engineDir, options = {}) {
|
|
|
51
51
|
if (options.inherit) {
|
|
52
52
|
// Group-reap every long-lived inherited mach dispatch (bootstrap, run,
|
|
53
53
|
// watch): a mach dying at startup must not strand multiprocessing
|
|
54
|
-
// workers. Short-lived metadata queries below stay on plain exec()
|
|
55
|
-
//
|
|
54
|
+
// workers. Short-lived metadata queries below stay on plain exec().
|
|
55
|
+
// Adding groups there would touch every non-mach exec consumer's path
|
|
56
56
|
// for no reaping benefit.
|
|
57
57
|
return execInherit(python, [machPath, ...args], { ...execOptions, processGroup: true });
|
|
58
58
|
}
|
|
@@ -79,7 +79,7 @@ export async function runMachCapture(args, engineDir, options = {}) {
|
|
|
79
79
|
const machPath = join(engineDir, 'mach');
|
|
80
80
|
let stdout = '';
|
|
81
81
|
let stderr = '';
|
|
82
|
-
// Echo-path filters only: the captured strings above accumulate
|
|
82
|
+
// Echo-path filters only: the captured strings above accumulate raw so the
|
|
83
83
|
// classifier still sees the full teardown traceback. When the option is
|
|
84
84
|
// off, the filters are absent and echo is a straight write (unchanged).
|
|
85
85
|
// One shutdown context per run, shared by both stream filters: the
|
|
@@ -94,18 +94,18 @@ export async function runMachCapture(args, engineDir, options = {}) {
|
|
|
94
94
|
...(options.envUnset ? { envUnset: options.envUnset } : {}),
|
|
95
95
|
// Every capture dispatch (test suites, protected builds, package,
|
|
96
96
|
// storybook) runs as a process-group leader and is group-reaped on
|
|
97
|
-
// exit/abort
|
|
97
|
+
// exit/abort. See ExecOptions.processGroup.
|
|
98
98
|
processGroup: true,
|
|
99
99
|
onStdout: (data) => {
|
|
100
100
|
stdout += data;
|
|
101
101
|
if (stdout.length > CAPTURE_TAIL_LIMIT) {
|
|
102
102
|
stdout = stdout.slice(-CAPTURE_TAIL_LIMIT);
|
|
103
103
|
}
|
|
104
|
-
//
|
|
104
|
+
// Raw into the log, filtered into the echo. The log exists to be
|
|
105
105
|
// re-read after the fact by whoever is diagnosing the run, and the
|
|
106
|
-
// echo filter
|
|
107
|
-
//
|
|
108
|
-
//
|
|
106
|
+
// echo filter only exists to shorten what a human scrolls past.
|
|
107
|
+
// Collapsing a traceback in the artifact would reintroduce the loss
|
|
108
|
+
// this log exists to prevent.
|
|
109
109
|
writeToActiveRunLog(data);
|
|
110
110
|
process.stdout.write(stdoutFilter ? stdoutFilter.transform(data) : data);
|
|
111
111
|
},
|
|
@@ -149,14 +149,6 @@ export async function runMachInheritCapture(args, engineDir, options = {}) {
|
|
|
149
149
|
processGroup: true,
|
|
150
150
|
});
|
|
151
151
|
}
|
|
152
|
-
/**
|
|
153
|
-
* Runs mach bootstrap to install build dependencies.
|
|
154
|
-
* @param engineDir - Path to the engine directory
|
|
155
|
-
* @returns Exit code
|
|
156
|
-
*/
|
|
157
|
-
export async function bootstrap(engineDir) {
|
|
158
|
-
return runMach(['bootstrap', '--application-choice', 'browser'], engineDir, { inherit: true });
|
|
159
|
-
}
|
|
160
152
|
/**
|
|
161
153
|
* Runs mach bootstrap while preserving stdin and capturing the emitted output.
|
|
162
154
|
* @param engineDir - Path to the engine directory
|
|
@@ -171,9 +163,9 @@ export async function bootstrapWithOutput(engineDir) {
|
|
|
171
163
|
* propagates so the hint sits immediately below the raw mach error in the
|
|
172
164
|
* operator's terminal.
|
|
173
165
|
*
|
|
174
|
-
* The scanner is passed the concatenation of stderr
|
|
166
|
+
* The scanner is passed the concatenation of stderr and stdout because mach
|
|
175
167
|
* streams its subcommand output through a timestamp-prefixing wrapper that
|
|
176
|
-
* writes both streams to whatever FD the subprocess chose
|
|
168
|
+
* writes both streams to whatever FD the subprocess chose, so `rustc` errors
|
|
177
169
|
* from `mach build` can land on stdout, so feeding only `result.stderr`
|
|
178
170
|
* silently loses the match.
|
|
179
171
|
*/
|
|
@@ -194,10 +186,10 @@ function surfaceMachErrorHints(result) {
|
|
|
194
186
|
*/
|
|
195
187
|
const DEFAULT_BUILD_CRASH_RETRIES = 2;
|
|
196
188
|
/**
|
|
197
|
-
* Names the known mozsystemmonitor teardown traceback when a
|
|
198
|
-
* it. The test path collapses this signature in the echo
|
|
189
|
+
* Names the known mozsystemmonitor teardown traceback when a build carried
|
|
190
|
+
* it. The test path collapses this signature in the echo. A build cannot
|
|
199
191
|
* (see `mach-known-noise-filter.ts`), so it reached operators as an
|
|
200
|
-
* unexplained traceback in a build log
|
|
192
|
+
* unexplained traceback in a build log: a recognized, documented upstream
|
|
201
193
|
* defect wearing the appearance of a new one. The output is left verbatim
|
|
202
194
|
* and this one line is added beside it, so the same signature reads the same
|
|
203
195
|
* in both phases.
|
|
@@ -209,20 +201,20 @@ function noteKnownTeardownNoiseInBuild(result) {
|
|
|
209
201
|
}
|
|
210
202
|
/**
|
|
211
203
|
* The single protected path every FireForge mach build dispatch routes
|
|
212
|
-
* through
|
|
204
|
+
* through. `build`, `build --ui`, and the pre-test `--build` step all use
|
|
213
205
|
* it, so no entry point is left unprotected with a different retry budget:
|
|
214
206
|
*
|
|
215
|
-
* 1. installs the resource-monitor degrade guard
|
|
216
|
-
* (plus the PYTHONPATH fallback)
|
|
207
|
+
* 1. installs the resource-monitor degrade guard in the mach virtualenvs
|
|
208
|
+
* (plus the PYTHONPATH fallback), re-installed before every attempt, so
|
|
217
209
|
* a venv materialized by a crashed first attempt is guarded on the next
|
|
218
|
-
* one instead of every retry dying on the same wedged state
|
|
219
|
-
* 2. spawns a fresh mach process per attempt
|
|
220
|
-
* 3. retries
|
|
221
|
-
* psutil startup tracebacks) up to the uniform budget
|
|
210
|
+
* one instead of every retry dying on the same wedged state.
|
|
211
|
+
* 2. spawns a fresh mach process per attempt.
|
|
212
|
+
* 3. retries only the recognized harness-crash family (resource monitor /
|
|
213
|
+
* psutil startup tracebacks) up to the uniform budget. An ordinary
|
|
222
214
|
* compile error is never retried.
|
|
223
215
|
*
|
|
224
216
|
* The protected path never runs `mach configure`, never clobbers, and never
|
|
225
|
-
* widens the requested build kind
|
|
217
|
+
* widens the requested build kind: a `faster` dispatch retries as
|
|
226
218
|
* `mach build faster`, so it cannot invalidate more of the objdir than the
|
|
227
219
|
* command the operator asked for.
|
|
228
220
|
*/
|
|
@@ -258,8 +250,8 @@ export async function runProtectedMachBuild(kind, engineDir, options = {}) {
|
|
|
258
250
|
* hints are surfaced on top of the raw mach output so operators get an
|
|
259
251
|
* actionable nudge alongside the cryptic mozbuild traceback. Returns the
|
|
260
252
|
* captured result so the caller (e.g. `fireforge build`) can inspect the
|
|
261
|
-
* tail for post-build diagnostics that mach prints
|
|
262
|
-
* successful!"
|
|
253
|
+
* tail for post-build diagnostics that mach prints after "Your build was
|
|
254
|
+
* successful!", notably the stale `config.status is out of date`
|
|
263
255
|
* notice that mach emits when a tool-managed edit landed on
|
|
264
256
|
* `moz.configure` before the build.
|
|
265
257
|
* @param engineDir - Path to the engine directory
|
|
@@ -287,13 +279,13 @@ export async function buildUI(engineDir) {
|
|
|
287
279
|
*
|
|
288
280
|
* Without it, a `build --ui` started while a full `build` is still in flight
|
|
289
281
|
* hands off to `mach build faster` and fails almost immediately with `No
|
|
290
|
-
* rule to make target 'XUL'
|
|
282
|
+
* rule to make target 'XUL'`, the real problem being that the first build
|
|
291
283
|
* has not yet materialised the full backend, with nothing in the low-level
|
|
292
284
|
* make error pointing at the concurrent run. The lock intercepts the second
|
|
293
285
|
* invocation before it touches mach, and the refusal names the PID holding
|
|
294
286
|
* the lock so the operator can decide whether to wait or investigate.
|
|
295
287
|
*
|
|
296
|
-
* Stale-lock recovery: the lock stores the owner PID
|
|
288
|
+
* Stale-lock recovery: the lock stores the owner PID. A crashed build
|
|
297
289
|
* (SIGINT, SIGTERM, or a kernel kill) leaves the lock dir behind but not the
|
|
298
290
|
* owning process, and `withFileLock` removes the lock on the next attempt
|
|
299
291
|
* when `process.kill(pid, 0)` shows the owner is gone.
|
|
@@ -307,9 +299,9 @@ export async function buildUI(engineDir) {
|
|
|
307
299
|
export async function withBuildLock(projectRoot, operation) {
|
|
308
300
|
const lockPath = createSiblingLockPath(join(projectRoot, '.fireforge-build'), '.lock');
|
|
309
301
|
return withFileLock(lockPath, operation, {
|
|
310
|
-
// Default lock timeout is 30s
|
|
311
|
-
// not trip the timeout while the second invocation waits. A real
|
|
312
|
-
// operator will ^C long before 24h elapses
|
|
302
|
+
// Default lock timeout is 30s. Bump it to 24h so a slow full build
|
|
303
|
+
// does not trip the timeout while the second invocation waits. A real
|
|
304
|
+
// operator will ^C long before 24h elapses. The ceiling is there
|
|
313
305
|
// purely so a forgotten lock cannot wedge the command forever.
|
|
314
306
|
timeoutMs: 24 * 60 * 60 * 1000,
|
|
315
307
|
onTimeoutMessage: `Timed out waiting for the FireForge build lock at ${lockPath}. ` +
|
|
@@ -331,7 +323,7 @@ export async function run(engineDir, args = []) {
|
|
|
331
323
|
* enforces a deadline by SIGTERMing the whole process group, and returns
|
|
332
324
|
* the captured output alongside a `timedOut` flag.
|
|
333
325
|
*
|
|
334
|
-
* Unlike {@link run}, this variant does
|
|
326
|
+
* Unlike {@link run}, this variant does not inherit stdio. The child
|
|
335
327
|
* stdout/stderr are piped back through the line callbacks so the caller
|
|
336
328
|
* can scan for `JavaScript error:` / `console.error:` without coupling
|
|
337
329
|
* the runner to chrome-specific pattern logic.
|
|
@@ -351,20 +343,10 @@ export async function runMachSmoke(args, engineDir, options) {
|
|
|
351
343
|
...(options.mirror ? { mirror: options.mirror } : {}),
|
|
352
344
|
});
|
|
353
345
|
}
|
|
354
|
-
/**
|
|
355
|
-
* Creates a distribution package.
|
|
356
|
-
* @param engineDir - Path to the engine directory
|
|
357
|
-
* @returns Exit code
|
|
358
|
-
*/
|
|
359
|
-
export async function machPackage(engineDir) {
|
|
360
|
-
return runMach(['package'], engineDir, { inherit: true });
|
|
361
|
-
}
|
|
362
346
|
/**
|
|
363
347
|
* Creates a distribution package while streaming output to the terminal
|
|
364
|
-
* and capturing the stderr tail for post-run diagnostics
|
|
365
|
-
*
|
|
366
|
-
* variant; the inherit-only `machPackage` above remains for callers that
|
|
367
|
-
* just need an exit code.
|
|
348
|
+
* and capturing the stderr tail for post-run diagnostics, so callers can
|
|
349
|
+
* consult {@link explainMachError} on failure.
|
|
368
350
|
*
|
|
369
351
|
* @param engineDir - Path to the engine directory
|
|
370
352
|
* @returns Captured mach result (stdout tail, stderr tail, exit code)
|
|
@@ -372,21 +354,13 @@ export async function machPackage(engineDir) {
|
|
|
372
354
|
export async function machPackageCapture(engineDir) {
|
|
373
355
|
return runMachCapture(['package'], engineDir);
|
|
374
356
|
}
|
|
375
|
-
/**
|
|
376
|
-
* Runs mach watch for auto-rebuilding.
|
|
377
|
-
* @param engineDir - Path to the engine directory
|
|
378
|
-
* @returns Exit code
|
|
379
|
-
*/
|
|
380
|
-
export async function watch(engineDir) {
|
|
381
|
-
return runMach(['watch'], engineDir, { inherit: true });
|
|
382
|
-
}
|
|
383
357
|
/**
|
|
384
358
|
* Runs mach watch while preserving stdin and capturing emitted output.
|
|
385
359
|
*
|
|
386
360
|
* `env` is threaded through so the caller can prepend the resolved watchman
|
|
387
361
|
* directory to PATH in a way mach inherits: `fireforge watch` can locate
|
|
388
362
|
* `watchman` via `which`, but the mach subprocess spawns with the parent's
|
|
389
|
-
* PATH only
|
|
363
|
+
* PATH only, and on macOS that typically omits `/opt/homebrew/bin`, so
|
|
390
364
|
* `mach watch` fails at the `watch-project` subscription step.
|
|
391
365
|
*
|
|
392
366
|
* @param engineDir - Path to the engine directory
|
|
@@ -397,28 +371,18 @@ export async function watch(engineDir) {
|
|
|
397
371
|
export async function watchWithOutput(engineDir, options = {}) {
|
|
398
372
|
return runMachInheritCapture(['watch'], engineDir, options.env ? { env: options.env } : {});
|
|
399
373
|
}
|
|
400
|
-
/**
|
|
401
|
-
* Runs mach test with the given test paths.
|
|
402
|
-
* @param engineDir - Path to the engine directory
|
|
403
|
-
* @param testPaths - Test file or directory paths (relative to engine)
|
|
404
|
-
* @param args - Additional arguments to pass to mach test
|
|
405
|
-
* @returns Exit code
|
|
406
|
-
*/
|
|
407
|
-
export async function test(engineDir, testPaths = [], args = []) {
|
|
408
|
-
return runMach(['test', ...testPaths, ...args], engineDir, { inherit: true });
|
|
409
|
-
}
|
|
410
374
|
/**
|
|
411
375
|
* Environment markers mozbuild reads to decide it is running under a coding
|
|
412
376
|
* agent (`mozbuild.util.is_running_under_coding_agent`), which quiets
|
|
413
377
|
* terminal output to warnings and errors.
|
|
414
378
|
*
|
|
415
|
-
* The quieting is genuinely useful for
|
|
416
|
-
* agent session prints
|
|
379
|
+
* The quieting is genuinely useful for builds, which are most of what an
|
|
380
|
+
* agent session prints, but it applies to test runs too, where it removes
|
|
417
381
|
* `TEST_START` and console INFO: exactly the lines a hang or stall
|
|
418
382
|
* diagnosis needs, and the ones FireForge's own classifier reads
|
|
419
383
|
* (`Ran N checks`, `Unexpected results:`, `TEST-UNEXPECTED-*`). Unsetting
|
|
420
384
|
* the variable globally would give up the build half as well, so the
|
|
421
|
-
* dispatchers below unset it per
|
|
385
|
+
* dispatchers below unset it per test dispatch and leave the build path
|
|
422
386
|
* alone.
|
|
423
387
|
*/
|
|
424
388
|
const CODING_AGENT_ENV_MARKERS = ['CLAUDECODE'];
|
|
@@ -433,52 +397,20 @@ function testVerbosityEnvUnset(fullOutput) {
|
|
|
433
397
|
return fullOutput === true ? CODING_AGENT_ENV_MARKERS : undefined;
|
|
434
398
|
}
|
|
435
399
|
/**
|
|
436
|
-
* Runs mach test
|
|
400
|
+
* Runs one mach test command (`mach test` / `mach xpcshell-test` / `mach
|
|
401
|
+
* mochitest`) while capturing streamed output for better diagnostics. The
|
|
402
|
+
* three commands share every other detail of the dispatch (resource guard,
|
|
403
|
+
* verbosity env, teardown-noise annotation), so they share one entry point
|
|
404
|
+
* keyed by `kind` rather than three copies that drift.
|
|
437
405
|
*
|
|
438
|
-
* @param
|
|
439
|
-
* @param
|
|
440
|
-
* @param args - Extra `mach test` arguments appended after the paths
|
|
441
|
-
* @param env - Optional extra environment variables for the mach process
|
|
442
|
-
* (merged over `process.env` by the exec layer). Used by
|
|
443
|
-
* `fireforge test --perf-samples` to publish the artifact-path contract.
|
|
444
|
-
*/
|
|
445
|
-
export async function testWithOutput(engineDir, testPaths = [], args = [], env, fullOutput) {
|
|
446
|
-
const guard = await installMachResourceGuard(engineDir);
|
|
447
|
-
const envUnset = testVerbosityEnvUnset(fullOutput);
|
|
448
|
-
return runMachCapture(['test', ...testPaths, ...args], engineDir, {
|
|
449
|
-
env: { ...guard.env, ...env },
|
|
450
|
-
...(envUnset ? { envUnset } : {}),
|
|
451
|
-
annotateKnownTeardownNoise: true,
|
|
452
|
-
});
|
|
453
|
-
}
|
|
454
|
-
/**
|
|
455
|
-
* Runs `mach xpcshell-test` (the suite-specific xpcshell command) while
|
|
456
|
-
* capturing output. Unlike the generic `mach test`, the suite-specific
|
|
457
|
-
* commands degrade a broken mozlog resource monitor to a warning instead of
|
|
458
|
-
* crashing at startup, so `fireforge test` dispatches single-suite runs here
|
|
459
|
-
* to stay resilient to the host psutil failure.
|
|
460
|
-
*
|
|
461
|
-
* Signature mirrors {@link testWithOutput} so the two are interchangeable in
|
|
462
|
-
* the dispatch path.
|
|
463
|
-
*/
|
|
464
|
-
export async function xpcshellTestWithOutput(engineDir, testPaths = [], args = [], env, fullOutput) {
|
|
465
|
-
const guard = await installMachResourceGuard(engineDir);
|
|
466
|
-
const envUnset = testVerbosityEnvUnset(fullOutput);
|
|
467
|
-
return runMachCapture(['xpcshell-test', ...testPaths, ...args], engineDir, {
|
|
468
|
-
env: { ...guard.env, ...env },
|
|
469
|
-
...(envUnset ? { envUnset } : {}),
|
|
470
|
-
annotateKnownTeardownNoise: true,
|
|
471
|
-
});
|
|
472
|
-
}
|
|
473
|
-
/**
|
|
474
|
-
* Runs `mach mochitest` (covers browser-chrome / mochitest flavors) while
|
|
475
|
-
* capturing output. The suite-specific counterpart to {@link testWithOutput}
|
|
476
|
-
* for non-xpcshell single-suite runs — see {@link xpcshellTestWithOutput}.
|
|
406
|
+
* @param kind - Which mach command to run
|
|
407
|
+
* @param options - Engine checkout, test paths, extra args, env, verbosity
|
|
477
408
|
*/
|
|
478
|
-
export async function
|
|
409
|
+
export async function runMachTestSuite(kind, options) {
|
|
410
|
+
const { engineDir, testPaths = [], args = [], env, fullOutput } = options;
|
|
479
411
|
const guard = await installMachResourceGuard(engineDir);
|
|
480
412
|
const envUnset = testVerbosityEnvUnset(fullOutput);
|
|
481
|
-
return runMachCapture([
|
|
413
|
+
return runMachCapture([kind, ...testPaths, ...args], engineDir, {
|
|
482
414
|
env: { ...guard.env, ...env },
|
|
483
415
|
...(envUnset ? { envUnset } : {}),
|
|
484
416
|
annotateKnownTeardownNoise: true,
|
|
@@ -11,7 +11,7 @@ export interface MarionettePortHolder {
|
|
|
11
11
|
/**
|
|
12
12
|
* Full command line the holder was launched with, when the probe
|
|
13
13
|
* can recover it. `lsof` by itself only returns the basename, so
|
|
14
|
-
* POSIX callers see `command === commandLine
|
|
14
|
+
* POSIX callers see `command === commandLine`. Windows callers
|
|
15
15
|
* recover the full command line via `Get-Process`. Used to detect
|
|
16
16
|
* the `-marionette` flag, which positively identifies a stale
|
|
17
17
|
* browser rather than an unrelated listener.
|
|
@@ -33,7 +33,7 @@ export interface RunningBundleProcess {
|
|
|
33
33
|
commandLine: string;
|
|
34
34
|
/**
|
|
35
35
|
* Elapsed wall-clock seconds since the process started, from `ps
|
|
36
|
-
* etime=`. `NaN` when the field was absent or unparseable
|
|
36
|
+
* etime=`. `NaN` when the field was absent or unparseable, and callers must
|
|
37
37
|
* omit the clause rather than print a zero, because "started 0s ago" is
|
|
38
38
|
* exactly the wrong attribution for a peer session's long-lived browser.
|
|
39
39
|
*/
|
|
@@ -44,7 +44,7 @@ export interface RunningBundleProcess {
|
|
|
44
44
|
* regression-testable.
|
|
45
45
|
*
|
|
46
46
|
* Reads `pid etime args` where the middle field is a `ps` duration. The
|
|
47
|
-
* elapsed field is parsed
|
|
47
|
+
* elapsed field is parsed optimistically: a listing produced without
|
|
48
48
|
* `etime=` still parses, with the duration reported as `NaN` and the whole
|
|
49
49
|
* second field folded back into the command line, so a caller that lost the
|
|
50
50
|
* column degrades to the old behaviour instead of dropping the process.
|
|
@@ -62,17 +62,17 @@ export declare function ensureLaunchableBrowserNotRunning(launchableBinary: stri
|
|
|
62
62
|
/**
|
|
63
63
|
* Builds the refusal for a running objdir browser.
|
|
64
64
|
*
|
|
65
|
-
* Reports the
|
|
65
|
+
* Reports the evidence rather than a bare PID: the elapsed time and the
|
|
66
66
|
* command line are what let an operator on a shared checkout decide whose
|
|
67
67
|
* process it is, without reconstructing PID ancestry by hand. A downstream
|
|
68
|
-
* fork hit exactly this
|
|
68
|
+
* fork hit exactly this: the message named a PID belonging to a peer
|
|
69
69
|
* session's live browser and offered a flag that would have killed a
|
|
70
70
|
* multi-hour evaluation run.
|
|
71
71
|
*
|
|
72
|
-
* So `--kill-stale-marionette` is offered
|
|
72
|
+
* So `--kill-stale-marionette` is offered only for a marionette-driven
|
|
73
73
|
* browser. For a bare launch the message says what it found and stops:
|
|
74
74
|
* FireForge cannot tell a dead run's orphan from someone's live window, and
|
|
75
|
-
* the flag is the right
|
|
75
|
+
* the flag is the right manual clear once ownership is verified, never an
|
|
76
76
|
* automatic one.
|
|
77
77
|
*
|
|
78
78
|
* Exported for direct unit testing.
|
|
@@ -88,7 +88,7 @@ export declare function describeRunningBundleRefusal(holder: RunningBundleProces
|
|
|
88
88
|
export declare function probeMarionettePort(port?: number): Promise<MarionettePortProbeResult>;
|
|
89
89
|
/**
|
|
90
90
|
* Raises a targeted {@link GeneralError} when the Marionette port
|
|
91
|
-
* is held by a browser process
|
|
91
|
+
* is held by a browser process. Raises a softer warning-shaped
|
|
92
92
|
* error when the holder is unrelated (so the operator still sees
|
|
93
93
|
* a useful signal but can decide whether to wait it out).
|
|
94
94
|
*
|
|
@@ -118,18 +118,20 @@ export declare function ensureMarionettePortAvailable(port?: number, options?: {
|
|
|
118
118
|
* the test command auto-forwards to mach.
|
|
119
119
|
*
|
|
120
120
|
* @param machArgs - Forwarded mach args as they would appear on the command
|
|
121
|
-
* line (one element per token
|
|
122
|
-
*
|
|
123
|
-
*
|
|
121
|
+
* line (one element per token, with `--foo=bar` and `--foo bar` both
|
|
122
|
+
* supported).
|
|
123
|
+
* @returns The integer port if a recognised arg is present and parses,
|
|
124
|
+
* otherwise `undefined`.
|
|
124
125
|
*/
|
|
125
126
|
export declare function extractForwardedMarionettePort(machArgs: string[]): number | undefined;
|
|
126
127
|
/**
|
|
127
128
|
* True when forwarded mach args already set a Marionette **client** address
|
|
128
129
|
* for mach/mochitest (`--marionette=host:port` or `--marionette host:port`).
|
|
129
130
|
* Used only to avoid duplicating FireForge's auto-injected
|
|
130
|
-
* `--marionette=127.0.0.1:<n
|
|
131
|
+
* `--marionette=127.0.0.1:<n>`. This is not a full URL validator (IPv6,
|
|
132
|
+
* etc.).
|
|
131
133
|
*
|
|
132
|
-
*
|
|
134
|
+
* Does not treat `--marionette-port` as a client endpoint.
|
|
133
135
|
*/
|
|
134
136
|
export declare function forwardedMachArgsIncludeMarionetteClient(machArgs: string[]): boolean;
|
|
135
137
|
/**
|
|
@@ -147,20 +149,3 @@ export declare function hasExplicitXpcshellFlavor(machArgs: string[]): boolean;
|
|
|
147
149
|
* Marionette-driven browser).
|
|
148
150
|
*/
|
|
149
151
|
export declare function shouldAutoForwardMarionettePortToMach(machArgs: string[]): boolean;
|
|
150
|
-
/**
|
|
151
|
-
* Heuristic: do the test paths or forwarded mach args indicate a flavour
|
|
152
|
-
* that actually launches a Marionette-driven browser? Browser-chrome and
|
|
153
|
-
* mochitest do; xpcshell does not. A no-paths invocation (the default "run
|
|
154
|
-
* all tests" shape) is treated as marionette-relevant since it includes
|
|
155
|
-
* browser-chrome.
|
|
156
|
-
*
|
|
157
|
-
* Note: `fireforge test` auto-forward of `--marionette-port` to mach uses
|
|
158
|
-
* {@link shouldAutoForwardMarionettePortToMach} (mach-arg flavor gate) rather
|
|
159
|
-
* than this function alone, so toolkit paths without `/mochitest/` still get
|
|
160
|
-
* the listener pref and harness `--marionette=127.0.0.1:<n>` when appropriate.
|
|
161
|
-
*
|
|
162
|
-
* @param testPaths - Engine-relative paths after `stripEnginePrefix`.
|
|
163
|
-
* @param machArgs - Forwarded mach args (post-`--mach-arg`).
|
|
164
|
-
* @returns `true` when the run is likely to bind a Marionette listener.
|
|
165
|
-
*/
|
|
166
|
-
export declare function isMarionetteFlavor(testPaths: string[], machArgs: string[]): boolean;
|