jbampton commented on PR #2730: URL: https://github.com/apache/shiro/pull/2730#issuecomment-4649039954
> @lprimak Not sure I understand how this change is meant to work, based on the description in the PR. So I will have to study up before I can give any meaningful opinion on this PR (so I hope this isn't hanging on me...). Hey @steinarb we are running prek-action which runs our Git hook framework: https://github.com/apache/infrastructure-actions/blob/6c512df8de8203dfc22579b9f17769983ca6de76/approved_patterns.yml#L213 https://github.com/apache/shiro/blob/main/.github/workflows/pre-commit.yml https://github.com/apache/shiro/blob/main/.github/workflows/pre-commit-manual.yml We have both standard and manual hooks. https://prek.j178.dev Originally we were running pre-commit but have moved to prek. See below from Google but check the official site for more ways to install prek and use it locally. So prek is meant to run on developer machines before pushing up to GitHub. You should also checkout the homepage of the original pre-commit site for info on why git hook scripts are useful: https://pre-commit.com Perhaps I should explain more in another PR with some of this information for the contributing guide ? --- ## Overview: Transitioning to `prek` `prek` is a fast Git hook manager written in Rust. It serves as a modern, drop-in replacement for the traditional Python-based `pre-commit` framework. * **Speed:** It runs hooks and fetches repositories in parallel. * **Zero Dependencies:** Because it compiles to a single static binary, developers don't need a Python runtime or virtual environment setup just to run basic linting, security, or style hooks. * **Compatibility:** It is fully backward-compatible with our existing `.pre-commit-config.yaml` files, but natively supports modern `prek.toml` configuration formats. --- ## 1. Local Developer Setup To set up and run the hooks locally on your development machine, follow these quick steps: ### Installation `prek` can be installed quickly via system package managers or toolchains: ```bash # Via uv uv tool install prek # Via Homebrew (macOS/Linux) brew install prek ``` ### Git Integration Once installed, register `prek` with the repository's internal Git hooks so that it executes automatically on every `git commit`: ```bash prek install ``` *Note: If the project uses specific stages (like moving heavy static analysis or security audits to the push phase), you can also opt-in to pre-push hooks using `prek install --hook-type pre-push`.* --- ## 2. Core CLI Commands Developers can trigger checks manually without committing code using the following essential commands: * **Run on Staged Files (Default):** ```bash prek run ``` This only runs the configured hooks against the files currently staged in Git (`git add`). * **Run on the Entire Repository:** ```bash prek run -a ``` The `-a` (or `--all-files`) flag tells `prek` to evaluate *every single file* in the codebase, regardless of its Git staging status. This is highly useful when adding a new rule, auditing the repo for security, or doing a large style cleanup. * **Shortcut Syntax:** ```bash prek -a ``` `prek` allows omitting the `run` keyword entirely as a quality-of-life shortcut. --- * **Run Manual / Specific Stage Hooks:** ```bash prek run --hook-stage manual -a ``` By default, `prek` only runs hooks assigned to the `commit` stage. To trigger our custom security scanners, deep structural audits, or heavy style rules that are configured as `stage: [manual]`, you explicitly pass the `--hook-stage manual` flag. Combining it with `-a` forces the manual sweep across the entire repository. * **Run a Single Specific Hook:** ```bash prek run <hook-id> -a ``` If you only want to isolate and run one single hook (for example, a specific static analysis tool or dependency auditor without running the whole suite), you can call it directly by its ID defined in our configuration file. --- ## 3. Continuous Integration: The `prek-action` Workflow To guarantee that code style, security safeguards, and manual/audit hooks are respected before PRs are merged, we are utilizing the official GitHub Actions workflow integration via `j178/prek-action`. This ensures that the exact same suite of checks running on a developer's laptop is enforced upstream in CI. * **Automated Setup:** The `prek-action` automatically downloads and provisions the optimized Rust binary in the runner environment. * **Implicit Complete Audit:** By default, the action executes `prek run --all-files` under the hood. This ensures that pull requests are evaluated completely, catching any hidden configuration or styling deviations before they impact the main branch. * **Caching & Speed:** It uses optimized global toolchain caching, ensuring that GitHub Actions jobs complete in seconds rather than waiting on heavy environment bootstraps. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
