|
|
|
@@ -74,13 +74,28 @@ prek-install-git-pre-commit-hook: _ensure_mise_tools_installed |
|
|
|
#!/usr/bin/env sh |
|
|
|
set -eu |
|
|
|
{{ just_executable() }} --justfile "{{ justfile() }}" mise exec -- prek install |
|
|
|
hook="{{ justfile_directory() }}/.git/hooks/pre-commit" |
|
|
|
# The installed git hook runs later under Git, outside this just/mise environment. |
|
|
|
# Injecting PREK_HOME keeps prek's cache under var/prek instead of a global home dir, |
|
|
|
# which is more predictable and works better in sandboxed tools like Codex/OpenCode. |
|
|
|
if [ -f "$hook" ] && ! grep -q '^export PREK_HOME=' "$hook"; then |
|
|
|
sed -i '2iexport PREK_HOME="{{ prek_home }}"' "$hook" |
|
|
|
fi |
|
|
|
# The installed git hooks run later under Git, outside this just/mise environment, |
|
|
|
# so they need to be told how to find their tooling: |
|
|
|
# |
|
|
|
# - PREK_HOME keeps prek's cache under var/prek instead of a global home dir. |
|
|
|
# - MISE_DATA_DIR / MISE_TRUSTED_CONFIG_PATHS make mise resolve against this project's |
|
|
|
# own data directory. Without them mise falls back to the global one and silently |
|
|
|
# installs a second copy of the tool there. |
|
|
|
# - prek bakes the full path of the currently installed version into the hook |
|
|
|
# (var/mise/installs/prek/<version>/...), which stops working as soon as the pinned |
|
|
|
# version changes or old versions are pruned. Pointing at mise's shim instead makes |
|
|
|
# the hook resolve whatever mise.toml pins, at the time it runs. |
|
|
|
# |
|
|
|
# Which hook files prek installs depends on `default_install_hook_types` in |
|
|
|
# .pre-commit-config.yaml, so patch every hook file that prek generated. |
|
|
|
for hook in "{{ justfile_directory() }}"/.git/hooks/*; do |
|
|
|
[ -f "$hook" ] || continue |
|
|
|
grep -q 'generated by prek' "$hook" || continue |
|
|
|
grep -q '^export PREK_HOME=' "$hook" || sed -i '2iexport PREK_HOME="{{ prek_home }}"' "$hook" |
|
|
|
grep -q '^export MISE_DATA_DIR=' "$hook" || sed -i '3iexport MISE_DATA_DIR="{{ mise_data_dir }}"' "$hook" |
|
|
|
grep -q '^export MISE_TRUSTED_CONFIG_PATHS=' "$hook" || sed -i '4iexport MISE_TRUSTED_CONFIG_PATHS="{{ mise_trusted_config_paths }}"' "$hook" |
|
|
|
sed -i 's#^PREK=".*"$#PREK="{{ mise_data_dir }}/shims/prek"#' "$hook" |
|
|
|
done |
|
|
|
|
|
|
|
# Runs the playbook with --tags=install-all,ensure-matrix-users-created,start and optional arguments |
|
|
|
install-all *extra_args: (run-tags "install-all,ensure-matrix-users-created,start" extra_args) |
|
|
|
|