Skip to content

Add standard performance regression checks to Process-PSModule workflows #404

Description

Teams using Process-PSModule need a standard way to detect and surface performance regressions during pull requests so slower behavior is visible before merge. Recent benchmark work in PSModule/Sodium#69 showed measurable startup and operation deltas, but each repository currently has to build custom wiring to compare runs and enforce thresholds.

Request

Desired capability

Process-PSModule should provide a built-in performance testing capability that can run benchmark scripts, compare results against a baseline, and clearly flag regressions to the user in GitHub Actions.

Acceptance criteria

  • A repository using Process-PSModule can enable performance checks through configuration without custom workflow authoring.
  • Pull request runs compare candidate results to a baseline and compute per-metric deltas.
  • Slowdowns above configured thresholds are flagged in the workflow output and in a user-visible summary.
  • Configured blocking thresholds fail the check when exceeded so regressions are gated.
  • Non-blocking degradations are still surfaced as warnings with metric-level detail.
  • Baseline, candidate, and comparison artifacts are persisted so results are auditable.
  • Documentation explains the configuration contract, expected benchmark output schema, and regression policy behavior.

Technical decisions

Integration point: Add a first-class performance stage in the shared Process-PSModule pipeline so repositories get consistent behavior from the reusable workflow.

Benchmark contract: Define a standard JSON result schema (scenario, metric, unit, value, sample-count metadata) that repository benchmark scripts emit.

Baseline strategy: Resolve baseline data from a successful run on the default branch, with explicit handling when no baseline exists yet.

Regression policy: Support configurable warning and failure thresholds (percentage-based by default), with repository-level overrides in PSModule.yml.

User signaling: Publish a markdown summary table with before/after/delta values and emit explicit warnings/errors for degraded metrics.

Noise handling: Require repeated samples and a deterministic aggregation rule (for example median) to reduce flakiness from transient runner variance.

Backward compatibility: Keep the capability opt-in initially to avoid breaking existing repositories; allow later migration to default-on once stability is proven.


Implementation plan

Specification

  • Define performance configuration keys in PSModule.yml (enable flag, baseline source, warning/fail thresholds, artifact retention).
  • Define and document the benchmark result schema consumed by the comparison stage.

Workflow implementation

  • Add a performance stage/job to the reusable Process-PSModule workflow.
  • Add baseline fetch, candidate execution, and comparison steps.
  • Add deterministic handling for first-run/no-baseline scenarios.

Reporting and gating

  • Generate a markdown summary with per-metric before/after/delta.
  • Emit warnings for non-blocking degradations.
  • Fail the job when blocking thresholds are exceeded.

Validation and docs

  • Add tests for comparison logic and threshold evaluation.
  • Add fixture-based tests for baseline-missing and mixed-improvement/regression scenarios.
  • Update Process-PSModule documentation with setup, schema, and troubleshooting guidance.

Metadata

Metadata

Assignees

No one assigned

    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