From fc9d63b80ed304bbf02a4a8ec67658a9967a2c1c Mon Sep 17 00:00:00 2001 From: Gian Merlino Date: Thu, 19 Mar 2026 12:31:54 -0700 Subject: [PATCH] Web console: Add test-unit script. The "test" script runs the full script/build, which takes a while and isn't necessary. It also runs e2e tests, which require a running Druid service, which is not always going to be available. This patch adds a "test-unit" script that builds SQL docs only, not the full webpack bundle, and runs unit tests only. --- AGENTS.md | 7 ++- web-console/package.json | 1 + web-console/script/build | 43 ++--------------- web-console/script/build-sql-docs | 78 +++++++++++++++++++++++++++++++ 4 files changed, 89 insertions(+), 40 deletions(-) create mode 100755 web-console/script/build-sql-docs diff --git a/AGENTS.md b/AGENTS.md index 355a07d797c5..bf1bfd379dac 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -76,7 +76,12 @@ present, such as `-Dquidem.filter=qaWin/**`. ### Web Console Development -- Refer to `web-console/README.md` for instructions on developing, linting, and testing web console features. +Refer to `web-console/README.md` for general instructions on developing the web console. + +Run `npm run test-unit` from the `web-console/` directory to verify your work. Before doing this for the first time +in a fresh checkout, you will also need to run `npm install`. + +Run `npm run autofix` from the `web-console/` directory to fix formatting issues. ### Documentation diff --git a/web-console/package.json b/web-console/package.json index 67aa9b09227e..0ffde8c3c3be 100644 --- a/web-console/package.json +++ b/web-console/package.json @@ -17,6 +17,7 @@ "test": "npm run test-base -- --silent 2>&1", "test-ci": "npm run test-base -- --coverage", "test-e2e": "jest --runInBand --config jest.e2e.config.js e2e-tests", + "test-unit": "./script/build-sql-docs && npm run eslint && npm run sasslint && npm run prettify-check && jest --config jest.config.js --testPathIgnorePatterns='e2e-tests'", "codecov": "codecov --disable=gcov -p ..", "coverage": "jest --coverage src", "update-snapshots": "jest -u --config jest.config.js", diff --git a/web-console/script/build b/web-console/script/build index 0bb00fb2aec5..8b3c4976480b 100755 --- a/web-console/script/build +++ b/web-console/script/build @@ -36,46 +36,11 @@ is_newer_than() { [ "$1" -nt "$2" ] } -# Check if SQL docs need to be built -SQL_DOCS_OUTPUT="lib/sql-docs.ts" -SQL_DOCS_SCRIPT="script/create-sql-docs.mjs" -SQL_DOCS_FILELIST="script/sql-doc-files.txt" - -BUILD_SQL_DOCS=false - -if [ "$FORCE_BUILD" = true ] || [ ! -f "$SQL_DOCS_OUTPUT" ]; then - BUILD_SQL_DOCS=true -else - # Check if create-sql-docs.mjs is newer than output - if is_newer_than "$SQL_DOCS_SCRIPT" "$SQL_DOCS_OUTPUT"; then - BUILD_SQL_DOCS=true - fi - - # Check if sql-doc-files.txt is newer than output - if is_newer_than "$SQL_DOCS_FILELIST" "$SQL_DOCS_OUTPUT"; then - BUILD_SQL_DOCS=true - fi - - # Check if any file listed in sql-doc-files.txt is newer than output - if [ -f "$SQL_DOCS_FILELIST" ] && [ "$BUILD_SQL_DOCS" = false ]; then - while read -r file; do - # Skip empty lines and comments - if [[ -z "$file" ]] || [[ "$file" =~ ^[[:space:]]*# ]]; then - continue - fi - if [ -n "$file" ] && is_newer_than "$file" "$SQL_DOCS_OUTPUT"; then - BUILD_SQL_DOCS=true - break - fi - done < "$SQL_DOCS_FILELIST" - fi -fi - -if [ "$BUILD_SQL_DOCS" = true ]; then - echo "Compiling SQL function docs for the web console..." - ./script/create-sql-docs.mjs +# Build SQL docs +if [ "$FORCE_BUILD" = true ]; then + ./script/build-sql-docs --force else - echo "SQL docs are up to date, skipping..." + ./script/build-sql-docs fi # Get version from package.json diff --git a/web-console/script/build-sql-docs b/web-console/script/build-sql-docs new file mode 100755 index 000000000000..0a6f49bdf7a1 --- /dev/null +++ b/web-console/script/build-sql-docs @@ -0,0 +1,78 @@ +#!/bin/bash -eu + +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -e + +# Check if --force flag is provided +FORCE_BUILD=false +if [[ "$@" == *"--force"* ]]; then + FORCE_BUILD=true +fi + +# Function to check if a file is newer than another +is_newer_than() { + # Returns 0 (true) if $1 is newer than $2, 1 (false) otherwise + if [ ! -f "$2" ]; then + return 0 # If target doesn't exist, we need to build + fi + if [ ! -f "$1" ]; then + return 1 # If source doesn't exist, we can't build (will error later) + fi + [ "$1" -nt "$2" ] +} + +SQL_DOCS_OUTPUT="lib/sql-docs.ts" +SQL_DOCS_SCRIPT="script/create-sql-docs.mjs" +SQL_DOCS_FILELIST="script/sql-doc-files.txt" + +BUILD_SQL_DOCS=false + +if [ "$FORCE_BUILD" = true ] || [ ! -f "$SQL_DOCS_OUTPUT" ]; then + BUILD_SQL_DOCS=true +else + # Check if create-sql-docs.mjs is newer than output + if is_newer_than "$SQL_DOCS_SCRIPT" "$SQL_DOCS_OUTPUT"; then + BUILD_SQL_DOCS=true + fi + + # Check if sql-doc-files.txt is newer than output + if is_newer_than "$SQL_DOCS_FILELIST" "$SQL_DOCS_OUTPUT"; then + BUILD_SQL_DOCS=true + fi + + # Check if any file listed in sql-doc-files.txt is newer than output + if [ -f "$SQL_DOCS_FILELIST" ] && [ "$BUILD_SQL_DOCS" = false ]; then + while read -r file; do + # Skip empty lines and comments + if [[ -z "$file" ]] || [[ "$file" =~ ^[[:space:]]*# ]]; then + continue + fi + if [ -n "$file" ] && is_newer_than "$file" "$SQL_DOCS_OUTPUT"; then + BUILD_SQL_DOCS=true + break + fi + done < "$SQL_DOCS_FILELIST" + fi +fi + +if [ "$BUILD_SQL_DOCS" = true ]; then + echo "Compiling SQL function docs for the web console..." + ./script/create-sql-docs.mjs +else + echo "SQL docs are up to date, skipping..." +fi