Skip to content

prek is dramatically slower than pre-commit for terraform hooks #1305

@strongoose

Description

@strongoose

Summary

I've been trying to figure out why this seems to happen for terraform hooks specifically, but whatever it is they take a lot longer for me with prek.

As an example, in the terraform-aws-eks module:

$ time pre-commit run terraform_fmt --all-files
[INFO] Initializing environment for /Users/Daniel.Strong/tmp/noophook.
Terraform fmt............................................................Passed
pre-commit run terraform_fmt --all-files  3.28s user 3.19s system 462% cpu 1.399 total

$ time prek run terraform_fmt --all-files
Terraform fmt............................................................Passed
prek run terraform_fmt --all-files  2.96s user 1.70s system 82% cpu 5.622 total

Platform

macOS 15 arm64

Version

prek 0.2.24 (Homebrew 2025-12-23)

.pre-commit-config.yaml

From the EKS module linked above

repos:

  • repo: https://github.com/antonbabenko/pre-commit-terraform
    rev: v1.104.0
    hooks:
    • id: terraform_fmt
    • id: terraform_docs
      args:
      • '--args=--lockfile=false'
    • id: terraform_tflint
      args:
      • '--args=--only=terraform_deprecated_interpolation'
      • '--args=--only=terraform_deprecated_index'
      • '--args=--only=terraform_unused_declarations'
      • '--args=--only=terraform_comment_syntax'
      • '--args=--only=terraform_documented_outputs'
      • '--args=--only=terraform_documented_variables'
      • '--args=--only=terraform_typed_variables'
      • '--args=--only=terraform_module_pinned_source'
      • '--args=--only=terraform_naming_convention'
      • '--args=--only=terraform_required_version'
      • '--args=--only=terraform_required_providers'
      • '--args=--only=terraform_standard_module_structure'
      • '--args=--only=terraform_workspace_remote'
    • id: terraform_validate
  • repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v6.0.0
    hooks:
    • id: check-merge-conflict
    • id: end-of-file-fixer
    • id: trailing-whitespace
    • id: mixed-line-ending
      args: [--fix=lf]
  • repo: /Users/Daniel.Strong/tmp/noophook
    rev: "30e31e2"
    hooks:
    • id: noop
    • id: tfver
    • id: chatty
    • id: hello-go

Log file

