mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-05 00:15:32 +00:00
The command shortcuts that were used by Web scripts to create bundles via `esbuild` were not properly handling the $KEYMAN_ROOT path when it contained a space. These changes will rectify this behavior and permit builds for such cases. Build-bot: skip build:web Test-bot: skip
144 lines
4.5 KiB
Bash
144 lines
4.5 KiB
Bash
#!/usr/bin/env bash
|
|
#
|
|
|
|
LIB_BUNDLER="${KEYMAN_ROOT}/web/src/tools/es-bundling/build/common-bundle.mjs"
|
|
|
|
# Compiles all build products corresponding to the specified target.
|
|
# This should be called from the working directory of a child project's
|
|
# build script.
|
|
#
|
|
# ### Parameters
|
|
#
|
|
# * 1: `product` the product's source path under src/
|
|
# * 2: `src_dir` the source directory. Optional. Default: ${KEYMAN_ROOT}/web/src
|
|
# * 3: `build_dir` the build directory. Optional. Default: ${KEYMAN_ROOT}/web/build
|
|
#
|
|
# ### Example
|
|
#
|
|
# ```bash
|
|
# compile engine/main
|
|
# ```
|
|
function compile() {
|
|
if [ $# -lt 1 ]; then
|
|
builder_die "Scripting error: insufficient argument count!"
|
|
fi
|
|
|
|
eslint .
|
|
|
|
local COMPILE_TARGET="$1"
|
|
local SRC_DIR=${2:-"${KEYMAN_ROOT}/web/src"}
|
|
local BUILD_DIR=${3:-"${KEYMAN_ROOT}/web/build"}
|
|
|
|
tsc -b "${SRC_DIR}/$COMPILE_TARGET"
|
|
|
|
# So... tsc does declaration-bundling on its own pretty well, at least for local development.
|
|
tsc --emitDeclarationOnly --outFile "${BUILD_DIR}/$COMPILE_TARGET/lib/index.d.ts" -p "${SRC_DIR}/$COMPILE_TARGET"
|
|
}
|
|
|
|
function _copy_dir_if_exists() {
|
|
local SRC=$1
|
|
local DST=$2
|
|
|
|
if [ -d "$SRC" ]; then
|
|
cp -rf "$SRC/." "$DST"
|
|
fi
|
|
}
|
|
|
|
# Copies top-level build artifacts into common 'debug' and 'release' config folders
|
|
# for use in publishing and does a normalization pass on the sourcemaps.
|
|
function prepare() {
|
|
local CHILD_BUILD_ROOT="$KEYMAN_ROOT/web/build/app"
|
|
local PUBLISH_BUILD_ROOT="$KEYMAN_ROOT/web/build/publish"
|
|
|
|
mkdir -p "$PUBLISH_BUILD_ROOT/debug"
|
|
mkdir -p "$PUBLISH_BUILD_ROOT/release"
|
|
|
|
_copy_dir_if_exists "$CHILD_BUILD_ROOT/browser/debug" "$PUBLISH_BUILD_ROOT/debug"
|
|
_copy_dir_if_exists "$CHILD_BUILD_ROOT/browser/release" "$PUBLISH_BUILD_ROOT/release"
|
|
|
|
_copy_dir_if_exists "$CHILD_BUILD_ROOT/resources" "$PUBLISH_BUILD_ROOT/debug"
|
|
_copy_dir_if_exists "$CHILD_BUILD_ROOT/resources" "$PUBLISH_BUILD_ROOT/release"
|
|
|
|
_copy_dir_if_exists "$CHILD_BUILD_ROOT/ui/debug" "$PUBLISH_BUILD_ROOT/debug"
|
|
_copy_dir_if_exists "$CHILD_BUILD_ROOT/ui/release" "$PUBLISH_BUILD_ROOT/release"
|
|
|
|
# Normalize paths in the sourcemaps
|
|
for sourcemap in "$PUBLISH_BUILD_ROOT/debug/"*.map; do
|
|
node "$KEYMAN_ROOT/web/build/tools/building/sourcemap-root/index.js" null "$sourcemap" --clean
|
|
done
|
|
|
|
for sourcemap in "$PUBLISH_BUILD_ROOT/release/"*.map; do
|
|
node "$KEYMAN_ROOT/web/build/tools/building/sourcemap-root/index.js" null "$sourcemap" --clean
|
|
done
|
|
}
|
|
|
|
# Runs all headless tests corresponding to the specified target.
|
|
# This should be called from the working directory of a child project's
|
|
# build script.
|
|
#
|
|
# ### Parameters
|
|
#
|
|
# * 1: `product` the folder under src/test/auto/headless containing the
|
|
# child project's tests
|
|
# * 2: `base_dir` the base directory containing the `product` folder.
|
|
# Optional. Default: ${KEYMAN_ROOT}/web/src/test/auto/headless/
|
|
#
|
|
# ### Example
|
|
#
|
|
# ```bash
|
|
# # from engine/osk
|
|
# test-headless engine/osk
|
|
# ```
|
|
function test-headless() {
|
|
TEST_FOLDER=$1
|
|
TEST_BASE="${KEYMAN_ROOT}/web/src/test/auto/headless/"
|
|
TEST_EXTENSIONS=${2:-}
|
|
if [ ! -z "${2:-}" ]; then
|
|
TEST_BASE="${KEYMAN_ROOT}/web/build/test/headless/"
|
|
|
|
# Ensure the compiled tests are available.
|
|
tsc --project "${KEYMAN_ROOT}/web/src/test/auto/tsconfig.json"
|
|
fi
|
|
|
|
TEST_OPTS=()
|
|
if builder_is_running_on_teamcity; then
|
|
TEST_OPTS+=(--reporter "${KEYMAN_ROOT}/common/test/resources/mocha-teamcity-reporter/teamcity.cjs" --reporter-options parentFlowId="unit_tests")
|
|
echo "##teamcity[flowStarted flowId='unit_tests']"
|
|
fi
|
|
if [[ -n "${TEST_EXTENSIONS}" ]]; then
|
|
TEST_OPTS+=(--extension "${TEST_EXTENSIONS}")
|
|
fi
|
|
|
|
if [[ -e .c8rc.json ]]; then
|
|
c8 mocha --recursive "${TEST_BASE}${TEST_FOLDER}" "${TEST_OPTS[@]}"
|
|
else
|
|
mocha --recursive "${TEST_BASE}${TEST_FOLDER}" "${TEST_OPTS[@]}"
|
|
fi
|
|
|
|
if builder_is_running_on_teamcity; then
|
|
# we're running in TeamCity
|
|
echo "##teamcity[flowFinished flowId='unit_tests']"
|
|
fi
|
|
}
|
|
|
|
# Runs all headless tests (written in typescript) corresponding to the
|
|
# specified target.
|
|
# This should be called from the working directory of a child project's
|
|
# build script.
|
|
#
|
|
# ### Parameters
|
|
#
|
|
# * 1: `product` the folder under src/test/auto/headless containing the
|
|
# child project's tests
|
|
#
|
|
# ### Example
|
|
#
|
|
# ```bash
|
|
# # from engine/osk
|
|
# test-headless-typescript engine/osk
|
|
# ```
|
|
function test-headless-typescript() {
|
|
# tests.js - ensure any plain-js files that exist as test resources, but not test defs,
|
|
# aren't treated by Mocha as tests.
|
|
test-headless "$1" "tests.js"
|
|
}
|