mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-05 16:35:33 +00:00
Fixes #3199. Ensures that the model package compiler passes schema validation for kmp.json. Three problems were corrected: 1. `followKeyboardVersion` is a source-only property; it should not be in deployable kmp.json. 2. `copyLocation` should have been a number not a string (in XML everything is a string... but JSON has more control here) 3. `fileType` is a source-only property; it also should not be in deployable kmp.json. I have checked that the resulting files validate against the package kmp.json schema version 1.1.0 defined at https://github.com/keymanapp/api.keyman.com/blob/master/schemas/package/1.1.0/package.json. None of these fixes should impact the use of these packages in target apps. `followKeyboardVersion` and `fileType` are used only in the source at package development time, and `copyLocation` is unused (and should be eliminated from Keyman altogether in the future).
152 lines
4 KiB
Bash
Executable file
152 lines
4 KiB
Bash
Executable file
#!/bin/bash
|
|
#
|
|
# Compiles the developer tools, including the language model compilers.
|
|
#
|
|
|
|
# Exit on command failure and when using unset variables:
|
|
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/shellHelperFunctions.sh"
|
|
## END STANDARD BUILD SCRIPT INCLUDE
|
|
EX_USAGE=64
|
|
|
|
# Where to find lexical model types.
|
|
LEXICAL_MODELS_TYPES=../../common/models/types
|
|
|
|
|
|
# Build the main script.
|
|
build () {
|
|
npm run build || fail "Could not build top-level JavaScript file."
|
|
}
|
|
|
|
display_usage ( ) {
|
|
echo "Usage: $0 [-test] [-publish-to-npm]"
|
|
echo " $0 -help"
|
|
echo
|
|
echo " -help displays this screen and exits"
|
|
echo " -test runs unit tests after building"
|
|
echo " -tdd runs unit tests WITHOUT building"
|
|
echo " -skip-package-install, -S skip package installation"
|
|
echo " -publish-to-npm publishes the current version to the npm package index"
|
|
echo " -dry-run do build, etc, but don't actually publish"
|
|
}
|
|
|
|
################################ Main script ################################
|
|
|
|
run_tests=0
|
|
install_dependencies=1
|
|
should_publish=0
|
|
npm_dist_tag=
|
|
should_dry_run=0
|
|
|
|
# Process command-line arguments
|
|
while [[ $# -gt 0 ]] ; do
|
|
key="$1"
|
|
case $key in
|
|
-help|-h)
|
|
display_usage
|
|
exit
|
|
;;
|
|
-dry-run)
|
|
should_dry_run=1
|
|
;;
|
|
-skip-package-install|-S)
|
|
install_dependencies=0
|
|
;;
|
|
-test)
|
|
run_tests=1
|
|
;;
|
|
-tdd)
|
|
run_tests=1
|
|
install_dependencies=0
|
|
;;
|
|
-version)
|
|
echo "Warning: -version is now ignored"
|
|
;;
|
|
-tier)
|
|
echo "Warning: -tier is now ignored"
|
|
;;
|
|
-publish-to-npm)
|
|
should_publish=1
|
|
;;
|
|
*)
|
|
echo "$0: invalid option: $key"
|
|
display_usage
|
|
exit $EX_USAGE
|
|
esac
|
|
shift # past the processed argument
|
|
done
|
|
|
|
# Dry run settings
|
|
if (( should_dry_run )); then
|
|
DRY_RUN=--dry-run
|
|
else
|
|
DRY_RUN=
|
|
fi
|
|
|
|
publish_version=`cat "$KEYMAN_ROOT/VERSION.md"`
|
|
publish_tier=`cat "$KEYMAN_ROOT/TIER.md"`
|
|
|
|
# Validate the publish_version
|
|
if [ ! -z "$publish_version" ]; then
|
|
# Remove final component if more than 3 components passed
|
|
publish_version=` echo "$publish_version" | cut -d "." -f1,2,3 -`
|
|
[[ $publish_version =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)$ ]] || fail "-version must be dotted numeric string, e.g. 1.2.3."
|
|
fi
|
|
|
|
if [ -n "$publish_tier" ]; then
|
|
# Make sure we're either setting the version or publishing:
|
|
if [ -z "$publish_version" ] && (( !should_publish )) ; then
|
|
fail "-tier cannot be specified without -version or -publish-to-npm"
|
|
fi
|
|
|
|
case "$publish_tier" in
|
|
alpha)
|
|
publish_tier=-alpha
|
|
npm_dist_tag=alpha
|
|
;;
|
|
beta)
|
|
publish_tier=-beta
|
|
npm_dist_tag=beta
|
|
;;
|
|
stable)
|
|
# Stable releases intentionally have a blank publish tier:
|
|
publish_tier=
|
|
npm_dist_tag=latest
|
|
;;
|
|
*)
|
|
fail "-tier must be one of alpha, beta or stable"
|
|
esac
|
|
publish_version=$publish_version$publish_tier
|
|
fi
|
|
|
|
# Check if Node.JS/npm is installed.
|
|
type npm >/dev/null ||\
|
|
fail "Build environment setup error detected! Please ensure Node.js is installed!"
|
|
|
|
if (( install_dependencies )) ; then
|
|
verify_npm_setup
|
|
fi
|
|
|
|
if [ -n "$publish_version" ]; then
|
|
set_npm_version "$publish_version" || fail "Setting version failed."
|
|
fi
|
|
|
|
build || fail "Compilation failed."
|
|
echo "Typescript compilation successful."
|
|
|
|
if (( run_tests )); then
|
|
npm test || fail "Tests failed"
|
|
fi
|
|
|
|
if (( should_publish )); then
|
|
# Note: In either case, npm publish MUST be given --access public to publish
|
|
# a package in the @keymanapp scope on the public npm package index.
|
|
#
|
|
# See `npm help publish` for more details.
|
|
npm publish $DRY_RUN --access public --tag "${npm_dist_tag:=latest}" || fail "Could not publish ${npm_dist_tag} release."
|
|
fi
|