2026-01-02T18:03:46.121736Z DEBUG prek: 0.2.24 (Homebrew 2025-12-23)
2026-01-02T18:03:46.121801Z DEBUG Args: ["prek", "--log-file", "prek.log", "run", "terraform_fmt", "--all-files"]
2026-01-02T18:03:46.135515Z TRACE get_root: close time.busy=13.2ms time.idle=10.3µs
2026-01-02T18:03:46.135780Z DEBUG Git root: HOME/code/terraform-aws-eks
2026-01-02T18:03:46.135812Z DEBUG Found workspace root at HOME/code/terraform-aws-eks
2026-01-02T18:03:46.136150Z TRACE Include selectors: terraform_fmt
2026-01-02T18:03:46.136155Z TRACE Skip selectors: ``
2026-01-02T18:03:46.136619Z DEBUG discover{root="HOME/code/terraform-aws-eks" config=None refresh=false}: Loaded workspace from cache
2026-01-02T18:03:46.136782Z DEBUG discover{root="HOME/code/terraform-aws-eks" config=None refresh=false}: Loading project configuration path=.pre-commit-config.yaml
2026-01-02T18:03:46.137133Z TRACE discover{root="HOME/code/terraform-aws-eks" config=None refresh=false}:read_config{path="HOME/code/terraform-aws-eks/.pre-commit-config.yaml"}: close time.busy=328µs time.idle=416ns
2026-01-02T18:03:46.137166Z TRACE discover{root="HOME/code/terraform-aws-eks" config=None refresh=false}: close time.busy=970µs time.idle=459ns
2026-01-02T18:03:46.137562Z TRACE Checking lock resource="store" path=HOME/.cache/prek/.lock
2026-01-02T18:03:46.137573Z DEBUG Acquired lock resource="store"
2026-01-02T18:03:46.142524Z DEBUG Hooks going to run: ["terraform_fmt"]
2026-01-02T18:03:46.142950Z WARN Skipping invalid installed hook err=failed to read from file HOME/.cache/prek/hooks/golang-ahwvQrMK0IyTSUwDRp0N/.prek-hook.json: No such file or directory (os error 2) path=HOME/.cache/prek/hooks/golang-ahwvQrMK0IyTSUwDRp0N
2026-01-02T18:03:46.143629Z DEBUG Hook `terraform_fmt` does not need installation
2026-01-02T18:03:46.143656Z TRACE Released lock path=HOME/.cache/prek/.lock
2026-01-02T18:03:46.143841Z TRACE collect_files:ls_files{cwd="HOME/code/terraform-aws-eks" path="HOME/code/terraform-aws-eks"}: Executing `cd HOME/code/terraform-aws-eks && /opt/homebrew/bin/git ls-files -z -- HOME/code/terraform-aws-eks`
2026-01-02T18:03:46.151776Z TRACE collect_files:ls_files{cwd="HOME/code/terraform-aws-eks" path="HOME/code/terraform-aws-eks"}: close time.busy=359µs time.idle=7.58ms
2026-01-02T18:03:46.151802Z DEBUG collect_files: All files in the workspace: 174
2026-01-02T18:03:46.151818Z TRACE collect_files: close time.busy=562µs time.idle=7.58ms
2026-01-02T18:03:46.151866Z TRACE for_project{project=.}: close time.busy=7.21µs time.idle=249ns
2026-01-02T18:03:46.151878Z TRACE Files for project `.` after filtered: 174
2026-01-02T18:03:46.151884Z TRACE get_diff{path="HOME/code/terraform-aws-eks"}: Executing `/opt/homebrew/bin/git diff -- HOME/code/terraform-aws-eks`
2026-01-02T18:03:46.160321Z TRACE get_diff{path="HOME/code/terraform-aws-eks"}: close time.busy=177µs time.idle=8.26ms
2026-01-02T18:03:46.160864Z TRACE for_hook{hook="terraform_fmt"}: close time.busy=504µs time.idle=333ns
2026-01-02T18:03:46.160880Z TRACE Files for hook `terraform_fmt` after filtered: 79
2026-01-02T18:03:46.161279Z TRACE run{hook_id=terraform_fmt language=script}: Resolved command: HOME/.cache/prek/repos/05b5b1fe3d282b9b/hooks/terraform_fmt.sh
2026-01-02T18:03:46.161493Z TRACE run{hook_id=terraform_fmt language=script}: Found shebang: ["bash"]
2026-01-02T18:03:46.161515Z TRACE run{hook_id=terraform_fmt language=script}: Running terraform_fmt total_files=79 concurrency=12
2026-01-02T18:03:46.164897Z TRACE run{hook_id=terraform_fmt language=script}: Executing `cd HOME/code/terraform-aws-eks && bash HOME/.cache/prek/repos/05b5b1fe3d282b9b/hooks/terraform_fmt.sh tests/user-data/versions.tf modules/self-managed-node-group/versions.tf [...]`
2026-01-02T18:03:46.166259Z TRACE run{hook_id=terraform_fmt language=script}: Executing `cd HOME/code/terraform-aws-eks && bash HOME/.cache/prek/repos/05b5b1fe3d282b9b/hooks/terraform_fmt.sh modules/karpenter/migrations.tf tests/eks-managed-node-group/main.tf [...]`
2026-01-02T18:03:46.167330Z TRACE run{hook_id=terraform_fmt language=script}: Executing `cd HOME/code/terraform-aws-eks && bash HOME/.cache/prek/repos/05b5b1fe3d282b9b/hooks/terraform_fmt.sh modules/karpenter/variables.tf tests/eks-hybrid-nodes/variables.tf [...]`
2026-01-02T18:03:46.168476Z TRACE run{hook_id=terraform_fmt language=script}: Executing `cd HOME/code/terraform-aws-eks && bash HOME/.cache/prek/repos/05b5b1fe3d282b9b/hooks/terraform_fmt.sh modules/fargate-profile/migrations.tf examples/eks-managed-node-group/outputs.tf [...]`
2026-01-02T18:03:46.169520Z TRACE run{hook_id=terraform_fmt language=script}: Executing `cd HOME/code/terraform-aws-eks && bash HOME/.cache/prek/repos/05b5b1fe3d282b9b/hooks/terraform_fmt.sh examples/eks-hybrid-nodes/outputs.tf variables.tf [...]`
2026-01-02T18:03:46.170633Z TRACE run{hook_id=terraform_fmt language=script}: Executing `cd HOME/code/terraform-aws-eks && bash HOME/.cache/prek/repos/05b5b1fe3d282b9b/hooks/terraform_fmt.sh modules/self-managed-node-group/variables.tf [...]`
2026-01-02T18:03:46.171904Z TRACE run{hook_id=terraform_fmt language=script}: Executing `cd HOME/code/terraform-aws-eks && bash HOME/.cache/prek/repos/05b5b1fe3d282b9b/hooks/terraform_fmt.sh examples/eks-hybrid-nodes/remote.tf modules/_user_data/main.tf [...]`
2026-01-02T18:03:46.173341Z TRACE run{hook_id=terraform_fmt language=script}: Executing `cd HOME/code/terraform-aws-eks && bash HOME/.cache/prek/repos/05b5b1fe3d282b9b/hooks/terraform_fmt.sh examples/eks-hybrid-nodes/versions.tf examples/eks-managed-node-group/eks-al2023.tf [...]`
2026-01-02T18:03:46.175815Z TRACE run{hook_id=terraform_fmt language=script}: Executing `cd HOME/code/terraform-aws-eks && bash HOME/.cache/prek/repos/05b5b1fe3d282b9b/hooks/terraform_fmt.sh examples/self-managed-node-group/versions.tf [...]`
2026-01-02T18:03:46.178797Z TRACE run{hook_id=terraform_fmt language=script}: Executing `cd HOME/code/terraform-aws-eks && bash HOME/.cache/prek/repos/05b5b1fe3d282b9b/hooks/terraform_fmt.sh examples/self-managed-node-group/eks-bottlerocket.tf [...]`
2026-01-02T18:03:46.181453Z TRACE run{hook_id=terraform_fmt language=script}: Executing `cd HOME/code/terraform-aws-eks && bash HOME/.cache/prek/repos/05b5b1fe3d282b9b/hooks/terraform_fmt.sh tests/self-managed-node-group/main.tf tests/eks-fargate-profile/versions.tf [...]`
2026-01-02T18:03:46.183602Z TRACE run{hook_id=terraform_fmt language=script}: Executing `cd HOME/code/terraform-aws-eks && bash HOME/.cache/prek/repos/05b5b1fe3d282b9b/hooks/terraform_fmt.sh examples/self-managed-node-group/variables.tf [...]`
2026-01-02T18:03:52.107232Z TRACE run{hook_id=terraform_fmt language=script}: close time.busy=26.0ms time.idle=5.92s
2026-01-02T18:03:52.107295Z TRACE get_diff{path="HOME/code/terraform-aws-eks"}: Executing `/opt/homebrew/bin/git diff -- HOME/code/terraform-aws-eks`
2026-01-02T18:03:52.113313Z TRACE get_diff{path="HOME/code/terraform-aws-eks"}: close time.busy=268µs time.idle=5.75ms

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions