mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-14 12:49:25 +00:00
Note that the version entry will be added to the local package.json which will then be dirty. This version entry should not be committed.
134 lines
No EOL
4.5 KiB
Bash
134 lines
No EOL
4.5 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
set -eu
|
|
|
|
## START STANDARD BUILD SCRIPT INCLUDE
|
|
# adjust relative paths as necessary
|
|
THIS_SCRIPT="$(greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null || readlink -f "${BASH_SOURCE[0]}")"
|
|
. "$(dirname "$THIS_SCRIPT")/../../resources/build/build-utils.sh"
|
|
. "$KEYMAN_ROOT/resources/build/jq.inc.sh"
|
|
. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
|
|
## END STANDARD BUILD SCRIPT INCLUDE
|
|
|
|
display_usage() {
|
|
echo "Usage: $0 --build-path path"
|
|
echo " $0 --help"
|
|
echo
|
|
echo "This script is called from the Keyman Developer installer build"
|
|
echo "and is not intended for standalone use."
|
|
echo
|
|
echo " --help displays this screen and exits"
|
|
echo " --build-path path temporary path where archive will be built"
|
|
}
|
|
|
|
BUILD_PATH=
|
|
|
|
# Process command-line arguments
|
|
while [[ $# -gt 0 ]] ; do
|
|
key="$1"
|
|
case $key in
|
|
-help|-h)
|
|
display_usage
|
|
exit
|
|
;;
|
|
--build-path)
|
|
shift
|
|
BUILD_PATH="$1"
|
|
;;
|
|
*)
|
|
echo "$0: invalid option: $key"
|
|
display_usage
|
|
exit 64
|
|
esac
|
|
shift # past the processed argument
|
|
done
|
|
|
|
if [[ -z $BUILD_PATH ]]; then
|
|
echo "Parameter --build-path is required"
|
|
display_usage
|
|
exit 64
|
|
fi
|
|
|
|
KEYMAN_WIX_TEMP_BASE="$BUILD_PATH"
|
|
KEYMAN_WIX_TEMP_MODELCOMPILER="$BUILD_PATH/ModelCompiler"
|
|
KEYMAN_MODELCOMPILER_TEMP=`mktemp -d`
|
|
|
|
# We copy the built model compiler into a temporary folder in order to prepare
|
|
# the node modules, as otherwise the workspace will interfere
|
|
|
|
cp -R "$KEYMAN_ROOT/developer/js/"* "$KEYMAN_MODELCOMPILER_TEMP/"
|
|
|
|
cd "$KEYMAN_MODELCOMPILER_TEMP"
|
|
|
|
# We use `npm pack` to extract only the aspects of the model-compiler actually
|
|
# needed for distribution. While we could use npm-bundle or similar, that adds
|
|
# extra, unwanted cruft; our approach gives us more control of the set of files
|
|
# distributed with the Keyman Developer installer.
|
|
#
|
|
# For users on other operating systems, node.js is a dependency and the compiler
|
|
# can be installed with `npm install @keymanapp/lexical-model-compiler`.
|
|
|
|
# We copy the files to a temp folder in order to exclude thumbs.db, .vs, etc
|
|
# from harvesting
|
|
rm -rf "$KEYMAN_WIX_TEMP_MODELCOMPILER"
|
|
|
|
# Step 1 - npm-pack the model compiler package, then unpack it in our bundling
|
|
# directory. This automatically strips the package to its barebones.
|
|
set_npm_version
|
|
npm pack
|
|
mv keymanapp-lexical-model-compiler*.tgz kmlmc.tgz
|
|
mv kmlmc.tgz "$KEYMAN_WIX_TEMP_BASE"
|
|
|
|
# We extract the npm-packed version of the model compiler in order to reproduce
|
|
# our needed bundle.
|
|
cd "$KEYMAN_WIX_TEMP_BASE"
|
|
tar xvzf kmlmc.tgz
|
|
|
|
# Creates the directory referenced by $(KEYMAN_WIX_TEMP_MODELCOMPILER).
|
|
mv package ModelCompiler
|
|
|
|
# Cleans up the npm pack artifacts, which are no longer needed.
|
|
rm kmlmc.tgz
|
|
|
|
# Step 2 - the model compiler has one in-repo dependency that will also need to
|
|
# be packed. Managing other in-repo dependencies will be simpler; they install
|
|
# into ModelCompiler's extracted bundle.
|
|
|
|
mkdir -p "$KEYMAN_MODELCOMPILER_TEMP/node_modules/@keymanapp/"
|
|
cp -R "$KEYMAN_ROOT/node_modules/@keymanapp/models-types" "$KEYMAN_MODELCOMPILER_TEMP/node_modules/@keymanapp/"
|
|
|
|
cd "$KEYMAN_MODELCOMPILER_TEMP/node_modules/@keymanapp/models-types"
|
|
set_npm_version
|
|
npm pack
|
|
mv keymanapp-models-types*.tgz kmtypes.tgz
|
|
mv kmtypes.tgz "$KEYMAN_WIX_TEMP_MODELCOMPILER"
|
|
|
|
# Step 3 - install just the bare essentials by using our packed local
|
|
# dependency, followed by all external production dependencies.
|
|
cd "$KEYMAN_WIX_TEMP_MODELCOMPILER"
|
|
# package-lock.json wasn't bundled; this is needed to keep dependency versions
|
|
# consistent.
|
|
cp "$KEYMAN_MODELCOMPILER_TEMP/package-lock.json" "$KEYMAN_WIX_TEMP_MODELCOMPILER/"
|
|
|
|
# as of npm v8.x, even though we are only working with `dependencies`,
|
|
# `devDependencies` is still checked, and as these modules are present in
|
|
# devDependencies but are only available when in the repo path, we need to
|
|
# remove them before attempting to continue.
|
|
# Yuck! ref: https://github.com/npm/cli/issues/3975#issuecomment-985305678
|
|
# ref: https://github.com/npm/cli/issues/2921
|
|
# can't use npm uninstall because it depends on @keymanapp/models-types being
|
|
# present!
|
|
|
|
cat "$KEYMAN_MODELCOMPILER_TEMP/package.json" | "$JQ" \
|
|
'. | del(.devDependencies."@keymanapp/models-templates") | del(.devDependencies."@keymanapp/keyman-version") | del(.devDependencies."@keymanapp/models-wordbreakers")' \
|
|
> "package.json"
|
|
|
|
npm install kmtypes.tgz --production --no-optional
|
|
npm install --production --no-optional
|
|
|
|
# Clean up the npm pack artifacts for the dependencies.
|
|
rm kmtypes.tgz
|
|
|
|
# We don't need the unit tests
|
|
rm -rf "$KEYMAN_WIX_TEMP_MODELCOMPILER/tests"
|
|
rm -rf "$KEYMAN_MODELCOMPILER_TEMP" |