Skip to content

feat: parallelize hadolint execution across Containerfiles #645

Description

@ianpittwood

Summary

HadolintSuite.run() (posit-bakery/posit_bakery/plugins/builtin/hadolint/suite.py) groups hadolint commands by unique Containerfile, then runs subprocess.run(...) serially in a for loop — one lint invocation per unique Containerfile. This is a straightforward candidate for the tool-agnostic posit_bakery/parallel/ module (ParallelShellExecutor/ShellTask) introduced in #588 for parallel dgoss execution.

Scope

  • Port HadolintSuite.run() to build ShellTasks from the grouped HadolintCommands and dispatch through ParallelShellExecutor, following the pattern in plugins/builtin/dgoss/suite.py.
  • Add a --jobs/-j flag to the hadolint lint command, matching the dgoss run --jobs convention (BAKERY_MAX_CONCURRENCY env / SETTINGS.max_concurrency, default 4).
  • Preserve existing per-Containerfile report/result-file writing and error aggregation (BakeryHadolintError, BakeryToolRuntimeErrorGroup) exactly as-is; only the dispatch mechanism changes.
  • Update/extend the live progress table behavior to match dgoss (auto-disable on non-TTY/CI/--quiet/single-task runs).

Out of scope

  • Changing hadolint's actual lint rules or output format.

Part of the investigation started in #584. See #588 for the reference implementation pattern (dgoss).

Metadata

Metadata

Assignees

No one assigned

    Labels

    cvp:0Necessary projects we are undertaking that don’t directly deliver value to the customerdockerRelated to container images we producetdp:1The individual working on it notices.

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions