[ADDENDUM] HBASE-29689 Use `mvn site` for building the website (#7522)
Signed-off-by: Duo Zhang <zhangduo@apache.org>
Reviewed-by: Liu Xiao <liuxiao2103@qq.com>
Signed-off-by: Dávid Paksy <paksyd@apache.org>
diff --git a/hbase-website/README.md b/hbase-website/README.md
index b17b419..228f660 100644
--- a/hbase-website/README.md
+++ b/hbase-website/README.md
@@ -145,14 +145,14 @@
│ │ │ ├── hero.tsx # Hero section (not exported)
│ │ │ ├── features.tsx # Features section (not exported)
│ │ │ └── ...
-│ │ ├── team/ # Team page
+│ │ ├── downloads/ # Downloads page
│ │ │ ├── index.tsx # Main page component (exported)
│ │ │ └── content.md # Markdown content
│ │ └── ...
│ │
│ ├── routes/ # Route definitions and metadata
│ │ ├── home.tsx # Home route configuration
-│ │ ├── team.tsx # Team route configuration
+│ │ ├── download.tsx # Downloads route configuration
│ │ └── ...
│ │
│ ├── lib/ # Utility functions and integrations
@@ -164,11 +164,6 @@
│ └── app.css # Global styles
│
├── build/ # Generated files (DO NOT EDIT)
-│ ├── client/ # Browser-side assets
-│ │ ├── index.html # HTML files for each page
-│ │ ├── assets/ # JavaScript, CSS bundles
-│ │ └── images/ # Optimized images
-│ └── server/ # Server-side code (if using SSR)
│
├── public/ # Static files (copied as-is to build/)
│ ├── favicon.ico # Website icon
@@ -388,13 +383,28 @@
### Maven Integration
-The website is integrated with the Apache HBase Maven build system using the `frontend-maven-plugin`. This allows the website to be built as part of the main HBase build or separately using Maven commands.
+The website is integrated with the Apache HBase Maven build system using the `frontend-maven-plugin`. The website is configured to build **only during site generation** (`mvn site`) and will not build during regular Maven lifecycle phases like `mvn clean install`.
-#### What Gets Executed
+#### When the Website Builds
-When you run the Maven build, it automatically:
+The website build is triggered **only** when you run:
-1. **Cleans previous build artifacts** (when using `mvn clean`)
+```bash
+mvn site
+```
+
+The website will **NOT** build during regular commands like:
+- `mvn clean install`
+- `mvn package`
+- `mvn compile`
+
+This keeps regular HBase builds fast while still allowing the website to be generated when needed.
+
+#### What Gets Executed During `mvn site`
+
+When you run `mvn site`, the website module automatically:
+
+1. **Cleans previous build artifacts**
- Removes `build/` directory
- Removes `node_modules/` directory
- Ensures a fresh build environment
@@ -407,81 +417,56 @@
- Reads from `package.json`
- Installs to `node_modules/`
-4. **Runs `npm run ci`** which executes:
+4. **Extracts developers data** from the parent `pom.xml`
+ - Creates `app/pages/team/developers.json`
+ - Required for the Team page
+
+5. **Runs `npm run ci`** which executes:
- `npm run lint` - ESLint code quality checks
- `npm run typecheck` - TypeScript type checking
- `npm run test:run` - Vitest unit tests
- `npm run build` - Production build
-5. **Build Output**: Generated files are in `build/` directory
+6. **Build Output**: Generated files are in `build/` directory
#### Maven Commands
-**Build Website with Full HBase Build:**
+**Build HBase WITHOUT the Website (default):**
```bash
# From HBase root directory
mvn clean install
```
-The website will be built automatically as part of the full build.
+**Build the Website:**
+```bash
+# From HBase root or hbase-website directory
+mvn site
+```
+
+This generates the full HBase website including documentation and the React-based website.
**Build Website Only:**
```bash
-# Option 1: From HBase root directory
-mvn clean install -pl hbase-website
-
-# Option 2: From hbase-website directory
+# From hbase-website directory
cd hbase-website
-mvn clean install
-```
-
-**Skip Website Build:**
-
-If you want to build HBase but skip the website:
-
-```bash
-# From HBase root directory
-mvn clean install -DskipSite
-```
-
-**Validate Configuration Only:**
-
-To verify the Maven configuration without building:
-
-```bash
-cd hbase-website
-mvn validate
+mvn site
```
#### Maven Lifecycle Phases
-The frontend-maven-plugin binds to these Maven phases:
+The frontend-maven-plugin binds to these **site-specific** Maven phases:
-- **generate-resources**: Installs Node.js/npm and runs `npm install`
-- **compile**: Runs `npm run ci` (lint, typecheck, test, build)
-
-#### Build Artifacts
-
-After a successful Maven build, you'll find:
-
-```
-hbase-website/
-├── build/ # Production build output
-│ ├── client/ # Static website files
-│ └── server/ # Server-side code (if applicable)
-├── node_modules/ # npm dependencies (gitignored)
-├── target/ # Maven build directory (gitignored)
-│ └── node/ # Installed Node.js/npm (gitignored)
-└── ...
-```
+- **pre-site**: Installs Node.js/npm, runs `npm install`, and extracts developers data
+- **site**: Runs `npm run ci` (lint, typecheck, test, build)
#### Integration with CI/CD
The Maven configuration ensures consistent builds across different environments:
-- **Local Development**: Developers can build with `mvn clean install`
+- **Local Development**: Developers can build HBase with `mvn clean install` (website not included)
+- **Website Generation**: Use `mvn site` to generate the full website and documentation
- **CI/CD Pipelines**: Automated builds work out-of-the-box with Maven
-- **No Manual Steps**: No need to manually run `npm install` or `npm run ci`
+- **No Manual Steps**: No need to manually run `npm install` or `npm run ci` when using `mvn site`
#### Maven Troubleshooting
@@ -490,9 +475,17 @@
```bash
# Clean and rebuild
cd hbase-website
-mvn clean install
+mvn clean site
```
+This will:
+- Remove `build/` directory
+- Remove `node_modules/` directory
+- Remove `target/` directory
+- Reinstall Node.js and npm
+- Install all dependencies fresh
+- Run the full build pipeline
+
**Build Fails During npm run ci:**
This usually indicates:
@@ -513,53 +506,15 @@
Fix any errors and try the Maven build again.
-**Clean Everything:**
-
-To completely reset the build environment, use Maven's clean phase which automatically removes `build/` and `node_modules/`:
-
-```bash
-cd hbase-website
-mvn clean install
-```
-
-This will:
-- Remove `build/` directory
-- Remove `node_modules/` directory
-- Remove `target/` directory
-- Reinstall Node.js and npm
-- Install all dependencies fresh
-- Run the full build pipeline
-
-For a manual clean (if needed):
-```bash
-cd hbase-website
-rm -rf node_modules/ build/ target/ .react-router/
-mvn clean install
-```
-
#### Configuration Files
- **pom.xml**: Maven configuration using frontend-maven-plugin
- **package.json**: npm scripts and dependencies
- **.gitignore**: Excludes `target/`, `node/`, `node_modules/`, `build/`
-#### Benefits
-
-✅ **Consistent Builds**: Same build process everywhere (local, CI, production)
-✅ **No Manual Steps**: Maven handles everything automatically
-✅ **Isolated Node.js**: Doesn't interfere with system Node installation
-✅ **Skip Option**: Can skip website build with `-DskipSite`
-✅ **Standalone**: Can build website separately with `-pl hbase-website`
-✅ **Quality Checks**: Runs linting, type checking, and tests before building
-
#### For HBase Developers
-If you're working on HBase but not the website:
-
-```bash
-# Skip website build to save time
-mvn clean install -DskipSite
-```
+The website only builds when you explicitly run `mvn site`.
If you're working on the website:
@@ -569,34 +524,13 @@
npm install
npm run dev # Start dev server with hot reload
-# Or use Maven for full CI pipeline
-mvn clean install
+# Or use Maven to build the website
+cd hbase-website
+mvn site
```
### Deployment
-#### Docker Deployment (most likely won't use in production)
-
-Build and run using Docker:
-
-```bash
-# Build the Docker image
-docker build -t hbase-website .
-
-# Run the container
-docker run -p 3000:3000 hbase-website
-```
-
-The website will be available at `http://localhost:3000`.
-
-**Deploy to any platform supporting Docker:**
-- AWS ECS
-- Google Cloud Run
-- Azure Container Apps
-- Digital Ocean App Platform
-- Fly.io
-- Railway
-
#### Static Hosting
Since this site uses Static Site Generation (SSG), you can deploy the `build/client/` directory to any static file host:
@@ -604,8 +538,6 @@
- **Apache HTTP Server**: Copy `build/client/` contents to your web root
- **Nginx**: Copy `build/client/` contents to your web root
- **GitHub Pages**: Push `build/client/` to `gh-pages` branch
-- **Netlify/Vercel**: Connect your repository for automatic deployments
-- **AWS S3 + CloudFront**: Upload `build/client/` to S3 bucket
### Troubleshooting
@@ -628,24 +560,6 @@
# Or change the port in vite.config.ts
```
-#### Build Fails
-
-1. **Clear generated files:**
- ```bash
- rm -rf build/ node_modules/.vite
- ```
-
-2. **Reinstall dependencies:**
- ```bash
- rm -rf node_modules/
- npm install
- ```
-
-3. **Try building again:**
- ```bash
- npm run build
- ```
-
#### Need to Clean Everything
Nuclear option - removes all generated files:
diff --git a/hbase-website/package-lock.json b/hbase-website/package-lock.json
index 1224173..89b68eb 100644
--- a/hbase-website/package-lock.json
+++ b/hbase-website/package-lock.json
@@ -19,7 +19,7 @@
"@radix-ui/react-navigation-menu": "1.2.3",
"@radix-ui/react-scroll-area": "1.2.2",
"@radix-ui/react-separator": "1.1.1",
- "@radix-ui/react-slot": "*",
+ "@radix-ui/react-slot": "latest",
"@radix-ui/react-tabs": "1.1.2",
"@radix-ui/react-tooltip": "1.1.6",
"@react-router/node": "^7.9.2",
diff --git a/hbase-website/pom.xml b/hbase-website/pom.xml
index 7f0564c..35e24b6 100644
--- a/hbase-website/pom.xml
+++ b/hbase-website/pom.xml
@@ -70,7 +70,7 @@
<goals>
<goal>install-node-and-npm</goal>
</goals>
- <phase>generate-sources</phase>
+ <phase>pre-site</phase>
<configuration>
<nodeVersion>${node.version}</nodeVersion>
<npmVersion>${npm.version}</npmVersion>
@@ -82,7 +82,7 @@
<goals>
<goal>npm</goal>
</goals>
- <phase>generate-resources</phase>
+ <phase>pre-site</phase>
<configuration>
<arguments>install</arguments>
</configuration>
@@ -93,7 +93,7 @@
<goals>
<goal>npm</goal>
</goals>
- <phase>generate-resources</phase>
+ <phase>pre-site</phase>
<configuration>
<arguments>run extract-developers</arguments>
</configuration>
@@ -104,7 +104,7 @@
<goals>
<goal>npm</goal>
</goals>
- <phase>compile</phase>
+ <phase>site</phase>
<configuration>
<arguments>run ci</arguments>
</configuration>