nodejs/node · error · MBErr

Must specify either -c/--config or (-m/--builder-group and -

Error message

Must specify either -c/--config or (-m/--builder-group and -b/--builder)

What it means

ConfigFromArgs() requires exactly one selection mode: if neither -c/--config is set nor both -m/--builder-group AND -b/--builder are set, it raises MBErr('Must specify either -c/--config or (-m/--builder-group and -b/--builder)'). Passing only -m without -b (or vice versa) also trips it.

Source

Thrown at deps/v8/tools/mb/mb.py:605

              'Duplicate targets in isolate map files: %s.' %
              ', '.join(duplicates))
        isolate_maps.update(isolate_map)
      except SyntaxError as e:
        raise MBErr('Failed to parse isolate map file "%s": %s' %
                    (isolate_map, e)) from e
    return isolate_maps

  def ConfigFromArgs(self):
    if self.args.config:
      if self.args.builder_group or self.args.builder:
        raise MBErr(
          'Can not specific both -c/--config and -m/--builder-group or '
          '-b/--builder')

      return self.args.config

    if not self.args.builder_group or not self.args.builder:
      raise MBErr('Must specify either -c/--config or '
                  '(-m/--builder-group and -b/--builder)')

    if not self.args.builder_group in self.builder_groups:
      raise MBErr('Builder groups name "%s" not found in "%s"' %
                  (self.args.builder_group, self.args.config_file))

    config = _v8_builder_fallback(
        self.args.builder, self.builder_groups[self.args.builder_group])

    if not config:
      raise MBErr(
        'Builder name "%s"  not found under builder_groups[%s] in "%s"' %
        (self.args.builder, self.args.builder_group, self.args.config_file))

    if isinstance(config, dict):
      if self.args.phase is None:
        raise MBErr('Must specify a build --phase for %s on %s' %
                    (self.args.builder, self.args.builder_group))

View on GitHub (pinned to 1b2de5e052)

Solutions

  1. Provide -c <config>, or provide BOTH -m <group> and -b <builder>.
  2. If unsure of valid group/builder names, use -c with a config from `mb.py list`.

Example fix

// before
  mb.py gen -m tryserver.v8 out/Default          // missing -b
// after
  mb.py gen -m tryserver.v8 -b "V8 Linux" out/Default
Defensive patterns

Strategy: validation

Validate before calling

has_named = bool(args.config)
has_pair = bool(args.builder_group and args.builder)
if not has_named and not has_pair:
    sys.exit('Must specify -c/--config or both -m/--builder-group and -b/--builder')

Type guard

null

Try / catch

null

Prevention

When it happens

Trigger: Running `mb.py gen out/Default` with no selection flags, or `mb.py gen -m tryserver.v8 out/Default` (missing -b), or `mb.py gen -b "V8 Linux" out/Default` (missing -m). The `not ... or not ...` guard fires.

Common situations: Forgetting the selection flags entirely; passing only the builder group or only the builder; a wrapper script that drops one of the pair.

Related errors


AI-assisted analysis of nodejs/node@1b2de5e052 (2026-08-13). Data as JSON: /api/errors/5ff3de55d608de64. Report an issue: GitHub.