Browse Source

build: make build script location-independent (#36087)

* build: make build script location-independent

Replace hardcoded relative paths with dynamic path resolution,
allowing the script to be executed from any directory. Previously, the
script required being run from its containing directory.

Changes:
- Use BASH_SOURCE to determine script location dynamically
- Add proper error handling and dependency checks
- Improve logging with timestamps
- Add comprehensive documentation

The script now works correctly regardless of the current working
directory.

* Remove unnecessary Author and Last Updated header info.

Address PR review comment.

* Use mvn -f option to reference alternate pom.xml in $AGGREGATE_DIR

Incorporate PR review comment.

---------

Co-authored-by: MashaKorax <[email protected]>
Co-authored-by: Serge Rider <[email protected]>
Ed Espino 7 months ago
parent
commit
b276354078
1 changed files with 126 additions and 6 deletions
  1. 126 6
      tools/build.sh

+ 126 - 6
tools/build.sh

@@ -1,9 +1,129 @@
 #!/bin/bash
-cd ..
-[ ! -d ../dbeaver-common ] && git clone https://github.com/dbeaver/dbeaver-common.git ../dbeaver-common
-[ ! -d ../dbeaver-jdbc-libsql ] && git clone https://github.com/dbeaver/dbeaver-jdbc-libsql.git ../dbeaver-jdbc-libsql
+###############################################################################
+# DBeaver Build Script
+# 
+# Purpose:
+#   Automates the build process for DBeaver by managing dependencies and running
+#   the Maven build process. This script handles the cloning of dbeaver-common
+#   repository and builds the project with all platforms configuration.
+#
+# Requirements:
+#   - Git (for cloning repositories)
+#   - Maven (for building the project)
+#   - Bash shell environment
+#
+# Directory Structure Expected:
+#   /workspace_root/
+#     ├── dbeaver/           # Main DBeaver repository
+#     │   ├── tools/        # Location of this script
+#     │   │   └── build.sh
+#     │   └── product/      # Product directory
+#     │       └── aggregate # Build target directory
+#     └── dbeaver-common/   # Will be cloned if not present
+#
+# Usage:
+#   ./tools/build.sh
+#
+# Exit Codes:
+#   0 - Success
+#   1 - Missing dependencies or invalid directory structure
+#
+###############################################################################
 
-cd product/aggregate
-mvn clean install -Pall-platforms -T 1C
-cd ../..
+# Exit on any error
+set -e
 
+###############################################################################
+# Function Definitions
+###############################################################################
+
+# Get the directory where the script is located
+# Returns: Absolute path to script directory
+SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+
+# Function: log
+# Purpose: Provides consistent logging format with timestamps
+# Arguments:
+#   $1 - Message to log
+log() {
+    echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1"
+}
+
+# Function: command_exists
+# Purpose: Checks if a required command is available
+# Arguments:
+#   $1 - Command to check
+# Returns:
+#   0 if command exists, 1 if it doesn't
+command_exists() {
+    command -v "$1" >/dev/null 2>&1
+}
+
+###############################################################################
+# Dependency Checks
+###############################################################################
+
+# Verify required tools are installed
+for cmd in git mvn; do
+    if ! command_exists "$cmd"; then
+        log "Error: $cmd is required but not installed"
+        log "Please install $cmd and try again"
+        exit 1
+    fi
+done
+
+###############################################################################
+# Path Definitions and Validation
+###############################################################################
+
+# Define paths relative to the script location
+WORKSPACE_DIR="$(dirname "$(dirname "$SCRIPT_DIR")")"
+DBEAVER_COMMON_DIR="${WORKSPACE_DIR}/dbeaver-common"
+DBEAVER_JDBC_LIBSQL_DIR="${WORKSPACE_DIR}/dbeaver-jdbc-libsql"
+PRODUCT_DIR="${SCRIPT_DIR}/../product"
+AGGREGATE_DIR="${PRODUCT_DIR}/aggregate"
+
+# Simple check for product directory
+if [ ! -d "$PRODUCT_DIR" ]; then
+    log "Error: Product directory not found at $PRODUCT_DIR"
+    exit 1
+fi
+
+###############################################################################
+# DBeaver Common Repository Management
+###############################################################################
+
+# Clone or verify dbeaver-common repository
+if [ ! -d "$DBEAVER_COMMON_DIR" ]; then
+    log "Cloning dbeaver-common repository..."
+    git clone https://github.com/dbeaver/dbeaver-common.git "$DBEAVER_COMMON_DIR"
+else
+    log "DBeaver common directory already exists at $DBEAVER_COMMON_DIR"
+fi
+
+###############################################################################
+# DBeaver Jdbc-Libsql Repository Management
+###############################################################################
+
+# Clone or verify dbeaver-jdbc-libsql repository
+if [ ! -d "$DBEAVER_JDBC_LIBSQL_DIR" ]; then
+    log "Cloning dbeaver-jdbc-libsql repository..."
+    git clone https://github.com/dbeaver/dbeaver-jdbc-libsql.git "$DBEAVER_JDBC_LIBSQL_DIR"
+else
+    log "DBeaver jdbc-libsql directory already exists at $DBEAVER_JDBC_LIBSQL_DIR"
+fi
+
+###############################################################################
+# Build Process
+###############################################################################
+
+# Execute Maven build
+log "Starting Maven build..."
+
+mvn clean install -Pall-platforms -T 1C -f "$AGGREGATE_DIR"
+
+log "Build completed successfully"
+
+###############################################################################
+# End of Script
+###############################################################################