mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-08 09:55:32 +00:00
Previously we created the KMC_ZIP file twice, and one of them was outdated. This change moves creating the zip file to `developer/src/inst/build.sh` so that the TC build script only does the upload. Fixes: #14263 Test-bot: skip
287 lines
11 KiB
Bash
Executable file
287 lines
11 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
## START STANDARD BUILD SCRIPT INCLUDE
|
|
# adjust relative paths as necessary
|
|
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
|
|
. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh"
|
|
## END STANDARD BUILD SCRIPT INCLUDE
|
|
|
|
source "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
|
|
source "$KEYMAN_ROOT/resources/build/jq.inc.sh"
|
|
|
|
builder_describe "Installation files for Keyman Developer" \
|
|
@/common/windows/data \
|
|
clean configure build test publish
|
|
|
|
# NOTE: not using deps here because we will only do this in the 'publish' phase
|
|
# after all other builds complete
|
|
|
|
builder_describe_outputs \
|
|
publish /developer/src/inst/keymandeveloper-${KEYMAN_VERSION}.exe
|
|
|
|
builder_parse "$@"
|
|
|
|
. "$KEYMAN_ROOT/resources/build/win/environment.inc.sh"
|
|
. "$KEYMAN_ROOT/resources/build/win/wix.inc.sh"
|
|
. "$KEYMAN_ROOT/resources/build/win/zip.inc.sh"
|
|
|
|
# In dev environments, we'll hack the tier to alpha; CI sets this for us in real builds.
|
|
if [[ -z ${KEYMAN_TIER+x} ]]; then
|
|
KEYMAN_TIER=alpha
|
|
fi
|
|
|
|
# We use different directories so that heat generates
|
|
# different identifiers for the various folders
|
|
KEYMAN_WIX_TEMP_BASE="$TEMP/keyman_wix_build"
|
|
KEYMAN_WIX_TEMP_XML="$TEMP/keyman_wix_build/xml"
|
|
KEYMAN_WIX_TEMP_CEF="$TEMP/keyman_wix_build/cef"
|
|
KEYMAN_WIX_TEMP_TEMPLATES="$TEMP/keyman_wix_build/templates"
|
|
KEYMAN_WIX_TEMP_KMC="$TEMP/keyman_wix_build/kmc"
|
|
KEYMAN_WIX_TEMP_SERVER="$TEMP/keyman_wix_build/Server"
|
|
|
|
KEYMAN_WIX_KMDEV_SERVER="$DEVELOPER_ROOT/bin/server"
|
|
KEYMAN_DEVELOPER_TEMPLATES_ROOT="$DEVELOPER_ROOT/src/kmconvert/data"
|
|
|
|
#-------------------------------------------------------------------------------------------------------------------
|
|
|
|
function do_clean() {
|
|
rm -f *.msi *.wixobj *.log setup.inf setup.zip *.exe *.wixpdb xml.wxs cef.wxs templates.wxs kmc.wxs
|
|
rm -rf "$DEVELOPER_ROOT/src/tike/xml/osk"
|
|
}
|
|
|
|
#-------------------------------------------------------------------------------------------------------------------
|
|
|
|
function do_publish() {
|
|
builder_if_release_build_level verify-program-signatures
|
|
verify-node-installer-version
|
|
|
|
"$KEYMAN_ROOT/common/windows/cef-checkout.sh"
|
|
|
|
#
|
|
# Build the installation archive
|
|
#
|
|
candle
|
|
|
|
"$WIXLIGHT" \
|
|
-wx -nologo "${WIXLIGHTLINT[@]}" "$WIXLIGHTCOMPRESSION" \
|
|
-sice:ICE91 -sice:ICE60 -dWixUILicenseRtf=License.rtf \
|
|
-out keymandeveloper.msi -ext WixUIExtension \
|
|
kmdev.wixobj xml.wixobj cef.wixobj templates.wixobj server.wixobj kmc.wixobj
|
|
|
|
clean-heat-kmc
|
|
|
|
#
|
|
# Sign the installation archive
|
|
#
|
|
wrap-signcode //d "Keyman Developer" keymandeveloper.msi
|
|
|
|
#
|
|
# Copy the installation archive
|
|
#
|
|
|
|
copy-kmdev
|
|
|
|
builder_if_release_build_level verify-installer-signatures
|
|
}
|
|
|
|
function do_test() {
|
|
verify-node-installer-version
|
|
}
|
|
|
|
function copy-kmdev() {
|
|
builder_heading copy-kmdev
|
|
|
|
mkdir -p "$DEVELOPER_ROOT/release/${KEYMAN_VERSION}"
|
|
|
|
make-installer
|
|
make-kmc-install-zip
|
|
|
|
cp -f "$DEVELOPER_ROOT/src/inst/keymandeveloper.msi" "$DEVELOPER_ROOT/release/${KEYMAN_VERSION}/keymandeveloper.msi"
|
|
cp -f "$DEVELOPER_ROOT/src/inst/keymandeveloper-${KEYMAN_VERSION}.exe" "$DEVELOPER_ROOT/release/${KEYMAN_VERSION}/keymandeveloper-${KEYMAN_VERSION}.exe"
|
|
}
|
|
|
|
function verify-program-signatures() {
|
|
builder_heading verify-program-signatures
|
|
|
|
verify-all-executable-signatures-in-folder "$DEVELOPER_ROOT/bin"
|
|
}
|
|
|
|
function verify-installer-signatures() {
|
|
builder_heading verify-installer-signatures
|
|
|
|
verify-all-executable-signatures-in-folder "$DEVELOPER_ROOT/release/${KEYMAN_VERSION}"
|
|
}
|
|
|
|
function verify-node-installer-version() {
|
|
builder_heading verify-node-installer-version
|
|
|
|
local REQUIRED_NODE_VERSION=$("$JQ" -r .engines.node < "$KEYMAN_ROOT/package.json")
|
|
local INSTALLER_NODE_VERSION="$("$THIS_SCRIPT_PATH/node/dist/node.exe" --version)"
|
|
INSTALLER_NODE_VERSION="${INSTALLER_NODE_VERSION##v}"
|
|
|
|
if [[ "$REQUIRED_NODE_VERSION" != "$INSTALLER_NODE_VERSION" ]]; then
|
|
builder_echo error "Installer node version in /developer/src/inst/node/dist/node.exe is '$INSTALLER_NODE_VERSION',"
|
|
builder_echo error "but the expected version per /package.json is '$REQUIRED_NODE_VERSION'."
|
|
builder_die "Version mismatch for bundled node.exe version"
|
|
fi
|
|
}
|
|
|
|
function test-releaseexists() {
|
|
if [[ -d "$DEVELOPER_ROOT/release/${KEYMAN_VERSION}" ]]; then
|
|
builder_die "Release ${KEYMAN_VERSION} already exists. Delete it or update VERSION.md and try again"
|
|
fi
|
|
}
|
|
|
|
function candle() {
|
|
builder_heading candle
|
|
|
|
heat-cef
|
|
heat-xml
|
|
heat-templates
|
|
heat-server
|
|
heat-kmc
|
|
|
|
builder_heading "candle: calling WIX:candle"
|
|
"$WIXCANDLE" -wx -nologo "-dKEYMAN_VERSION=${KEYMAN_VERSION_WIN}" "-dRELEASE=${KEYMAN_VERSION_RELEASE}" kmdev.wxs
|
|
"$WIXCANDLE" -wx -nologo "-dKEYMAN_VERSION=${KEYMAN_VERSION_WIN}" "-dRELEASE=${KEYMAN_VERSION_RELEASE}" "-dXmlSourceDir=${DEVELOPER_ROOT}/src/tike/xml" xml.wxs
|
|
"$WIXCANDLE" -wx -nologo "-dKEYMAN_VERSION=${KEYMAN_VERSION_WIN}" "-dRELEASE=${KEYMAN_VERSION_RELEASE}" "-dCefSourceDir=${KEYMAN_CEF4DELPHI_ROOT}" cef.wxs
|
|
"$WIXCANDLE" -wx -nologo "-dKEYMAN_VERSION=${KEYMAN_VERSION_WIN}" "-dRELEASE=${KEYMAN_VERSION_RELEASE}" "-dTemplatesSourceDir=${KEYMAN_DEVELOPER_TEMPLATES_ROOT}" templates.wxs
|
|
"$WIXCANDLE" -wx -nologo "-dKEYMAN_VERSION=${KEYMAN_VERSION_WIN}" "-dRELEASE=${KEYMAN_VERSION_RELEASE}" "-dkmcSourceDir=${KEYMAN_WIX_TEMP_KMC}" kmc.wxs
|
|
"$WIXCANDLE" -wx -nologo "-dKEYMAN_VERSION=${KEYMAN_VERSION_WIN}" "-dRELEASE=${KEYMAN_VERSION_RELEASE}" "-dServerSourceDir=${KEYMAN_WIX_KMDEV_SERVER}" server.wxs
|
|
}
|
|
|
|
function heat-xml() {
|
|
builder_heading heat-xml
|
|
|
|
# We copy the files to a temp folder in order to exclude thumbs.db, .vs, etc from harvesting
|
|
# We also copy over the OSK files from Keyman Engine (#11199)
|
|
rm -rf "$KEYMAN_WIX_TEMP_XML"
|
|
mkdir -p "$KEYMAN_WIX_TEMP_XML"
|
|
cp -r "$KEYMAN_ROOT/windows/src/engine/xml/osk" "$DEVELOPER_ROOT/src/tike/xml/osk"
|
|
cp -r "$DEVELOPER_ROOT/src/tike/xml"/* "$KEYMAN_WIX_TEMP_XML"
|
|
|
|
rm -f "$KEYMAN_WIX_TEMP_XML/Thumbs.db"
|
|
rm -rf "$KEYMAN_WIX_TEMP_XML/app/node_modules"
|
|
find "$KEYMAN_WIX_TEMP_XML" -name '.vs' -print0 | xargs -0 rm -rf
|
|
"$WIXHEAT" dir "$KEYMAN_WIX_TEMP_XML" -o xml.wxs -ag -cg XML -dr INSTALLDIR -var var.XmlSourceDir -wx -nologo
|
|
|
|
# When we candle/light build, we can grab the source files from the proper root so go ahead and delete the temp folder again
|
|
rm -rf "$KEYMAN_WIX_TEMP_XML"
|
|
}
|
|
|
|
function heat-templates() {
|
|
builder_heading heat-templates
|
|
|
|
# We copy the files to a temp folder in order to exclude .git and README.md from harvesting
|
|
rm -rf "$KEYMAN_WIX_TEMP_TEMPLATES"
|
|
mkdir -p "$KEYMAN_WIX_TEMP_TEMPLATES"
|
|
cp -r "$KEYMAN_DEVELOPER_TEMPLATES_ROOT"/* "$KEYMAN_WIX_TEMP_TEMPLATES"
|
|
"$WIXHEAT" dir "$KEYMAN_WIX_TEMP_TEMPLATES" -o templates.wxs -ag -cg Templates -dr dirProjects -var var.TemplatesSourceDir -wx -nologo
|
|
# When we candle/light build, we can grab the source files from the proper root so go ahead and delete the temp folder again
|
|
rm -rf "$KEYMAN_WIX_TEMP_TEMPLATES"
|
|
}
|
|
|
|
function heat-cef() {
|
|
builder_heading heat-cef
|
|
|
|
# We copy the files to a temp folder in order to exclude .git and README.md from harvesting
|
|
rm -rf "$KEYMAN_WIX_TEMP_CEF"
|
|
mkdir -p "$KEYMAN_WIX_TEMP_CEF"
|
|
cp -r "$KEYMAN_CEF4DELPHI_ROOT"/* "$KEYMAN_WIX_TEMP_CEF"
|
|
"$WIXHEAT" dir "$KEYMAN_WIX_TEMP_CEF" -o cef.wxs -ag -cg CEF -dr INSTALLDIR -var var.CefSourceDir -wx -nologo
|
|
# When we candle/light build, we can grab the source files from the proper root so go ahead and delete the temp folder again
|
|
rm -rf "$KEYMAN_WIX_TEMP_CEF"
|
|
}
|
|
|
|
function heat-server() {
|
|
builder_heading heat-server
|
|
|
|
# We copy the files to a temp folder in order to exclude .git and README.md from harvesting
|
|
rm -rf "$KEYMAN_WIX_TEMP_SERVER"
|
|
mkdir -p "$KEYMAN_WIX_TEMP_SERVER"
|
|
cp -r "$KEYMAN_WIX_KMDEV_SERVER"/* "$KEYMAN_WIX_TEMP_SERVER"
|
|
"$WIXHEAT" dir "$KEYMAN_WIX_TEMP_SERVER" -o server.wxs -ag -cg Server -dr INSTALLDIR -var var.ServerSourceDir -wx -nologo
|
|
# When we candle/light build, we can grab the source files from the proper root so go ahead and delete the temp folder again
|
|
rm -rf "$KEYMAN_WIX_TEMP_SERVER"
|
|
}
|
|
|
|
function heat-kmc() {
|
|
builder_heading heat-kmc
|
|
|
|
cd "$DEVELOPER_ROOT/src/kmc"
|
|
# Build the distributable package
|
|
mkdir -p "$KEYMAN_WIX_TEMP_KMC"
|
|
# TODO: BUNDLE CORRECTLY
|
|
./build.sh bundle --build-path "$KEYMAN_WIX_TEMP_KMC"
|
|
|
|
# Build the .wxs file
|
|
cd "$THIS_SCRIPT_PATH"
|
|
"$WIXHEAT" dir "$KEYMAN_WIX_TEMP_KMC" -o kmc.wxs -ag -cg kmc -dr INSTALLDIR -var var.kmcSourceDir -wx -nologo
|
|
}
|
|
|
|
function clean-heat-kmc() {
|
|
builder_heading clean-heat-kmc
|
|
|
|
# the production build generates files that are not in source, e.g. .ps1 scripts
|
|
# When we candle/light build, we can grab the source files from the proper root so go ahead and delete the temp folder again
|
|
rm -rf "$KEYMAN_WIX_TEMP_KMC"
|
|
}
|
|
|
|
function make-installer() {
|
|
builder_heading make-installer
|
|
|
|
echo [Setup] > setup.inf
|
|
echo "Version=$KEYMAN_VERSION" >> setup.inf
|
|
echo "MSIFileName=keymandeveloper.msi" >> setup.inf
|
|
echo "Title=Keyman Developer ${KEYMAN_VERSION_WITH_TAG}" >>setup.inf
|
|
wzzip setup.zip keymandeveloper.msi setup.inf
|
|
cat "$DEVELOPER_PROGRAM/setup.exe" setup.zip > "keymandeveloper-$KEYMAN_VERSION.exe"
|
|
wrap-signcode //d "Keyman Developer" "keymandeveloper-$KEYMAN_VERSION.exe"
|
|
|
|
#
|
|
# Zip the files we distribute as part of the standalone kmc distro into release\$Version\kmcomp-$Version.zip
|
|
#
|
|
}
|
|
|
|
function make-kmc-install-zip() {
|
|
builder_heading make-kmc-install-zip
|
|
|
|
copy-schemas
|
|
cd "${DEVELOPER_ROOT}/bin"
|
|
|
|
# TODO: rename this to keyman-developer-cli-$Version.zip
|
|
local KMCOMP_ZIP="${DEVELOPER_ROOT}/release/${KEYMAN_VERSION}/kmcomp-${KEYMAN_VERSION}.zip"
|
|
|
|
# shellcheck disable=SC2154
|
|
local COMPRESS_CMD="${SEVENZ_HOME}/7z"
|
|
|
|
"${COMPRESS_CMD}" a -bd -bb0 "${KMCOMP_ZIP}" \
|
|
kmconvert.exe \
|
|
keyboard_info.schema.json \
|
|
xml/layoutbuilder/*.keyman-touch-layout \
|
|
projects/ \
|
|
server/
|
|
|
|
cd "$THIS_SCRIPT_PATH"
|
|
}
|
|
|
|
# TODO: are these required?
|
|
# kpj.schema.json kvks.schema.json \
|
|
# ldml-keyboard3.schema.json ldml-keyboardtest3.schema.json \
|
|
|
|
function copy-schemas() {
|
|
builder_heading copy-schemas
|
|
|
|
cp "$KEYMAN_ROOT/common/schemas/keyboard_info/keyboard_info.schema.json" "$DEVELOPER_ROOT/bin"
|
|
cp "$KEYMAN_ROOT/common/schemas/keyman-touch-layout/keyman-touch-layout.spec.json" "$DEVELOPER_ROOT/bin"
|
|
cp "$KEYMAN_ROOT/common/schemas/keyman-touch-layout/keyman-touch-layout.clean.spec.json" "$DEVELOPER_ROOT/bin"
|
|
cp "$KEYMAN_ROOT/common/schemas/displaymap/displaymap.schema.json" "$DEVELOPER_ROOT/bin"
|
|
cp "$KEYMAN_ROOT/common/schemas/kmp/kmp.schema.json" "$DEVELOPER_ROOT/bin"
|
|
}
|
|
|
|
#-------------------------------------------------------------------------------------------------------------------
|
|
|
|
builder_run_action clean do_clean
|
|
# builder_run_action configure do_configure
|
|
# builder_run_action build do_build
|
|
builder_run_action test do_test
|
|
builder_run_action publish do_publish
|