@hominis/fireforge 0.43.1 → 0.44.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 +153 -0
- package/README.md +3 -3
- package/dist/bin/fireforge.d.ts +4 -9
- package/dist/bin/fireforge.js +42 -40
- package/dist/build-info.json +4 -4
- package/dist/src/cli.js +74 -8
- package/dist/src/commands/bootstrap.js +17 -20
- package/dist/src/commands/build.js +25 -32
- package/dist/src/commands/config.js +34 -41
- package/dist/src/commands/discard.js +8 -9
- package/dist/src/commands/doctor-check-core.d.ts +13 -18
- package/dist/src/commands/doctor-check-core.js +8 -35
- package/dist/src/commands/doctor-external-toolchains.js +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.d.ts +18 -0
- package/dist/src/commands/{doctor-furnace-manifest-sync.js → doctor-furnace-config-sync.js} +27 -26
- package/dist/src/commands/doctor-furnace-jar.d.ts +7 -9
- package/dist/src/commands/doctor-furnace-jar.js +7 -9
- package/dist/src/commands/doctor-furnace.js +21 -24
- package/dist/src/commands/doctor-orphaned-harness.d.ts +16 -20
- package/dist/src/commands/doctor-orphaned-harness.js +18 -44
- package/dist/src/commands/doctor-patch-manifest.d.ts +8 -0
- package/dist/src/commands/doctor-patch-manifest.js +155 -0
- package/dist/src/commands/doctor-post-rebase-audit.d.ts +2 -0
- package/dist/src/commands/{doctor/post-rebase-audit.js → doctor-post-rebase-audit.js} +3 -3
- package/dist/src/commands/doctor-working-tree.d.ts +10 -12
- package/dist/src/commands/doctor-working-tree.js +11 -18
- package/dist/src/commands/doctor.d.ts +1 -1
- package/dist/src/commands/doctor.js +64 -96
- package/dist/src/commands/download.js +32 -48
- package/dist/src/commands/export-all.js +29 -33
- package/dist/src/commands/export-flow.js +6 -6
- package/dist/src/commands/export-placement-conflicts.js +10 -9
- package/dist/src/commands/export-placement-gate.js +5 -5
- package/dist/src/commands/export-shared.d.ts +30 -33
- package/dist/src/commands/export-shared.js +45 -43
- package/dist/src/commands/export.js +21 -27
- package/dist/src/commands/furnace/apply.js +14 -23
- package/dist/src/commands/furnace/chrome-doc-remove.js +14 -21
- package/dist/src/commands/furnace/chrome-doc-templates.d.ts +23 -23
- package/dist/src/commands/furnace/chrome-doc-templates.js +23 -23
- package/dist/src/commands/furnace/chrome-doc-tests.js +26 -29
- package/dist/src/commands/furnace/chrome-doc.d.ts +16 -17
- package/dist/src/commands/furnace/chrome-doc.js +31 -41
- package/dist/src/commands/furnace/create-browser-test.d.ts +4 -4
- package/dist/src/commands/furnace/create-browser-test.js +8 -8
- package/dist/src/commands/furnace/create-mochikit.d.ts +6 -7
- package/dist/src/commands/furnace/create-mochikit.js +8 -9
- package/dist/src/commands/furnace/create-readback.d.ts +12 -13
- package/dist/src/commands/furnace/create-readback.js +12 -13
- package/dist/src/commands/furnace/create-templates.d.ts +22 -28
- package/dist/src/commands/furnace/create-templates.js +35 -30
- package/dist/src/commands/furnace/create-xpcshell.js +2 -2
- package/dist/src/commands/furnace/create.js +33 -23
- package/dist/src/commands/furnace/deploy.js +16 -24
- package/dist/src/commands/furnace/diff.js +15 -10
- package/dist/src/commands/furnace/init.js +33 -36
- package/dist/src/commands/furnace/override.js +23 -25
- package/dist/src/commands/furnace/preview.js +47 -67
- package/dist/src/commands/furnace/refresh.js +12 -16
- package/dist/src/commands/furnace/remove-mutations.d.ts +3 -6
- package/dist/src/commands/furnace/remove-mutations.js +14 -17
- package/dist/src/commands/furnace/remove-state.js +1 -1
- package/dist/src/commands/furnace/remove.js +33 -38
- package/dist/src/commands/furnace/rename-xpcshell.d.ts +8 -11
- package/dist/src/commands/furnace/rename-xpcshell.js +8 -11
- package/dist/src/commands/furnace/rename.js +59 -69
- package/dist/src/commands/furnace/scan.js +19 -33
- package/dist/src/commands/furnace/status.js +12 -9
- package/dist/src/commands/furnace/sync.js +9 -16
- package/dist/src/commands/furnace/validate.js +20 -20
- package/dist/src/commands/import.js +48 -37
- package/dist/src/commands/lint-per-patch.js +15 -10
- package/dist/src/commands/lint-per-run-checkjs.d.ts +13 -13
- package/dist/src/commands/lint-per-run-checkjs.js +13 -13
- package/dist/src/commands/lint-report.js +6 -7
- package/dist/src/commands/lint.d.ts +15 -16
- package/dist/src/commands/lint.js +86 -102
- package/dist/src/commands/package.js +6 -11
- package/dist/src/commands/patch/compact.js +1 -1
- package/dist/src/commands/patch/delete.js +24 -33
- package/dist/src/commands/patch/index.d.ts +5 -6
- package/dist/src/commands/patch/index.js +10 -12
- package/dist/src/commands/patch/lint-ignore.js +14 -13
- package/dist/src/commands/patch/move-files-create.d.ts +6 -6
- package/dist/src/commands/patch/move-files-create.js +8 -8
- package/dist/src/commands/patch/move-files-into.d.ts +6 -6
- package/dist/src/commands/patch/move-files-into.js +8 -8
- package/dist/src/commands/patch/patch-context.d.ts +2 -3
- package/dist/src/commands/patch/patch-context.js +2 -3
- package/dist/src/commands/patch/rename.d.ts +10 -11
- package/dist/src/commands/patch/rename.js +11 -12
- package/dist/src/commands/patch/reorder.js +8 -9
- package/dist/src/commands/patch/split-plan.js +1 -1
- package/dist/src/commands/patch/split.d.ts +8 -10
- package/dist/src/commands/patch/split.js +9 -11
- package/dist/src/commands/patch/staged-dependency-validate.js +8 -8
- package/dist/src/commands/patch/staged-dependency.js +7 -3
- package/dist/src/commands/patch/tier.d.ts +9 -9
- package/dist/src/commands/patch/tier.js +18 -15
- package/dist/src/commands/re-export-adjacent.js +9 -8
- package/dist/src/commands/re-export-bulk-scan.d.ts +9 -9
- package/dist/src/commands/re-export-bulk-scan.js +22 -21
- package/dist/src/commands/re-export-drift.js +10 -10
- package/dist/src/commands/re-export-files.d.ts +6 -7
- package/dist/src/commands/re-export-files.js +34 -44
- package/dist/src/commands/re-export-lint.d.ts +10 -13
- package/dist/src/commands/re-export-lint.js +16 -14
- package/dist/src/commands/re-export-options.d.ts +6 -6
- package/dist/src/commands/re-export-options.js +6 -6
- package/dist/src/commands/re-export-register.d.ts +4 -10
- package/dist/src/commands/re-export-register.js +5 -11
- package/dist/src/commands/re-export-scan.js +1 -1
- package/dist/src/commands/re-export-single.d.ts +3 -3
- package/dist/src/commands/re-export-single.js +33 -25
- package/dist/src/commands/re-export.js +13 -21
- package/dist/src/commands/rebase/abort.js +3 -3
- package/dist/src/commands/rebase/confirm.js +2 -1
- package/dist/src/commands/rebase/continue.d.ts +1 -1
- package/dist/src/commands/rebase/continue.js +14 -9
- package/dist/src/commands/rebase/index.js +11 -11
- package/dist/src/commands/rebase/patch-loop.d.ts +7 -1
- package/dist/src/commands/rebase/patch-loop.js +60 -39
- package/dist/src/commands/rebase/summary.js +1 -1
- package/dist/src/commands/register.js +5 -7
- package/dist/src/commands/reset.js +2 -1
- package/dist/src/commands/resolve.d.ts +16 -13
- package/dist/src/commands/resolve.js +30 -33
- package/dist/src/commands/run.js +33 -35
- package/dist/src/commands/setup-support.js +15 -19
- package/dist/src/commands/setup.js +13 -9
- package/dist/src/commands/status-check.d.ts +6 -6
- package/dist/src/commands/status-json.d.ts +6 -6
- package/dist/src/commands/status-json.js +5 -0
- package/dist/src/commands/status-output.d.ts +5 -5
- package/dist/src/commands/status-output.js +6 -6
- package/dist/src/commands/status-ownership.d.ts +16 -14
- package/dist/src/commands/status-ownership.js +16 -14
- package/dist/src/commands/status.js +42 -34
- package/dist/src/commands/test-build-phase.js +26 -13
- package/dist/src/commands/test-diagnose.js +44 -44
- package/dist/src/commands/test-register.js +1 -0
- package/dist/src/commands/test-run.d.ts +14 -16
- package/dist/src/commands/test-run.js +21 -13
- package/dist/src/commands/test-stale-gate.d.ts +15 -16
- package/dist/src/commands/test-stale-gate.js +15 -16
- package/dist/src/commands/test-verdict.d.ts +20 -3
- package/dist/src/commands/test-verdict.js +30 -0
- package/dist/src/commands/test.js +83 -76
- package/dist/src/commands/token-coverage.js +3 -4
- package/dist/src/commands/token.js +16 -18
- package/dist/src/commands/tree.js +47 -31
- package/dist/src/commands/typecheck.d.ts +10 -12
- package/dist/src/commands/typecheck.js +24 -27
- package/dist/src/commands/verify.js +13 -15
- package/dist/src/commands/watch.js +21 -23
- package/dist/src/commands/wire.js +52 -62
- package/dist/src/core/ast-utils.d.ts +8 -7
- package/dist/src/core/ast-utils.js +8 -7
- package/dist/src/core/branding.d.ts +9 -14
- package/dist/src/core/branding.js +7 -11
- package/dist/src/core/browser-wire.d.ts +1 -1
- package/dist/src/core/browser-wire.js +14 -19
- package/dist/src/core/build-audit-platform.js +25 -33
- package/dist/src/core/build-audit-registration.js +17 -25
- package/dist/src/core/build-audit-resolve.d.ts +15 -17
- package/dist/src/core/build-audit-resolve.js +39 -36
- package/dist/src/core/build-audit-transforms.js +18 -19
- package/dist/src/core/build-audit.js +28 -42
- package/dist/src/core/build-baseline-types.d.ts +29 -35
- package/dist/src/core/build-baseline.d.ts +5 -4
- package/dist/src/core/build-baseline.js +14 -14
- package/dist/src/core/build-overwrite-guard.d.ts +7 -14
- package/dist/src/core/build-overwrite-guard.js +17 -27
- package/dist/src/core/build-prepare.d.ts +2 -2
- package/dist/src/core/build-prepare.js +8 -9
- package/dist/src/core/config-mutate.js +20 -19
- package/dist/src/core/config-state.js +12 -4
- package/dist/src/core/config-validate.js +8 -5
- package/dist/src/core/config.d.ts +5 -8
- package/dist/src/core/config.js +7 -16
- package/dist/src/core/coverage-extend.d.ts +15 -13
- package/dist/src/core/coverage-extend.js +15 -13
- package/dist/src/core/destructive.d.ts +31 -9
- package/dist/src/core/destructive.js +29 -26
- package/dist/src/core/diff-hunks.js +10 -12
- package/dist/src/core/discard-baseline.d.ts +8 -8
- package/dist/src/core/discard-baseline.js +16 -15
- package/dist/src/core/display-state.d.ts +12 -14
- package/dist/src/core/display-state.js +12 -14
- package/dist/src/core/engine-changes.d.ts +2 -4
- package/dist/src/core/engine-changes.js +2 -4
- package/dist/src/core/engine-precondition.d.ts +28 -13
- package/dist/src/core/engine-precondition.js +25 -10
- package/dist/src/core/engine-session-lock.d.ts +47 -21
- package/dist/src/core/engine-session-lock.js +168 -33
- package/dist/src/core/export-moved-code-shape.d.ts +10 -10
- package/dist/src/core/export-moved-code-shape.js +10 -10
- package/dist/src/core/file-lock.d.ts +62 -5
- package/dist/src/core/file-lock.js +196 -59
- package/dist/src/core/firefox-cache.js +1 -3
- package/dist/src/core/firefox-extract.js +10 -14
- package/dist/src/core/firefox.d.ts +7 -5
- package/dist/src/core/firefox.js +4 -5
- package/dist/src/core/furnace-apply-dry-run.d.ts +2 -2
- package/dist/src/core/furnace-apply-dry-run.js +3 -2
- package/dist/src/core/furnace-apply-ftl.d.ts +7 -9
- package/dist/src/core/furnace-apply-ftl.js +16 -13
- package/dist/src/core/furnace-apply-helpers.d.ts +7 -7
- package/dist/src/core/furnace-apply-helpers.js +30 -21
- package/dist/src/core/furnace-apply-overwrite-warn.d.ts +8 -9
- package/dist/src/core/furnace-apply-overwrite-warn.js +8 -9
- package/dist/src/core/furnace-apply-undeploy-actions.d.ts +3 -4
- package/dist/src/core/furnace-apply-undeploy-actions.js +3 -4
- package/dist/src/core/furnace-apply.d.ts +5 -8
- package/dist/src/core/furnace-apply.js +19 -24
- package/dist/src/core/furnace-checksum-utils.d.ts +14 -0
- package/dist/src/core/furnace-checksum-utils.js +16 -0
- package/dist/src/core/furnace-config.d.ts +21 -30
- package/dist/src/core/furnace-config.js +32 -54
- package/dist/src/core/furnace-constants.d.ts +8 -0
- package/dist/src/core/furnace-constants.js +10 -2
- package/dist/src/core/furnace-css-fragments.d.ts +5 -5
- package/dist/src/core/furnace-css-fragments.js +5 -5
- package/dist/src/core/furnace-jsconfig.d.ts +11 -12
- package/dist/src/core/furnace-jsconfig.js +11 -12
- package/dist/src/core/furnace-marker.d.ts +7 -8
- package/dist/src/core/furnace-marker.js +7 -8
- package/dist/src/core/furnace-operation.d.ts +31 -0
- package/dist/src/core/furnace-operation.js +54 -17
- package/dist/src/core/furnace-precondition.d.ts +61 -0
- package/dist/src/core/furnace-precondition.js +67 -0
- package/dist/src/core/furnace-registration-remove.d.ts +5 -6
- package/dist/src/core/furnace-registration-remove.js +6 -7
- package/dist/src/core/furnace-registration-validate.d.ts +13 -0
- package/dist/src/core/furnace-registration-validate.js +20 -1
- package/dist/src/core/furnace-registration.d.ts +5 -6
- package/dist/src/core/furnace-registration.js +10 -12
- package/dist/src/core/furnace-rollback.js +7 -7
- package/dist/src/core/furnace-scanner.d.ts +1 -0
- package/dist/src/core/furnace-scanner.js +1 -2
- package/dist/src/core/furnace-stale-export.d.ts +10 -10
- package/dist/src/core/furnace-stale-export.js +10 -10
- package/dist/src/core/furnace-state-persist.d.ts +6 -8
- package/dist/src/core/furnace-state-persist.js +6 -8
- package/dist/src/core/furnace-validate-accessibility.d.ts +22 -0
- package/dist/src/core/furnace-validate-accessibility.js +310 -1
- package/dist/src/core/furnace-validate-compatibility.js +141 -1
- package/dist/src/core/furnace-validate-helpers.d.ts +5 -116
- package/dist/src/core/furnace-validate-helpers.js +0 -491
- package/dist/src/core/furnace-validate-registration.d.ts +7 -0
- package/dist/src/core/furnace-validate-registration.js +115 -41
- package/dist/src/core/furnace-validate.d.ts +16 -0
- package/dist/src/core/furnace-validate.js +188 -145
- package/dist/src/core/furnace-version-drift.d.ts +10 -11
- package/dist/src/core/furnace-version-drift.js +10 -11
- package/dist/src/core/git-base.d.ts +21 -9
- package/dist/src/core/git-base.js +24 -9
- package/dist/src/core/git-diff.d.ts +20 -9
- package/dist/src/core/git-diff.js +148 -63
- package/dist/src/core/git-file-ops.d.ts +19 -19
- package/dist/src/core/git-file-ops.js +19 -19
- package/dist/src/core/git-readonly-index.d.ts +53 -19
- package/dist/src/core/git-readonly-index.js +75 -31
- package/dist/src/core/git-status.d.ts +5 -6
- package/dist/src/core/git-status.js +5 -6
- package/dist/src/core/git.d.ts +9 -10
- package/dist/src/core/git.js +57 -71
- package/dist/src/core/license-headers.d.ts +17 -23
- package/dist/src/core/license-headers.js +17 -23
- package/dist/src/core/mach-build-artifacts.d.ts +9 -9
- package/dist/src/core/mach-build-artifacts.js +57 -19
- package/dist/src/core/mach-error-hints.js +42 -29
- package/dist/src/core/mach-known-noise-filter.d.ts +15 -16
- package/dist/src/core/mach-known-noise-filter.js +18 -20
- package/dist/src/core/mach-mozconfig.d.ts +14 -0
- package/dist/src/core/mach-mozconfig.js +30 -0
- package/dist/src/core/mach-resource-shim.d.ts +43 -58
- package/dist/src/core/mach-resource-shim.js +50 -67
- package/dist/src/core/mach.d.ts +37 -41
- package/dist/src/core/mach.js +50 -51
- package/dist/src/core/marionette-port.d.ts +36 -1
- package/dist/src/core/marionette-port.js +96 -31
- package/dist/src/core/marionette-preflight.d.ts +8 -12
- package/dist/src/core/marionette-preflight.js +86 -52
- package/dist/src/core/mochitest-server-port.d.ts +42 -0
- package/dist/src/core/mochitest-server-port.js +119 -0
- package/dist/src/core/module-resolution-preflight.d.ts +9 -11
- package/dist/src/core/module-resolution-preflight.js +9 -11
- package/dist/src/core/moz-manifest-helpers.d.ts +79 -0
- package/dist/src/core/moz-manifest-helpers.js +163 -0
- package/dist/src/core/{manifest-register.d.ts → moz-manifest-register.d.ts} +1 -1
- package/dist/src/core/{manifest-register.js → moz-manifest-register.js} +13 -28
- package/dist/src/core/{manifest-rules.d.ts → moz-manifest-rules.d.ts} +10 -1
- package/dist/src/core/{manifest-rules.js → moz-manifest-rules.js} +31 -24
- package/dist/src/core/{manifest-tokenizers.d.ts → moz-manifest-tokenizers.d.ts} +3 -5
- package/dist/src/core/{manifest-tokenizers.js → moz-manifest-tokenizers.js} +9 -12
- package/dist/src/core/ownership-table.d.ts +14 -16
- package/dist/src/core/ownership-table.js +14 -16
- package/dist/src/core/parser-fallback.d.ts +15 -1
- package/dist/src/core/parser-fallback.js +22 -3
- package/dist/src/core/patch-apply-fuzz.d.ts +10 -12
- package/dist/src/core/patch-apply-fuzz.js +15 -18
- package/dist/src/core/patch-apply.d.ts +13 -34
- package/dist/src/core/patch-apply.js +16 -76
- package/dist/src/core/patch-artifact-normalize.d.ts +13 -15
- package/dist/src/core/patch-artifact-normalize.js +13 -15
- package/dist/src/core/patch-export-metadata.d.ts +12 -2
- package/dist/src/core/patch-export-metadata.js +13 -4
- package/dist/src/core/patch-export-update.d.ts +13 -1
- package/dist/src/core/patch-export-update.js +25 -8
- package/dist/src/core/patch-export.d.ts +15 -8
- package/dist/src/core/patch-export.js +10 -11
- package/dist/src/core/patch-files.d.ts +5 -6
- package/dist/src/core/patch-files.js +5 -6
- package/dist/src/core/patch-identifier-suggest.d.ts +7 -12
- package/dist/src/core/patch-identifier-suggest.js +14 -19
- package/dist/src/core/patch-lint-binary.d.ts +51 -0
- package/dist/src/core/patch-lint-binary.js +39 -0
- package/dist/src/core/{lint-cache.d.ts → patch-lint-cache.d.ts} +5 -5
- package/dist/src/core/{lint-cache.js → patch-lint-cache.js} +21 -23
- package/dist/src/core/patch-lint-checkjs.d.ts +16 -16
- package/dist/src/core/patch-lint-checkjs.js +41 -20
- package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +6 -9
- package/dist/src/core/patch-lint-chrome-jsdoc.js +10 -14
- package/dist/src/core/patch-lint-creators.d.ts +8 -8
- package/dist/src/core/patch-lint-creators.js +8 -8
- package/dist/src/core/patch-lint-cross.d.ts +17 -20
- package/dist/src/core/patch-lint-cross.js +16 -16
- package/dist/src/core/patch-lint-css.d.ts +3 -5
- package/dist/src/core/patch-lint-css.js +17 -22
- package/dist/src/core/patch-lint-diff-tag.d.ts +14 -16
- package/dist/src/core/patch-lint-diff-tag.js +14 -16
- package/dist/src/core/patch-lint-jsdoc.d.ts +7 -8
- package/dist/src/core/patch-lint-jsdoc.js +26 -19
- package/dist/src/core/patch-lint-mozbuild.js +20 -20
- package/dist/src/core/patch-lint-observer.d.ts +7 -7
- package/dist/src/core/patch-lint-observer.js +7 -7
- package/dist/src/core/patch-lint.d.ts +38 -29
- package/dist/src/core/patch-lint.js +89 -121
- package/dist/src/core/patch-lock.d.ts +1 -1
- package/dist/src/core/patch-lock.js +45 -9
- package/dist/src/core/patch-manifest-consistency.d.ts +57 -6
- package/dist/src/core/patch-manifest-consistency.js +111 -40
- package/dist/src/core/patch-manifest-files-affected.d.ts +43 -0
- package/dist/src/core/patch-manifest-files-affected.js +77 -0
- package/dist/src/core/patch-manifest-io.js +14 -18
- package/dist/src/core/patch-manifest-resolve.d.ts +9 -12
- package/dist/src/core/patch-manifest-resolve.js +9 -12
- package/dist/src/core/patch-manifest-validate.d.ts +6 -1
- package/dist/src/core/patch-manifest-validate.js +25 -13
- package/dist/src/core/patch-manifest.d.ts +2 -1
- package/dist/src/core/patch-manifest.js +2 -1
- package/dist/src/core/patch-parse.d.ts +24 -13
- package/dist/src/core/patch-parse.js +19 -14
- package/dist/src/core/patch-policy.d.ts +2 -2
- package/dist/src/core/patch-policy.js +2 -2
- package/dist/src/core/patch-registration-refs.d.ts +7 -8
- package/dist/src/core/patch-registration-refs.js +9 -9
- package/dist/src/core/process-cpu-time.d.ts +12 -0
- package/dist/src/core/process-cpu-time.js +52 -0
- package/dist/src/core/rebase-session.d.ts +38 -26
- package/dist/src/core/rebase-session.js +55 -28
- package/dist/src/core/register-browser-content.js +9 -74
- package/dist/src/core/{register-test-manifest.js → register-browser-test.js} +7 -42
- package/dist/src/core/register-module.js +10 -43
- package/dist/src/core/register-scaffold.d.ts +8 -8
- package/dist/src/core/register-scaffold.js +10 -10
- package/dist/src/core/register-shared-css.d.ts +9 -12
- package/dist/src/core/register-shared-css.js +17 -87
- package/dist/src/core/register-xpcshell-test.d.ts +6 -7
- package/dist/src/core/register-xpcshell-test.js +7 -8
- package/dist/src/core/shared-ftl.js +12 -4
- package/dist/src/core/state-file.d.ts +45 -0
- package/dist/src/core/state-file.js +34 -0
- package/dist/src/core/status-binary.d.ts +18 -11
- package/dist/src/core/status-binary.js +19 -12
- package/dist/src/core/status-classify.d.ts +30 -36
- package/dist/src/core/status-classify.js +21 -26
- package/dist/src/core/test-changed-prefs.d.ts +30 -0
- package/dist/src/core/test-changed-prefs.js +78 -0
- package/dist/src/core/test-harness-crash.d.ts +25 -63
- package/dist/src/core/test-harness-crash.js +121 -142
- package/dist/src/core/test-harness-signature.d.ts +18 -0
- package/dist/src/core/test-harness-signature.js +13 -0
- package/dist/src/core/test-path-scope.d.ts +12 -15
- package/dist/src/core/test-path-scope.js +15 -18
- package/dist/src/core/test-stale-check.d.ts +17 -17
- package/dist/src/core/test-stale-check.js +50 -43
- package/dist/src/core/test-stall-triage.d.ts +51 -0
- package/dist/src/core/test-stall-triage.js +126 -0
- package/dist/src/core/token-category.js +66 -14
- package/dist/src/core/token-coverage.js +9 -9
- package/dist/src/core/token-dark-mode.d.ts +9 -11
- package/dist/src/core/token-dark-mode.js +29 -13
- package/dist/src/core/token-docs.d.ts +2 -0
- package/dist/src/core/token-docs.js +3 -1
- package/dist/src/core/token-manager.d.ts +10 -2
- package/dist/src/core/token-manager.js +17 -8
- package/dist/src/core/token-scaffold.d.ts +7 -7
- package/dist/src/core/token-scaffold.js +7 -7
- package/dist/src/core/token-variant.d.ts +4 -4
- package/dist/src/core/token-variant.js +28 -6
- package/dist/src/core/toolchain-preflight.d.ts +20 -21
- package/dist/src/core/toolchain-preflight.js +28 -31
- package/dist/src/core/tree-guard.js +12 -2
- package/dist/src/core/tree-store.d.ts +41 -27
- package/dist/src/core/tree-store.js +68 -43
- package/dist/src/core/typecheck-shim.d.ts +23 -24
- package/dist/src/core/typecheck-shim.js +23 -24
- package/dist/src/core/typecheck.js +15 -9
- package/dist/src/core/wire-destroy.d.ts +3 -3
- package/dist/src/core/wire-destroy.js +7 -15
- package/dist/src/core/wire-dom-fragment.d.ts +9 -17
- package/dist/src/core/wire-dom-fragment.js +11 -44
- package/dist/src/core/wire-init.d.ts +2 -3
- package/dist/src/core/wire-init.js +8 -19
- package/dist/src/core/wire-subscript.d.ts +2 -3
- package/dist/src/core/wire-subscript.js +4 -13
- package/dist/src/core/wire-utils.d.ts +7 -8
- package/dist/src/core/wire-utils.js +7 -8
- package/dist/src/core/xpcshell-appdir.d.ts +38 -45
- package/dist/src/core/xpcshell-appdir.js +38 -45
- package/dist/src/errors/base.d.ts +37 -16
- package/dist/src/errors/base.js +37 -16
- package/dist/src/errors/build.d.ts +13 -1
- package/dist/src/errors/build.js +14 -2
- package/dist/src/errors/codes.d.ts +16 -0
- package/dist/src/errors/codes.js +16 -0
- package/dist/src/errors/furnace.d.ts +4 -4
- package/dist/src/errors/git.d.ts +6 -10
- package/dist/src/errors/git.js +6 -10
- package/dist/src/errors/patch.d.ts +7 -7
- package/dist/src/errors/patch.js +7 -7
- package/dist/src/errors/rebase.d.ts +4 -4
- package/dist/src/errors/rebase.js +4 -4
- package/dist/src/index.d.ts +7 -1
- package/dist/src/index.js +5 -0
- package/dist/src/types/commands/index.d.ts +2 -2
- package/dist/src/types/commands/options.d.ts +111 -70
- package/dist/src/types/commands/patches.d.ts +24 -34
- package/dist/src/types/commands/project.d.ts +5 -34
- package/dist/src/types/config.d.ts +25 -23
- package/dist/src/types/config.js +6 -1
- package/dist/src/types/furnace.d.ts +37 -13
- package/dist/src/types/furnace.js +19 -1
- package/dist/src/types/index.d.ts +3 -3
- package/dist/src/utils/build-info.d.ts +7 -8
- package/dist/src/utils/build-info.js +12 -11
- package/dist/src/utils/errors.d.ts +6 -8
- package/dist/src/utils/errors.js +6 -8
- package/dist/src/utils/logger.d.ts +27 -10
- package/dist/src/utils/logger.js +28 -16
- package/dist/src/utils/machine-output.d.ts +12 -0
- package/dist/src/utils/machine-output.js +33 -0
- package/dist/src/utils/options.d.ts +31 -14
- package/dist/src/utils/options.js +86 -30
- package/dist/src/utils/paths.d.ts +10 -8
- package/dist/src/utils/paths.js +10 -8
- package/dist/src/utils/platform.d.ts +0 -25
- package/dist/src/utils/platform.js +1 -42
- package/dist/src/utils/process-group.d.ts +9 -4
- package/dist/src/utils/process-group.js +19 -5
- package/dist/src/utils/process.d.ts +42 -7
- package/dist/src/utils/process.js +44 -17
- package/dist/src/utils/ps-duration.d.ts +31 -0
- package/dist/src/utils/ps-duration.js +70 -0
- package/dist/src/utils/regex.d.ts +9 -10
- package/dist/src/utils/regex.js +9 -10
- package/dist/src/utils/validation.d.ts +58 -28
- package/dist/src/utils/validation.js +60 -33
- package/package.json +3 -3
- package/dist/src/commands/doctor/post-rebase-audit.d.ts +0 -2
- package/dist/src/commands/doctor-furnace-manifest-sync.d.ts +0 -18
- package/dist/src/core/manifest-helpers.d.ts +0 -38
- package/dist/src/core/manifest-helpers.js +0 -120
- /package/dist/src/core/{lint-projection.d.ts → patch-lint-projection.d.ts} +0 -0
- /package/dist/src/core/{lint-projection.js → patch-lint-projection.js} +0 -0
- /package/dist/src/core/{register-test-manifest.d.ts → register-browser-test.d.ts} +0 -0
|
@@ -145,21 +145,19 @@ function normalizeCommentHead(content, style) {
|
|
|
145
145
|
*
|
|
146
146
|
* For `js` files, MPL-2.0 is also accepted in the upstream Mozilla block-
|
|
147
147
|
* comment form (`/* ... *\/`) used by the Firefox source tree, not just the
|
|
148
|
-
* `// ` line-comment form `getLicenseHeader` emits
|
|
149
|
-
*
|
|
150
|
-
*
|
|
151
|
-
* standard MPL header — operators were forced to `--skip-lint` over a real
|
|
152
|
-
* false positive.
|
|
148
|
+
* `// ` line-comment form `getLicenseHeader` emits — otherwise a new JS file
|
|
149
|
+
* copied from upstream Firefox hits `missing-license-header` even with a
|
|
150
|
+
* verbatim standard MPL header.
|
|
153
151
|
*
|
|
154
152
|
* Editor-directive block comments (`/* -*- ... -*- *\/`, `/* vim: ... *\/`)
|
|
155
|
-
* leading the file are tolerated
|
|
156
|
-
*
|
|
157
|
-
*
|
|
153
|
+
* leading the file are tolerated: Mozilla's canonical layout puts those on
|
|
154
|
+
* lines 1–2 with the MPL header on lines 3+, which a raw `startsWith` check
|
|
155
|
+
* would miss.
|
|
158
156
|
*
|
|
159
|
-
* The MPL-2.0 header is additionally matched on normalized whitespace
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
*
|
|
157
|
+
* The MPL-2.0 header is additionally matched on normalized whitespace (see
|
|
158
|
+
* {@link normalizeCommentHead}) so upstream files using the older Mozilla
|
|
159
|
+
* wrap — breaking after "file," instead of "with this" — are accepted too;
|
|
160
|
+
* only the wrap position differs, never the wording.
|
|
163
161
|
*
|
|
164
162
|
* @param content - File content to check
|
|
165
163
|
* @param style - Comment syntax of the file
|
|
@@ -183,22 +181,18 @@ export function hasAnyLicenseHeader(content, style) {
|
|
|
183
181
|
/**
|
|
184
182
|
* Returns true if `content` starts with the verbatim upstream Mozilla
|
|
185
183
|
* MPL-2.0 block header (`/* This Source Code Form … *\/`), optionally
|
|
186
|
-
* preceded by editor-directive comments — the exact shape a JS file
|
|
187
|
-
*
|
|
184
|
+
* preceded by editor-directive comments — the exact shape a JS file copied
|
|
185
|
+
* from the Firefox source tree carries.
|
|
188
186
|
*
|
|
189
187
|
* Deliberately independent of the project license: a new JS file that
|
|
190
|
-
* legitimately keeps its upstream MPL block header
|
|
191
|
-
*
|
|
192
|
-
* this acceptance only existed behind a `license === 'MPL-2.0'` gate in
|
|
193
|
-
* patch-lint, making it dead code for every other project license and
|
|
194
|
-
* forcing repo-side audit workarounds.
|
|
188
|
+
* legitimately keeps its upstream MPL block header is valid in an
|
|
189
|
+
* EUPL/GPL/0BSD project too.
|
|
195
190
|
*
|
|
196
191
|
* Matching is wrap-agnostic: after the exact `startsWith` fast path, the
|
|
197
192
|
* leading block comment is compared on normalized whitespace (see
|
|
198
|
-
* {@link normalizeCommentHead}) so the older upstream wrap — breaking
|
|
199
|
-
*
|
|
200
|
-
*
|
|
201
|
-
* still rejects.
|
|
193
|
+
* {@link normalizeCommentHead}) so the older upstream wrap — breaking after
|
|
194
|
+
* "file," instead of "with this", as `ext-browser.js` ships — passes too.
|
|
195
|
+
* Only the line-break position may differ; altered wording still rejects.
|
|
202
196
|
*
|
|
203
197
|
* @param content - File content to check
|
|
204
198
|
*/
|
|
@@ -10,6 +10,13 @@ export interface BuildArtifactCheck {
|
|
|
10
10
|
ambiguous?: boolean;
|
|
11
11
|
/** All candidate obj-* directories with build artifacts */
|
|
12
12
|
objDirs?: string[];
|
|
13
|
+
/**
|
|
14
|
+
* Objdir name the active mozconfig declares via `MOZ_OBJDIR`, when the
|
|
15
|
+
* candidates were ambiguous and the declaration did not resolve to exactly
|
|
16
|
+
* one of them. Carried so the refusal can say the declaration was seen and
|
|
17
|
+
* did not help — that is itself the diagnosis.
|
|
18
|
+
*/
|
|
19
|
+
declaredObjDir?: string;
|
|
13
20
|
/** Build metadata points at a different source or objdir */
|
|
14
21
|
metadataMismatch?: {
|
|
15
22
|
objDir: string;
|
|
@@ -139,15 +146,8 @@ export interface BuildArtifactPreflightOptions {
|
|
|
139
146
|
*
|
|
140
147
|
* Takes an already-probed {@link BuildArtifactCheck} rather than probing
|
|
141
148
|
* itself, so it stays a pure validator: callers keep their own
|
|
142
|
-
* `hasBuildArtifacts` call (which their suites already stub) and this
|
|
143
|
-
* needs no test double of its own.
|
|
144
|
-
*
|
|
145
|
-
* Five commands carried a character-identical copy of this ladder, including
|
|
146
|
-
* the same `ambiguous && objDirs && objDirs.length > 0` expression that
|
|
147
|
-
* `BuildArtifactCheck`'s boolean-plus-optionals shape forces at every reader.
|
|
148
|
-
* The shape itself is unchanged — it has several producers and a documented
|
|
149
|
-
* refusal contract (see the containment predicates below) — but it is now
|
|
150
|
-
* destructured in exactly one place.
|
|
149
|
+
* `hasBuildArtifacts` call (which their suites already stub) and this
|
|
150
|
+
* function needs no test double of its own.
|
|
151
151
|
*/
|
|
152
152
|
export declare function assertBuildArtifacts(engineDir: string, buildCheck: BuildArtifactCheck, options: BuildArtifactPreflightOptions): void;
|
|
153
153
|
/**
|
|
@@ -8,6 +8,7 @@ import { pathExists, readJson, readText, writeJson } from '../utils/fs.js';
|
|
|
8
8
|
import { verbose } from '../utils/logger.js';
|
|
9
9
|
import { getPlatform } from '../utils/platform.js';
|
|
10
10
|
import { isObject, isString } from '../utils/validation.js';
|
|
11
|
+
import { extractMozObjdirName } from './mach-mozconfig.js';
|
|
11
12
|
function validateBuildMozinfo(data) {
|
|
12
13
|
if (!isObject(data)) {
|
|
13
14
|
throw new Error('mozinfo metadata must be an object');
|
|
@@ -33,6 +34,26 @@ function validateBuildMozinfo(data) {
|
|
|
33
34
|
}
|
|
34
35
|
return mozinfo;
|
|
35
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Reads the objdir name the engine's mozconfig declares, or undefined when
|
|
39
|
+
* there is no mozconfig, it cannot be read, or it declares nothing.
|
|
40
|
+
*
|
|
41
|
+
* Fail-open by construction: this only ever narrows an ambiguity that would
|
|
42
|
+
* otherwise refuse, so an unreadable mozconfig costs nothing beyond the
|
|
43
|
+
* refusal the caller was already going to raise.
|
|
44
|
+
*/
|
|
45
|
+
async function readDeclaredObjDirName(engineDir) {
|
|
46
|
+
try {
|
|
47
|
+
const mozconfigPath = join(engineDir, 'mozconfig');
|
|
48
|
+
if (!(await pathExists(mozconfigPath)))
|
|
49
|
+
return undefined;
|
|
50
|
+
return extractMozObjdirName(await readText(mozconfigPath));
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
verbose(`Could not read mozconfig for MOZ_OBJDIR: ${toError(error).message}`);
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
36
57
|
/**
|
|
37
58
|
* Checks if build artifacts exist in the engine directory.
|
|
38
59
|
* Looks for obj-* directories with a dist subdirectory. Detection is
|
|
@@ -61,10 +82,33 @@ export async function hasBuildArtifacts(engineDir) {
|
|
|
61
82
|
const firstObjDir = objDirs[0];
|
|
62
83
|
return firstObjDir ? { exists: false, objDir: firstObjDir } : { exists: false };
|
|
63
84
|
}
|
|
85
|
+
let resolvedObjDirs = validObjDirs;
|
|
86
|
+
let declaredObjDir;
|
|
64
87
|
if (validObjDirs.length > 1) {
|
|
65
|
-
|
|
88
|
+
// An ambiguous glob is a question the mozconfig may already answer.
|
|
89
|
+
// Refusing when the active configuration NAMES the objdir sends the
|
|
90
|
+
// operator to rename a directory to satisfy a scan, when the thing
|
|
91
|
+
// that decides the build has said which one it is. The refusal is
|
|
92
|
+
// kept for the genuinely ambiguous case: a declaration that does not
|
|
93
|
+
// resolve to exactly one candidate selects nothing.
|
|
94
|
+
declaredObjDir = await readDeclaredObjDirName(engineDir);
|
|
95
|
+
const declaredMatches = declaredObjDir === undefined
|
|
96
|
+
? []
|
|
97
|
+
: validObjDirs.filter((candidate) => candidate === declaredObjDir);
|
|
98
|
+
if (declaredMatches.length === 1) {
|
|
99
|
+
verbose(`Objdir ambiguity resolved by mozconfig MOZ_OBJDIR: ${declaredMatches[0] ?? ''}.`);
|
|
100
|
+
resolvedObjDirs = declaredMatches;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
return {
|
|
104
|
+
exists: true,
|
|
105
|
+
ambiguous: true,
|
|
106
|
+
objDirs: validObjDirs,
|
|
107
|
+
...(declaredObjDir !== undefined ? { declaredObjDir } : {}),
|
|
108
|
+
};
|
|
109
|
+
}
|
|
66
110
|
}
|
|
67
|
-
const selectedObjDir =
|
|
111
|
+
const selectedObjDir = resolvedObjDirs[0];
|
|
68
112
|
if (!selectedObjDir) {
|
|
69
113
|
return { exists: false };
|
|
70
114
|
}
|
|
@@ -301,19 +345,12 @@ export async function attemptMozinfoRewrite(engineDir, objDir) {
|
|
|
301
345
|
*
|
|
302
346
|
* Takes an already-probed {@link BuildArtifactCheck} rather than probing
|
|
303
347
|
* itself, so it stays a pure validator: callers keep their own
|
|
304
|
-
* `hasBuildArtifacts` call (which their suites already stub) and this
|
|
305
|
-
* needs no test double of its own.
|
|
306
|
-
*
|
|
307
|
-
* Five commands carried a character-identical copy of this ladder, including
|
|
308
|
-
* the same `ambiguous && objDirs && objDirs.length > 0` expression that
|
|
309
|
-
* `BuildArtifactCheck`'s boolean-plus-optionals shape forces at every reader.
|
|
310
|
-
* The shape itself is unchanged — it has several producers and a documented
|
|
311
|
-
* refusal contract (see the containment predicates below) — but it is now
|
|
312
|
-
* destructured in exactly one place.
|
|
348
|
+
* `hasBuildArtifacts` call (which their suites already stub) and this
|
|
349
|
+
* function needs no test double of its own.
|
|
313
350
|
*/
|
|
314
351
|
export function assertBuildArtifacts(engineDir, buildCheck, options) {
|
|
315
352
|
if (buildCheck.ambiguous && buildCheck.objDirs && buildCheck.objDirs.length > 0) {
|
|
316
|
-
throw new AmbiguousBuildArtifactsError(buildCheck.objDirs);
|
|
353
|
+
throw new AmbiguousBuildArtifactsError(buildCheck.objDirs, buildCheck.declaredObjDir);
|
|
317
354
|
}
|
|
318
355
|
const mismatchMessage = buildArtifactMismatchMessage(engineDir, buildCheck, options.label);
|
|
319
356
|
if (mismatchMessage) {
|
|
@@ -366,13 +403,14 @@ export async function findObjdirRelocationViolation(args) {
|
|
|
366
403
|
if (actualObjDir !== expectedObjDir) {
|
|
367
404
|
return `${objDir}/mozinfo.json topobjdir resolves to ${actualObjDir ?? '(absent)'}, expected ${expectedObjDir}`;
|
|
368
405
|
}
|
|
369
|
-
// The canonical no-primary-paths assertion (
|
|
370
|
-
// proof in scripts/run-full-firefox-integration.mjs): substring
|
|
371
|
-
// the resolved primary engine dir is collision-safe against the
|
|
372
|
-
// paths — `<primary>/.fireforge/trees/<name>/engine` never
|
|
373
|
-
// substring `<primary>/engine`. Scans exactly the
|
|
374
|
-
// root files; `config.status` is mandatory (checked
|
|
375
|
-
// optional-if-absent because not every configure
|
|
406
|
+
// The canonical no-primary-paths assertion (mirrored by the opt-in
|
|
407
|
+
// real-mach proof in scripts/run-full-firefox-integration.mjs): substring
|
|
408
|
+
// search on the resolved primary engine dir is collision-safe against the
|
|
409
|
+
// tree's own paths — `<primary>/.fireforge/trees/<name>/engine` never
|
|
410
|
+
// contains the substring `<primary>/engine`. Scans exactly the
|
|
411
|
+
// configure-generated root files; `config.status` is mandatory (checked
|
|
412
|
+
// above), the rest are optional-if-absent because not every configure
|
|
413
|
+
// backend writes them.
|
|
376
414
|
const forbidden = resolve(forbiddenDir);
|
|
377
415
|
for (const name of ['config.status', 'backend.mk', 'Makefile', 'config/autoconf.mk']) {
|
|
378
416
|
const filePath = join(objDirPath, ...name.split('/'));
|
|
@@ -19,14 +19,33 @@ export const MACH_ERROR_HINTS = [
|
|
|
19
19
|
hint: 'A file registered under JS_PREFERENCE_PP_FILES contains no preprocessor directives. ' +
|
|
20
20
|
'Use JS_PREFERENCE_FILES instead, or add at least one #filter / #expand directive to the file.',
|
|
21
21
|
},
|
|
22
|
+
{
|
|
23
|
+
// mozbuild raises `UnsortedError` while READING a moz.build whose
|
|
24
|
+
// StrictOrderingOnAppendList entries are out of order, so `mach
|
|
25
|
+
// configure` dies before anything compiles. The ordering rule is the
|
|
26
|
+
// part operators get wrong: mozbuild sorts by `.lower()`
|
|
27
|
+
// (`StrictOrderingOnAppendList.ensure_sorted`), so an uppercase letter
|
|
28
|
+
// does NOT sort ahead of a lowercase one, and an entry that looks
|
|
29
|
+
// correctly placed by byte order can be rejected. mozbuild's own
|
|
30
|
+
// message names both entries ("We expected X but got Y") and survives
|
|
31
|
+
// to the operator through `extractMachConfigureError`, so the hint
|
|
32
|
+
// supplies only the rule and the remedy.
|
|
33
|
+
pattern: /mozbuild\.util\.UnsortedError|\bUnsortedError\b/,
|
|
34
|
+
hint: 'A moz.build list is out of order — mozbuild rejects the file while reading it, so ' +
|
|
35
|
+
'configure dies before any compile. The entries are compared CASE-INSENSITIVELY ' +
|
|
36
|
+
'(mozbuild lowercases before comparing), so uppercase does not sort before lowercase: ' +
|
|
37
|
+
'"HominisEditorFilePaths.sys.mjs" belongs BEFORE "HominisEditorFiles.sys.mjs" ' +
|
|
38
|
+
'("filep" < "files"). The mozbuild error above names the file and both entries — move ' +
|
|
39
|
+
'the entry to the position it names. "fireforge lint --per-patch" checks this ' +
|
|
40
|
+
'(mozbuild-unsorted-list) before a build, which is the cheaper place to catch it.',
|
|
41
|
+
},
|
|
22
42
|
{
|
|
23
43
|
// `mach package` inside `packager.py` dereferences a `None` sink when
|
|
24
|
-
// the packaging input set cannot resolve an entry it expected —
|
|
25
|
-
//
|
|
26
|
-
//
|
|
27
|
-
//
|
|
28
|
-
//
|
|
29
|
-
// surfaced the raw traceback above this hint.
|
|
44
|
+
// the packaging input set cannot resolve an entry it expected — most
|
|
45
|
+
// commonly running `fireforge package` before a full `fireforge build`
|
|
46
|
+
// has finished, so `obj-*/dist/` is missing pieces the packager assumes
|
|
47
|
+
// exist. The broader "build failed" path has already surfaced the raw
|
|
48
|
+
// traceback above this hint.
|
|
30
49
|
pattern: /packager\.py[\s\S]*?AttributeError: 'NoneType' object has no attribute 'open'|AttributeError: 'NoneType' object has no attribute 'open'[\s\S]*?packager\.py/,
|
|
31
50
|
hint: '`mach package` tripped a `NoneType.open` inside `packager.py`. This is almost always a ' +
|
|
32
51
|
'symptom of the packager being handed an incomplete `obj-*/dist/` tree — e.g. running ' +
|
|
@@ -37,14 +56,12 @@ export const MACH_ERROR_HINTS = [
|
|
|
37
56
|
{
|
|
38
57
|
// Upstream bindgen on some macOS libc++ SDK versions emits
|
|
39
58
|
// `pub type basic_string___self_view = root::std::__1::basic_string_view<_CharT>;`
|
|
40
|
-
// inside gecko-profiler's generated `bindings.rs`, but `_CharT` is
|
|
41
|
-
//
|
|
42
|
-
//
|
|
43
|
-
//
|
|
44
|
-
//
|
|
45
|
-
//
|
|
46
|
-
// workaround pointer alongside the raw bindgen output so operators
|
|
47
|
-
// don't have to reverse-engineer the failure.
|
|
59
|
+
// inside gecko-profiler's generated `bindings.rs`, but `_CharT` is not
|
|
60
|
+
// in scope where the alias lands, so the Rust compile fails with
|
|
61
|
+
// "cannot find type `_CharT`". The fix is external: a consumer's patch
|
|
62
|
+
// queue may ship a workaround patch that strips the offending alias line
|
|
63
|
+
// post-generation. This hint surfaces that pointer alongside the raw
|
|
64
|
+
// bindgen output.
|
|
48
65
|
pattern: /cannot find type `_CharT` in this scope[\s\S]*?gecko-profiler-|gecko-profiler-[\s\S]*?cannot find type `_CharT` in this scope/,
|
|
49
66
|
hint: 'The Rust compile failed on a bindgen-generated `basic_string___self_view` alias in ' +
|
|
50
67
|
'gecko-profiler/bindings.rs. This is an upstream bindgen output bug against some ' +
|
|
@@ -59,13 +76,12 @@ export const MACH_ERROR_HINTS = [
|
|
|
59
76
|
{
|
|
60
77
|
// Firefox declares per-release toolchain minimums in-tree
|
|
61
78
|
// (`build/moz.configure/bindgen.configure` for cbindgen; mozboot's
|
|
62
|
-
// MINIMUM_RUST_VERSION for rustc/cargo), and a source hop can move
|
|
63
|
-
//
|
|
64
|
-
//
|
|
65
|
-
//
|
|
66
|
-
//
|
|
67
|
-
//
|
|
68
|
-
// repo. Pattern matches configure's cbindgen die() shape.
|
|
79
|
+
// MINIMUM_RUST_VERSION for rustc/cargo), and a source hop can move them.
|
|
80
|
+
// The failure lands ~8s into `mach configure` — e.g. "ERROR: cbindgen
|
|
81
|
+
// version 0.29.1 is too old. At least version 0.29.4 is required." —
|
|
82
|
+
// and mach's own remediation text names "./mach bootstrap", the wrong
|
|
83
|
+
// entry point for a FireForge-managed repo. Pattern matches configure's
|
|
84
|
+
// cbindgen die() shape.
|
|
69
85
|
pattern: /\bversion [\d.]+ is too old\.?\s+At least version [\d.]+ is required/i,
|
|
70
86
|
hint: 'A toolchain component is older than the minimum this Firefox source declares — typical ' +
|
|
71
87
|
'after "fireforge download --force" moved the engine to a new Firefox major version. ' +
|
|
@@ -84,16 +100,13 @@ export const MACH_ERROR_HINTS = [
|
|
|
84
100
|
'the build.',
|
|
85
101
|
},
|
|
86
102
|
{
|
|
87
|
-
// When `mach build` fails mid-compile, mach's own shutdown pipeline
|
|
88
|
-
// runs its trailing "Config object not found by mach. / Configure
|
|
103
|
+
// When `mach build` fails mid-compile, mach's own shutdown pipeline
|
|
104
|
+
// still runs its trailing "Config object not found by mach. / Configure
|
|
89
105
|
// complete! / Be sure to run |mach build|..." summary on the way out.
|
|
90
106
|
// Those three lines are plain upstream mach output, printed AFTER the
|
|
91
|
-
// non-zero exit code
|
|
92
|
-
//
|
|
93
|
-
//
|
|
94
|
-
// not own those lines, but we can give the operator a specific nudge
|
|
95
|
-
// that they are cosmetic post-failure output rather than a mixed
|
|
96
|
-
// success/failure signal.
|
|
107
|
+
// non-zero exit code is established, and they read deceptively like a
|
|
108
|
+
// success banner. Nudge the operator that they are cosmetic
|
|
109
|
+
// post-failure output, not a mixed success/failure signal.
|
|
97
110
|
pattern: /Config object not found by mach\.[\s\S]*?Configure complete!/,
|
|
98
111
|
hint: 'Ignore the trailing "Config object not found by mach. / Configure complete!" block — ' +
|
|
99
112
|
"that is mach's post-failure configure summary printed after the build already failed, " +
|
|
@@ -1,29 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Terminal-echo filter for the
|
|
3
|
-
* traceback
|
|
2
|
+
* Terminal-echo filter for the known upstream mozsystemmonitor teardown
|
|
3
|
+
* traceback.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
5
|
+
* Headless test runs against recent engines can end with an
|
|
6
6
|
* `AttributeError: 'SystemResourceMonitor' object has no attribute
|
|
7
7
|
* 'stop_time'` traceback at harness teardown — upstream noise that sits
|
|
8
|
-
* exactly where a reader looks for the failure summary.
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* labeled line.
|
|
8
|
+
* exactly where a reader looks for the failure summary. Real failure lines
|
|
9
|
+
* already beat this traceback in CLASSIFICATION; this filter closes the
|
|
10
|
+
* PRESENTATION gap by collapsing the echoed traceback to one labeled line.
|
|
12
11
|
*
|
|
13
12
|
* Scope is deliberately narrow:
|
|
14
13
|
* - Only the terminal ECHO is filtered. The captured stdout/stderr strings
|
|
15
|
-
* stay raw — the classifier (`test-harness-crash.ts`) depends on the
|
|
16
|
-
*
|
|
14
|
+
* stay raw — the classifier (`test-harness-crash.ts`) depends on the raw
|
|
15
|
+
* traceback for its green-summary override and secondary-noise
|
|
17
16
|
* detection.
|
|
18
17
|
* - Only the exact documented incident is collapsed, and every condition
|
|
19
18
|
* must hold: an `AttributeError` on `SystemResourceMonitor` naming one
|
|
20
|
-
* of the two known attributes (`stop_time`, `poll_interval`
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
19
|
+
* of the two known attributes (`stop_time`, `poll_interval`), AND a
|
|
20
|
+
* `mozsystemmonitor/resourcemonitor.py` stack frame, AND a
|
|
21
|
+
* previously-seen SUITE_END shutdown marker (shared across the run's
|
|
22
|
+
* stdout/stderr filter instances — the marker usually lands on stdout
|
|
23
|
+
* while the traceback lands on stderr). A novel attribute, a novel
|
|
24
|
+
* exception type in resourcemonitor.py, or a pre-shutdown occurrence is
|
|
25
|
+
* echoed verbatim, always.
|
|
27
26
|
* - The hold buffer is bounded; on overflow the block is flushed verbatim
|
|
28
27
|
* and the filter returns to pass-through, so output is never lost.
|
|
29
28
|
*/
|
|
@@ -1,30 +1,29 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
2
|
/**
|
|
3
|
-
* Terminal-echo filter for the
|
|
4
|
-
* traceback
|
|
3
|
+
* Terminal-echo filter for the known upstream mozsystemmonitor teardown
|
|
4
|
+
* traceback.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
6
|
+
* Headless test runs against recent engines can end with an
|
|
7
7
|
* `AttributeError: 'SystemResourceMonitor' object has no attribute
|
|
8
8
|
* 'stop_time'` traceback at harness teardown — upstream noise that sits
|
|
9
|
-
* exactly where a reader looks for the failure summary.
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* labeled line.
|
|
9
|
+
* exactly where a reader looks for the failure summary. Real failure lines
|
|
10
|
+
* already beat this traceback in CLASSIFICATION; this filter closes the
|
|
11
|
+
* PRESENTATION gap by collapsing the echoed traceback to one labeled line.
|
|
13
12
|
*
|
|
14
13
|
* Scope is deliberately narrow:
|
|
15
14
|
* - Only the terminal ECHO is filtered. The captured stdout/stderr strings
|
|
16
|
-
* stay raw — the classifier (`test-harness-crash.ts`) depends on the
|
|
17
|
-
*
|
|
15
|
+
* stay raw — the classifier (`test-harness-crash.ts`) depends on the raw
|
|
16
|
+
* traceback for its green-summary override and secondary-noise
|
|
18
17
|
* detection.
|
|
19
18
|
* - Only the exact documented incident is collapsed, and every condition
|
|
20
19
|
* must hold: an `AttributeError` on `SystemResourceMonitor` naming one
|
|
21
|
-
* of the two known attributes (`stop_time`, `poll_interval`
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
20
|
+
* of the two known attributes (`stop_time`, `poll_interval`), AND a
|
|
21
|
+
* `mozsystemmonitor/resourcemonitor.py` stack frame, AND a
|
|
22
|
+
* previously-seen SUITE_END shutdown marker (shared across the run's
|
|
23
|
+
* stdout/stderr filter instances — the marker usually lands on stdout
|
|
24
|
+
* while the traceback lands on stderr). A novel attribute, a novel
|
|
25
|
+
* exception type in resourcemonitor.py, or a pre-shutdown occurrence is
|
|
26
|
+
* echoed verbatim, always.
|
|
28
27
|
* - The hold buffer is bounded; on overflow the block is flushed verbatim
|
|
29
28
|
* and the filter returns to pass-through, so output is never lost.
|
|
30
29
|
*/
|
|
@@ -32,10 +31,9 @@ const TRACEBACK_HEADER_PATTERN = /^Traceback \(most recent call last\)/;
|
|
|
32
31
|
const CHAINED_EXCEPTION_CONNECTOR_PATTERN = /^(?:During handling of the above exception, another exception occurred:|The above exception was the direct cause of the following exception:)\s*$/;
|
|
33
32
|
/**
|
|
34
33
|
* Closed allowlist of the documented teardown family's attributes:
|
|
35
|
-
* `stop_time`
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* other missing attribute is a NEW upstream defect and must print verbatim.
|
|
34
|
+
* `stop_time` and `poll_interval` (the same mozsystemmonitor init failure
|
|
35
|
+
* `test-harness-crash.ts` already classifies as recognized noise). Any other
|
|
36
|
+
* missing attribute is a NEW upstream defect and must print verbatim.
|
|
39
37
|
*/
|
|
40
38
|
const KNOWN_TEARDOWN_ATTRIBUTE_ERROR_PATTERN = /AttributeError: 'SystemResourceMonitor' object has no attribute '(?:stop_time|poll_interval)'/;
|
|
41
39
|
const RESOURCEMONITOR_FRAME_PATTERN = /mozsystemmonitor[/\\]resourcemonitor\.py/;
|
|
@@ -17,6 +17,20 @@ export interface MozconfigVariables {
|
|
|
17
17
|
* Exported for testing.
|
|
18
18
|
*/
|
|
19
19
|
export declare function extractWithBrandingPath(mozconfigContent: string): string | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* Extracts the objdir NAME a mozconfig declares — the single trailing path
|
|
22
|
+
* segment, which is what the `obj-*` scan enumerates.
|
|
23
|
+
*
|
|
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
|
+
* 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
|
+
* declaration that names something the scan cannot see must not select
|
|
29
|
+
* anything.
|
|
30
|
+
*
|
|
31
|
+
* Returns undefined when nothing is declared. Exported for testing.
|
|
32
|
+
*/
|
|
33
|
+
export declare function extractMozObjdirName(mozconfigContent: string): string | undefined;
|
|
20
34
|
/**
|
|
21
35
|
* Preflights the just-written mozconfig against the branding tree FireForge
|
|
22
36
|
* set up. A drift between the two is silent-corruption territory — the
|
|
@@ -41,6 +41,36 @@ export function extractWithBrandingPath(mozconfigContent) {
|
|
|
41
41
|
const last = matches.at(-1);
|
|
42
42
|
return last?.[1];
|
|
43
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Matches a `MOZ_OBJDIR=<path>` declaration in a mozconfig. Both spellings
|
|
46
|
+
* mach honours are accepted (`mk_add_options MOZ_OBJDIR=…`, the documented
|
|
47
|
+
* one, and a bare `export MOZ_OBJDIR=…`), and the value may be quoted.
|
|
48
|
+
* Last-write-wins for the same reason as {@link WITH_BRANDING_PATTERN}: a
|
|
49
|
+
* mozconfig is shell.
|
|
50
|
+
*/
|
|
51
|
+
const MOZ_OBJDIR_PATTERN = /^\s*(?:mk_add_options\s+|export\s+)?MOZ_OBJDIR\s*=\s*["']?([^"'\s#]+)/gm;
|
|
52
|
+
/**
|
|
53
|
+
* Extracts the objdir NAME a mozconfig declares — the single trailing path
|
|
54
|
+
* segment, which is what the `obj-*` scan enumerates.
|
|
55
|
+
*
|
|
56
|
+
* `@TOPSRCDIR@` and a leading `./` are both spellings of "beside the
|
|
57
|
+
* source", which is the only arrangement FireForge's scan can see anyway;
|
|
58
|
+
* an absolute path outside the engine directory reduces to its basename and
|
|
59
|
+
* simply will not match a candidate, which is the correct outcome — a
|
|
60
|
+
* declaration that names something the scan cannot see must not select
|
|
61
|
+
* anything.
|
|
62
|
+
*
|
|
63
|
+
* Returns undefined when nothing is declared. Exported for testing.
|
|
64
|
+
*/
|
|
65
|
+
export function extractMozObjdirName(mozconfigContent) {
|
|
66
|
+
const matches = [...mozconfigContent.matchAll(MOZ_OBJDIR_PATTERN)];
|
|
67
|
+
const raw = matches.at(-1)?.[1];
|
|
68
|
+
if (raw === undefined)
|
|
69
|
+
return undefined;
|
|
70
|
+
const trimmed = raw.replace(/\/+$/, '');
|
|
71
|
+
const segment = trimmed.split('/').at(-1);
|
|
72
|
+
return segment !== undefined && segment.length > 0 ? segment : undefined;
|
|
73
|
+
}
|
|
44
74
|
/**
|
|
45
75
|
* Preflights the just-written mozconfig against the branding tree FireForge
|
|
46
76
|
* set up. A drift between the two is silent-corruption territory — the
|