@hominis/fireforge 0.46.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 +381 -498
- package/dist/bin/fireforge.d.ts +1 -1
- package/dist/bin/fireforge.js +17 -17
- package/dist/build-info.json +4 -4
- package/dist/src/cli-usage-error.d.ts +9 -9
- package/dist/src/cli-usage-error.js +12 -12
- package/dist/src/cli.d.ts +3 -2
- package/dist/src/cli.js +29 -28
- package/dist/src/commands/bootstrap-checks.js +2 -1
- package/dist/src/commands/bootstrap.js +2 -2
- package/dist/src/commands/build.js +12 -11
- package/dist/src/commands/config.js +9 -9
- package/dist/src/commands/destructive-decision.d.ts +4 -4
- package/dist/src/commands/destructive-decision.js +4 -4
- package/dist/src/commands/discard.js +5 -5
- package/dist/src/commands/doctor-check-core.d.ts +4 -4
- 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 -11
- package/dist/src/commands/doctor-orphaned-harness.js +10 -11
- 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 +2 -2
- 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 +2 -2
- package/dist/src/commands/doctor.js +9 -9
- package/dist/src/commands/download.js +15 -13
- package/dist/src/commands/export-all.js +8 -8
- package/dist/src/commands/export-flow.d.ts +5 -5
- package/dist/src/commands/export-flow.js +14 -14
- package/dist/src/commands/export-placement-conflicts.d.ts +3 -3
- package/dist/src/commands/export-placement-conflicts.js +9 -9
- package/dist/src/commands/export-placement-gate.d.ts +2 -2
- package/dist/src/commands/export-placement-gate.js +5 -5
- package/dist/src/commands/export-placement-policy.d.ts +1 -1
- package/dist/src/commands/export-placement-policy.js +1 -1
- package/dist/src/commands/export-shared.d.ts +10 -10
- package/dist/src/commands/export-shared.js +13 -13
- package/dist/src/commands/export.js +4 -4
- package/dist/src/commands/furnace/apply.js +16 -16
- package/dist/src/commands/furnace/chrome-doc-remove.d.ts +1 -1
- package/dist/src/commands/furnace/chrome-doc-remove.js +1 -1
- 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 +4 -4
- package/dist/src/commands/furnace/create-dry-run.d.ts +4 -4
- package/dist/src/commands/furnace/create-dry-run.js +4 -4
- 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 +14 -14
- package/dist/src/commands/furnace/create-templates.js +18 -18
- 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 +10 -10
- package/dist/src/commands/furnace/deploy.js +4 -4
- 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 +15 -15
- 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 +15 -15
- package/dist/src/commands/furnace/preview.js +17 -17
- package/dist/src/commands/furnace/refresh.js +6 -6
- package/dist/src/commands/furnace/remove-mutations.d.ts +3 -3
- package/dist/src/commands/furnace/remove-mutations.js +19 -18
- 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 +2 -2
- package/dist/src/commands/furnace/rename-browser-test.js +9 -8
- 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 +9 -9
- package/dist/src/commands/furnace/scan.js +3 -3
- package/dist/src/commands/furnace/status.js +7 -7
- package/dist/src/commands/furnace/sync.js +6 -6
- package/dist/src/commands/furnace/test-file-name.d.ts +2 -2
- package/dist/src/commands/furnace/test-file-name.js +2 -2
- package/dist/src/commands/furnace/validate.js +11 -12
- package/dist/src/commands/import.js +20 -20
- package/dist/src/commands/lint-per-patch.js +8 -8
- package/dist/src/commands/lint-per-run-checkjs.d.ts +12 -13
- 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 +3 -3
- package/dist/src/commands/lint.js +35 -35
- package/dist/src/commands/manifest.d.ts +4 -4
- package/dist/src/commands/package.js +2 -2
- package/dist/src/commands/patch/compact.d.ts +2 -2
- package/dist/src/commands/patch/compact.js +8 -8
- package/dist/src/commands/patch/delete.d.ts +1 -1
- package/dist/src/commands/patch/delete.js +8 -8
- package/dist/src/commands/patch/lint-ignore.d.ts +3 -4
- package/dist/src/commands/patch/lint-ignore.js +14 -15
- package/dist/src/commands/patch/move-files-create.d.ts +2 -2
- package/dist/src/commands/patch/move-files-create.js +5 -5
- package/dist/src/commands/patch/move-files-into.d.ts +2 -2
- package/dist/src/commands/patch/move-files-into.js +3 -3
- package/dist/src/commands/patch/move-files.js +1 -1
- 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 +8 -8
- package/dist/src/commands/patch/reorder.js +10 -10
- package/dist/src/commands/patch/split-plan.d.ts +3 -3
- package/dist/src/commands/patch/split-plan.js +6 -5
- package/dist/src/commands/patch/split.d.ts +2 -2
- package/dist/src/commands/patch/split.js +5 -5
- 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 +6 -6
- package/dist/src/commands/patch/tier.d.ts +2 -2
- package/dist/src/commands/patch/tier.js +5 -5
- package/dist/src/commands/patch-rename-map.d.ts +1 -1
- package/dist/src/commands/patch-rename-map.js +1 -1
- package/dist/src/commands/pending-resolution.d.ts +5 -5
- package/dist/src/commands/pending-resolution.js +5 -5
- package/dist/src/commands/re-export-adjacent.d.ts +3 -3
- package/dist/src/commands/re-export-adjacent.js +8 -8
- package/dist/src/commands/re-export-bulk-scan.d.ts +3 -3
- package/dist/src/commands/re-export-bulk-scan.js +17 -17
- package/dist/src/commands/re-export-drift.d.ts +10 -10
- package/dist/src/commands/re-export-drift.js +29 -29
- package/dist/src/commands/re-export-files.js +14 -15
- package/dist/src/commands/re-export-lint.d.ts +26 -26
- package/dist/src/commands/re-export-lint.js +27 -27
- 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 +7 -7
- package/dist/src/commands/re-export-single.d.ts +1 -1
- package/dist/src/commands/re-export-single.js +20 -20
- package/dist/src/commands/re-export.js +7 -6
- package/dist/src/commands/rebase/abort.js +6 -6
- package/dist/src/commands/rebase/continue.js +8 -7
- package/dist/src/commands/rebase/index.d.ts +1 -1
- package/dist/src/commands/rebase/index.js +3 -3
- package/dist/src/commands/rebase/patch-loop.js +18 -17
- 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 +3 -3
- package/dist/src/commands/run.js +26 -26
- package/dist/src/commands/setup-support.js +4 -4
- package/dist/src/commands/setup.js +1 -1
- package/dist/src/commands/source.js +1 -1
- package/dist/src/commands/status-check.d.ts +3 -3
- package/dist/src/commands/status-check.js +4 -4
- 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 +3 -3
- 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 +22 -22
- package/dist/src/commands/test-build-phase.d.ts +1 -1
- package/dist/src/commands/test-build-phase.js +17 -17
- 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 +2 -2
- package/dist/src/commands/test-modes.js +4 -4
- package/dist/src/commands/test-run.d.ts +11 -11
- package/dist/src/commands/test-run.js +15 -15
- package/dist/src/commands/test-stale-gate.d.ts +12 -12
- package/dist/src/commands/test-stale-gate.js +13 -13
- package/dist/src/commands/test-verdict.d.ts +6 -6
- package/dist/src/commands/test-verdict.js +11 -11
- package/dist/src/commands/test.d.ts +3 -3
- package/dist/src/commands/test.js +36 -36
- package/dist/src/commands/token-coverage.js +3 -3
- package/dist/src/commands/token-list.js +5 -5
- package/dist/src/commands/token.js +9 -9
- package/dist/src/commands/tree.js +19 -19
- package/dist/src/commands/typecheck.d.ts +6 -6
- package/dist/src/commands/typecheck.js +7 -7
- 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 +13 -13
- 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 -5
- package/dist/src/core/branding.js +3 -3
- package/dist/src/core/browser-wire.d.ts +1 -1
- package/dist/src/core/browser-wire.js +4 -4
- package/dist/src/core/build-audit-platform.d.ts +6 -6
- package/dist/src/core/build-audit-platform.js +26 -26
- package/dist/src/core/build-audit-registration.d.ts +5 -5
- package/dist/src/core/build-audit-registration.js +7 -7
- 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 +8 -8
- package/dist/src/core/build-audit-skip.js +12 -12
- 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 +8 -8
- package/dist/src/core/build-audit.js +39 -37
- 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 +8 -8
- package/dist/src/core/build-baseline.js +14 -14
- package/dist/src/core/build-jar-escalation.d.ts +8 -8
- package/dist/src/core/build-jar-escalation.js +15 -15
- package/dist/src/core/build-overwrite-guard.d.ts +4 -4
- package/dist/src/core/build-overwrite-guard.js +13 -13
- package/dist/src/core/build-prepare.d.ts +4 -4
- package/dist/src/core/build-prepare.js +16 -15
- package/dist/src/core/config-mutate.js +4 -4
- package/dist/src/core/config-state.js +2 -2
- package/dist/src/core/config-validate-build-audit.js +3 -3
- package/dist/src/core/config-validate-file-size.d.ts +1 -1
- package/dist/src/core/config-validate-file-size.js +2 -2
- package/dist/src/core/config-validate.js +8 -9
- package/dist/src/core/config.d.ts +10 -10
- package/dist/src/core/config.js +10 -10
- package/dist/src/core/coverage-extend.d.ts +16 -16
- package/dist/src/core/coverage-extend.js +16 -16
- 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 +15 -16
- 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 +4 -4
- package/dist/src/core/engine-precondition.js +2 -2
- package/dist/src/core/engine-session-lock.d.ts +18 -18
- package/dist/src/core/engine-session-lock.js +37 -37
- package/dist/src/core/export-moved-code-shape.d.ts +7 -7
- package/dist/src/core/export-moved-code-shape.js +8 -8
- package/dist/src/core/file-lock-owner.d.ts +11 -11
- package/dist/src/core/file-lock-owner.js +18 -18
- package/dist/src/core/file-lock.d.ts +12 -12
- package/dist/src/core/file-lock.js +52 -39
- package/dist/src/core/firefox-cache.d.ts +1 -1
- package/dist/src/core/firefox-cache.js +10 -10
- package/dist/src/core/firefox-download.d.ts +3 -3
- package/dist/src/core/firefox-download.js +6 -6
- package/dist/src/core/firefox-extract.d.ts +2 -2
- package/dist/src/core/firefox-extract.js +13 -13
- package/dist/src/core/firefox.d.ts +5 -5
- package/dist/src/core/firefox.js +8 -8
- package/dist/src/core/furnace-apply-dry-run.js +1 -1
- 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 -9
- package/dist/src/core/furnace-apply-helpers.js +21 -21
- 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 +9 -9
- 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 +3 -3
- package/dist/src/core/furnace-apply.js +22 -21
- 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 +4 -4
- package/dist/src/core/furnace-config.js +18 -18
- package/dist/src/core/furnace-constants.d.ts +6 -6
- package/dist/src/core/furnace-constants.js +6 -6
- 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 +1 -1
- package/dist/src/core/furnace-dir-entry.js +1 -1
- 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 +21 -20
- package/dist/src/core/furnace-operation.js +36 -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.js +2 -2
- package/dist/src/core/furnace-registration-ast.d.ts +2 -2
- package/dist/src/core/furnace-registration-ast.js +9 -9
- 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 +5 -5
- package/dist/src/core/furnace-registration.js +7 -7
- package/dist/src/core/furnace-rollback.d.ts +1 -1
- package/dist/src/core/furnace-rollback.js +5 -5
- 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 +10 -10
- 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 +13 -13
- 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 +4 -4
- package/dist/src/core/git-base.js +9 -9
- package/dist/src/core/git-diff-new-file.d.ts +4 -4
- package/dist/src/core/git-diff-new-file.js +8 -8
- package/dist/src/core/git-diff.d.ts +4 -4
- package/dist/src/core/git-diff.js +35 -34
- package/dist/src/core/git-file-ops.d.ts +6 -6
- package/dist/src/core/git-file-ops.js +7 -7
- package/dist/src/core/git-readonly-index.d.ts +12 -12
- package/dist/src/core/git-readonly-index.js +12 -12
- package/dist/src/core/git-status.d.ts +4 -4
- package/dist/src/core/git-status.js +4 -4
- package/dist/src/core/git.d.ts +3 -3
- package/dist/src/core/git.js +14 -14
- package/dist/src/core/harness-orphans.d.ts +17 -17
- package/dist/src/core/harness-orphans.js +20 -20
- package/dist/src/core/history-log.d.ts +3 -3
- package/dist/src/core/history-log.js +3 -3
- 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 -5
- package/dist/src/core/mach-error-hints.js +13 -13
- package/dist/src/core/mach-known-noise-filter.d.ts +41 -38
- package/dist/src/core/mach-known-noise-filter.js +53 -50
- package/dist/src/core/mach-mozconfig.d.ts +6 -6
- package/dist/src/core/mach-mozconfig.js +15 -15
- package/dist/src/core/mach-python.d.ts +2 -1
- package/dist/src/core/mach-python.js +4 -3
- package/dist/src/core/mach-resource-shim.d.ts +12 -12
- package/dist/src/core/mach-resource-shim.js +20 -20
- package/dist/src/core/mach.d.ts +23 -23
- package/dist/src/core/mach.js +36 -36
- package/dist/src/core/marionette-port.d.ts +15 -13
- package/dist/src/core/marionette-port.js +34 -31
- package/dist/src/core/marionette-preflight.d.ts +6 -6
- package/dist/src/core/marionette-preflight.js +23 -23
- 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 +14 -14
- 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 +11 -11
- 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 +9 -9
- package/dist/src/core/patch-apply.d.ts +9 -9
- package/dist/src/core/patch-apply.js +30 -30
- package/dist/src/core/patch-export-update.d.ts +4 -4
- package/dist/src/core/patch-export-update.js +3 -3
- package/dist/src/core/patch-export.d.ts +10 -10
- package/dist/src/core/patch-export.js +13 -13
- 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 +7 -7
- package/dist/src/core/patch-lint-cache.d.ts +2 -2
- package/dist/src/core/patch-lint-cache.js +13 -13
- package/dist/src/core/patch-lint-checkjs.d.ts +26 -26
- package/dist/src/core/patch-lint-checkjs.js +42 -41
- 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 +3 -3
- package/dist/src/core/patch-lint-creators.js +3 -3
- package/dist/src/core/patch-lint-cross.d.ts +13 -13
- package/dist/src/core/patch-lint-cross.js +21 -21
- package/dist/src/core/patch-lint-css.d.ts +1 -1
- package/dist/src/core/patch-lint-css.js +5 -5
- 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 +3 -3
- package/dist/src/core/patch-lint-forward-registration.d.ts +4 -4
- package/dist/src/core/patch-lint-forward-registration.js +12 -12
- package/dist/src/core/patch-lint-jsdoc.d.ts +2 -2
- package/dist/src/core/patch-lint-jsdoc.js +11 -11
- package/dist/src/core/patch-lint-module-registration.d.ts +1 -1
- 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 +6 -6
- package/dist/src/core/patch-lint-queue-types.d.ts +1 -1
- package/dist/src/core/patch-lint-queue-types.js +1 -1
- package/dist/src/core/patch-lint-staged-registration.d.ts +2 -2
- package/dist/src/core/patch-lint-staged-registration.js +6 -6
- 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 +27 -26
- package/dist/src/core/patch-lint.js +48 -46
- package/dist/src/core/patch-lock.d.ts +1 -1
- package/dist/src/core/patch-lock.js +8 -8
- 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 +27 -27
- 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 +14 -14
- package/dist/src/core/patch-parse.js +16 -16
- 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-transform.d.ts +8 -8
- package/dist/src/core/patch-transform.js +13 -13
- package/dist/src/core/process-cpu-time.d.ts +1 -1
- package/dist/src/core/process-cpu-time.js +5 -5
- package/dist/src/core/rebase-session.d.ts +7 -7
- package/dist/src/core/rebase-session.js +8 -8
- 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 +3 -3
- package/dist/src/core/register-shared-css.d.ts +3 -3
- package/dist/src/core/register-shared-css.js +4 -4
- 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 +12 -12
- package/dist/src/core/run-log-redact.js +16 -16
- package/dist/src/core/run-log.d.ts +9 -9
- package/dist/src/core/run-log.js +14 -14
- 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 +2 -2
- package/dist/src/core/smoke-patterns.d.ts +5 -5
- package/dist/src/core/smoke-patterns.js +9 -9
- package/dist/src/core/state-file.d.ts +3 -3
- 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 +11 -11
- package/dist/src/core/test-changed-prefs.d.ts +12 -12
- package/dist/src/core/test-changed-prefs.js +15 -15
- package/dist/src/core/test-harness-crash.d.ts +39 -39
- package/dist/src/core/test-harness-crash.js +67 -67
- 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 -21
- package/dist/src/core/test-stale-check.js +29 -28
- 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/token-category.d.ts +4 -4
- package/dist/src/core/token-category.js +13 -12
- 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 +11 -11
- package/dist/src/core/token-docs.d.ts +1 -1
- package/dist/src/core/token-inventory.d.ts +6 -6
- package/dist/src/core/token-inventory.js +7 -7
- package/dist/src/core/token-manager.d.ts +3 -3
- package/dist/src/core/token-manager.js +21 -21
- 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 +32 -32
- package/dist/src/core/toolchain-preflight.d.ts +15 -15
- package/dist/src/core/toolchain-preflight.js +22 -22
- package/dist/src/core/tree-cow.d.ts +3 -3
- package/dist/src/core/tree-cow.js +6 -6
- 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 +35 -33
- 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 +31 -31
- 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 +6 -6
- 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 +11 -11
- package/dist/src/core/xpcshell-appdir.d.ts +20 -20
- package/dist/src/core/xpcshell-appdir.js +26 -26
- 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 +22 -21
- package/dist/src/errors/base.js +22 -21
- package/dist/src/errors/build.d.ts +6 -6
- package/dist/src/errors/build.js +6 -6
- package/dist/src/errors/codes.d.ts +10 -10
- package/dist/src/errors/codes.js +10 -10
- package/dist/src/errors/furnace.d.ts +2 -2
- package/dist/src/errors/git.d.ts +1 -1
- package/dist/src/errors/git.js +1 -1
- package/dist/src/errors/patch.d.ts +3 -3
- package/dist/src/errors/patch.js +3 -3
- package/dist/src/errors/rebase.d.ts +1 -1
- package/dist/src/errors/rebase.js +1 -1
- 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 +86 -85
- 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 +24 -23
- package/dist/src/types/furnace.d.ts +17 -17
- 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 +1 -1
- package/dist/src/utils/assert.js +6 -6
- package/dist/src/utils/build-info.d.ts +5 -5
- package/dist/src/utils/build-info.js +6 -6
- package/dist/src/utils/child-env.d.ts +5 -5
- 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 +1 -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 +8 -8
- package/dist/src/utils/line-dispatch.d.ts +3 -3
- package/dist/src/utils/line-dispatch.js +5 -5
- 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 +13 -13
- package/dist/src/utils/options.js +20 -20
- package/dist/src/utils/package-root.js +2 -2
- package/dist/src/utils/paths.d.ts +4 -4
- package/dist/src/utils/paths.js +4 -4
- package/dist/src/utils/process-group.d.ts +8 -8
- package/dist/src/utils/process-group.js +19 -19
- package/dist/src/utils/process.d.ts +34 -33
- package/dist/src/utils/process.js +20 -19
- package/dist/src/utils/ps-duration.d.ts +4 -4
- package/dist/src/utils/ps-duration.js +6 -6
- package/dist/src/utils/regex.d.ts +4 -4
- package/dist/src/utils/regex.js +7 -7
- package/dist/src/utils/sleep.d.ts +7 -7
- package/dist/src/utils/sleep.js +7 -7
- 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 +11 -12
- package/dist/src/utils/validation.js +20 -21
- package/docs/README.md +2 -2
- package/docs/configuration.md +120 -114
- package/docs/exit-codes.md +63 -58
- package/docs/furnace.md +20 -19
- package/docs/lifecycle-invariants.md +412 -251
- package/docs/machine-output.md +33 -32
- package/docs/patch-workflow.md +48 -45
- package/docs/run-logs.md +62 -58
- package/docs/testing.md +101 -101
- package/docs/verification-trees.md +23 -22
- package/package.json +2 -2
|
@@ -10,7 +10,7 @@ export interface MozconfigVariables {
|
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
12
|
* Extracts the `--with-branding=<path>` value from a rendered mozconfig
|
|
13
|
-
* body. Returns `undefined` when no directive is present
|
|
13
|
+
* body. Returns `undefined` when no directive is present, and callers treat
|
|
14
14
|
* that as "mozconfig is missing branding", which is itself an actionable
|
|
15
15
|
* configuration error.
|
|
16
16
|
*
|
|
@@ -18,13 +18,13 @@ export interface MozconfigVariables {
|
|
|
18
18
|
*/
|
|
19
19
|
export declare function extractWithBrandingPath(mozconfigContent: string): string | undefined;
|
|
20
20
|
/**
|
|
21
|
-
* Extracts the objdir
|
|
21
|
+
* Extracts the objdir name a mozconfig declares: the single trailing path
|
|
22
22
|
* segment, which is what the `obj-*` scan enumerates.
|
|
23
23
|
*
|
|
24
24
|
* `@TOPSRCDIR@` and a leading `./` are both spellings of "beside the
|
|
25
|
-
* source", which is the only arrangement FireForge's scan can see anyway
|
|
26
|
-
*
|
|
27
|
-
* simply will not match a candidate, which is the correct outcome
|
|
25
|
+
* source", which is the only arrangement FireForge's scan can see anyway.
|
|
26
|
+
* An absolute path outside the engine directory reduces to its basename and
|
|
27
|
+
* simply will not match a candidate, which is the correct outcome. A
|
|
28
28
|
* declaration that names something the scan cannot see must not select
|
|
29
29
|
* anything.
|
|
30
30
|
*
|
|
@@ -33,7 +33,7 @@ export declare function extractWithBrandingPath(mozconfigContent: string): strin
|
|
|
33
33
|
export declare function extractMozObjdirName(mozconfigContent: string): string | undefined;
|
|
34
34
|
/**
|
|
35
35
|
* Preflights the just-written mozconfig against the branding tree FireForge
|
|
36
|
-
* set up. A drift between the two is silent-corruption territory
|
|
36
|
+
* set up. A drift between the two is silent-corruption territory: the
|
|
37
37
|
* build runs, `mach configure` reads the stale directory name out of
|
|
38
38
|
* mozconfig, and then the recursive make backend errors out with a "path
|
|
39
39
|
* does not exist" message that names the branding dir the mozconfig
|
|
@@ -21,17 +21,17 @@ function replaceVariables(content, variables) {
|
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
23
|
* Matches an `--with-branding=<path>` directive anywhere in a rendered
|
|
24
|
-
* mozconfig. The directive form is the one mach reads
|
|
24
|
+
* mozconfig. The directive form is the one mach reads, and an optional
|
|
25
25
|
* `ac_add_options` prefix is the on-disk convention. `m` flag anchors the
|
|
26
26
|
* search per-line so a multi-line mozconfig with older directives earlier
|
|
27
|
-
* in the file doesn't confuse the extractor. We pick the
|
|
27
|
+
* in the file doesn't confuse the extractor. We pick the last match
|
|
28
28
|
* because mach itself takes the last-write-wins semantics of shell
|
|
29
29
|
* configuration for overlapping `ac_add_options` calls.
|
|
30
30
|
*/
|
|
31
31
|
const WITH_BRANDING_PATTERN = /^\s*(?:ac_add_options\s+)?--with-branding\s*=\s*(\S+)/gm;
|
|
32
32
|
/**
|
|
33
33
|
* Extracts the `--with-branding=<path>` value from a rendered mozconfig
|
|
34
|
-
* body. Returns `undefined` when no directive is present
|
|
34
|
+
* body. Returns `undefined` when no directive is present, and callers treat
|
|
35
35
|
* that as "mozconfig is missing branding", which is itself an actionable
|
|
36
36
|
* configuration error.
|
|
37
37
|
*
|
|
@@ -51,13 +51,13 @@ export function extractWithBrandingPath(mozconfigContent) {
|
|
|
51
51
|
*/
|
|
52
52
|
const MOZ_OBJDIR_PATTERN = /^\s*(?:mk_add_options\s+|export\s+)?MOZ_OBJDIR\s*=\s*["']?([^"'\s#]+)/gm;
|
|
53
53
|
/**
|
|
54
|
-
* Extracts the objdir
|
|
54
|
+
* Extracts the objdir name a mozconfig declares: the single trailing path
|
|
55
55
|
* segment, which is what the `obj-*` scan enumerates.
|
|
56
56
|
*
|
|
57
57
|
* `@TOPSRCDIR@` and a leading `./` are both spellings of "beside the
|
|
58
|
-
* source", which is the only arrangement FireForge's scan can see anyway
|
|
59
|
-
*
|
|
60
|
-
* simply will not match a candidate, which is the correct outcome
|
|
58
|
+
* source", which is the only arrangement FireForge's scan can see anyway.
|
|
59
|
+
* An absolute path outside the engine directory reduces to its basename and
|
|
60
|
+
* simply will not match a candidate, which is the correct outcome. A
|
|
61
61
|
* declaration that names something the scan cannot see must not select
|
|
62
62
|
* anything.
|
|
63
63
|
*
|
|
@@ -74,7 +74,7 @@ export function extractMozObjdirName(mozconfigContent) {
|
|
|
74
74
|
}
|
|
75
75
|
/**
|
|
76
76
|
* Preflights the just-written mozconfig against the branding tree FireForge
|
|
77
|
-
* set up. A drift between the two is silent-corruption territory
|
|
77
|
+
* set up. A drift between the two is silent-corruption territory: the
|
|
78
78
|
* build runs, `mach configure` reads the stale directory name out of
|
|
79
79
|
* mozconfig, and then the recursive make backend errors out with a "path
|
|
80
80
|
* does not exist" message that names the branding dir the mozconfig
|
|
@@ -94,7 +94,7 @@ export async function assertBrandingMozconfigAgreement(engineDir, mozconfigPath,
|
|
|
94
94
|
if (!found) {
|
|
95
95
|
throw new BrandingMozconfigMismatchError(expected, '(no --with-branding directive)', 'mozconfig-missing-branding');
|
|
96
96
|
}
|
|
97
|
-
// Normalise both sides to forward slashes before compare
|
|
97
|
+
// Normalise both sides to forward slashes before compare. Windows-edited
|
|
98
98
|
// configs can carry backslash path separators that the build would treat
|
|
99
99
|
// as literal characters in a repo-relative path.
|
|
100
100
|
const normalizedFound = normalizePathSlashes(found);
|
|
@@ -127,9 +127,9 @@ export async function generateMozconfig(configsDir, engineDir, config) {
|
|
|
127
127
|
binaryName: config.binaryName,
|
|
128
128
|
};
|
|
129
129
|
let content = '';
|
|
130
|
-
// Bundle identity: branding configure.sh carries only the
|
|
131
|
-
// (see splitAppId in branding.ts
|
|
132
|
-
// <distribution-id>.<MOZ_MACBUNDLE_ID>)
|
|
130
|
+
// Bundle identity: branding configure.sh carries only the leaf of appId
|
|
131
|
+
// (see splitAppId in branding.ts, and upstream composes the mac bundle id
|
|
132
|
+
// as <distribution-id>.<MOZ_MACBUNDLE_ID>). The prefix travels here so the
|
|
133
133
|
// two halves can never drift apart.
|
|
134
134
|
const { distributionId } = splitAppId(config.appId);
|
|
135
135
|
content +=
|
|
@@ -146,11 +146,11 @@ export async function generateMozconfig(configsDir, engineDir, config) {
|
|
|
146
146
|
}
|
|
147
147
|
const platformContent = await readText(platformPath);
|
|
148
148
|
content += `# Platform configuration (${platform})\n${replaceVariables(platformContent, variables)}`;
|
|
149
|
-
// Write-if-changed: `mozconfig` is a mach
|
|
150
|
-
//
|
|
149
|
+
// Write-if-changed: `mozconfig` is a mach configure input, so its mtime,
|
|
150
|
+
// not its content, is what `config.status` compares against.
|
|
151
151
|
// Rewriting a byte-identical file on every build-capable invocation made
|
|
152
152
|
// mach re-run `configure` plus backend regeneration ("Backend config
|
|
153
|
-
// changed; N files touched") on
|
|
153
|
+
// changed; N files touched") on every run, each run re-arming the next.
|
|
154
154
|
// Only touch the file when the rendered content actually differs.
|
|
155
155
|
const wrote = await writeTextIfChanged(outputPath, content);
|
|
156
156
|
if (!wrote) {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Resets the resolved Python executable. Primarily useful for testing.
|
|
3
3
|
*
|
|
4
|
-
* @internal Exported only so tests can reach it
|
|
4
|
+
* @internal Exported only so tests can reach it. Not part of the public
|
|
5
|
+
* surface.
|
|
5
6
|
*/
|
|
6
7
|
export declare function resetResolvedPython(): void;
|
|
7
8
|
/**
|
|
@@ -8,8 +8,8 @@ import { exec, executableExists } from '../utils/process.js';
|
|
|
8
8
|
/** Cached Python resolution state */
|
|
9
9
|
/**
|
|
10
10
|
* The resolved interpreter and the requirement range it was resolved for.
|
|
11
|
-
* `undefined` means "not resolved yet"
|
|
12
|
-
* nullable record beats two independently-deletable fields.
|
|
11
|
+
* `undefined` means "not resolved yet". The two always move together, so
|
|
12
|
+
* one nullable record beats two independently-deletable fields.
|
|
13
13
|
*/
|
|
14
14
|
let pythonCache;
|
|
15
15
|
const DEFAULT_MACH_PYTHON_REQUIREMENTS = {
|
|
@@ -79,7 +79,8 @@ function buildPythonCandidates(requirements) {
|
|
|
79
79
|
/**
|
|
80
80
|
* Resets the resolved Python executable. Primarily useful for testing.
|
|
81
81
|
*
|
|
82
|
-
* @internal Exported only so tests can reach it
|
|
82
|
+
* @internal Exported only so tests can reach it. Not part of the public
|
|
83
|
+
* surface.
|
|
83
84
|
*/
|
|
84
85
|
export function resetResolvedPython() {
|
|
85
86
|
pythonCache = undefined;
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
*
|
|
13
13
|
* The guard is installed as a `fireforge_mach_guard.pth` + module pair in
|
|
14
14
|
* every discovered mach virtualenv site-packages directory. A PYTHONPATH
|
|
15
|
-
* `sitecustomize.py` is
|
|
15
|
+
* `sitecustomize.py` is not sufficient on its own: mach re-execs itself into
|
|
16
16
|
* its private virtualenv and drops PYTHONPATH, so that route never loads.
|
|
17
17
|
* `.pth` files execute at interpreter startup from the venv's own
|
|
18
18
|
* site-packages, which survives the re-exec. The PYTHONPATH copy is retained
|
|
@@ -21,12 +21,12 @@
|
|
|
21
21
|
*
|
|
22
22
|
* The guard covers the whole crash family:
|
|
23
23
|
* - wraps `psutil.virtual_memory` / `swap_memory` / `cpu_percent` /
|
|
24
|
-
* `cpu_times` / `disk_io_counters` module-wide, so every call site
|
|
24
|
+
* `cpu_times` / `disk_io_counters` module-wide, so every call site,
|
|
25
25
|
* including the direct `psutil.virtual_memory()` in
|
|
26
|
-
* `mozbuild.base._run_make
|
|
26
|
+
* `mozbuild.base._run_make`, degrades to a `UserWarning` and a zeroed
|
|
27
27
|
* reading instead of aborting.
|
|
28
28
|
*
|
|
29
|
-
* The fallback must be per-function
|
|
29
|
+
* The fallback must be per-function arity-correct and reconstructible:
|
|
30
30
|
* mozsystemmonitor captures reading types at `__init__`
|
|
31
31
|
* (`self._swap_type = type(psutil.swap_memory())`) and rebuilds each
|
|
32
32
|
* collector sample via `self._swap_type(*swap_mem)`. An svmem-shaped
|
|
@@ -36,28 +36,28 @@
|
|
|
36
36
|
* sentinel, and mach hangs forever in its atexit `waitpid`. Each wrapped
|
|
37
37
|
* function therefore degrades to a zeroed instance of psutil's own result
|
|
38
38
|
* namedtuple where resolvable, else a module-level guard-owned namedtuple
|
|
39
|
-
* with the exact field order and arity for
|
|
39
|
+
* with the exact field order and arity for that function (module-level so
|
|
40
40
|
* readings pickle by reference across the collector pipe).
|
|
41
41
|
* `_DegradedReading` remains only as a documented last resort and
|
|
42
42
|
* tolerates `type(reading)(*values)` reconstruction. Guard-owned fallback
|
|
43
43
|
* classes never depend on psutil internals resolving, which also makes
|
|
44
44
|
* them safe when two guard copies load (PYTHONPATH `sitecustomize` in the
|
|
45
|
-
* bootstrap phase plus the in-venv `.pth`), each with its own classes
|
|
46
|
-
* - guards `SystemResourceMonitor`
|
|
45
|
+
* bootstrap phase plus the in-venv `.pth`), each with its own classes.
|
|
46
|
+
* - guards `SystemResourceMonitor` construction via an import hook:
|
|
47
47
|
* `poll_interval` is pre-populated before the real `__init__` runs, a
|
|
48
48
|
* failing `__init__` marks the instance degraded instead of raising, and
|
|
49
|
-
* every monitor method no-ops on a degraded instance
|
|
49
|
+
* every monitor method no-ops on a degraded instance, so a
|
|
50
50
|
* partially-constructed monitor can never surface the
|
|
51
51
|
* `AttributeError: poll_interval` variant. Degraded aggregate methods
|
|
52
52
|
* return zeroed shapes (not `None`) where callers subscript the result
|
|
53
53
|
* (`aggregate_io` → zeroed io reading, so mozbuild's `log_resource_usage`
|
|
54
|
-
* does not die on `usage["io"].read_bytes` after a successful compile)
|
|
54
|
+
* does not die on `usage["io"].read_bytes` after a successful compile).
|
|
55
55
|
* - suppresses the mozsystemmonitor collector child on degradation: once
|
|
56
56
|
* any psutil degradation is observed in the process, monitors are kept
|
|
57
57
|
* inert (`start` never spawns the collector), and a degraded transition
|
|
58
58
|
* or raising `stop` best-effort terminates a live collector child and
|
|
59
59
|
* drains the pipe, so a malformed sample stream cannot wedge mach's
|
|
60
|
-
* shutdown even if a future shape mismatch slips through
|
|
60
|
+
* shutdown even if a future shape mismatch slips through.
|
|
61
61
|
* - wraps `mozbuild.controller.building.BuildMonitor.log_resource_usage` to
|
|
62
62
|
* warn-and-continue on any exception, so end-of-build resource reporting
|
|
63
63
|
* can never fail a build whose artifacts are complete.
|
|
@@ -87,7 +87,7 @@ export interface MachResourceGuardInstallation {
|
|
|
87
87
|
* Refuses a shim directory that is not a private directory of the current
|
|
88
88
|
* user. `lstat`, not `stat`: a symlink planted at the path would otherwise
|
|
89
89
|
* be followed and the check would describe its target. On Windows only the
|
|
90
|
-
* "is a real directory" half applies
|
|
90
|
+
* "is a real directory" half applies. There is no POSIX owner or mode bit
|
|
91
91
|
* to read, and the per-user name is the isolation.
|
|
92
92
|
*
|
|
93
93
|
* @param dir - Shim directory that {@link ensureSitecustomizeFallback} created
|
|
@@ -100,7 +100,7 @@ export declare function assertPrivateShimDir(dir: string): Promise<void>;
|
|
|
100
100
|
* `fireforge_mach_guard.pth` + `fireforge_mach_guard.py` into every
|
|
101
101
|
* discovered mach virtualenv site-packages (survives mach's venv re-exec),
|
|
102
102
|
* plus the PYTHONPATH sitecustomize fallback for the pre-venv bootstrap
|
|
103
|
-
* phase. Idempotent and re-run before
|
|
103
|
+
* phase. Idempotent and re-run before every protected dispatch (including
|
|
104
104
|
* each retry) so a venv created by a crashed first attempt is guarded on
|
|
105
105
|
* the next one instead of re-dying on the same wedged state.
|
|
106
106
|
*/
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
*
|
|
14
14
|
* The guard is installed as a `fireforge_mach_guard.pth` + module pair in
|
|
15
15
|
* every discovered mach virtualenv site-packages directory. A PYTHONPATH
|
|
16
|
-
* `sitecustomize.py` is
|
|
16
|
+
* `sitecustomize.py` is not sufficient on its own: mach re-execs itself into
|
|
17
17
|
* its private virtualenv and drops PYTHONPATH, so that route never loads.
|
|
18
18
|
* `.pth` files execute at interpreter startup from the venv's own
|
|
19
19
|
* site-packages, which survives the re-exec. The PYTHONPATH copy is retained
|
|
@@ -22,12 +22,12 @@
|
|
|
22
22
|
*
|
|
23
23
|
* The guard covers the whole crash family:
|
|
24
24
|
* - wraps `psutil.virtual_memory` / `swap_memory` / `cpu_percent` /
|
|
25
|
-
* `cpu_times` / `disk_io_counters` module-wide, so every call site
|
|
25
|
+
* `cpu_times` / `disk_io_counters` module-wide, so every call site,
|
|
26
26
|
* including the direct `psutil.virtual_memory()` in
|
|
27
|
-
* `mozbuild.base._run_make
|
|
27
|
+
* `mozbuild.base._run_make`, degrades to a `UserWarning` and a zeroed
|
|
28
28
|
* reading instead of aborting.
|
|
29
29
|
*
|
|
30
|
-
* The fallback must be per-function
|
|
30
|
+
* The fallback must be per-function arity-correct and reconstructible:
|
|
31
31
|
* mozsystemmonitor captures reading types at `__init__`
|
|
32
32
|
* (`self._swap_type = type(psutil.swap_memory())`) and rebuilds each
|
|
33
33
|
* collector sample via `self._swap_type(*swap_mem)`. An svmem-shaped
|
|
@@ -37,28 +37,28 @@
|
|
|
37
37
|
* sentinel, and mach hangs forever in its atexit `waitpid`. Each wrapped
|
|
38
38
|
* function therefore degrades to a zeroed instance of psutil's own result
|
|
39
39
|
* namedtuple where resolvable, else a module-level guard-owned namedtuple
|
|
40
|
-
* with the exact field order and arity for
|
|
40
|
+
* with the exact field order and arity for that function (module-level so
|
|
41
41
|
* readings pickle by reference across the collector pipe).
|
|
42
42
|
* `_DegradedReading` remains only as a documented last resort and
|
|
43
43
|
* tolerates `type(reading)(*values)` reconstruction. Guard-owned fallback
|
|
44
44
|
* classes never depend on psutil internals resolving, which also makes
|
|
45
45
|
* them safe when two guard copies load (PYTHONPATH `sitecustomize` in the
|
|
46
|
-
* bootstrap phase plus the in-venv `.pth`), each with its own classes
|
|
47
|
-
* - guards `SystemResourceMonitor`
|
|
46
|
+
* bootstrap phase plus the in-venv `.pth`), each with its own classes.
|
|
47
|
+
* - guards `SystemResourceMonitor` construction via an import hook:
|
|
48
48
|
* `poll_interval` is pre-populated before the real `__init__` runs, a
|
|
49
49
|
* failing `__init__` marks the instance degraded instead of raising, and
|
|
50
|
-
* every monitor method no-ops on a degraded instance
|
|
50
|
+
* every monitor method no-ops on a degraded instance, so a
|
|
51
51
|
* partially-constructed monitor can never surface the
|
|
52
52
|
* `AttributeError: poll_interval` variant. Degraded aggregate methods
|
|
53
53
|
* return zeroed shapes (not `None`) where callers subscript the result
|
|
54
54
|
* (`aggregate_io` → zeroed io reading, so mozbuild's `log_resource_usage`
|
|
55
|
-
* does not die on `usage["io"].read_bytes` after a successful compile)
|
|
55
|
+
* does not die on `usage["io"].read_bytes` after a successful compile).
|
|
56
56
|
* - suppresses the mozsystemmonitor collector child on degradation: once
|
|
57
57
|
* any psutil degradation is observed in the process, monitors are kept
|
|
58
58
|
* inert (`start` never spawns the collector), and a degraded transition
|
|
59
59
|
* or raising `stop` best-effort terminates a live collector child and
|
|
60
60
|
* drains the pipe, so a malformed sample stream cannot wedge mach's
|
|
61
|
-
* shutdown even if a future shape mismatch slips through
|
|
61
|
+
* shutdown even if a future shape mismatch slips through.
|
|
62
62
|
* - wraps `mozbuild.controller.building.BuildMonitor.log_resource_usage` to
|
|
63
63
|
* warn-and-continue on any exception, so end-of-build resource reporting
|
|
64
64
|
* can never fail a build whose artifacts are complete.
|
|
@@ -73,7 +73,7 @@ import { verbose } from '../utils/logger.js';
|
|
|
73
73
|
/**
|
|
74
74
|
* Prefix of the per-user directory (under the OS temp dir) holding the
|
|
75
75
|
* PYTHONPATH fallback. The uid (or, on Windows, the username) is appended:
|
|
76
|
-
* a
|
|
76
|
+
* a fixed name under a shared `/tmp` lets any other local account pre-create
|
|
77
77
|
* the directory and own the `sitecustomize.py` that every mach dispatch
|
|
78
78
|
* then imports.
|
|
79
79
|
*/
|
|
@@ -531,10 +531,10 @@ async function discoverMachSitePackages(engineDir) {
|
|
|
531
531
|
/**
|
|
532
532
|
* Per-user discriminator for the shim directory name. The numeric uid on
|
|
533
533
|
* POSIX, read via `process.getuid` rather than `os.userInfo()`: the latter
|
|
534
|
-
* resolves the passwd entry and
|
|
535
|
-
* has none
|
|
536
|
-
* agents
|
|
537
|
-
* system error. On Windows there is no uid
|
|
534
|
+
* resolves the passwd entry and throws (`ERR_SYSTEM_ERROR`) for a uid that
|
|
535
|
+
* has none (`docker --user 1001:1001`, OpenShift's random uids, many CI
|
|
536
|
+
* agents), which would take every build and test dispatch down with a raw
|
|
537
|
+
* system error. On Windows there is no uid. The username is the
|
|
538
538
|
* discriminator, with `userInfo()` still guarded because the same lookup
|
|
539
539
|
* can fail there for a service account, falling back to the environment.
|
|
540
540
|
*/
|
|
@@ -559,7 +559,7 @@ function resourceShimDir() {
|
|
|
559
559
|
* Refuses a shim directory that is not a private directory of the current
|
|
560
560
|
* user. `lstat`, not `stat`: a symlink planted at the path would otherwise
|
|
561
561
|
* be followed and the check would describe its target. On Windows only the
|
|
562
|
-
* "is a real directory" half applies
|
|
562
|
+
* "is a real directory" half applies. There is no POSIX owner or mode bit
|
|
563
563
|
* to read, and the per-user name is the isolation.
|
|
564
564
|
*
|
|
565
565
|
* @param dir - Shim directory that {@link ensureSitecustomizeFallback} created
|
|
@@ -588,13 +588,13 @@ export async function assertPrivateShimDir(dir) {
|
|
|
588
588
|
/**
|
|
589
589
|
* Writes the PYTHONPATH `sitecustomize.py` fallback into a per-user,
|
|
590
590
|
* mode-0700 FireForge-owned temp directory, verified private before the
|
|
591
|
-
* write, and returns that directory. Idempotent
|
|
591
|
+
* write, and returns that directory. Idempotent: overwriting each call
|
|
592
592
|
* keeps it in sync with this source across upgrades.
|
|
593
593
|
*/
|
|
594
594
|
async function ensureSitecustomizeFallback() {
|
|
595
595
|
const dir = resourceShimDir();
|
|
596
596
|
// `mode` only applies when mkdir creates the directory (and is masked by
|
|
597
|
-
// the umask)
|
|
597
|
+
// the umask). A pre-existing one keeps whatever it had, which is exactly
|
|
598
598
|
// what the assertion below refuses if it is not private.
|
|
599
599
|
await mkdir(dir, { recursive: true, mode: 0o700 });
|
|
600
600
|
await assertPrivateShimDir(dir);
|
|
@@ -615,7 +615,7 @@ function machResourceShimEnv(shimDir, baseEnv = process.env) {
|
|
|
615
615
|
* `fireforge_mach_guard.pth` + `fireforge_mach_guard.py` into every
|
|
616
616
|
* discovered mach virtualenv site-packages (survives mach's venv re-exec),
|
|
617
617
|
* plus the PYTHONPATH sitecustomize fallback for the pre-venv bootstrap
|
|
618
|
-
* phase. Idempotent and re-run before
|
|
618
|
+
* phase. Idempotent and re-run before every protected dispatch (including
|
|
619
619
|
* each retry) so a venv created by a crashed first attempt is guarded on
|
|
620
620
|
* the next one instead of re-dying on the same wedged state.
|
|
621
621
|
*/
|
|
@@ -627,7 +627,7 @@ export async function installMachResourceGuard(engineDir) {
|
|
|
627
627
|
await writeText(join(sitePackages, `${GUARD_MODULE_NAME}.pth`), `import ${GUARD_MODULE_NAME}\n`);
|
|
628
628
|
}
|
|
629
629
|
catch (error) {
|
|
630
|
-
// A read-only or vanished venv must not block the dispatch
|
|
630
|
+
// A read-only or vanished venv must not block the dispatch. The
|
|
631
631
|
// PYTHONPATH fallback still applies and other venvs may have taken
|
|
632
632
|
// the guard.
|
|
633
633
|
verbose(`Could not install mach resource guard into ${sitePackages}: ${toError(error).message}`);
|
package/dist/src/core/mach.d.ts
CHANGED
|
@@ -18,17 +18,17 @@ export interface MachOptions {
|
|
|
18
18
|
/** Whether to inherit stdio (show output directly) */
|
|
19
19
|
inherit?: boolean;
|
|
20
20
|
/**
|
|
21
|
-
* Collapse the
|
|
22
|
-
* line in the terminal
|
|
23
|
-
* stdout/stderr stay raw
|
|
21
|
+
* Collapse the known mozsystemmonitor teardown traceback to one labeled
|
|
22
|
+
* line in the terminal echo (capture-only option). The captured
|
|
23
|
+
* stdout/stderr stay raw, because the harness classifier depends on the raw
|
|
24
24
|
* traceback. Unrecognized tracebacks always echo verbatim. Opted into by
|
|
25
25
|
* the test dispatchers only.
|
|
26
26
|
*
|
|
27
|
-
* Consumed by {@link runMachCapture}
|
|
28
|
-
* it in the type and ignores it
|
|
27
|
+
* Consumed by {@link runMachCapture} alone. `runMachInheritCapture` accepts
|
|
28
|
+
* it in the type and ignores it: the inherit path has no per-chunk hook,
|
|
29
29
|
* only a mirror stream that feeds the terminal and the run log the same
|
|
30
30
|
* string, so filtering there would strip the traceback from the raw log
|
|
31
|
-
* too. The build path uses the recognition
|
|
31
|
+
* too. The build path uses the recognition note instead. See
|
|
32
32
|
* `mach-known-noise-filter.ts`.
|
|
33
33
|
*/
|
|
34
34
|
annotateKnownTeardownNoise?: boolean;
|
|
@@ -92,20 +92,20 @@ export interface ProtectedMachBuildResult extends MachCommandResult {
|
|
|
92
92
|
}
|
|
93
93
|
/**
|
|
94
94
|
* The single protected path every FireForge mach build dispatch routes
|
|
95
|
-
* through
|
|
95
|
+
* through. `build`, `build --ui`, and the pre-test `--build` step all use
|
|
96
96
|
* it, so no entry point is left unprotected with a different retry budget:
|
|
97
97
|
*
|
|
98
|
-
* 1. installs the resource-monitor degrade guard
|
|
99
|
-
* (plus the PYTHONPATH fallback)
|
|
98
|
+
* 1. installs the resource-monitor degrade guard in the mach virtualenvs
|
|
99
|
+
* (plus the PYTHONPATH fallback), re-installed before every attempt, so
|
|
100
100
|
* a venv materialized by a crashed first attempt is guarded on the next
|
|
101
|
-
* one instead of every retry dying on the same wedged state
|
|
102
|
-
* 2. spawns a fresh mach process per attempt
|
|
103
|
-
* 3. retries
|
|
104
|
-
* psutil startup tracebacks) up to the uniform budget
|
|
101
|
+
* one instead of every retry dying on the same wedged state.
|
|
102
|
+
* 2. spawns a fresh mach process per attempt.
|
|
103
|
+
* 3. retries only the recognized harness-crash family (resource monitor /
|
|
104
|
+
* psutil startup tracebacks) up to the uniform budget. An ordinary
|
|
105
105
|
* compile error is never retried.
|
|
106
106
|
*
|
|
107
107
|
* The protected path never runs `mach configure`, never clobbers, and never
|
|
108
|
-
* widens the requested build kind
|
|
108
|
+
* widens the requested build kind: a `faster` dispatch retries as
|
|
109
109
|
* `mach build faster`, so it cannot invalidate more of the objdir than the
|
|
110
110
|
* command the operator asked for.
|
|
111
111
|
*/
|
|
@@ -116,8 +116,8 @@ export declare function runProtectedMachBuild(kind: ProtectedBuildKind, engineDi
|
|
|
116
116
|
* hints are surfaced on top of the raw mach output so operators get an
|
|
117
117
|
* actionable nudge alongside the cryptic mozbuild traceback. Returns the
|
|
118
118
|
* captured result so the caller (e.g. `fireforge build`) can inspect the
|
|
119
|
-
* tail for post-build diagnostics that mach prints
|
|
120
|
-
* successful!"
|
|
119
|
+
* tail for post-build diagnostics that mach prints after "Your build was
|
|
120
|
+
* successful!", notably the stale `config.status is out of date`
|
|
121
121
|
* notice that mach emits when a tool-managed edit landed on
|
|
122
122
|
* `moz.configure` before the build.
|
|
123
123
|
* @param engineDir - Path to the engine directory
|
|
@@ -141,13 +141,13 @@ export declare function buildUI(engineDir: string): Promise<ProtectedMachBuildRe
|
|
|
141
141
|
*
|
|
142
142
|
* Without it, a `build --ui` started while a full `build` is still in flight
|
|
143
143
|
* hands off to `mach build faster` and fails almost immediately with `No
|
|
144
|
-
* rule to make target 'XUL'
|
|
144
|
+
* rule to make target 'XUL'`, the real problem being that the first build
|
|
145
145
|
* has not yet materialised the full backend, with nothing in the low-level
|
|
146
146
|
* make error pointing at the concurrent run. The lock intercepts the second
|
|
147
147
|
* invocation before it touches mach, and the refusal names the PID holding
|
|
148
148
|
* the lock so the operator can decide whether to wait or investigate.
|
|
149
149
|
*
|
|
150
|
-
* Stale-lock recovery: the lock stores the owner PID
|
|
150
|
+
* Stale-lock recovery: the lock stores the owner PID. A crashed build
|
|
151
151
|
* (SIGINT, SIGTERM, or a kernel kill) leaves the lock dir behind but not the
|
|
152
152
|
* owning process, and `withFileLock` removes the lock on the next attempt
|
|
153
153
|
* when `process.kill(pid, 0)` shows the owner is gone.
|
|
@@ -185,7 +185,7 @@ export interface RunMachSmokeOptions {
|
|
|
185
185
|
* enforces a deadline by SIGTERMing the whole process group, and returns
|
|
186
186
|
* the captured output alongside a `timedOut` flag.
|
|
187
187
|
*
|
|
188
|
-
* Unlike {@link run}, this variant does
|
|
188
|
+
* Unlike {@link run}, this variant does not inherit stdio. The child
|
|
189
189
|
* stdout/stderr are piped back through the line callbacks so the caller
|
|
190
190
|
* can scan for `JavaScript error:` / `console.error:` without coupling
|
|
191
191
|
* the runner to chrome-specific pattern logic.
|
|
@@ -206,7 +206,7 @@ export declare function machPackageCapture(engineDir: string): Promise<MachComma
|
|
|
206
206
|
* `env` is threaded through so the caller can prepend the resolved watchman
|
|
207
207
|
* directory to PATH in a way mach inherits: `fireforge watch` can locate
|
|
208
208
|
* `watchman` via `which`, but the mach subprocess spawns with the parent's
|
|
209
|
-
* PATH only
|
|
209
|
+
* PATH only, and on macOS that typically omits `/opt/homebrew/bin`, so
|
|
210
210
|
* `mach watch` fails at the `watch-project` subscription step.
|
|
211
211
|
*
|
|
212
212
|
* @param engineDir - Path to the engine directory
|
|
@@ -232,7 +232,7 @@ export type MachTestSuiteKind = 'test' | 'xpcshell-test' | 'mochitest';
|
|
|
232
232
|
export interface MachTestSuiteOptions {
|
|
233
233
|
/** Absolute path to the engine checkout. */
|
|
234
234
|
engineDir: string;
|
|
235
|
-
/** Test paths to pass to the mach command
|
|
235
|
+
/** Test paths to pass to the mach command. Empty runs the default set. */
|
|
236
236
|
testPaths?: string[];
|
|
237
237
|
/** Extra mach arguments appended after the paths. */
|
|
238
238
|
args?: string[];
|
|
@@ -251,8 +251,8 @@ export interface MachTestSuiteOptions {
|
|
|
251
251
|
/**
|
|
252
252
|
* Runs one mach test command (`mach test` / `mach xpcshell-test` / `mach
|
|
253
253
|
* mochitest`) while capturing streamed output for better diagnostics. The
|
|
254
|
-
* three commands share every other detail of the dispatch
|
|
255
|
-
* verbosity env, teardown-noise annotation
|
|
254
|
+
* three commands share every other detail of the dispatch (resource guard,
|
|
255
|
+
* verbosity env, teardown-noise annotation), so they share one entry point
|
|
256
256
|
* keyed by `kind` rather than three copies that drift.
|
|
257
257
|
*
|
|
258
258
|
* @param kind - Which mach command to run
|