mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-05 00:15:32 +00:00
This change adds a new GitHub action that verifies that Keyman can build from the source package. Also check that source package used for Launchpad and Debian/Ubuntu packaging doesn't produce lintian errors. Previously lintian errors did go unnoticed because they didn't stop the build. Also refactor `launchpad.sh` script to be a proper builder script, and add some new parameters to allow skipping some steps in the script. Build-bot: skip Test-bot: skip
175 lines
5.8 KiB
Bash
Executable file
175 lines
5.8 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-full.inc.sh"
|
|
## END STANDARD BUILD SCRIPT INCLUDE
|
|
|
|
################################ Main script ################################
|
|
|
|
builder_describe \
|
|
"Build keyman-config." \
|
|
"clean" \
|
|
"configure" \
|
|
"build" \
|
|
"test" \
|
|
"install install artifacts" \
|
|
"uninstall uninstall artifacts" \
|
|
"--no-integration don't run integration tests" \
|
|
"--report create coverage report" \
|
|
"--coverage capture test coverage"
|
|
|
|
builder_parse "$@"
|
|
|
|
builder_describe_outputs \
|
|
build "/linux/keyman-config/keyman_config/standards/lang_tags_map.py"
|
|
|
|
clean_action() {
|
|
rm -rf dist make_deb build ./*.egg-info keyman_config/version.py
|
|
find . \( -name __pycache__ -o -name keyman-config.mo \) -exec rm -rf {} +
|
|
rm -rf ../docs/help/reference/km-*.md
|
|
rm -rf keyman_config/.pc
|
|
|
|
# Don't delete this file during a package build because they are
|
|
# part of the source package. We can't generate it during a package
|
|
# build because we need to get data from the network which isn't
|
|
# available for package builds.
|
|
if [ -z "${KEYMAN_PKG_BUILD-}" ]; then
|
|
rm -rf keyman_config/standards/lang_tags_map.py
|
|
fi
|
|
}
|
|
|
|
install_schema() {
|
|
local SCHEMA_DIR="$1"
|
|
mkdir -p "${SCHEMA_DIR}"
|
|
cp resources/com.keyman.gschema.xml "${SCHEMA_DIR}"/
|
|
glib-compile-schemas "${SCHEMA_DIR}"
|
|
}
|
|
|
|
execute_with_temp_schema() {
|
|
local TEMP_DATA_DIR SCHEMA_DIR
|
|
TEMP_DATA_DIR=$(mktemp -d)
|
|
SCHEMA_DIR="${TEMP_DATA_DIR}/glib-2.0/schemas"
|
|
export XDG_DATA_DIRS="${TEMP_DATA_DIR}":${XDG_DATA_DIRS-}
|
|
export GSETTINGS_SCHEMA_DIR="${SCHEMA_DIR}:/usr/share/glib-2.0/schemas/:${GSETTINGS_SCHEMA_DIR-}"
|
|
|
|
install_schema "${SCHEMA_DIR}"
|
|
"$@"
|
|
|
|
unset GSETTINGS_SCHEMA_DIR
|
|
export XDG_DATA_DIRS=${XDG_DATA_DIRS#*:}
|
|
rm -rf "${TEMP_DATA_DIR}"
|
|
}
|
|
|
|
build_man_and_help_pages() {
|
|
execute_with_temp_schema ./build-help.sh --no-reconf
|
|
}
|
|
|
|
build_action() {
|
|
builder_echo "Create version.py"
|
|
pushd keyman_config
|
|
sed \
|
|
-e "s/__KEYMAN_VERSION__/${KEYMAN_VERSION}/g" \
|
|
-e "s/__KEYMAN_VERSION_WITH_TAG__/${KEYMAN_VERSION_WITH_TAG}/g" \
|
|
-e "s/__KEYMAN_VERSION_GIT_TAG__/${KEYMAN_VERSION_GIT_TAG}/g" \
|
|
-e "s/__KEYMAN_VERSION_MAJOR__/${KEYMAN_VERSION_MAJOR}/g" \
|
|
-e "s/__KEYMAN_VERSION_RELEASE__/${KEYMAN_VERSION_RELEASE}/g" \
|
|
-e "s/__KEYMAN_TIER__/${KEYMAN_TIER}/g" \
|
|
-e "s/__KEYMAN_VERSION_ENVIRONMENT__/${KEYMAN_VERSION_ENVIRONMENT}/g" \
|
|
-e "s/__UPLOAD_SENTRY__/${UPLOAD_SENTRY}/g" \
|
|
version.py.in > version.py
|
|
popd
|
|
pushd buildtools
|
|
if [[ -f build-langtags.py ]]; then
|
|
builder_echo "Create lang_tags_map.py"
|
|
python3 ./build-langtags.py
|
|
else
|
|
builder_echo "Skip building lang_tags_map.py during package build"
|
|
fi
|
|
popd
|
|
builder_echo "Building man and help pages"
|
|
build_man_and_help_pages
|
|
builder_echo "Building keyman-config"
|
|
# we use `dpkg --compare-versions` to compare the current Ubuntu version
|
|
if dpkg --compare-versions "$(lsb_release -r -s)" lt 24.04; then
|
|
# Ubuntu 22.04 Jammy has a buggy version of python3-build which doesn't work
|
|
# TODO: remove once we drop support for Ubuntu 22.04 Jammy
|
|
python3 setup.py build
|
|
else
|
|
python3 -m build --outdir build .
|
|
fi
|
|
}
|
|
|
|
test_action() {
|
|
local options
|
|
|
|
if builder_has_option --coverage; then
|
|
options="--coverage"
|
|
else
|
|
options=""
|
|
fi
|
|
execute_with_temp_schema ./run-tests.sh "${options}"
|
|
|
|
if builder_has_option --report; then
|
|
builder_echo "Creating coverage report"
|
|
python3 -m coverage html --directory="${THIS_SCRIPT_PATH}/build/coveragereport/" --data-file=build/.coverage
|
|
fi
|
|
}
|
|
|
|
install_action() {
|
|
if [[ -v VIRTUAL_ENV ]]; then
|
|
# Running in a virtual environment
|
|
pip3 install qrcode sentry-sdk fonttools setuptools
|
|
pip3 install .
|
|
# install icons
|
|
mkdir -p "${VIRTUAL_ENV}/share/keyman/icons"
|
|
cp keyman_config/icons/* "${VIRTUAL_ENV}/share/keyman/icons"
|
|
# install man pages
|
|
mkdir -p "${VIRTUAL_ENV}/share/man/man1"
|
|
cp ../../debian/man/*.1 "${VIRTUAL_ENV}/share/man/man1"
|
|
# install schema
|
|
install_schema "${VIRTUAL_ENV}/share/glib-2.0/schemas"
|
|
elif [[ -n "${SUDO_USER:-}" ]] || [[ "$(id -u)" == "0" ]]; then
|
|
# as root install into /usr/local
|
|
pip3 install qrcode sentry-sdk
|
|
pip3 install --prefix /usr/local .
|
|
# install icons
|
|
mkdir -p /usr/local/share/keyman/icons
|
|
cp keyman_config/icons/* /usr/local/share/keyman/icons
|
|
# install man pages
|
|
mkdir -p /usr/local/share/man/man1
|
|
cp ../../debian/man/*.1 /usr/local/share/man/man1
|
|
# install schema
|
|
install_schema "/usr/local/share/glib-2.0/schemas"
|
|
else
|
|
# without sudo install into /tmp/keyman (or $DESTDIR)
|
|
python_version=$(python3 -c 'import sys;import os;pythonver="python%d.%d" % (sys.version_info[0], sys.version_info[1]);sitedir = os.path.join("lib", pythonver, "site-packages");print(sitedir)')
|
|
mkdir -p "/tmp/keyman/${python_version}"
|
|
pip3 install --prefix /tmp/keyman .
|
|
# install schema
|
|
install_schema "/tmp/keyman/local/share/glib-2.0/schemas"
|
|
fi
|
|
}
|
|
|
|
uninstall_action() {
|
|
# run as sudo
|
|
clean_action
|
|
rm -rf /usr/local/share/keyman/icons
|
|
rm -f /usr/local/share/man/man1/km-*.1
|
|
rm -f /usr/local/share/glib-2.0/schemas/com.keyman.gschema.xml
|
|
pip3 uninstall keyman_config
|
|
rm -f /usr/local/bin/km-config
|
|
rm -f /usr/local/bin/km-kvk2ldml
|
|
rm -f /usr/local/bin/km-package-get
|
|
rm -f /usr/local/bin/km-package-install
|
|
rm -f /usr/local/bin/km-package-list-installed
|
|
rm -f /usr/local/bin/km-package-uninstall
|
|
}
|
|
|
|
builder_run_action clean clean_action
|
|
builder_run_action configure # nothing to do
|
|
builder_run_action build build_action
|
|
builder_run_action test test_action
|
|
builder_run_action install install_action
|
|
builder_run_action uninstall uninstall_action
|