@hominis/fireforge 0.45.0 → 0.46.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +409 -446
- package/dist/bin/fireforge.d.ts +1 -1
- package/dist/bin/fireforge.js +21 -15
- package/dist/build-info.json +4 -4
- package/dist/src/cli-usage-error.d.ts +46 -0
- package/dist/src/cli-usage-error.js +81 -0
- package/dist/src/cli.d.ts +7 -2
- package/dist/src/cli.js +47 -47
- package/dist/src/commands/bootstrap-checks.js +2 -1
- package/dist/src/commands/bootstrap.js +3 -4
- package/dist/src/commands/build.js +27 -17
- package/dist/src/commands/config.js +9 -9
- package/dist/src/commands/destructive-decision.d.ts +19 -0
- package/dist/src/commands/destructive-decision.js +31 -0
- package/dist/src/commands/discard.js +5 -5
- package/dist/src/commands/doctor-check-core.d.ts +4 -10
- package/dist/src/commands/doctor-check-core.js +0 -8
- package/dist/src/commands/doctor-external-toolchains.js +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.d.ts +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.js +20 -20
- package/dist/src/commands/doctor-furnace-jar.d.ts +1 -1
- package/dist/src/commands/doctor-furnace-jar.js +1 -1
- package/dist/src/commands/doctor-furnace.js +22 -22
- package/dist/src/commands/doctor-orphaned-harness.d.ts +10 -17
- package/dist/src/commands/doctor-orphaned-harness.js +14 -23
- package/dist/src/commands/doctor-patch-manifest.d.ts +2 -1
- package/dist/src/commands/doctor-patch-manifest.js +7 -6
- package/dist/src/commands/doctor-post-rebase-audit.js +3 -3
- package/dist/src/commands/doctor-source-pin.d.ts +12 -12
- package/dist/src/commands/doctor-source-pin.js +14 -14
- package/dist/src/commands/doctor-working-tree.d.ts +3 -3
- package/dist/src/commands/doctor-working-tree.js +3 -3
- package/dist/src/commands/doctor.d.ts +3 -1
- package/dist/src/commands/doctor.js +15 -16
- package/dist/src/commands/download.js +50 -37
- package/dist/src/commands/export-all.js +29 -12
- package/dist/src/commands/export-flow.d.ts +5 -5
- package/dist/src/commands/export-flow.js +29 -59
- package/dist/src/commands/export-placement-conflicts.d.ts +3 -3
- package/dist/src/commands/export-placement-conflicts.js +12 -12
- package/dist/src/commands/export-placement-gate.d.ts +2 -2
- package/dist/src/commands/export-placement-gate.js +7 -13
- package/dist/src/commands/export-placement-policy.d.ts +1 -1
- package/dist/src/commands/export-placement-policy.js +4 -6
- package/dist/src/commands/export-shared.d.ts +51 -32
- package/dist/src/commands/export-shared.js +17 -32
- package/dist/src/commands/export.js +14 -5
- package/dist/src/commands/furnace/apply.js +16 -16
- package/dist/src/commands/furnace/authoring-config.d.ts +13 -0
- package/dist/src/commands/furnace/authoring-config.js +19 -0
- package/dist/src/commands/furnace/chrome-doc-remove.d.ts +1 -1
- package/dist/src/commands/furnace/chrome-doc-remove.js +2 -2
- package/dist/src/commands/furnace/chrome-doc-templates.d.ts +14 -14
- package/dist/src/commands/furnace/chrome-doc-templates.js +17 -17
- package/dist/src/commands/furnace/chrome-doc-tests.d.ts +2 -2
- package/dist/src/commands/furnace/chrome-doc-tests.js +4 -4
- package/dist/src/commands/furnace/chrome-doc.d.ts +8 -8
- package/dist/src/commands/furnace/chrome-doc.js +18 -18
- package/dist/src/commands/furnace/create-browser-test.d.ts +1 -1
- package/dist/src/commands/furnace/create-browser-test.js +7 -12
- package/dist/src/commands/furnace/create-dry-run.d.ts +4 -4
- package/dist/src/commands/furnace/create-dry-run.js +6 -9
- package/dist/src/commands/furnace/create-features.d.ts +2 -2
- package/dist/src/commands/furnace/create-features.js +2 -2
- package/dist/src/commands/furnace/create-mochikit.d.ts +4 -4
- package/dist/src/commands/furnace/create-mochikit.js +7 -7
- package/dist/src/commands/furnace/create-templates.d.ts +31 -15
- package/dist/src/commands/furnace/create-templates.js +20 -19
- package/dist/src/commands/furnace/create-xpcshell.d.ts +5 -5
- package/dist/src/commands/furnace/create-xpcshell.js +8 -8
- package/dist/src/commands/furnace/create.d.ts +1 -1
- package/dist/src/commands/furnace/create.js +35 -29
- package/dist/src/commands/furnace/deploy.js +15 -6
- package/dist/src/commands/furnace/diff.js +7 -7
- package/dist/src/commands/furnace/index.js +1 -1
- package/dist/src/commands/furnace/init.js +17 -16
- package/dist/src/commands/furnace/list.js +2 -2
- package/dist/src/commands/furnace/override.d.ts +1 -1
- package/dist/src/commands/furnace/override.js +43 -34
- package/dist/src/commands/furnace/preview.js +17 -17
- package/dist/src/commands/furnace/refresh.js +15 -7
- package/dist/src/commands/furnace/remove-mutations.d.ts +9 -10
- package/dist/src/commands/furnace/remove-mutations.js +19 -19
- package/dist/src/commands/furnace/remove-state.d.ts +1 -1
- package/dist/src/commands/furnace/remove-state.js +1 -1
- package/dist/src/commands/furnace/remove.js +4 -8
- package/dist/src/commands/furnace/rename-browser-test.js +10 -15
- package/dist/src/commands/furnace/rename-xpcshell.d.ts +2 -2
- package/dist/src/commands/furnace/rename-xpcshell.js +3 -3
- package/dist/src/commands/furnace/rename.js +36 -36
- package/dist/src/commands/furnace/scan.js +3 -3
- package/dist/src/commands/furnace/status.js +19 -16
- package/dist/src/commands/furnace/sync.js +6 -6
- package/dist/src/commands/furnace/test-file-name.d.ts +28 -0
- package/dist/src/commands/furnace/test-file-name.js +39 -0
- package/dist/src/commands/furnace/validate.js +11 -12
- package/dist/src/commands/furnace/validation-output.d.ts +21 -9
- package/dist/src/commands/furnace/validation-output.js +3 -8
- package/dist/src/commands/import.js +22 -29
- package/dist/src/commands/lint-per-patch.d.ts +2 -2
- package/dist/src/commands/lint-per-patch.js +27 -12
- package/dist/src/commands/lint-per-run-checkjs.d.ts +14 -15
- package/dist/src/commands/lint-per-run-checkjs.js +14 -15
- package/dist/src/commands/lint-report.d.ts +3 -3
- package/dist/src/commands/lint-report.js +4 -4
- package/dist/src/commands/lint.d.ts +5 -4
- package/dist/src/commands/lint.js +36 -36
- package/dist/src/commands/manifest.d.ts +4 -4
- package/dist/src/commands/manifest.js +1 -1
- package/dist/src/commands/package.js +4 -6
- package/dist/src/commands/patch/compact.d.ts +2 -2
- package/dist/src/commands/patch/compact.js +19 -20
- package/dist/src/commands/patch/delete.d.ts +1 -1
- package/dist/src/commands/patch/delete.js +23 -33
- package/dist/src/commands/patch/entry-projection.d.ts +13 -0
- package/dist/src/commands/patch/entry-projection.js +24 -0
- package/dist/src/commands/patch/lint-ignore.d.ts +3 -12
- package/dist/src/commands/patch/lint-ignore.js +33 -44
- package/dist/src/commands/patch/move-files-create.d.ts +2 -2
- package/dist/src/commands/patch/move-files-create.js +29 -15
- package/dist/src/commands/patch/move-files-into.d.ts +2 -2
- package/dist/src/commands/patch/move-files-into.js +41 -37
- package/dist/src/commands/patch/move-files.js +5 -14
- package/dist/src/commands/patch/patch-context.d.ts +1 -1
- package/dist/src/commands/patch/rename.d.ts +4 -4
- package/dist/src/commands/patch/rename.js +35 -49
- package/dist/src/commands/patch/reorder.js +35 -48
- package/dist/src/commands/patch/split-plan.d.ts +7 -8
- package/dist/src/commands/patch/split-plan.js +10 -13
- package/dist/src/commands/patch/split.d.ts +2 -2
- package/dist/src/commands/patch/split.js +50 -48
- package/dist/src/commands/patch/staged-dependency-validate.d.ts +1 -1
- package/dist/src/commands/patch/staged-dependency-validate.js +3 -3
- package/dist/src/commands/patch/staged-dependency.d.ts +1 -1
- package/dist/src/commands/patch/staged-dependency.js +22 -28
- package/dist/src/commands/patch/tier.d.ts +2 -2
- package/dist/src/commands/patch/tier.js +20 -30
- package/dist/src/commands/patch-rename-map.d.ts +19 -0
- package/dist/src/commands/patch-rename-map.js +36 -0
- package/dist/src/commands/pending-resolution.d.ts +15 -0
- package/dist/src/commands/pending-resolution.js +25 -0
- package/dist/src/commands/re-export-adjacent.d.ts +25 -3
- package/dist/src/commands/re-export-adjacent.js +40 -24
- package/dist/src/commands/re-export-bulk-scan.d.ts +3 -3
- package/dist/src/commands/re-export-bulk-scan.js +23 -27
- package/dist/src/commands/re-export-drift.d.ts +10 -10
- package/dist/src/commands/re-export-drift.js +33 -33
- package/dist/src/commands/re-export-files.d.ts +2 -3
- package/dist/src/commands/re-export-files.js +52 -44
- package/dist/src/commands/re-export-lint.d.ts +29 -30
- package/dist/src/commands/re-export-lint.js +36 -29
- package/dist/src/commands/re-export-options.d.ts +1 -1
- package/dist/src/commands/re-export-options.js +1 -1
- package/dist/src/commands/re-export-register.d.ts +1 -1
- package/dist/src/commands/re-export-register.js +1 -1
- package/dist/src/commands/re-export-scan.d.ts +1 -1
- package/dist/src/commands/re-export-scan.js +12 -9
- package/dist/src/commands/re-export-single.d.ts +23 -4
- package/dist/src/commands/re-export-single.js +39 -31
- package/dist/src/commands/re-export.js +35 -17
- package/dist/src/commands/rebase/abort.js +9 -14
- package/dist/src/commands/rebase/continue.js +20 -19
- package/dist/src/commands/rebase/index.d.ts +1 -1
- package/dist/src/commands/rebase/index.js +5 -5
- package/dist/src/commands/rebase/patch-loop.d.ts +2 -2
- package/dist/src/commands/rebase/patch-loop.js +20 -24
- package/dist/src/commands/register.js +5 -5
- package/dist/src/commands/reset.js +1 -1
- package/dist/src/commands/resolve.d.ts +2 -2
- package/dist/src/commands/resolve.js +21 -13
- package/dist/src/commands/run.d.ts +0 -13
- package/dist/src/commands/run.js +38 -51
- package/dist/src/commands/setup-support.d.ts +16 -4
- package/dist/src/commands/setup-support.js +20 -20
- package/dist/src/commands/setup.js +4 -10
- package/dist/src/commands/source.js +9 -2
- package/dist/src/commands/status-check.d.ts +3 -3
- package/dist/src/commands/status-check.js +6 -6
- package/dist/src/commands/status-json.d.ts +14 -13
- package/dist/src/commands/status-json.js +9 -8
- package/dist/src/commands/status-output.d.ts +3 -3
- package/dist/src/commands/status-output.js +5 -5
- package/dist/src/commands/status-ownership.d.ts +3 -3
- package/dist/src/commands/status-ownership.js +3 -3
- package/dist/src/commands/status.js +25 -26
- package/dist/src/commands/test-build-phase.d.ts +3 -3
- package/dist/src/commands/test-build-phase.js +48 -24
- package/dist/src/commands/test-diagnose.d.ts +1 -1
- package/dist/src/commands/test-diagnose.js +20 -20
- package/dist/src/commands/test-modes.d.ts +4 -4
- package/dist/src/commands/test-modes.js +4 -5
- package/dist/src/commands/test-register.js +5 -3
- package/dist/src/commands/test-run.d.ts +11 -11
- package/dist/src/commands/test-run.js +40 -33
- package/dist/src/commands/test-stale-gate.d.ts +12 -12
- package/dist/src/commands/test-stale-gate.js +17 -17
- package/dist/src/commands/test-verdict.d.ts +19 -5
- package/dist/src/commands/test-verdict.js +26 -11
- package/dist/src/commands/test.d.ts +3 -3
- package/dist/src/commands/test.js +73 -36
- package/dist/src/commands/token-coverage.js +3 -3
- package/dist/src/commands/token-list.d.ts +26 -0
- package/dist/src/commands/token-list.js +153 -0
- package/dist/src/commands/token.js +26 -10
- package/dist/src/commands/tree.js +26 -21
- package/dist/src/commands/typecheck.d.ts +6 -6
- package/dist/src/commands/typecheck.js +16 -16
- package/dist/src/commands/verify.d.ts +3 -3
- package/dist/src/commands/verify.js +10 -10
- package/dist/src/commands/watch.js +11 -11
- package/dist/src/commands/wire.js +17 -16
- package/dist/src/core/ast-utils.d.ts +7 -7
- package/dist/src/core/ast-utils.js +8 -8
- package/dist/src/core/branding.d.ts +5 -12
- package/dist/src/core/branding.js +6 -5
- package/dist/src/core/browser-wire.d.ts +1 -1
- package/dist/src/core/browser-wire.js +10 -7
- package/dist/src/core/build-audit-platform.d.ts +32 -3
- package/dist/src/core/build-audit-platform.js +153 -13
- package/dist/src/core/build-audit-registration.d.ts +5 -5
- package/dist/src/core/build-audit-registration.js +10 -9
- package/dist/src/core/build-audit-resolve.d.ts +5 -5
- package/dist/src/core/build-audit-resolve.js +6 -6
- package/dist/src/core/build-audit-skip.d.ts +57 -0
- package/dist/src/core/build-audit-skip.js +112 -0
- package/dist/src/core/build-audit-transforms.d.ts +2 -2
- package/dist/src/core/build-audit-transforms.js +3 -3
- package/dist/src/core/build-audit.d.ts +21 -8
- package/dist/src/core/build-audit.js +142 -40
- package/dist/src/core/build-baseline-types.d.ts +19 -18
- package/dist/src/core/build-baseline-types.js +1 -1
- package/dist/src/core/build-baseline.d.ts +48 -31
- package/dist/src/core/build-baseline.js +20 -43
- package/dist/src/core/build-jar-escalation.d.ts +8 -8
- package/dist/src/core/build-jar-escalation.js +18 -17
- package/dist/src/core/build-overwrite-guard.d.ts +4 -4
- package/dist/src/core/build-overwrite-guard.js +14 -14
- package/dist/src/core/build-prepare.d.ts +4 -12
- package/dist/src/core/build-prepare.js +22 -26
- package/dist/src/core/config-mutate.js +4 -4
- package/dist/src/core/config-paths.d.ts +2 -6
- package/dist/src/core/config-paths.js +4 -2
- package/dist/src/core/config-state.d.ts +0 -6
- package/dist/src/core/config-state.js +3 -21
- package/dist/src/core/config-validate-build-audit.d.ts +8 -0
- package/dist/src/core/config-validate-build-audit.js +80 -0
- package/dist/src/core/config-validate-file-size.d.ts +1 -1
- package/dist/src/core/config-validate-file-size.js +3 -3
- package/dist/src/core/config-validate-patch-policy.d.ts +2 -2
- package/dist/src/core/config-validate-patch-policy.js +3 -3
- package/dist/src/core/config-validate-test-toolchains.d.ts +2 -2
- package/dist/src/core/config-validate-test-toolchains.js +4 -5
- package/dist/src/core/config-validate.js +22 -12
- package/dist/src/core/config.d.ts +12 -12
- package/dist/src/core/config.js +21 -25
- package/dist/src/core/coverage-extend.d.ts +16 -16
- package/dist/src/core/coverage-extend.js +20 -20
- package/dist/src/core/destructive.d.ts +14 -14
- package/dist/src/core/destructive.js +9 -9
- package/dist/src/core/diff-hunks.d.ts +2 -2
- package/dist/src/core/diff-hunks.js +7 -7
- package/dist/src/core/discard-baseline.d.ts +10 -10
- package/dist/src/core/discard-baseline.js +22 -23
- package/dist/src/core/display-state.d.ts +11 -11
- package/dist/src/core/display-state.js +12 -12
- package/dist/src/core/engine-changes.d.ts +2 -2
- package/dist/src/core/engine-changes.js +2 -2
- package/dist/src/core/engine-precondition.d.ts +5 -13
- package/dist/src/core/engine-precondition.js +5 -10
- package/dist/src/core/engine-session-lock.d.ts +18 -18
- package/dist/src/core/engine-session-lock.js +50 -54
- package/dist/src/core/export-moved-code-shape.d.ts +7 -7
- package/dist/src/core/export-moved-code-shape.js +10 -10
- package/dist/src/core/file-lock-owner.d.ts +103 -0
- package/dist/src/core/file-lock-owner.js +259 -0
- package/dist/src/core/file-lock.d.ts +14 -19
- package/dist/src/core/file-lock.js +90 -128
- package/dist/src/core/firefox-cache.d.ts +13 -1
- package/dist/src/core/firefox-cache.js +61 -36
- package/dist/src/core/firefox-download.d.ts +15 -0
- package/dist/src/core/firefox-download.js +38 -22
- package/dist/src/core/firefox-extract.d.ts +8 -7
- package/dist/src/core/firefox-extract.js +45 -27
- package/dist/src/core/firefox.d.ts +34 -36
- package/dist/src/core/firefox.js +13 -44
- package/dist/src/core/furnace-apply-dry-run.d.ts +1 -6
- package/dist/src/core/furnace-apply-dry-run.js +2 -8
- package/dist/src/core/furnace-apply-ftl.d.ts +5 -5
- package/dist/src/core/furnace-apply-ftl.js +8 -8
- package/dist/src/core/furnace-apply-helpers.d.ts +9 -20
- package/dist/src/core/furnace-apply-helpers.js +28 -39
- package/dist/src/core/furnace-apply-output.js +1 -1
- package/dist/src/core/furnace-apply-overwrite-warn.d.ts +9 -9
- package/dist/src/core/furnace-apply-overwrite-warn.js +13 -11
- package/dist/src/core/furnace-apply-undeploy-actions.d.ts +1 -1
- package/dist/src/core/furnace-apply-undeploy-actions.js +1 -1
- package/dist/src/core/furnace-apply.d.ts +4 -4
- package/dist/src/core/furnace-apply.js +50 -29
- package/dist/src/core/furnace-checksum-utils.d.ts +5 -5
- package/dist/src/core/furnace-checksum-utils.js +5 -5
- package/dist/src/core/furnace-config-custom.d.ts +1 -1
- package/dist/src/core/furnace-config-custom.js +2 -2
- package/dist/src/core/furnace-config-order.js +1 -1
- package/dist/src/core/furnace-config-tokens.d.ts +3 -3
- package/dist/src/core/furnace-config-tokens.js +3 -3
- package/dist/src/core/furnace-config-validate.js +2 -2
- package/dist/src/core/furnace-config.d.ts +5 -5
- package/dist/src/core/furnace-config.js +40 -53
- package/dist/src/core/furnace-constants.d.ts +6 -6
- package/dist/src/core/furnace-constants.js +9 -8
- package/dist/src/core/furnace-css-fragments.d.ts +6 -6
- package/dist/src/core/furnace-css-fragments.js +11 -11
- package/dist/src/core/furnace-dir-entry.d.ts +20 -0
- package/dist/src/core/furnace-dir-entry.js +21 -0
- package/dist/src/core/furnace-jsconfig.d.ts +7 -7
- package/dist/src/core/furnace-jsconfig.js +22 -20
- package/dist/src/core/furnace-operation.d.ts +22 -19
- package/dist/src/core/furnace-operation.js +38 -34
- package/dist/src/core/furnace-precondition.d.ts +10 -10
- package/dist/src/core/furnace-precondition.js +8 -8
- package/dist/src/core/furnace-refresh.d.ts +18 -6
- package/dist/src/core/furnace-refresh.js +5 -8
- package/dist/src/core/furnace-registration-ast.d.ts +2 -3
- package/dist/src/core/furnace-registration-ast.js +9 -12
- package/dist/src/core/furnace-registration-remove.d.ts +4 -4
- package/dist/src/core/furnace-registration-remove.js +6 -6
- package/dist/src/core/furnace-registration-validate.d.ts +2 -2
- package/dist/src/core/furnace-registration-validate.js +2 -2
- package/dist/src/core/furnace-registration.d.ts +7 -6
- package/dist/src/core/furnace-registration.js +29 -36
- package/dist/src/core/furnace-rollback.d.ts +1 -1
- package/dist/src/core/furnace-rollback.js +5 -5
- package/dist/src/core/furnace-scanner.js +3 -6
- package/dist/src/core/furnace-stale-export.d.ts +17 -16
- package/dist/src/core/furnace-stale-export.js +16 -15
- package/dist/src/core/furnace-staleness.d.ts +2 -2
- package/dist/src/core/furnace-staleness.js +2 -2
- package/dist/src/core/furnace-state-persist.d.ts +12 -12
- package/dist/src/core/furnace-state-persist.js +10 -10
- package/dist/src/core/furnace-step-errors.d.ts +6 -6
- package/dist/src/core/furnace-step-errors.js +6 -6
- package/dist/src/core/furnace-validate-accessibility.js +14 -14
- package/dist/src/core/furnace-validate-compatibility.js +9 -9
- package/dist/src/core/furnace-validate-registration.d.ts +2 -2
- package/dist/src/core/furnace-validate-registration.js +18 -20
- package/dist/src/core/furnace-validate-structure.d.ts +1 -1
- package/dist/src/core/furnace-validate-structure.js +4 -4
- package/dist/src/core/furnace-validate.js +9 -9
- package/dist/src/core/furnace-version-drift.d.ts +5 -5
- package/dist/src/core/furnace-version-drift.js +5 -5
- package/dist/src/core/git-base.d.ts +6 -4
- package/dist/src/core/git-base.js +29 -7
- package/dist/src/core/git-diff-new-file.d.ts +40 -0
- package/dist/src/core/git-diff-new-file.js +119 -0
- package/dist/src/core/git-diff.d.ts +13 -13
- package/dist/src/core/git-diff.js +121 -189
- package/dist/src/core/git-file-ops.d.ts +6 -13
- package/dist/src/core/git-file-ops.js +11 -35
- package/dist/src/core/git-readonly-index.d.ts +12 -14
- package/dist/src/core/git-readonly-index.js +12 -16
- package/dist/src/core/git-status.d.ts +9 -2
- package/dist/src/core/git-status.js +23 -11
- package/dist/src/core/git.d.ts +3 -9
- package/dist/src/core/git.js +28 -57
- package/dist/src/core/harness-orphans.d.ts +17 -17
- package/dist/src/core/harness-orphans.js +28 -27
- package/dist/src/core/history-log.d.ts +19 -0
- package/dist/src/core/history-log.js +29 -0
- package/dist/src/core/license-headers.d.ts +19 -18
- package/dist/src/core/license-headers.js +29 -28
- package/dist/src/core/mach-build-artifacts.d.ts +21 -21
- package/dist/src/core/mach-build-artifacts.js +23 -23
- package/dist/src/core/mach-error-hints.d.ts +5 -10
- package/dist/src/core/mach-error-hints.js +14 -14
- package/dist/src/core/mach-known-noise-filter.d.ts +42 -38
- package/dist/src/core/mach-known-noise-filter.js +57 -56
- package/dist/src/core/mach-mozconfig.d.ts +6 -6
- package/dist/src/core/mach-mozconfig.js +17 -16
- package/dist/src/core/mach-python.d.ts +3 -0
- package/dist/src/core/mach-python.js +13 -7
- package/dist/src/core/mach-resource-shim.d.ts +24 -12
- package/dist/src/core/mach-resource-shim.js +124 -21
- package/dist/src/core/mach.d.ts +59 -73
- package/dist/src/core/mach.js +47 -115
- package/dist/src/core/marionette-port.d.ts +15 -30
- package/dist/src/core/marionette-port.js +46 -89
- package/dist/src/core/marionette-preflight.d.ts +6 -6
- package/dist/src/core/marionette-preflight.js +32 -50
- package/dist/src/core/markdown-table.d.ts +9 -9
- package/dist/src/core/markdown-table.js +14 -14
- package/dist/src/core/mochitest-server-port.d.ts +8 -8
- package/dist/src/core/mochitest-server-port.js +17 -17
- package/dist/src/core/module-resolution-preflight.d.ts +8 -8
- package/dist/src/core/module-resolution-preflight.js +11 -11
- package/dist/src/core/moz-manifest-helpers.d.ts +7 -7
- package/dist/src/core/moz-manifest-helpers.js +7 -7
- package/dist/src/core/moz-manifest-register.d.ts +1 -1
- package/dist/src/core/moz-manifest-register.js +2 -2
- package/dist/src/core/moz-manifest-rules.js +46 -42
- package/dist/src/core/moz-manifest-tokenizers.js +1 -1
- package/dist/src/core/ownership-table.d.ts +5 -5
- package/dist/src/core/ownership-table.js +7 -7
- package/dist/src/core/parser-fallback.d.ts +3 -3
- package/dist/src/core/parser-fallback.js +3 -3
- package/dist/src/core/patch-apply-fuzz.d.ts +5 -5
- package/dist/src/core/patch-apply-fuzz.js +13 -13
- package/dist/src/core/patch-apply.d.ts +13 -14
- package/dist/src/core/patch-apply.js +36 -42
- package/dist/src/core/patch-export-coverage.d.ts +0 -9
- package/dist/src/core/patch-export-coverage.js +1 -30
- package/dist/src/core/patch-export-update.d.ts +21 -4
- package/dist/src/core/patch-export-update.js +7 -6
- package/dist/src/core/patch-export.d.ts +20 -30
- package/dist/src/core/patch-export.js +55 -77
- package/dist/src/core/patch-files.d.ts +0 -4
- package/dist/src/core/patch-files.js +0 -11
- package/dist/src/core/patch-identifier-suggest.d.ts +1 -1
- package/dist/src/core/patch-identifier-suggest.js +4 -4
- package/dist/src/core/patch-lint-binary.d.ts +12 -18
- package/dist/src/core/patch-lint-cache.d.ts +18 -2
- package/dist/src/core/patch-lint-cache.js +16 -19
- package/dist/src/core/patch-lint-checkjs.d.ts +55 -38
- package/dist/src/core/patch-lint-checkjs.js +78 -64
- package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +8 -9
- package/dist/src/core/patch-lint-chrome-jsdoc.js +10 -11
- package/dist/src/core/patch-lint-creators.d.ts +5 -9
- package/dist/src/core/patch-lint-creators.js +3 -3
- package/dist/src/core/patch-lint-cross.d.ts +27 -19
- package/dist/src/core/patch-lint-cross.js +67 -110
- package/dist/src/core/patch-lint-css.d.ts +1 -1
- package/dist/src/core/patch-lint-css.js +15 -11
- package/dist/src/core/patch-lint-diff-tag.d.ts +5 -5
- package/dist/src/core/patch-lint-diff-tag.js +5 -5
- package/dist/src/core/patch-lint-diff.d.ts +4 -4
- package/dist/src/core/patch-lint-diff.js +4 -4
- package/dist/src/core/patch-lint-file-size.d.ts +3 -3
- package/dist/src/core/patch-lint-file-size.js +6 -6
- package/dist/src/core/patch-lint-forward-registration.d.ts +58 -0
- package/dist/src/core/patch-lint-forward-registration.js +210 -0
- package/dist/src/core/patch-lint-jsdoc.d.ts +2 -2
- package/dist/src/core/patch-lint-jsdoc.js +46 -46
- package/dist/src/core/patch-lint-module-registration.d.ts +3 -9
- package/dist/src/core/patch-lint-module-registration.js +1 -1
- package/dist/src/core/patch-lint-mozbuild.d.ts +1 -1
- package/dist/src/core/patch-lint-mozbuild.js +10 -10
- package/dist/src/core/patch-lint-observer.d.ts +3 -3
- package/dist/src/core/patch-lint-observer.js +7 -7
- package/dist/src/core/patch-lint-ownership.d.ts +6 -6
- package/dist/src/core/patch-lint-ownership.js +6 -6
- package/dist/src/core/patch-lint-prettier.d.ts +6 -6
- package/dist/src/core/patch-lint-prettier.js +7 -7
- package/dist/src/core/patch-lint-queue-types.d.ts +60 -0
- package/dist/src/core/patch-lint-queue-types.js +12 -0
- package/dist/src/core/patch-lint-staged-registration.d.ts +61 -0
- package/dist/src/core/patch-lint-staged-registration.js +90 -0
- package/dist/src/core/patch-lint-unmanaged-companion.d.ts +23 -23
- package/dist/src/core/patch-lint-unmanaged-companion.js +26 -26
- package/dist/src/core/patch-lint.d.ts +41 -35
- package/dist/src/core/patch-lint.js +52 -49
- package/dist/src/core/patch-lock.d.ts +1 -1
- package/dist/src/core/patch-lock.js +11 -11
- package/dist/src/core/patch-manifest-consistency.d.ts +7 -7
- package/dist/src/core/patch-manifest-consistency.js +16 -17
- package/dist/src/core/patch-manifest-files-affected.d.ts +1 -1
- package/dist/src/core/patch-manifest-files-affected.js +3 -3
- package/dist/src/core/patch-manifest-io.d.ts +14 -14
- package/dist/src/core/patch-manifest-io.js +35 -34
- package/dist/src/core/patch-manifest-query.d.ts +1 -1
- package/dist/src/core/patch-manifest-query.js +4 -4
- package/dist/src/core/patch-manifest-resolve.d.ts +5 -5
- package/dist/src/core/patch-manifest-resolve.js +7 -7
- package/dist/src/core/patch-manifest-validate.js +3 -3
- package/dist/src/core/patch-manifest.d.ts +2 -2
- package/dist/src/core/patch-manifest.js +2 -2
- package/dist/src/core/patch-parse.d.ts +32 -21
- package/dist/src/core/patch-parse.js +40 -15
- package/dist/src/core/patch-policy.js +15 -27
- package/dist/src/core/patch-registration-refs.d.ts +4 -4
- package/dist/src/core/patch-registration-refs.js +7 -7
- package/dist/src/core/patch-source-metadata.d.ts +1 -3
- package/dist/src/core/patch-source-metadata.js +0 -4
- package/dist/src/core/patch-transform.d.ts +8 -16
- package/dist/src/core/patch-transform.js +13 -23
- package/dist/src/core/process-cpu-time.d.ts +1 -1
- package/dist/src/core/process-cpu-time.js +6 -6
- package/dist/src/core/rebase-session.d.ts +9 -15
- package/dist/src/core/rebase-session.js +13 -25
- package/dist/src/core/register-browser-content.js +3 -2
- package/dist/src/core/register-browser-test.js +2 -1
- package/dist/src/core/register-module.js +2 -1
- package/dist/src/core/register-result.d.ts +1 -1
- package/dist/src/core/register-result.js +1 -1
- package/dist/src/core/register-scaffold.d.ts +2 -2
- package/dist/src/core/register-scaffold.js +8 -7
- package/dist/src/core/register-shared-css.d.ts +3 -3
- package/dist/src/core/register-shared-css.js +6 -5
- package/dist/src/core/register-xpcshell-test.d.ts +2 -2
- package/dist/src/core/register-xpcshell-test.js +2 -2
- package/dist/src/core/run-log-redact.d.ts +38 -0
- package/dist/src/core/run-log-redact.js +69 -0
- package/dist/src/core/run-log.d.ts +21 -10
- package/dist/src/core/run-log.js +76 -27
- package/dist/src/core/shared-ftl.d.ts +2 -2
- package/dist/src/core/shared-ftl.js +6 -6
- package/dist/src/core/signal-critical.d.ts +2 -2
- package/dist/src/core/signal-critical.js +4 -6
- package/dist/src/core/smoke-patterns.d.ts +5 -6
- package/dist/src/core/smoke-patterns.js +15 -20
- package/dist/src/core/state-file.d.ts +15 -4
- package/dist/src/core/state-file.js +14 -1
- package/dist/src/core/status-binary.d.ts +8 -8
- package/dist/src/core/status-binary.js +12 -12
- package/dist/src/core/status-classify.d.ts +17 -17
- package/dist/src/core/status-classify.js +13 -12
- package/dist/src/core/test-changed-prefs.d.ts +12 -12
- package/dist/src/core/test-changed-prefs.js +40 -25
- package/dist/src/core/test-harness-crash.d.ts +39 -39
- package/dist/src/core/test-harness-crash.js +69 -69
- package/dist/src/core/test-harness-output.d.ts +7 -7
- package/dist/src/core/test-harness-output.js +7 -7
- package/dist/src/core/test-harness-verdict-notes.d.ts +13 -14
- package/dist/src/core/test-harness-verdict-notes.js +4 -4
- package/dist/src/core/test-path-scope.d.ts +8 -8
- package/dist/src/core/test-path-scope.js +11 -11
- package/dist/src/core/test-stale-check.d.ts +22 -23
- package/dist/src/core/test-stale-check.js +31 -30
- package/dist/src/core/test-stale-symlink.d.ts +1 -1
- package/dist/src/core/test-stale-symlink.js +1 -1
- package/dist/src/core/test-stall-triage.d.ts +9 -9
- package/dist/src/core/test-stall-triage.js +22 -22
- package/dist/src/core/test-xpcshell-retry.d.ts +26 -7
- package/dist/src/core/test-xpcshell-retry.js +14 -11
- package/dist/src/core/token-category.d.ts +35 -2
- package/dist/src/core/token-category.js +67 -58
- package/dist/src/core/token-coverage.js +4 -5
- package/dist/src/core/token-dark-mode.d.ts +9 -9
- package/dist/src/core/token-dark-mode.js +13 -25
- package/dist/src/core/token-docs.d.ts +1 -1
- package/dist/src/core/token-inventory.d.ts +56 -0
- package/dist/src/core/token-inventory.js +109 -0
- package/dist/src/core/token-manager.d.ts +4 -4
- package/dist/src/core/token-manager.js +22 -22
- package/dist/src/core/token-scaffold.d.ts +4 -4
- package/dist/src/core/token-scaffold.js +4 -4
- package/dist/src/core/token-variant.d.ts +14 -14
- package/dist/src/core/token-variant.js +52 -53
- package/dist/src/core/toolchain-preflight.d.ts +15 -15
- package/dist/src/core/toolchain-preflight.js +23 -23
- package/dist/src/core/tree-cow.d.ts +3 -5
- package/dist/src/core/tree-cow.js +8 -8
- package/dist/src/core/tree-guard.d.ts +3 -3
- package/dist/src/core/tree-guard.js +23 -23
- package/dist/src/core/tree-store.d.ts +15 -15
- package/dist/src/core/tree-store.js +39 -38
- package/dist/src/core/typecheck-shim.d.ts +16 -15
- package/dist/src/core/typecheck-shim.js +26 -25
- package/dist/src/core/typecheck.d.ts +12 -12
- package/dist/src/core/typecheck.js +33 -33
- package/dist/src/core/wire-destroy.d.ts +2 -2
- package/dist/src/core/wire-destroy.js +5 -5
- package/dist/src/core/wire-dom-fragment.d.ts +3 -3
- package/dist/src/core/wire-dom-fragment.js +12 -23
- package/dist/src/core/wire-init.d.ts +2 -2
- package/dist/src/core/wire-init.js +7 -7
- package/dist/src/core/wire-subscript.d.ts +1 -1
- package/dist/src/core/wire-subscript.js +3 -3
- package/dist/src/core/wire-utils.d.ts +9 -9
- package/dist/src/core/wire-utils.js +16 -28
- package/dist/src/core/xpcshell-appdir.d.ts +20 -20
- package/dist/src/core/xpcshell-appdir.js +28 -30
- package/dist/src/core/xpcshell-profile-dir.d.ts +3 -3
- package/dist/src/core/xpcshell-profile-dir.js +7 -7
- package/dist/src/errors/base.d.ts +69 -16
- package/dist/src/errors/base.js +95 -26
- package/dist/src/errors/build.d.ts +6 -6
- package/dist/src/errors/build.js +26 -34
- package/dist/src/errors/codes.d.ts +10 -10
- package/dist/src/errors/codes.js +10 -10
- package/dist/src/errors/config.d.ts +0 -14
- package/dist/src/errors/config.js +13 -34
- package/dist/src/errors/download.d.ts +13 -0
- package/dist/src/errors/download.js +53 -24
- package/dist/src/errors/furnace.d.ts +2 -2
- package/dist/src/errors/furnace.js +8 -9
- package/dist/src/errors/git.d.ts +9 -9
- package/dist/src/errors/git.js +21 -31
- package/dist/src/errors/patch.d.ts +3 -3
- package/dist/src/errors/patch.js +11 -13
- package/dist/src/errors/rebase.d.ts +1 -1
- package/dist/src/errors/rebase.js +8 -8
- package/dist/src/errors/run.d.ts +1 -1
- package/dist/src/errors/run.js +1 -1
- package/dist/src/index.d.ts +4 -4
- package/dist/src/index.js +4 -4
- package/dist/src/types/commands/options.d.ts +155 -200
- package/dist/src/types/commands/patches.d.ts +19 -19
- package/dist/src/types/commands/project.d.ts +3 -3
- package/dist/src/types/config.d.ts +52 -19
- package/dist/src/types/furnace.d.ts +17 -17
- package/dist/src/types/index.d.ts +0 -1
- package/dist/src/types/json.d.ts +3 -3
- package/dist/src/types/json.js +2 -2
- package/dist/src/types/typecheck.d.ts +3 -3
- package/dist/src/utils/assert.d.ts +4 -16
- package/dist/src/utils/assert.js +7 -24
- package/dist/src/utils/build-info.d.ts +6 -6
- package/dist/src/utils/build-info.js +6 -6
- package/dist/src/utils/child-env.d.ts +7 -6
- package/dist/src/utils/child-env.js +5 -5
- package/dist/src/utils/concurrency.d.ts +2 -2
- package/dist/src/utils/concurrency.js +2 -2
- package/dist/src/utils/elapsed.js +10 -1
- package/dist/src/utils/errors.d.ts +8 -8
- package/dist/src/utils/errors.js +8 -8
- package/dist/src/utils/fs.d.ts +1 -1
- package/dist/src/utils/fs.js +15 -20
- package/dist/src/utils/hash.d.ts +12 -0
- package/dist/src/utils/hash.js +16 -0
- package/dist/src/utils/line-dispatch.d.ts +15 -0
- package/dist/src/utils/line-dispatch.js +48 -0
- package/dist/src/utils/logger.d.ts +4 -4
- package/dist/src/utils/logger.js +11 -11
- package/dist/src/utils/machine-output.js +2 -2
- package/dist/src/utils/options.d.ts +14 -20
- package/dist/src/utils/options.js +26 -27
- package/dist/src/utils/package-root.js +5 -14
- package/dist/src/utils/paths.d.ts +4 -4
- package/dist/src/utils/paths.js +4 -4
- package/dist/src/utils/platform.d.ts +0 -4
- package/dist/src/utils/process-group.d.ts +10 -9
- package/dist/src/utils/process-group.js +37 -36
- package/dist/src/utils/process.d.ts +70 -55
- package/dist/src/utils/process.js +129 -179
- package/dist/src/utils/ps-duration.d.ts +4 -4
- package/dist/src/utils/ps-duration.js +9 -9
- package/dist/src/utils/regex.d.ts +4 -4
- package/dist/src/utils/regex.js +7 -7
- package/dist/src/utils/sleep.d.ts +26 -0
- package/dist/src/utils/sleep.js +31 -0
- package/dist/src/utils/stdio-drain.d.ts +7 -7
- package/dist/src/utils/stdio-drain.js +8 -8
- package/dist/src/utils/validation.d.ts +12 -49
- package/dist/src/utils/validation.js +26 -36
- package/docs/README.md +2 -2
- package/docs/configuration.md +163 -69
- package/docs/exit-codes.md +66 -49
- package/docs/furnace.md +20 -19
- package/docs/lifecycle-invariants.md +414 -247
- package/docs/machine-output.md +58 -34
- package/docs/patch-workflow.md +48 -44
- package/docs/run-logs.md +72 -28
- package/docs/testing.md +105 -98
- package/docs/verification-trees.md +23 -22
- package/package.json +7 -6
- package/dist/src/commands/rebase.d.ts +0 -4
- package/dist/src/commands/rebase.js +0 -5
- package/dist/src/core/patch-artifact-normalize.d.ts +0 -21
- package/dist/src/core/patch-artifact-normalize.js +0 -24
- package/dist/src/core/patch-lint-reexports.d.ts +0 -7
- package/dist/src/core/patch-lint-reexports.js +0 -8
- package/dist/src/core/wire-targets.d.ts +0 -7
- package/dist/src/core/wire-targets.js +0 -8
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Preflight census of
|
|
2
|
+
* Preflight census of orphaned test-harness helper processes.
|
|
3
3
|
*
|
|
4
4
|
* Stopping a long mochitest run mid-flight does not necessarily take its
|
|
5
5
|
* helpers with it. A downstream incident left `xpcshell` (the harness
|
|
6
6
|
* httpd, pegged at 100% CPU), `pywebsocket`, `ssltunnel` and `moz-http2`
|
|
7
|
-
* alive for an hour. Every subsequent run crawled
|
|
8
|
-
* took six minutes of wall clock and audio-start waits timed out
|
|
9
|
-
*
|
|
7
|
+
* alive for an hour. Every subsequent run crawled: a three-second suite
|
|
8
|
+
* took six minutes of wall clock and audio-start waits timed out. Nothing
|
|
9
|
+
* in FireForge's output connected the slowness to the survivors.
|
|
10
10
|
* The hour was spent mis-attributing it to the change under test.
|
|
11
11
|
*
|
|
12
12
|
* Visibility alone would have collapsed that hour, which is why the census
|
|
13
13
|
* runs by default and the kill does not. Two rules keep it honest:
|
|
14
14
|
*
|
|
15
|
-
* - The census runs at
|
|
16
|
-
* every matching process
|
|
17
|
-
*
|
|
15
|
+
* - The census runs at preflight, before this run spawns anything, so
|
|
16
|
+
* every matching process must be a survivor of an earlier run. No age
|
|
17
|
+
* heuristic is needed, and none is used.
|
|
18
18
|
* - A match must be anchored to a Firefox OBJDIR. `xpcshell` and
|
|
19
|
-
* `server.js` are far too generic on their own
|
|
19
|
+
* `server.js` are far too generic on their own. The same rule
|
|
20
20
|
* `mochitest-server-port.ts` applies to the httpd holder applies here,
|
|
21
|
-
* for the same reason
|
|
21
|
+
* for the same reason. FireForge has no business reporting, let alone
|
|
22
22
|
* terminating, a process it cannot attribute to the harness.
|
|
23
23
|
*
|
|
24
24
|
* `--reap-orphans` opts into termination. Without it the census is
|
|
25
25
|
* report-only, exactly like the `Orphaned harness workers` doctor check
|
|
26
|
-
* (which covers a
|
|
26
|
+
* (which covers a different shape: reparented Python multiprocessing
|
|
27
27
|
* workers, matched on PPID 1 and accumulated CPU time).
|
|
28
28
|
*/
|
|
29
29
|
/** One surviving harness helper process. */
|
|
@@ -38,10 +38,10 @@ export interface OrphanedHarnessProcess {
|
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
40
40
|
* Scans `ps -axo pid=,ppid=,etime=,command=` output for surviving harness
|
|
41
|
-
* helpers. Pure
|
|
41
|
+
* helpers. Pure, so it is fixture-testable without spawning anything.
|
|
42
42
|
*
|
|
43
43
|
* @param psOutput - Raw `ps` output
|
|
44
|
-
* @param objDir - Absolute objdir of this project, when known
|
|
44
|
+
* @param objDir - Absolute objdir of this project, when known. Widens the
|
|
45
45
|
* provenance test beyond the generic `obj-…` path segment
|
|
46
46
|
* @param selfPid - This process's pid, excluded so FireForge cannot report
|
|
47
47
|
* itself
|
|
@@ -57,11 +57,11 @@ export declare function formatOrphanReport(orphans: readonly OrphanedHarnessProc
|
|
|
57
57
|
* Preflight census of surviving harness helpers, run before a test
|
|
58
58
|
* dispatch.
|
|
59
59
|
*
|
|
60
|
-
* Best-effort
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
60
|
+
* Best-effort: a host without a usable `ps` (Windows, a locked-down
|
|
61
|
+
* container) logs at verbose and runs exactly as before. It never refuses a
|
|
62
|
+
* run. Unlike the server-port preflight, a survivor here degrades
|
|
63
|
+
* performance rather than making the run dispatch against the wrong server,
|
|
64
|
+
* so the correct response is to say so loudly rather than to stop.
|
|
65
65
|
*
|
|
66
66
|
* @param objDir - Absolute objdir of this project, when known
|
|
67
67
|
* @param options - `reap` terminates each recognized survivor (SIGTERM,
|
|
@@ -1,39 +1,40 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
2
|
/**
|
|
3
|
-
* Preflight census of
|
|
3
|
+
* Preflight census of orphaned test-harness helper processes.
|
|
4
4
|
*
|
|
5
5
|
* Stopping a long mochitest run mid-flight does not necessarily take its
|
|
6
6
|
* helpers with it. A downstream incident left `xpcshell` (the harness
|
|
7
7
|
* httpd, pegged at 100% CPU), `pywebsocket`, `ssltunnel` and `moz-http2`
|
|
8
|
-
* alive for an hour. Every subsequent run crawled
|
|
9
|
-
* took six minutes of wall clock and audio-start waits timed out
|
|
10
|
-
*
|
|
8
|
+
* alive for an hour. Every subsequent run crawled: a three-second suite
|
|
9
|
+
* took six minutes of wall clock and audio-start waits timed out. Nothing
|
|
10
|
+
* in FireForge's output connected the slowness to the survivors.
|
|
11
11
|
* The hour was spent mis-attributing it to the change under test.
|
|
12
12
|
*
|
|
13
13
|
* Visibility alone would have collapsed that hour, which is why the census
|
|
14
14
|
* runs by default and the kill does not. Two rules keep it honest:
|
|
15
15
|
*
|
|
16
|
-
* - The census runs at
|
|
17
|
-
* every matching process
|
|
18
|
-
*
|
|
16
|
+
* - The census runs at preflight, before this run spawns anything, so
|
|
17
|
+
* every matching process must be a survivor of an earlier run. No age
|
|
18
|
+
* heuristic is needed, and none is used.
|
|
19
19
|
* - A match must be anchored to a Firefox OBJDIR. `xpcshell` and
|
|
20
|
-
* `server.js` are far too generic on their own
|
|
20
|
+
* `server.js` are far too generic on their own. The same rule
|
|
21
21
|
* `mochitest-server-port.ts` applies to the httpd holder applies here,
|
|
22
|
-
* for the same reason
|
|
22
|
+
* for the same reason. FireForge has no business reporting, let alone
|
|
23
23
|
* terminating, a process it cannot attribute to the harness.
|
|
24
24
|
*
|
|
25
25
|
* `--reap-orphans` opts into termination. Without it the census is
|
|
26
26
|
* report-only, exactly like the `Orphaned harness workers` doctor check
|
|
27
|
-
* (which covers a
|
|
27
|
+
* (which covers a different shape: reparented Python multiprocessing
|
|
28
28
|
* workers, matched on PPID 1 and accumulated CPU time).
|
|
29
29
|
*/
|
|
30
30
|
import { toError } from '../utils/errors.js';
|
|
31
31
|
import { info, verbose, warn } from '../utils/logger.js';
|
|
32
32
|
import { exec } from '../utils/process.js';
|
|
33
33
|
import { parsePsDuration } from '../utils/ps-duration.js';
|
|
34
|
+
import { sleep } from '../utils/sleep.js';
|
|
34
35
|
/**
|
|
35
36
|
* Harness helper executables/scripts. Every one of these is started by the
|
|
36
|
-
* mochitest/xpcshell harness and is expected to die with it
|
|
37
|
+
* mochitest/xpcshell harness and is expected to die with it. None of them
|
|
37
38
|
* is a thing a developer runs by hand.
|
|
38
39
|
*/
|
|
39
40
|
const HARNESS_HELPER_PATTERN = /\b(?:xpcshell|pywebsocket\w*|websocket_server\.py|ssltunnel|moz-http2|http2_server|httpd\.js|server\.js|runtests\.py|runxpcshelltests\.py)\b/;
|
|
@@ -47,10 +48,10 @@ function isObjdirAnchored(command, objDir) {
|
|
|
47
48
|
}
|
|
48
49
|
/**
|
|
49
50
|
* Scans `ps -axo pid=,ppid=,etime=,command=` output for surviving harness
|
|
50
|
-
* helpers. Pure
|
|
51
|
+
* helpers. Pure, so it is fixture-testable without spawning anything.
|
|
51
52
|
*
|
|
52
53
|
* @param psOutput - Raw `ps` output
|
|
53
|
-
* @param objDir - Absolute objdir of this project, when known
|
|
54
|
+
* @param objDir - Absolute objdir of this project, when known. Widens the
|
|
54
55
|
* provenance test beyond the generic `obj-…` path segment
|
|
55
56
|
* @param selfPid - This process's pid, excluded so FireForge cannot report
|
|
56
57
|
* itself
|
|
@@ -93,10 +94,10 @@ const COMMAND_EXCERPT_LIMIT = 160;
|
|
|
93
94
|
*/
|
|
94
95
|
export function formatOrphanReport(orphans) {
|
|
95
96
|
const rows = orphans
|
|
96
|
-
.map((p) => ` PID ${
|
|
97
|
+
.map((p) => ` PID ${p.pid} (up ${p.elapsed}): ${p.command.slice(0, COMMAND_EXCERPT_LIMIT)}`)
|
|
97
98
|
.join('\n');
|
|
98
99
|
const pids = orphans.map((p) => String(p.pid)).join(' ');
|
|
99
|
-
return (`${
|
|
100
|
+
return (`${orphans.length} harness helper process(es) from an EARLIER run are still alive ` +
|
|
100
101
|
`(this preflight runs before the current run spawns anything, so none of these belong to ` +
|
|
101
102
|
`it):\n${rows}\n` +
|
|
102
103
|
`Survivors like these slow every later run without appearing anywhere in its output — a ` +
|
|
@@ -107,7 +108,7 @@ export function formatOrphanReport(orphans) {
|
|
|
107
108
|
async function listSystemProcesses() {
|
|
108
109
|
const result = await exec('ps', ['-axo', 'pid=,ppid=,etime=,command='], { timeout: 10000 });
|
|
109
110
|
if (result.exitCode !== 0) {
|
|
110
|
-
throw new Error(`ps exited ${
|
|
111
|
+
throw new Error(`ps exited ${result.exitCode}`);
|
|
111
112
|
}
|
|
112
113
|
return result.stdout;
|
|
113
114
|
}
|
|
@@ -115,11 +116,11 @@ async function listSystemProcesses() {
|
|
|
115
116
|
* Preflight census of surviving harness helpers, run before a test
|
|
116
117
|
* dispatch.
|
|
117
118
|
*
|
|
118
|
-
* Best-effort
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
*
|
|
119
|
+
* Best-effort: a host without a usable `ps` (Windows, a locked-down
|
|
120
|
+
* container) logs at verbose and runs exactly as before. It never refuses a
|
|
121
|
+
* run. Unlike the server-port preflight, a survivor here degrades
|
|
122
|
+
* performance rather than making the run dispatch against the wrong server,
|
|
123
|
+
* so the correct response is to say so loudly rather than to stop.
|
|
123
124
|
*
|
|
124
125
|
* @param objDir - Absolute objdir of this project, when known
|
|
125
126
|
* @param options - `reap` terminates each recognized survivor (SIGTERM,
|
|
@@ -150,8 +151,8 @@ export async function reportOrphanedHarnessProcesses(objDir, options = {}) {
|
|
|
150
151
|
}
|
|
151
152
|
/**
|
|
152
153
|
* Terminates each census entry: SIGTERM first, then SIGKILL for anything
|
|
153
|
-
* still alive. Failures are reported, never thrown
|
|
154
|
-
* between the census and the signal is the common case
|
|
154
|
+
* still alive. Failures are reported, never thrown. A process that exited
|
|
155
|
+
* between the census and the signal is the common case rather than an error.
|
|
155
156
|
*/
|
|
156
157
|
async function reapOrphanedHarnessProcesses(orphans) {
|
|
157
158
|
for (const orphan of orphans) {
|
|
@@ -159,13 +160,13 @@ async function reapOrphanedHarnessProcesses(orphans) {
|
|
|
159
160
|
process.kill(orphan.pid, 'SIGTERM');
|
|
160
161
|
}
|
|
161
162
|
catch (error) {
|
|
162
|
-
verbose(`--reap-orphans: SIGTERM to ${
|
|
163
|
+
verbose(`--reap-orphans: SIGTERM to ${orphan.pid} failed (${toError(error).message}).`);
|
|
163
164
|
continue;
|
|
164
165
|
}
|
|
165
166
|
// Grace period before escalating: the httpd shape in the field
|
|
166
167
|
// incident ignored SIGTERM while spinning, but an ordinary helper exits
|
|
167
168
|
// promptly and must not be SIGKILLed for being slow by a millisecond.
|
|
168
|
-
await
|
|
169
|
+
await sleep(REAP_GRACE_MS);
|
|
169
170
|
let alive = true;
|
|
170
171
|
try {
|
|
171
172
|
process.kill(orphan.pid, 0);
|
|
@@ -178,9 +179,9 @@ async function reapOrphanedHarnessProcesses(orphans) {
|
|
|
178
179
|
process.kill(orphan.pid, 'SIGKILL');
|
|
179
180
|
}
|
|
180
181
|
catch (error) {
|
|
181
|
-
verbose(`--reap-orphans: SIGKILL to ${
|
|
182
|
+
verbose(`--reap-orphans: SIGKILL to ${orphan.pid} failed (${toError(error).message}).`);
|
|
182
183
|
}
|
|
183
184
|
}
|
|
184
|
-
info(`--reap-orphans: terminated PID ${
|
|
185
|
+
info(`--reap-orphans: terminated PID ${orphan.pid}.`);
|
|
185
186
|
}
|
|
186
187
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { HistoryEntry } from './destructive.js';
|
|
2
|
+
/**
|
|
3
|
+
* Appends a history entry for a mutation that has already committed, degrading
|
|
4
|
+
* to a warning when the log cannot be written.
|
|
5
|
+
*
|
|
6
|
+
* Eleven call sites across `export-flow` and the `patch` subcommands had each
|
|
7
|
+
* grown the same `try { await appendHistory(...) } catch { warn(...) }` block.
|
|
8
|
+
* The swallow is intentional: the patch files and the manifest
|
|
9
|
+
* are already on disk by the time this runs, so letting a failed log write
|
|
10
|
+
* reject would report a completed, irreversible mutation as a failure and send
|
|
11
|
+
* the operator looking for damage that is not there. Because that reasoning is
|
|
12
|
+
* easy to lose in a copy, it now lives in one place.
|
|
13
|
+
* @param patchesDir - The `patches/` directory holding the history log.
|
|
14
|
+
* @param entry - The entry to append.
|
|
15
|
+
* @param context - What just committed, rendered into
|
|
16
|
+
* `History log append failed after <context>: <reason>`, e.g.
|
|
17
|
+
* `patch tier committed (007-foo.patch)`.
|
|
18
|
+
*/
|
|
19
|
+
export declare function appendHistoryBestEffort(patchesDir: string, entry: HistoryEntry, context: string): Promise<void>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// SPDX-License-Identifier: EUPL-1.2
|
|
2
|
+
import { toError } from '../utils/errors.js';
|
|
3
|
+
import { warn } from '../utils/logger.js';
|
|
4
|
+
import { appendHistory } from './destructive.js';
|
|
5
|
+
/**
|
|
6
|
+
* Appends a history entry for a mutation that has already committed, degrading
|
|
7
|
+
* to a warning when the log cannot be written.
|
|
8
|
+
*
|
|
9
|
+
* Eleven call sites across `export-flow` and the `patch` subcommands had each
|
|
10
|
+
* grown the same `try { await appendHistory(...) } catch { warn(...) }` block.
|
|
11
|
+
* The swallow is intentional: the patch files and the manifest
|
|
12
|
+
* are already on disk by the time this runs, so letting a failed log write
|
|
13
|
+
* reject would report a completed, irreversible mutation as a failure and send
|
|
14
|
+
* the operator looking for damage that is not there. Because that reasoning is
|
|
15
|
+
* easy to lose in a copy, it now lives in one place.
|
|
16
|
+
* @param patchesDir - The `patches/` directory holding the history log.
|
|
17
|
+
* @param entry - The entry to append.
|
|
18
|
+
* @param context - What just committed, rendered into
|
|
19
|
+
* `History log append failed after <context>: <reason>`, e.g.
|
|
20
|
+
* `patch tier committed (007-foo.patch)`.
|
|
21
|
+
*/
|
|
22
|
+
export async function appendHistoryBestEffort(patchesDir, entry, context) {
|
|
23
|
+
try {
|
|
24
|
+
await appendHistory(patchesDir, entry);
|
|
25
|
+
}
|
|
26
|
+
catch (historyError) {
|
|
27
|
+
warn(`History log append failed after ${context}: ${toError(historyError).message}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { ProjectLicense } from '../types/config.js';
|
|
2
2
|
/**
|
|
3
3
|
* Comment style for license header formatting.
|
|
4
|
-
* - `js
|
|
5
|
-
* - `css
|
|
6
|
-
* - `hash
|
|
4
|
+
* - `js`: `// ...` line comments
|
|
5
|
+
* - `css`: block comments
|
|
6
|
+
* - `hash`: `# ...` line comments (FTL, shell, etc.)
|
|
7
7
|
*/
|
|
8
8
|
export type CommentStyle = 'js' | 'css' | 'hash';
|
|
9
9
|
/** Default license when fireforge.json omits the license field. */
|
|
@@ -23,19 +23,19 @@ export declare function getLicenseHeader(license: ProjectLicense, style: Comment
|
|
|
23
23
|
*
|
|
24
24
|
* For `js` files, MPL-2.0 is also accepted in the upstream Mozilla block-
|
|
25
25
|
* comment form (`/* ... *\/`) used by the Firefox source tree, not just the
|
|
26
|
-
* `// ` line-comment form `getLicenseHeader` emits
|
|
26
|
+
* `// ` line-comment form `getLicenseHeader` emits. Otherwise a new JS file
|
|
27
27
|
* copied from upstream Firefox hits `missing-license-header` even with a
|
|
28
28
|
* verbatim standard MPL header.
|
|
29
29
|
*
|
|
30
30
|
* Editor-directive block comments (`/* -*- ... -*- *\/`, `/* vim: ... *\/`)
|
|
31
31
|
* leading the file are tolerated: Mozilla's canonical layout puts those on
|
|
32
|
-
* lines 1
|
|
32
|
+
* lines 1 and 2 with the MPL header on lines 3+, which a raw `startsWith` check
|
|
33
33
|
* would miss.
|
|
34
34
|
*
|
|
35
35
|
* The MPL-2.0 header is additionally matched on normalized whitespace (see
|
|
36
36
|
* {@link normalizeCommentHead}) so upstream files using the older Mozilla
|
|
37
|
-
* wrap
|
|
38
|
-
*
|
|
37
|
+
* wrap (breaking after "file," instead of "with this") are accepted too.
|
|
38
|
+
* Only the wrap position differs, never the wording.
|
|
39
39
|
*
|
|
40
40
|
* @param content - File content to check
|
|
41
41
|
* @param style - Comment syntax of the file
|
|
@@ -44,18 +44,18 @@ export declare function hasAnyLicenseHeader(content: string, style: CommentStyle
|
|
|
44
44
|
/**
|
|
45
45
|
* Returns true if `content` starts with the verbatim upstream Mozilla
|
|
46
46
|
* MPL-2.0 block header (`/* This Source Code Form … *\/`), optionally
|
|
47
|
-
* preceded by editor-directive comments
|
|
47
|
+
* preceded by editor-directive comments, the exact shape a JS file copied
|
|
48
48
|
* from the Firefox source tree carries.
|
|
49
49
|
*
|
|
50
|
-
*
|
|
50
|
+
* Independent of the project license: a new JS file that
|
|
51
51
|
* legitimately keeps its upstream MPL block header is valid in an
|
|
52
52
|
* EUPL/GPL/0BSD project too.
|
|
53
53
|
*
|
|
54
54
|
* Matching is wrap-agnostic: after the exact `startsWith` fast path, the
|
|
55
55
|
* leading block comment is compared on normalized whitespace (see
|
|
56
|
-
* {@link normalizeCommentHead}) so the older upstream wrap
|
|
57
|
-
* "file," instead of "with this", as `ext-browser.js` ships
|
|
58
|
-
* Only the line-break position may differ
|
|
56
|
+
* {@link normalizeCommentHead}) so the older upstream wrap (breaking after
|
|
57
|
+
* "file," instead of "with this", as `ext-browser.js` ships) passes too.
|
|
58
|
+
* Only the line-break position may differ. Altered wording still rejects.
|
|
59
59
|
*
|
|
60
60
|
* @param content - File content to check
|
|
61
61
|
*/
|
|
@@ -69,7 +69,7 @@ export declare function hasUpstreamMplBlockHeader(content: string): boolean;
|
|
|
69
69
|
export declare function hasAnyLicenseHeaderAnyStyle(content: string): boolean;
|
|
70
70
|
/**
|
|
71
71
|
* Returns true if the first few lines of `content` contain a recognized
|
|
72
|
-
* upstream license identifier string
|
|
72
|
+
* upstream license identifier string: Mozilla's MPL boilerplate, an SPDX
|
|
73
73
|
* tag, the common permissive/copyleft license names, or the CC0
|
|
74
74
|
* public-domain dedication upstream test files carry.
|
|
75
75
|
*
|
|
@@ -78,17 +78,18 @@ export declare function hasAnyLicenseHeaderAnyStyle(content: string): boolean;
|
|
|
78
78
|
*/
|
|
79
79
|
export declare function containsUpstreamLicenseText(content: string, maxLines?: number): boolean;
|
|
80
80
|
/**
|
|
81
|
-
* Returns true when the head of `content` carries a recognized
|
|
81
|
+
* Returns true when the head of `content` carries a recognized third-party
|
|
82
82
|
* permissive license banner (MIT / ISC / BSD-2 / BSD-3 / Apache-2.0) or the
|
|
83
83
|
* CC0 public-domain dedication, in any comment style. Used by `export` to
|
|
84
84
|
* treat such files as vendored: offering to prepend the project's own
|
|
85
|
-
* license header onto a byte-identity-pinned upstream bundle
|
|
86
|
-
* test file Mozilla dedicated to the public domain
|
|
85
|
+
* license header onto a byte-identity-pinned upstream bundle, or onto a
|
|
86
|
+
* test file Mozilla dedicated to the public domain, would mislicense code
|
|
87
87
|
* the project does not own.
|
|
88
88
|
*
|
|
89
89
|
* @param content - File content to check
|
|
90
|
-
* @param maxLines - Number of leading lines to inspect (default 30
|
|
91
|
-
* MIT/BSD license texts run longer than the 10-line project-header
|
|
90
|
+
* @param maxLines - Number of leading lines to inspect (default 30, because
|
|
91
|
+
* full MIT/BSD license texts run longer than the 10-line project-header
|
|
92
|
+
* scan)
|
|
92
93
|
*/
|
|
93
94
|
export declare function hasThirdPartyPermissiveBanner(content: string, maxLines?: number): boolean;
|
|
94
95
|
/**
|
|
@@ -55,7 +55,7 @@ export function getLicenseHeader(license, style) {
|
|
|
55
55
|
}
|
|
56
56
|
/**
|
|
57
57
|
* Single-line `/* ... *\/` block comments containing either an Emacs
|
|
58
|
-
* file-mode marker (`-*-`) or a vim modeline (`vim:`)
|
|
58
|
+
* file-mode marker (`-*-`) or a vim modeline (`vim:`). These are Mozilla's
|
|
59
59
|
* canonical first-line editor directives that legitimately precede the
|
|
60
60
|
* license header in many Firefox source files.
|
|
61
61
|
*
|
|
@@ -69,9 +69,9 @@ const EDITOR_DIRECTIVE_BLOCK_COMMENT = /^[ \t]*\/\*[^\r\n]*?(?:-\*-|\bvim:)[^\r\
|
|
|
69
69
|
*
|
|
70
70
|
* Mozilla's coding convention places editor directives like
|
|
71
71
|
* `/* -*- Mode: javascript; ... -*- *\/` and `/* vim: set ... *\/` on
|
|
72
|
-
* lines 1
|
|
72
|
+
* lines 1 and 2, with the canonical license header following on lines 3+.
|
|
73
73
|
* The raw `content.startsWith(...)` check used by {@link hasAnyLicenseHeader}
|
|
74
|
-
* never matches in that shape
|
|
74
|
+
* never matches in that shape. This helper lets the caller test the
|
|
75
75
|
* post-directive prefix as a fallback.
|
|
76
76
|
*
|
|
77
77
|
* @param content - File content to strip
|
|
@@ -100,15 +100,15 @@ function normalizeText(text) {
|
|
|
100
100
|
*/
|
|
101
101
|
const MPL_HEADER_NORMALIZED = normalizeText(HEADER_LINES['MPL-2.0'].join(' '));
|
|
102
102
|
/**
|
|
103
|
-
* Extracts
|
|
103
|
+
* Extracts only the leading comment span of `content` for the given
|
|
104
104
|
* comment style and returns it whitespace-normalized:
|
|
105
105
|
*
|
|
106
|
-
* - `js`: a leading run of `//` lines (markers stripped), or
|
|
107
|
-
* file opens with a block comment instead
|
|
108
|
-
* `/* … *\/` block
|
|
106
|
+
* - `js`: a leading run of `//` lines (markers stripped), or (when the
|
|
107
|
+
* file opens with a block comment instead) the first
|
|
108
|
+
* `/* … *\/` block.
|
|
109
109
|
* - `css`: the first `/* … *\/` block, with the ` * ` continuation-line
|
|
110
110
|
* prefixes stripped (same collapsing
|
|
111
|
-
* {@link normalizeLicenseHeadForScan} does)
|
|
111
|
+
* {@link normalizeLicenseHeadForScan} does).
|
|
112
112
|
* - `hash`: a leading run of `#` lines (markers stripped).
|
|
113
113
|
*
|
|
114
114
|
* A non-comment first line yields `''`. This lets callers accept a known
|
|
@@ -145,19 +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
|
|
148
|
+
* `// ` line-comment form `getLicenseHeader` emits. Otherwise a new JS file
|
|
149
149
|
* copied from upstream Firefox hits `missing-license-header` even with a
|
|
150
150
|
* verbatim standard MPL header.
|
|
151
151
|
*
|
|
152
152
|
* Editor-directive block comments (`/* -*- ... -*- *\/`, `/* vim: ... *\/`)
|
|
153
153
|
* leading the file are tolerated: Mozilla's canonical layout puts those on
|
|
154
|
-
* lines 1
|
|
154
|
+
* lines 1 and 2 with the MPL header on lines 3+, which a raw `startsWith` check
|
|
155
155
|
* would miss.
|
|
156
156
|
*
|
|
157
157
|
* The MPL-2.0 header is additionally matched on normalized whitespace (see
|
|
158
158
|
* {@link normalizeCommentHead}) so upstream files using the older Mozilla
|
|
159
|
-
* wrap
|
|
160
|
-
*
|
|
159
|
+
* wrap (breaking after "file," instead of "with this") are accepted too.
|
|
160
|
+
* Only the wrap position differs, never the wording.
|
|
161
161
|
*
|
|
162
162
|
* @param content - File content to check
|
|
163
163
|
* @param style - Comment syntax of the file
|
|
@@ -181,18 +181,18 @@ export function hasAnyLicenseHeader(content, style) {
|
|
|
181
181
|
/**
|
|
182
182
|
* Returns true if `content` starts with the verbatim upstream Mozilla
|
|
183
183
|
* MPL-2.0 block header (`/* This Source Code Form … *\/`), optionally
|
|
184
|
-
* preceded by editor-directive comments
|
|
184
|
+
* preceded by editor-directive comments, the exact shape a JS file copied
|
|
185
185
|
* from the Firefox source tree carries.
|
|
186
186
|
*
|
|
187
|
-
*
|
|
187
|
+
* Independent of the project license: a new JS file that
|
|
188
188
|
* legitimately keeps its upstream MPL block header is valid in an
|
|
189
189
|
* EUPL/GPL/0BSD project too.
|
|
190
190
|
*
|
|
191
191
|
* Matching is wrap-agnostic: after the exact `startsWith` fast path, the
|
|
192
192
|
* leading block comment is compared on normalized whitespace (see
|
|
193
|
-
* {@link normalizeCommentHead}) so the older upstream wrap
|
|
194
|
-
* "file," instead of "with this", as `ext-browser.js` ships
|
|
195
|
-
* Only the line-break position may differ
|
|
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.
|
|
196
196
|
*
|
|
197
197
|
* @param content - File content to check
|
|
198
198
|
*/
|
|
@@ -233,23 +233,23 @@ function normalizeLicenseHeadForScan(head) {
|
|
|
233
233
|
*
|
|
234
234
|
* - the prose (`Any copyright is dedicated to the Public Domain.`), which
|
|
235
235
|
* the block, `//` and `#` comment forms all reduce to after
|
|
236
|
-
* {@link normalizeLicenseHeadForScan}
|
|
236
|
+
* {@link normalizeLicenseHeadForScan}.
|
|
237
237
|
* - the dedication URL (`creativecommons.org/publicdomain/zero/1.0/`, with
|
|
238
|
-
* either scheme)
|
|
238
|
+
* either scheme).
|
|
239
239
|
* - the SPDX identifier `CC0-1.0`.
|
|
240
240
|
*
|
|
241
|
-
*
|
|
241
|
+
* Narrow on purpose: a bare "public domain" mention, a different Creative
|
|
242
242
|
* Commons license (`licenses/by/4.0/`, `CC-BY-4.0`) or a made-up
|
|
243
|
-
* `publicdomain/zero/2.0/` is
|
|
243
|
+
* `publicdomain/zero/2.0/` is not a CC0 dedication and must not be
|
|
244
244
|
* accepted as one. `scanText` must already be normalized (and may be
|
|
245
|
-
* lowercased
|
|
245
|
+
* lowercased, since the match is case-insensitive).
|
|
246
246
|
*/
|
|
247
247
|
function hasCc0Dedication(scanText) {
|
|
248
248
|
return /dedicated to the public domain|creativecommons\.org\/publicdomain\/zero\/1\.0|spdx-license-identifier:\s*cc0-1\.0\b/i.test(scanText);
|
|
249
249
|
}
|
|
250
250
|
/**
|
|
251
251
|
* Returns true if the first few lines of `content` contain a recognized
|
|
252
|
-
* upstream license identifier string
|
|
252
|
+
* upstream license identifier string: Mozilla's MPL boilerplate, an SPDX
|
|
253
253
|
* tag, the common permissive/copyleft license names, or the CC0
|
|
254
254
|
* public-domain dedication upstream test files carry.
|
|
255
255
|
*
|
|
@@ -269,17 +269,18 @@ export function containsUpstreamLicenseText(content, maxLines = 10) {
|
|
|
269
269
|
return markers.some((marker) => scanText.includes(marker)) || hasCc0Dedication(scanText);
|
|
270
270
|
}
|
|
271
271
|
/**
|
|
272
|
-
* Returns true when the head of `content` carries a recognized
|
|
272
|
+
* Returns true when the head of `content` carries a recognized third-party
|
|
273
273
|
* permissive license banner (MIT / ISC / BSD-2 / BSD-3 / Apache-2.0) or the
|
|
274
274
|
* CC0 public-domain dedication, in any comment style. Used by `export` to
|
|
275
275
|
* treat such files as vendored: offering to prepend the project's own
|
|
276
|
-
* license header onto a byte-identity-pinned upstream bundle
|
|
277
|
-
* test file Mozilla dedicated to the public domain
|
|
276
|
+
* license header onto a byte-identity-pinned upstream bundle, or onto a
|
|
277
|
+
* test file Mozilla dedicated to the public domain, would mislicense code
|
|
278
278
|
* the project does not own.
|
|
279
279
|
*
|
|
280
280
|
* @param content - File content to check
|
|
281
|
-
* @param maxLines - Number of leading lines to inspect (default 30
|
|
282
|
-
* MIT/BSD license texts run longer than the 10-line project-header
|
|
281
|
+
* @param maxLines - Number of leading lines to inspect (default 30, because
|
|
282
|
+
* full MIT/BSD license texts run longer than the 10-line project-header
|
|
283
|
+
* scan)
|
|
283
284
|
*/
|
|
284
285
|
export function hasThirdPartyPermissiveBanner(content, maxLines = 30) {
|
|
285
286
|
const head = content.split('\n').slice(0, maxLines).join('\n');
|
|
@@ -14,7 +14,7 @@ export interface BuildArtifactCheck {
|
|
|
14
14
|
* Objdir name the active mozconfig declares via `MOZ_OBJDIR`, when the
|
|
15
15
|
* candidates were ambiguous and the declaration did not resolve to exactly
|
|
16
16
|
* one of them. Carried so the refusal can say the declaration was seen and
|
|
17
|
-
* did not help
|
|
17
|
+
* did not help. That is itself the diagnosis.
|
|
18
18
|
*/
|
|
19
19
|
declaredObjDir?: string;
|
|
20
20
|
/** Build metadata points at a different source or objdir */
|
|
@@ -28,8 +28,8 @@ export interface BuildArtifactCheck {
|
|
|
28
28
|
/**
|
|
29
29
|
* Checks if build artifacts exist in the engine directory.
|
|
30
30
|
* Looks for obj-* directories with a dist subdirectory. Detection is
|
|
31
|
-
*
|
|
32
|
-
* objdir in place is the user's own arrangement
|
|
31
|
+
* symlink-agnostic on purpose: building/running against a symlinked
|
|
32
|
+
* objdir in place is the user's own arrangement. The clone path, where a
|
|
33
33
|
* symlink would route writes into the original build, refuses separately
|
|
34
34
|
* (`assertCloneSafeObjdir` in tree-store.ts).
|
|
35
35
|
* @param engineDir - Path to the engine directory
|
|
@@ -43,15 +43,15 @@ export declare function hasBuildArtifacts(engineDir: string): Promise<BuildArtif
|
|
|
43
43
|
* message instead of the generic build-artifacts-missing line.
|
|
44
44
|
*/
|
|
45
45
|
export interface RunnableBundleCheck {
|
|
46
|
-
/** True when an objdir is present
|
|
46
|
+
/** True when an objdir is present and the expected binary was found under it. */
|
|
47
47
|
runnable: boolean;
|
|
48
|
-
/** Repo-relative (engine-rooted) path we probed
|
|
48
|
+
/** Repo-relative (engine-rooted) path we probed. Populated even on failure for error copy. */
|
|
49
49
|
expectedPath?: string;
|
|
50
50
|
}
|
|
51
51
|
/**
|
|
52
52
|
* Checks whether the built browser's launchable binary exists under
|
|
53
53
|
* `<engineDir>/<objDir>/dist/...`. `hasBuildArtifacts` only confirms that
|
|
54
|
-
* an obj tree with a `dist/` subdir exists
|
|
54
|
+
* an obj tree with a `dist/` subdir exists. A partial or in-progress build
|
|
55
55
|
* can satisfy that check without ever writing the executable, which is the
|
|
56
56
|
* failure mode that makes `fireforge run` throw `mach run` after having
|
|
57
57
|
* reported the build as usable. Separating the probes lets `run` fail fast
|
|
@@ -61,19 +61,19 @@ export interface RunnableBundleCheck {
|
|
|
61
61
|
*
|
|
62
62
|
* Platform layout:
|
|
63
63
|
* - macOS: `<objDir>/dist/*.app/Contents/MacOS/<binaryName>` (the `.app`
|
|
64
|
-
* display casing can differ from `binaryName
|
|
64
|
+
* display casing can differ from `binaryName`, e.g. `MyBrowser.app` for
|
|
65
65
|
* binary `mybrowser`, so we enumerate the `*.app` bundles rather than
|
|
66
66
|
* compute the name.
|
|
67
67
|
* - Linux: `<objDir>/dist/bin/<binaryName>`.
|
|
68
68
|
* - Windows: `<objDir>/dist/bin/<binaryName>.exe`.
|
|
69
69
|
*
|
|
70
70
|
* Returns `runnable: false` with no `expectedPath` when the `objDir`
|
|
71
|
-
* itself cannot be scanned
|
|
71
|
+
* itself cannot be scanned. Same degraded contract as `hasBuildArtifacts`.
|
|
72
72
|
*
|
|
73
73
|
* @param engineDir Path to the engine directory
|
|
74
74
|
* @param binaryName Lowercase binary name from `fireforge.json`
|
|
75
75
|
* @param objDir The single matching `obj-*` directory name (caller
|
|
76
|
-
* resolves it
|
|
76
|
+
* resolves it, typically from `hasBuildArtifacts().objDir`)
|
|
77
77
|
* @returns Structured check result
|
|
78
78
|
*/
|
|
79
79
|
export declare function hasRunnableBundle(engineDir: string, binaryName: string, objDir: string): Promise<RunnableBundleCheck>;
|
|
@@ -81,7 +81,7 @@ export declare function hasRunnableBundle(engineDir: string, binaryName: string,
|
|
|
81
81
|
export declare function buildArtifactMismatchMessage(engineDir: string, buildCheck: BuildArtifactCheck, commandName: string): string | undefined;
|
|
82
82
|
/**
|
|
83
83
|
* Outcome of an in-place mozinfo.json rewrite attempt. A successful rewrite
|
|
84
|
-
* returns the paths written
|
|
84
|
+
* returns the paths written. A refused rewrite returns a human-readable
|
|
85
85
|
* reason so the build flow can surface it alongside the original mismatch
|
|
86
86
|
* message before falling back to the clean-rebuild instruction.
|
|
87
87
|
*/
|
|
@@ -101,26 +101,26 @@ export interface MozinfoRewriteResult {
|
|
|
101
101
|
* Safe-relocation rewriter for mozinfo.json under the active obj-* tree.
|
|
102
102
|
*
|
|
103
103
|
* Firefox build artefacts bake the topsrcdir into many generated files
|
|
104
|
-
* (Makefiles, config.status, backend.mk, .deps dependency files
|
|
104
|
+
* (Makefiles, config.status, backend.mk, .deps dependency files, anything
|
|
105
105
|
* produced by `mach configure`). A fresh `mach configure` rebuilds those
|
|
106
106
|
* from the top, so the rewriter only needs to patch the one file `mach`
|
|
107
107
|
* reads to learn where its checkout actually lives. Once mozinfo.json
|
|
108
108
|
* agrees with the on-disk layout, `mach configure` regenerates the rest.
|
|
109
109
|
*
|
|
110
|
-
* Safety rules
|
|
110
|
+
* Safety rules. The rewrite is refused when any of them are violated:
|
|
111
111
|
* - `topsrcdir` and `topobjdir` must both be present and non-empty.
|
|
112
|
-
* - `topobjdir` must resolve to `<topsrcdir>/<objDir
|
|
112
|
+
* - `topobjdir` must resolve to `<topsrcdir>/<objDir>`. A non-in-tree
|
|
113
113
|
* objdir means the previous workspace was configured differently,
|
|
114
114
|
* so a blind prefix-rewrite could point mach at the wrong tree.
|
|
115
|
-
* - The computed new `topobjdir` must be `<engineDir>/<objDir
|
|
115
|
+
* - The computed new `topobjdir` must be `<engineDir>/<objDir>`. If it
|
|
116
116
|
* is not, the objDir name itself changed and we cannot prove safety.
|
|
117
117
|
*
|
|
118
118
|
* When any rule trips, the caller should fall back to the clean-rebuild
|
|
119
|
-
* instruction
|
|
119
|
+
* instruction, which is always a correct (if expensive) recovery path.
|
|
120
120
|
*
|
|
121
121
|
* @param engineDir Absolute path to the current engine checkout.
|
|
122
122
|
* @param objDir Name of the obj-* directory to rewrite against.
|
|
123
|
-
* @returns Result object
|
|
123
|
+
* @returns Result object. Callers inspect `rewritten` and surface `reason`.
|
|
124
124
|
*/
|
|
125
125
|
export declare function attemptMozinfoRewrite(engineDir: string, objDir: string): Promise<MozinfoRewriteResult>;
|
|
126
126
|
/** Per-command wording for {@link assertBuildArtifacts}. */
|
|
@@ -141,7 +141,7 @@ export interface BuildArtifactPreflightOptions {
|
|
|
141
141
|
/**
|
|
142
142
|
* Shared build-artifact preflight: rejects ambiguous multi-objdir checkouts,
|
|
143
143
|
* artifacts whose metadata points at another tree, and (when
|
|
144
|
-
* `requireExisting`) missing or incomplete builds
|
|
144
|
+
* `requireExisting`) missing or incomplete builds, each with the actionable
|
|
145
145
|
* message for that case.
|
|
146
146
|
*
|
|
147
147
|
* Takes an already-probed {@link BuildArtifactCheck} rather than probing
|
|
@@ -156,13 +156,13 @@ export declare function assertBuildArtifacts(engineDir: string, buildCheck: Buil
|
|
|
156
156
|
* the four configure-generated root files (`config.status`, `backend.mk`,
|
|
157
157
|
* `Makefile`, `config/autoconf.mk`) still names `forbiddenDir` (the
|
|
158
158
|
* primary engine a relocated clone must never consult). Exit code 0 alone
|
|
159
|
-
* proves neither
|
|
159
|
+
* proves neither: a stray MOZCONFIG/MOZ_OBJDIR can steer configure at a
|
|
160
160
|
* different objdir entirely. Nested Makefiles are products of the verified
|
|
161
|
-
* `config.status` and are not scanned
|
|
162
|
-
* configure cannot regenerate and are explicitly out of scope
|
|
161
|
+
* `config.status` and are not scanned. `.deps` files are build products a
|
|
162
|
+
* configure cannot regenerate and are explicitly out of scope, and any
|
|
163
163
|
* primary-path strings they retain are read-only staleness corrected by
|
|
164
164
|
* the first in-tree rebuild. Pure checker: returns a human-readable
|
|
165
|
-
* violation, or `undefined` when clean
|
|
165
|
+
* violation, or `undefined` when clean. Callers own the error type and
|
|
166
166
|
* remediation copy. Unreadable metadata is itself a violation (fail
|
|
167
167
|
* closed).
|
|
168
168
|
*/
|