-
Notifications
You must be signed in to change notification settings - Fork 3.4k
HBASE-24081 Provide documentation for running Yetus with HBase #1392
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,166 @@ | ||
| # How To Use Apache Yetus with Apache HBase | ||
|
|
||
| This document describes how to get up and running with [Apache Yetus][yetus], | ||
| as pertains to the development of Apache HBase. Specifically this covers the use | ||
| of `test-patch`, of which HBase developers make use for tasks related to code | ||
| quality. These are normally run via automation in the foundation's | ||
| [Build][builds] infrastructure. They can also be run locally, which is the | ||
| subject of this document. | ||
|
|
||
| The Yetus project provides its own documentation of `test-patch` in | ||
| [Basic PreCommit][yetus-basic-precommit]. By comparison, this document is | ||
| intended to be highly abbreviated, hands-on, and focused on the HBase use-case. | ||
| See that document for more complete explanations and further details. | ||
|
|
||
| ## Installation | ||
|
|
||
| In order to run Yetus, you'll need to first install Yetus and its dependencies. | ||
| This is somewhat simplified when used in Docker mode. Yetus can be retrieved | ||
| from a [distribution artifact][yetus-downloads]. Homebrew/Linuxbrew users can | ||
ndimiduk marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| install from the tap, the process for which is also described on the downloads | ||
| page. | ||
|
|
||
| # Usage Basics | ||
|
|
||
| Apache Yetus is comprised of a number of different components. The focus of our | ||
| interest is `test-patch`. `test-patch` is a modular system. Many modules depend | ||
| on some external tool to provide the underlying functionality. For example, the | ||
| `compile` check delegates to a number of provider modules, for example `maven` | ||
| or `gradle` for JVM projects. In order to use these modules, those tools must | ||
| be installed. Yetus calls these modules "plugins". | ||
|
|
||
| To see a list of all plugins available to `test-patch`, use | ||
|
|
||
| ```shell script | ||
| $ test-patch --list-plugins | ||
| ``` | ||
|
|
||
| To see a list of all the options available in both the core modules as well as | ||
| all the plugins, use | ||
|
|
||
| ```shell script | ||
| $ test-patch --plugins=all --help | ||
| ``` | ||
|
|
||
| An invocation of `test-patch` requires use of one or more plugins. Often times, | ||
| when the full suite of checks are run, specify the meta-plugin "all". Otherwise, | ||
| a limited selection of plugins can be selected using the `--plugins` argument. | ||
|
|
||
| ## The Workspace, The Patch | ||
|
|
||
| `test-patch` operates within a "workspace," a checkout from a source control | ||
| repository. It has a number of options pertaining to this workspace, such as | ||
| the path to the workspace (`--basedir`) and whether it will permit the presence | ||
| of uncommitted changes therein (`--dirty-workspace`). | ||
|
|
||
| Onto this workspace, it can optionally apply a change, a.k.a., the "patch" in | ||
| "test patch." The patch can come from a number of sources, including a patch | ||
| file, a JIRA ID, a Pull Request, &c. Or, explicitly inform Yetus that no patch | ||
| file is provided, and the repository should be checked as is, by passing | ||
| `--empty-patch`. | ||
|
|
||
| ## Personalities | ||
|
|
||
| `test-patch` is extremely extensible. Even the functionality of its core | ||
| modules can be extended or overridden. It allows for this type of | ||
| "personalization" by way of "personality" overrides. Yetus ships a number of | ||
| these personalities; a pre-packaged personality can be selected via the | ||
| `--project` parameter. There is a provided HBase personality in Yetus, however | ||
| the HBase project maintains its own within the HBase source repository. Specify | ||
| the path to the personality file using `--personality`. The HBase repository | ||
| places this file under `dev-support/hbase-personality.sh`. | ||
|
|
||
| ## Docker mode | ||
|
|
||
| Running Yetus in Docker mode simplifies the concerns of dependencies because | ||
| the provided `Dockerfile` handles their installation automatically. However, | ||
| for MacOS users, there are a number of known issues with running Docker on OSX, | ||
| so it may be preferable to instead run outside of the container. | ||
|
|
||
| To run in Docker, of course you must install `docker` or some container runtime | ||
| equivalent. [Docker Desktop][docker-desktop] is an option for Mac and Windows | ||
| users. | ||
|
|
||
| When running `test-patch` with HBase in docker mode, two parameters must be | ||
| provided. `--docker` activates the `docker` module, enabling the feature. | ||
| Additionally, `--dockerfile` points Yetus at HBase's provided `Dockerfile`, | ||
| instead of using the one provided out-of-the-box by Yetus. The HBase repository | ||
| places this file under `dev-support/docker/Dockerfile`. | ||
|
|
||
| ## JVM and JAVA_HOME | ||
|
|
||
| HBase supports compilation and test execution on a number of different JVM | ||
| versions. To facilitate this, the `Dockerfile` installs multiple JVMs. An | ||
| invocation of `test-patch` requires additional parameters in order to specify | ||
| the target JVM. How you do this is slightly different based on whether you run | ||
| with or without Docker mode. | ||
|
|
||
| ### Setting `JAVA_HOME` Outside of Docker Mode | ||
|
|
||
| Simply specify `JAVA_HOME` in the environment in which `test-patch` is launched. | ||
|
|
||
| ### Setting `JAVA_HOME` Inside of Docker Mode | ||
|
|
||
| The docker image JDKs are available under `/usr/lib/jvm`. Symlinks are provided | ||
| for each supported major version, i.e., `java-11`. Use the `test-patch` argument | ||
| `--java-home`. | ||
|
|
||
| # Example: Run SpotBugs | ||
|
|
||
| One of the checks supported by Yetus is the static analysis tool | ||
| [SpotBugs][spotbugs]. Let's put together all the above and run SpotBugs with | ||
| `test-patch`. | ||
|
|
||
| The SpotBugs check depends on a SpotBugs installation. This is provided by the | ||
| docker file. For running without docker, you'll need to download and unpack the | ||
| SpotBugs binary distribution. | ||
|
|
||
| Running the SpotBugs check also depends on [Apache Maven][maven], the build | ||
| system used by HBase. In order for the check to function, both the `maven` | ||
| and `spotbugs` plugins must be specified. If this dependency is omitted, Yetus | ||
| will error with a message similar to | ||
|
|
||
| ``` | ||
| ERROR: you can't specify maven as the buildtool if you don't enable the plugin. | ||
| ``` | ||
|
|
||
| To run just the SpotBugs check, we must explicitly specify `spotbugs` and its | ||
| dependency using `--plugins=maven,spotbugs`. | ||
|
|
||
| ## Without Docker | ||
|
|
||
| Putting it all together, without using docker: | ||
|
|
||
| ```shell script | ||
| $ cd /path/to/hbase | ||
| $ JAVA_HOME=/path/to/jdk-8 test-patch.sh \ | ||
saintstack marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| --plugins=maven,spotbugs \ | ||
| --spotbugs-home=/path/to/spotbugs/ | ||
| --dirty-workspace \ | ||
| --empty-patch \ | ||
| --personality=./dev-support/hbase-personality.sh | ||
| ``` | ||
|
|
||
| ## With Docker | ||
|
|
||
| Putting it all together, using docker: | ||
|
|
||
| ```shell script | ||
| $ cd /path/to/hbase | ||
| $ test-patch.sh \ | ||
| --plugins=maven,spotbugs \ | ||
| --dirty-workspace \ | ||
| --empty-patch \ | ||
| --personality=./dev-support/hbase-personality.sh \ | ||
| --docker \ | ||
| --dockerfile=./dev-support/docker/Dockerfile \ | ||
| --java-home=/usr/lib/jvm/java-8 | ||
| ``` | ||
|
|
||
| [builds]: https://builds.apache.org | ||
| [docker-desktop]: https://www.docker.com/products/docker-desktop | ||
| [maven]: https://maven.apache.org | ||
| [spotbugs]: https://spotbugs.github.io | ||
| [yetus]: https://yetus.apache.org | ||
| [yetus-basic-precommit]: https://yetus.apache.org/documentation/0.11.1/precommit-basic/ | ||
| [yetus-downloads]: https://yetus.apache.org/downloads/ | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.