diff --git a/.github/workflows/auto-merge-keyman-server-pr.yml b/.github/workflows/auto-merge-keyman-server-pr.yml index 0c920c2650..39cafc3f91 100644 --- a/.github/workflows/auto-merge-keyman-server-pr.yml +++ b/.github/workflows/auto-merge-keyman-server-pr.yml @@ -17,12 +17,15 @@ jobs: if: ${{ github.repository == 'keymanapp/keyman' && github.actor == 'keyman-server' && startsWith(github.event.pull_request.title, 'auto:') }} steps: - name: auto approve PR from keyman-server - uses: hmarr/auto-approve-action@f0939ea97e9205ef24d872e76833fa908a770363 - with: - github-token: "${{ secrets.GITHUB_TOKEN }}" - - name: auto merge PR from keyman-server - uses: "pascalgn/automerge-action@7854d3bd607dccdaf0b2c134b699a812c8960213" + shell: bash env: - GITHUB_TOKEN: "${{ secrets.AUTOINC_GITHUB_TOKEN }}" - MERGE_LABELS: "automerge" - MERGE_FORKS: false + GH_TOKEN: "${{ github.token }}" + run: | + gh pr review -R keymanapp/keyman --approve ${{ github.event.pull_request.number }} + - name: mark PR for auto-merge from keyman-server + shell: bash + if: contains(github.event.pull_request.labels.*.name, 'automerge') + env: + GH_TOKEN: "${{ secrets.AUTOINC_GITHUB_TOKEN }}" + run: | + gh pr merge -R keymanapp/keyman --merge --auto ${{ github.event.pull_request.number }} diff --git a/.github/workflows/deb-packaging.yml b/.github/workflows/deb-packaging.yml index a06d7ed3cd..a40fcb7259 100644 --- a/.github/workflows/deb-packaging.yml +++ b/.github/workflows/deb-packaging.yml @@ -86,7 +86,14 @@ jobs: shell: bash run: | THIS_SCRIPT="$GITHUB_WORKSPACE/.github/workflows/deb-packaging.yml" - . "${THIS_SCRIPT%/*}/../../resources/build/build-utils.sh" + if [[ -f "${THIS_SCRIPT%/*}/../../resources/build/builder-basic.inc.sh" ]]; then + . "${THIS_SCRIPT%/*}/../../resources/build/builder-basic.inc.sh" + else + # TODO: remove following block post v19 release (file was renamed in v19 alpha) + if [[ -f "${THIS_SCRIPT%/*}/../../resources/build/build-utils.sh" ]]; then + . "${THIS_SCRIPT%/*}/../../resources/build/build-utils.sh" + fi + fi echo "KEYMAN_VERSION=${KEYMAN_VERSION:-${VERSION}}" >> $GITHUB_OUTPUT - name: Set prerelease tag as output parameter diff --git a/.gitignore b/.gitignore index 6c8fbfbec8..6316adb5d2 100644 --- a/.gitignore +++ b/.gitignore @@ -164,7 +164,7 @@ tsconfig.tsbuildinfo # Windows system files Thumbs.db -# Temporary file for logging scripts in xcode runs, see build-utils.sh for +# Temporary file for logging scripts in xcode runs, see builder-basic.inc.sh for # details /xcodebuild-scripts.log diff --git a/HISTORY.md b/HISTORY.md index cb0b00a11b..f92734571d 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,78 @@ # Keyman Version History +## 19.0.100 alpha 2025-08-14 + +* maint(resources): add space to test-bot command (#14528) +* fix(web): improve accuracy of types for suggestions & suggestion-generation (#14517) +* refactor(web): move applySuggestionCasing to standalone exportable method (#14518) +* chore(web): convert worker-thread tests to TS (#14510) + +## 19.0.99 alpha 2025-08-14 + +* maint(web): skip unnecessary steps for `build` buildLevel (#14516) + +## 19.0.98 alpha 2025-08-14 + +* maint(resources): specify `keymanapp/keyman` for gh in automerge (#14524) + +## 19.0.97 alpha 2025-08-14 + +* maint(resources): use GH_TOKEN variable for gh calls (#14522) + +## 19.0.96 alpha 2025-08-14 + +* maint(resources): add build-bot commands to increment-version auto PRs (#14504) +* maint(resources): use GH builtin automerge for auto PRs (#14519) + +## 19.0.95 alpha 2025-08-13 + +* fix(web): use actual legacy model for legacy-model support unit tests (#14460) +* chore(common): Update Crowdin strings for Spanish (#14464) +* fix(android): Get default sizes before initializing keyboard (#14472) +* docs(resources): clarify Build-bot usage (#14282) +* maint(resources): build.sh-style commands for build-bot (#14461) +* chore(android): Update keycode test app dependencies (#14474) +* maint(common): update npm modules brace-expansion to 1.1.12, form-data to 4.0.4 (#14479) +* chore(android): Specify Java language version 21 (#14491) +* maint(ios): skip unnecessary network steps when buildLevel is build (#14466) +* maint(common): rename shellHelperFunctions.sh to utils.inc.sh (#14446) +* maint(common): consolidate builder scripts (#14449) +* maint(common): rename and move node-related script functions into node.inc.sh (#14451) +* maint(common): move typescript script functions into typescript.inc.sh (#14452) +* maint(common): reorganize mac/ios build script includes (#14458) +* docs(resources): add note on builder-basic vs builder-full (#14507) + +## 19.0.94 alpha 2025-08-01 + +* maint(common): use `cpp_std=c++17` in meson project default_options (#14433) + +## 19.0.93 alpha 2025-07-29 + +* test(developer): add unit tests for `isValidUtf8` (#14381) +* maint(linux): fix stopping of test server (#14403) + +## 19.0.92 alpha 2025-07-28 + +* build(deps): bump multer from 2.0.1 to 2.0.2 (#14373) +* refactor(linux): remove shellcheck warnings (#14409) +* refactor(linux): move dbus defines to common include (#14407) +* docs(linux): update readme for test service (#14408) +* fix(windows): add check a fix for registry datatypes (#14358) + +## 19.0.91 alpha 2025-07-26 + +* maint(windows): fix calls of renamed functions (#14413) + +## 19.0.90 alpha 2025-07-25 + +* maint(common): fix standalone use of `resources/builder.inc.sh` (#14399) +* maint(resources): use `tc_` prefix for all `tc-*.inc.sh` functions (#14267) + +## 19.0.89 alpha 2025-07-24 + +* docs(common): Document minimum version of Chrome 95.0 for Android (#14385) +* refactor(android): Update minimum target Chrome version to 95.0 and refactor to use constants (#14391) + ## 19.0.88 alpha 2025-07-23 * maint(windows): consider `GO_FAST` env variable in `add_zip_files` (#14338) diff --git a/VERSION.md b/VERSION.md index 48ee77477d..3836ccc4d6 100644 --- a/VERSION.md +++ b/VERSION.md @@ -1 +1 @@ -19.0.89 \ No newline at end of file +19.0.101 \ No newline at end of file diff --git a/android/KMAPro/build.sh b/android/KMAPro/build.sh index fd54215d1c..525b951138 100755 --- a/android/KMAPro/build.sh +++ b/android/KMAPro/build.sh @@ -3,10 +3,10 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" . "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" . "$KEYMAN_ROOT/resources/build/build-help.inc.sh" . "$KEYMAN_ROOT/resources/build/build-download-resources.sh" diff --git a/android/KMAPro/kMAPro/build.gradle b/android/KMAPro/kMAPro/build.gradle index 19dba38af3..b41de722c6 100644 --- a/android/KMAPro/kMAPro/build.gradle +++ b/android/KMAPro/kMAPro/build.gradle @@ -11,6 +11,12 @@ apply from: "$rootPath/version.gradle" String tier = new File('../../TIER.md').getText('UTF-8').trim(); +java { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } +} + android { compileSdk 35 namespace="com.tavultesoft.kmapro" @@ -24,11 +30,6 @@ android { buildConfig = true } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_21 - targetCompatibility = JavaVersion.VERSION_21 - } - defaultConfig { applicationId "com.tavultesoft.kmapro" minSdkVersion 21 diff --git a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/MainActivity.java b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/MainActivity.java index 1515a82076..b422d7e881 100644 --- a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/MainActivity.java +++ b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/MainActivity.java @@ -875,6 +875,9 @@ public class MainActivity extends BaseActivity implements OnKeyboardEventListene private void displayUpdateChrome() { // TextView's default string is to update Chrome + TextView textView = (TextView)findViewById(R.id.kmWebViewChromeTextView); + textView.setText(String.format(getString(R.string.text_require_chrome_version), + WebViewUtils.KEYMAN_MIN_TARGET_VERSION_ANDROID_CHROME)); Button button = (Button)findViewById(R.id.webViewChromeButton); button.setText(getString(R.string.button_update_chrome)); diff --git a/android/KMAPro/kMAPro/src/main/res/layout/check_chrome_webview_layout.xml b/android/KMAPro/kMAPro/src/main/res/layout/check_chrome_webview_layout.xml index 09716bdd8a..ea5a9220d5 100644 --- a/android/KMAPro/kMAPro/src/main/res/layout/check_chrome_webview_layout.xml +++ b/android/KMAPro/kMAPro/src/main/res/layout/check_chrome_webview_layout.xml @@ -15,7 +15,7 @@ android:background="@android:color/white" android:gravity="start" android:layout_gravity="center_vertical" - android:text="@string/text_require_chrome_57" + android:text="@string/text_require_chrome_version" android:layout_marginStart="@dimen/button_playstore_margin" android:textSize="@dimen/update_chrome_label_textsize" /> diff --git a/android/KMAPro/kMAPro/src/main/res/values/strings.xml b/android/KMAPro/kMAPro/src/main/res/values/strings.xml index a0447d0f89..32cdf07f1a 100644 --- a/android/KMAPro/kMAPro/src/main/res/values/strings.xml +++ b/android/KMAPro/kMAPro/src/main/res/values/strings.xml @@ -30,10 +30,13 @@ Version: %1$s - + Keyman requires Chrome version 57 or newer. + + Keyman requires Chrome version %1$s or newer. + Update Chrome diff --git a/android/KMEA/app/build.gradle b/android/KMEA/app/build.gradle index 3b68839d43..fd5a86a3c3 100644 --- a/android/KMEA/app/build.gradle +++ b/android/KMEA/app/build.gradle @@ -12,6 +12,12 @@ base { archivesName = "keyman-engine" } +java { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } +} + android { compileSdk 35 namespace "com.keyman.engine" @@ -21,11 +27,6 @@ android { buildConfig = true } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_21 - targetCompatibility = JavaVersion.VERSION_21 - } - defaultConfig { minSdkVersion 21 targetSdkVersion 35 diff --git a/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java b/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java index d7302bec4e..60218cb2de 100644 --- a/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java +++ b/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java @@ -495,6 +495,11 @@ public final class KMManager { didCopyAssets = true; } + calculateDefaultKeyboardHeights(context); + SharedPreferences prefs = context.getSharedPreferences(KMManager.KMEngine_PrefsKey, Context.MODE_PRIVATE); + KeyboardHeight_Context_Portrait_Current = prefs.getInt(KMManager.KMKey_KeyboardHeightPortrait, KMManager.KeyboardHeight_Context_Portrait_Default); + KeyboardHeight_Context_Landscape_Current = prefs.getInt(KMManager.KMKey_KeyboardHeightLandscape, KMManager.KeyboardHeight_Context_Landscape_Default); + if (keyboardType == KeyboardType.KEYBOARD_TYPE_UNDEFINED) { String msg = "Cannot initialize: Invalid keyboard type"; KMLog.LogError(TAG, msg); @@ -508,12 +513,6 @@ public final class KMManager { migrateCloudKeyboards(appContext); CloudDownloadMgr.getInstance().initialize(appContext); - - calculateDefaultKeyboardHeights(context); - SharedPreferences prefs = context.getSharedPreferences(KMManager.KMEngine_PrefsKey, Context.MODE_PRIVATE); - KeyboardHeight_Context_Portrait_Current = prefs.getInt(KMManager.KMKey_KeyboardHeightPortrait, KMManager.KeyboardHeight_Context_Portrait_Default); - KeyboardHeight_Context_Landscape_Current = prefs.getInt(KMManager.KMKey_KeyboardHeightLandscape, KMManager.KeyboardHeight_Context_Landscape_Default); - } public static void executeResourceUpdate(Context aContext) diff --git a/android/KMEA/app/src/main/java/com/keyman/engine/util/WebViewUtils.java b/android/KMEA/app/src/main/java/com/keyman/engine/util/WebViewUtils.java index de8b37f73e..0586ecbcc8 100644 --- a/android/KMEA/app/src/main/java/com/keyman/engine/util/WebViewUtils.java +++ b/android/KMEA/app/src/main/java/com/keyman/engine/util/WebViewUtils.java @@ -32,6 +32,13 @@ public final class WebViewUtils { FULL; // WebView installed and enabled } + // Min version of Chrome for Keyman for Android for EngineWebViewVersionStatus.DEGRADED + public static final String KEYMAN_MIN_TARGET_VERSION_DEGRADED_ANDROID_CHROME = "37.0"; + + // Min version of Chrome for Keyman for Android (EngineWebViewVersionStatus.FULL) + // TODO: Keep this version in sync with resources/build/minimum-versions.inc.sh + public static final String KEYMAN_MIN_TARGET_VERSION_ANDROID_CHROME = "95.0"; + private static final String CHROME_INSTALL_PATTERN_FORMATSTR = "^.*Chrome/([\\d.]+).*$"; private static final Pattern installPattern = Pattern.compile(CHROME_INSTALL_PATTERN_FORMATSTR); @@ -52,9 +59,11 @@ public final class WebViewUtils { chromeVersion = getChromeVersion(context, webView); } - if (FileUtils.compareVersions("37.0", chromeVersion) == FileUtils.VERSION_GREATER) { + if (FileUtils.compareVersions(KEYMAN_MIN_TARGET_VERSION_DEGRADED_ANDROID_CHROME, chromeVersion) + == FileUtils.VERSION_GREATER) { return EngineWebViewVersionStatus.DISABLED; - } else if (FileUtils.compareVersions("57.0", chromeVersion) == FileUtils.VERSION_GREATER) { + } else if (FileUtils.compareVersions(KEYMAN_MIN_TARGET_VERSION_ANDROID_CHROME, chromeVersion) + == FileUtils.VERSION_GREATER) { return EngineWebViewVersionStatus.DEGRADED; } diff --git a/android/KMEA/app/src/main/res/values-es-rES/strings.xml b/android/KMEA/app/src/main/res/values-es-rES/strings.xml index 0ab0ea317b..4846da0dac 100644 --- a/android/KMEA/app/src/main/res/values-es-rES/strings.xml +++ b/android/KMEA/app/src/main/res/values-es-rES/strings.xml @@ -83,13 +83,13 @@ Error en el teclado %1$s:%2$s para %3$s idioma. - Keyman requires WebView to be installed.\" + Keyman requiere que WebView esté instalado.\" - Keyman requires WebView to be enabled.\" + Keyman requiere que WebView esté habilitado.\" - Install WebView + Instalar WebView - Enable WebView + Habilitar WebView Comprobando si hay un diccionario asociado para descargar No se puede conectar al servidor Keyman para comprobar si hay un diccionario asociado para descargar @@ -124,7 +124,7 @@ ¡Falló al acceder al servidor! - DownloadManager disabled - cannot check for updates + Descargador deshabilitado: no se pueden comprobar actualizaciones "¡Todos los recursos están actualizados!" diff --git a/android/KMEA/app/src/test/java/com/keyman/engine/util/WebViewUtilsTest.java b/android/KMEA/app/src/test/java/com/keyman/engine/util/WebViewUtilsTest.java index 344b01879a..342934200a 100644 --- a/android/KMEA/app/src/test/java/com/keyman/engine/util/WebViewUtilsTest.java +++ b/android/KMEA/app/src/test/java/com/keyman/engine/util/WebViewUtilsTest.java @@ -32,28 +32,30 @@ public class WebViewUtilsTest { @Test public void test_Chrome36_EngineWebViewVersionStatusDisabled() { - String chromeVersion = "36.0"; + double chromeVersionFloat = Float.parseFloat(WebViewUtils.KEYMAN_MIN_TARGET_VERSION_DEGRADED_ANDROID_CHROME) - 1.0; + String chromeVersion = String.valueOf(chromeVersionFloat); Assert.assertEquals(WebViewUtils.getEngineWebViewVersionStatus(context, null, chromeVersion), WebViewUtils.EngineWebViewVersionStatus.DISABLED); } @Test public void test_Chrome37_EngineWebViewVersionStatusDegraded() { - String chromeVersion = "37.0"; + String chromeVersion = WebViewUtils.KEYMAN_MIN_TARGET_VERSION_DEGRADED_ANDROID_CHROME; Assert.assertEquals(WebViewUtils.getEngineWebViewVersionStatus(context, null, chromeVersion), WebViewUtils.EngineWebViewVersionStatus.DEGRADED); } @Test - public void test_Chrome56_EngineWebViewVersionStatusDegraded() { - String chromeVersion = "56.0"; + public void test_Chrome94_EngineWebViewVersionStatusDegraded() { + double chromeVersionFloat = Float.parseFloat(WebViewUtils.KEYMAN_MIN_TARGET_VERSION_ANDROID_CHROME) - 1.0; + String chromeVersion = String.valueOf(chromeVersionFloat); Assert.assertEquals(WebViewUtils.getEngineWebViewVersionStatus(context, null, chromeVersion), WebViewUtils.EngineWebViewVersionStatus.DEGRADED); } @Test - public void test_Chrome57_EngineWebViewVersionStatusFull() { - String chromeVersion = "57.0"; + public void test_Chrome95_EngineWebViewVersionStatusFull() { + String chromeVersion = WebViewUtils.KEYMAN_MIN_TARGET_VERSION_ANDROID_CHROME; Assert.assertEquals(WebViewUtils.getEngineWebViewVersionStatus(context, null, chromeVersion), WebViewUtils.EngineWebViewVersionStatus.FULL); } diff --git a/android/KMEA/build.sh b/android/KMEA/build.sh index 4d4ea7f8e3..9b6d0d4892 100755 --- a/android/KMEA/build.sh +++ b/android/KMEA/build.sh @@ -4,10 +4,10 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" . "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" # ################################ Main script ################################ diff --git a/android/Samples/KMSample1/app/build.gradle b/android/Samples/KMSample1/app/build.gradle index 53a4a560f2..07f6e903f3 100644 --- a/android/Samples/KMSample1/app/build.gradle +++ b/android/Samples/KMSample1/app/build.gradle @@ -2,6 +2,12 @@ plugins { id 'com.android.application' } +java { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } +} + android { compileSdk 35 namespace="com.keyman.kmsample1" diff --git a/android/Samples/KMSample1/build.sh b/android/Samples/KMSample1/build.sh index 172ef6c5e7..65e5619815 100755 --- a/android/Samples/KMSample1/build.sh +++ b/android/Samples/KMSample1/build.sh @@ -4,10 +4,10 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" . "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" ################################ Main script ################################ @@ -23,7 +23,7 @@ builder_describe "Build KMSample1 app for Android." \ "configure" \ "build" \ "test" \ - ":app KMSample1" + ":app KMSample1" # parse before describe_outputs to check debug flags builder_parse "$@" diff --git a/android/Samples/KMSample2/app/build.gradle b/android/Samples/KMSample2/app/build.gradle index 5bafdc295a..4baaf52b6f 100644 --- a/android/Samples/KMSample2/app/build.gradle +++ b/android/Samples/KMSample2/app/build.gradle @@ -2,6 +2,12 @@ plugins { id 'com.android.application' } +java { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } +} + android { compileSdk 35 namespace="com.keyman.kmsample2" diff --git a/android/Samples/KMSample2/build.sh b/android/Samples/KMSample2/build.sh index 2f7a99c764..08c5261778 100755 --- a/android/Samples/KMSample2/build.sh +++ b/android/Samples/KMSample2/build.sh @@ -4,10 +4,10 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" . "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" ################################ Main script ################################ @@ -23,7 +23,7 @@ builder_describe "Build KMSample2 app for Android." \ "configure" \ "build" \ "test" \ - ":app KMSample2" + ":app KMSample2" # parse before describe_outputs to check debug flags builder_parse "$@" diff --git a/android/Tests/KeyboardHarness/app/build.gradle b/android/Tests/KeyboardHarness/app/build.gradle index 3eb7f27d28..6b28b62d9c 100644 --- a/android/Tests/KeyboardHarness/app/build.gradle +++ b/android/Tests/KeyboardHarness/app/build.gradle @@ -5,6 +5,12 @@ plugins { ext.rootPath = '../../../' apply from: "$rootPath/version.gradle" +java { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } +} + android { compileSdk 35 namespace="com.keyman.android.tests.keyboardHarness" diff --git a/android/Tests/KeyboardHarness/build.gradle b/android/Tests/KeyboardHarness/build.gradle index 8fdf2aa422..966127346a 100644 --- a/android/Tests/KeyboardHarness/build.gradle +++ b/android/Tests/KeyboardHarness/build.gradle @@ -15,8 +15,8 @@ buildscript { allprojects { repositories { + maven { url uri("${projectDir}/libs") } google() - jcenter() mavenCentral() } } diff --git a/android/Tests/KeyboardHarness/build.sh b/android/Tests/KeyboardHarness/build.sh index c23f8ca0f5..66f2b0496e 100755 --- a/android/Tests/KeyboardHarness/build.sh +++ b/android/Tests/KeyboardHarness/build.sh @@ -4,10 +4,10 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" . "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" ################################ Main script ################################ @@ -23,7 +23,7 @@ builder_describe "Build KeyboardHarness test app for Android." \ "configure" \ "build" \ "test" \ - ":app KeyboardHarness" + ":app KeyboardHarness" # parse before describe outputs to check debug flags builder_parse "$@" diff --git a/android/Tests/keycode/app/build.gradle b/android/Tests/keycode/app/build.gradle index 975d8054ae..769cddb88a 100644 --- a/android/Tests/keycode/app/build.gradle +++ b/android/Tests/keycode/app/build.gradle @@ -1,4 +1,6 @@ -apply plugin: 'com.android.application' +plugins { + id 'com.android.application' +} ext.rootPath = '../../../' apply from: "$rootPath/version.gradle" @@ -7,6 +9,11 @@ android { compileSdk 35 namespace="com.keyman.android.tests.keycode" + buildFeatures { + // needed for custom BuildConfigField values in defaultConfig + buildConfig = true + } + defaultConfig { applicationId "com.keyman.android.tests.keycode" minSdkVersion 21 @@ -27,11 +34,10 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation 'androidx.appcompat:appcompat:1.6.1' + implementation 'androidx.appcompat:appcompat:1.7.0' + implementation 'androidx.constraintlayout:constraintlayout:2.2.1' implementation 'com.google.android.material:material:1.12.0' - implementation 'androidx.constraintlayout:constraintlayout:2.1.4' - - testImplementation 'androidx.test:core:1.5.0' - testImplementation 'androidx.test.ext:junit:1.1.5' - testImplementation 'org.robolectric:robolectric:4.10.3' + testImplementation 'androidx.test.ext:junit:1.2.1' + testImplementation 'org.robolectric:robolectric:4.14.1' + testImplementation 'androidx.test:core:1.6.1' } diff --git a/android/Tests/keycode/app/src/androidTest/java/com/keyman/android/tests/keycode/ExampleInstrumentedTest.java b/android/Tests/keycode/app/src/test/java/com/keyman/android/tests/keycode/ExampleInstrumentedTest.java similarity index 72% rename from android/Tests/keycode/app/src/androidTest/java/com/keyman/android/tests/keycode/ExampleInstrumentedTest.java rename to android/Tests/keycode/app/src/test/java/com/keyman/android/tests/keycode/ExampleInstrumentedTest.java index d4bbda1b05..cf2b42ce88 100644 --- a/android/Tests/keycode/app/src/androidTest/java/com/keyman/android/tests/keycode/ExampleInstrumentedTest.java +++ b/android/Tests/keycode/app/src/test/java/com/keyman/android/tests/keycode/ExampleInstrumentedTest.java @@ -1,25 +1,25 @@ package com.keyman.android.tests.keycode; -import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.core.app.ApplicationProvider; -import org.junit.Test; -import org.junit.runner.RunWith; +import android.content.Context; import static org.junit.Assert.*; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; /** * Instrumented test, which will execute on an Android device. * * @see Testing documentation */ -@RunWith(AndroidJUnit4.class) +@RunWith(RobolectricTestRunner.class) public class ExampleInstrumentedTest { @Test public void useAppContext() { // Context of the app under test. - Context appContext = InstrumentationRegistry.getTargetContext(); + Context appContext = ApplicationProvider.getApplicationContext(); assertEquals("com.keyman.android.tests.keycode", appContext.getPackageName()); } diff --git a/android/Tests/keycode/app/src/test/java/com/keyman/android/tests/keycode/ExampleUnitTest.java b/android/Tests/keycode/app/src/test/java/com/keyman/android/tests/keycode/ExampleUnitTest.java index 7e0e3c7481..544b21224c 100644 --- a/android/Tests/keycode/app/src/test/java/com/keyman/android/tests/keycode/ExampleUnitTest.java +++ b/android/Tests/keycode/app/src/test/java/com/keyman/android/tests/keycode/ExampleUnitTest.java @@ -1,4 +1,4 @@ -package com.example.darcy.keycode; +package com.keyman.android.tests.keycode; import org.junit.Test; diff --git a/android/Tests/keycode/build.gradle b/android/Tests/keycode/build.gradle index 47a85343bf..3a7f319289 100644 --- a/android/Tests/keycode/build.gradle +++ b/android/Tests/keycode/build.gradle @@ -4,10 +4,10 @@ buildscript { repositories { google() - jcenter() + mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'com.android.tools.build:gradle:8.9.2' // NOTE: Do not place your application dependencies here; they belong @@ -18,10 +18,6 @@ buildscript { allprojects { repositories { google() - jcenter() + mavenCentral() } } - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/android/Tests/keycode/gradle.properties b/android/Tests/keycode/gradle.properties index 7d43aa3719..44ff6135fe 100644 --- a/android/Tests/keycode/gradle.properties +++ b/android/Tests/keycode/gradle.properties @@ -14,4 +14,6 @@ org.gradle.jvmargs=-Xmx1024m # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true +# AGP 8.0 generates R classes for resources defined in the current module only. +android.nonTransitiveRClass=false diff --git a/android/build.sh b/android/build.sh index eeaa3f6e9a..e00c99e634 100755 --- a/android/build.sh +++ b/android/build.sh @@ -10,11 +10,11 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE # shellcheck disable=SC2154 -. "${KEYMAN_ROOT}/resources/shellHelperFunctions.sh" +. "${KEYMAN_ROOT}/resources/build/utils.inc.sh" . "${KEYMAN_ROOT}/resources/build/build-utils-ci.inc.sh" . "${KEYMAN_ROOT}/resources/build/zip.inc.sh" @@ -108,8 +108,18 @@ function archive_artifacts() { fi } -# Override JAVA_HOME to OpenJDK 11 -set_java_home + +# For CI compatibility of building Keyman for Android 18.0 with OpenJDK 11, +# this overrides JAVA_HOME for the builder script to use OpenJDK 21. +android_set_java_home() { + if [[ ! -z ${JAVA_HOME_21+x} ]]; then + builder_echo "Setting JAVA_HOME to JAVA_HOME_21 (${JAVA_HOME_21})" + export JAVA_HOME="${JAVA_HOME_21}" + fi +} + +# Override JAVA_HOME +android_set_java_home # This script also responsible for cleaning up /android/upload builder_run_child_actions clean diff --git a/android/docs/help/about/system-requirements.md b/android/docs/help/about/system-requirements.md index 16efbf28af..ae43794793 100644 --- a/android/docs/help/about/system-requirements.md +++ b/android/docs/help/about/system-requirements.md @@ -9,7 +9,7 @@ Keyman for Android will run on Android phones and tablets that have a minimum ve [Android 5.0 (Lollipop)](https://developer.android.com/about/versions/lollipop). ### Minimum Chrome Version -Keyman for Android requires a minimum version 53.0 of [Google +Keyman for Android requires a minimum version 95.0 of [Google Chrome](https://play.google.com/store/apps/details?id=com.android.chrome). If you have an older device, you may need to upgrade Chrome before you can use Keyman, e.g. through the Play Store. diff --git a/android/utility/i18n-check-unused-strings.sh b/android/utility/i18n-check-unused-strings.sh index 062ff8cff4..9e3a0a21c3 100755 --- a/android/utility/i18n-check-unused-strings.sh +++ b/android/utility/i18n-check-unused-strings.sh @@ -25,7 +25,7 @@ set -u # die on undefined variables ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../resources/build/build-utils.sh" +. "${THIS_SCRIPT%/*}/../../resources/build/builder-basic.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE # Preparation diff --git a/build.sh b/build.sh index a455d3307f..2589a162b1 100755 --- a/build.sh +++ b/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "Keyman -- all projects" \ diff --git a/common/build.sh b/common/build.sh index 5119bca8ac..a066cf15d3 100755 --- a/common/build.sh +++ b/common/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "Keyman common and resources modules" \ diff --git a/common/include/build.sh b/common/include/build.sh index 9115bd661a..962d13d5c7 100755 --- a/common/include/build.sh +++ b/common/include/build.sh @@ -5,7 +5,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "Build keymanversion_build.h" configure build clean diff --git a/common/linux/build.sh b/common/linux/build.sh index b52102313e..2df05e03ba 100755 --- a/common/linux/build.sh +++ b/common/linux/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE # diff --git a/common/mac/build.sh b/common/mac/build.sh index 44a7064c83..1acf2f3ccd 100755 --- a/common/mac/build.sh +++ b/common/mac/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE # diff --git a/common/test/keyboards/baseline/build.sh b/common/test/keyboards/baseline/build.sh index 065e2593c5..1428b5e0c4 100755 --- a/common/test/keyboards/baseline/build.sh +++ b/common/test/keyboards/baseline/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "Baseline keyboards tests -- built with 16.0 compiler" \ diff --git a/common/test/keyboards/build.sh b/common/test/keyboards/build.sh index 2d6a986b87..489bf17543 100755 --- a/common/test/keyboards/build.sh +++ b/common/test/keyboards/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE . "$KEYMAN_ROOT/resources/build/zip.inc.sh" diff --git a/common/test/keyboards/issue/6254-invalid-version-99/build.sh b/common/test/keyboards/issue/6254-invalid-version-99/build.sh index 7bf37f54e4..80c5e575e6 100755 --- a/common/test/keyboards/issue/6254-invalid-version-99/build.sh +++ b/common/test/keyboards/issue/6254-invalid-version-99/build.sh @@ -3,8 +3,8 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../../resources/build/build-utils.sh" -# . "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-basic.inc.sh" +# . "$KEYMAN_ROOT/resources/build/utils.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE THIS_DIR="$(dirname "$THIS_SCRIPT")" diff --git a/common/test/resources/model-helpers.mjs b/common/test/resources/model-helpers.mjs index a3f141cd54..6ea3620c9d 100644 --- a/common/test/resources/model-helpers.mjs +++ b/common/test/resources/model-helpers.mjs @@ -19,7 +19,9 @@ import { fileURLToPath } from 'url'; /** * Creates a MessageEvent (for inter-worker communication), with the given data payload. * - * @param {*} data + * @template {T} + * @param {T} data + * @returns {T} */ export function createMessageEventWithData(data) { return { data }; diff --git a/common/test/resources/test_kill_browserstack.sh b/common/test/resources/test_kill_browserstack.sh index f6ea16a36b..cbca52da45 100755 --- a/common/test/resources/test_kill_browserstack.sh +++ b/common/test/resources/test_kill_browserstack.sh @@ -8,7 +8,7 @@ set -eu ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/build-utils.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-basic.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE diff --git a/common/tools/hextobin/build.sh b/common/tools/hextobin/build.sh index 073b008bf2..45706c35b4 100755 --- a/common/tools/hextobin/build.sh +++ b/common/tools/hextobin/build.sh @@ -2,10 +2,11 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" +. "$KEYMAN_ROOT/resources/build/node.inc.sh" ################################ Main script ################################ @@ -17,5 +18,5 @@ builder_describe_outputs \ builder_parse "$@" builder_run_action clean rm -rf build/ node_modules/ -builder_run_action configure verify_npm_setup +builder_run_action configure node_select_version_and_npm_ci builder_run_action build tsc --build diff --git a/common/tools/sourcemap-path-remapper/build.sh b/common/tools/sourcemap-path-remapper/build.sh index 3d50eccf83..871de4c546 100755 --- a/common/tools/sourcemap-path-remapper/build.sh +++ b/common/tools/sourcemap-path-remapper/build.sh @@ -6,10 +6,11 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" +. "$KEYMAN_ROOT/resources/build/node.inc.sh" ################################ Main script ################################ @@ -34,7 +35,7 @@ fi ### CONFIGURE ACTIONS if builder_start_action configure; then - verify_npm_setup + node_select_version_and_npm_ci builder_finish_action success configure fi diff --git a/common/web/build.sh b/common/web/build.sh index 2370e3ecf4..182de85d62 100755 --- a/common/web/build.sh +++ b/common/web/build.sh @@ -5,7 +5,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "Keyman common web modules" \ diff --git a/common/web/keyman-version/build.sh b/common/web/keyman-version/build.sh index 9de3da3f8f..0c9657f74b 100755 --- a/common/web/keyman-version/build.sh +++ b/common/web/keyman-version/build.sh @@ -2,10 +2,11 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" +. "$KEYMAN_ROOT/resources/build/node.inc.sh" . "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" ################################ Main script ################################ @@ -53,6 +54,6 @@ export default KEYMAN_VERSION; } builder_run_action clean rm -rf version.inc.ts keyman-version.mts build/ -builder_run_action configure verify_npm_setup +builder_run_action configure node_select_version_and_npm_ci builder_run_action build do_build builder_run_action publish builder_publish_npm diff --git a/common/web/langtags/build.sh b/common/web/langtags/build.sh index f125448d4a..d1b951b624 100755 --- a/common/web/langtags/build.sh +++ b/common/web/langtags/build.sh @@ -2,10 +2,11 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" +. "$KEYMAN_ROOT/resources/build/node.inc.sh" . "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" builder_describe "Build Keyman langtags.js common module" \ @@ -32,7 +33,7 @@ function compile_langtags() { } function do_configure() { - verify_npm_setup + node_select_version_and_npm_ci compile_langtags } diff --git a/common/web/types/build.sh b/common/web/types/build.sh index 5a9243e6cd..1ece69f2af 100755 --- a/common/web/types/build.sh +++ b/common/web/types/build.sh @@ -2,10 +2,11 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" +. "$KEYMAN_ROOT/resources/build/node.inc.sh" . "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" builder_describe "Build Keyman common file types module" \ @@ -76,7 +77,7 @@ function compile_schemas() { function do_configure() { compile_schemas - verify_npm_setup + node_select_version_and_npm_ci } function do_test() { diff --git a/common/web/types/src/lexical-model-types.ts b/common/web/types/src/lexical-model-types.ts index e2670d2e21..82619b4ce4 100644 --- a/common/web/types/src/lexical-model-types.ts +++ b/common/web/types/src/lexical-model-types.ts @@ -417,13 +417,24 @@ export interface ProbabilityMass { export type Distribution = ProbabilityMass[]; /** - * A type augmented with an optional probability. + * A type augmented with optional probability data. */ export type Outcome = T & { /** - * [optional] probability of this outcome. + * [optional] the modeled likelihood associated with this outcome. */ p?: number; + + /** + * The likelihood of the suggestion itself based solely on the lexical model + */ + ['lexical-p']?: number + + /** + * The likelihood associated with the keystroke sequence and/or associated + * text corrections best matching the suggestion. + */ + ['correction-p']?: number }; /** @@ -434,6 +445,21 @@ export type WithOutcome = T & { * Probability of this outcome. */ p: number; + + /** + * The likelihood of the suggestion itself based solely on the lexical model + * + * Only emitted for verbose mode. + */ + ['lexical-p']?: number + + /** + * The likelihood associated with the keystroke sequence and/or associated + * text corrections best matching the suggestion. + * + * Only omitted for verbose mode. + */ + ['correction-p']?: number }; diff --git a/common/windows/build.sh b/common/windows/build.sh index 663a7f41c7..45941b668d 100755 --- a/common/windows/build.sh +++ b/common/windows/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE # diff --git a/common/windows/cef-checkout.sh b/common/windows/cef-checkout.sh index b8326561b8..c669961328 100755 --- a/common/windows/cef-checkout.sh +++ b/common/windows/cef-checkout.sh @@ -13,8 +13,8 @@ set -u ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../resources/build/build-utils.sh" -# . "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "${THIS_SCRIPT%/*}/../../resources/build/builder-basic.inc.sh" +# . "$KEYMAN_ROOT/resources/build/utils.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE pushd $KEYMAN_CEF4DELPHI_ROOT > /dev/null diff --git a/common/windows/data/build.sh b/common/windows/data/build.sh index ac559612bb..2b70c426ed 100755 --- a/common/windows/data/build.sh +++ b/common/windows/data/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe \ diff --git a/common/windows/delphi/build.sh b/common/windows/delphi/build.sh index b3e0ddfc1f..81042422fd 100755 --- a/common/windows/delphi/build.sh +++ b/common/windows/delphi/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe \ diff --git a/common/windows/delphi/components/build.sh b/common/windows/delphi/components/build.sh index 86bad135e0..6fe3dfa9ec 100755 --- a/common/windows/delphi/components/build.sh +++ b/common/windows/delphi/components/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "Common Delphi components" clean configure build test edit diff --git a/common/windows/delphi/ext/build.sh b/common/windows/delphi/ext/build.sh index 3fb17d98b3..05dffca69d 100755 --- a/common/windows/delphi/ext/build.sh +++ b/common/windows/delphi/ext/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe \ diff --git a/common/windows/delphi/ext/cef4delphi/build.sh b/common/windows/delphi/ext/cef4delphi/build.sh index 340cfbf9b1..856694dd27 100755 --- a/common/windows/delphi/ext/cef4delphi/build.sh +++ b/common/windows/delphi/ext/cef4delphi/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "cef4delphi component" clean configure build test diff --git a/common/windows/delphi/ext/dcpcrypt/build.sh b/common/windows/delphi/ext/dcpcrypt/build.sh index cbda46a94d..eceaf361b0 100755 --- a/common/windows/delphi/ext/dcpcrypt/build.sh +++ b/common/windows/delphi/ext/dcpcrypt/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "dcpcrypt component" clean configure build test diff --git a/common/windows/delphi/ext/jwa/build.sh b/common/windows/delphi/ext/jwa/build.sh index 12b27dfe81..30cbbeb919 100755 --- a/common/windows/delphi/ext/jwa/build.sh +++ b/common/windows/delphi/ext/jwa/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "jwa component" clean configure build test diff --git a/common/windows/delphi/ext/sentry/build.sh b/common/windows/delphi/ext/sentry/build.sh index b25d9c3253..c0b0cc9147 100755 --- a/common/windows/delphi/ext/sentry/build.sh +++ b/common/windows/delphi/ext/sentry/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "Sentry component for Delphi" clean configure build test diff --git a/common/windows/delphi/ext/tds2dbg/build.sh b/common/windows/delphi/ext/tds2dbg/build.sh index a8fc83989d..805f957ea1 100755 --- a/common/windows/delphi/ext/tds2dbg/build.sh +++ b/common/windows/delphi/ext/tds2dbg/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE # TODO: move this out of ext and into tools diff --git a/common/windows/delphi/general/KeymanVersionInfo.inc b/common/windows/delphi/general/KeymanVersionInfo.inc index 4991b42385..41e316e051 100644 --- a/common/windows/delphi/general/KeymanVersionInfo.inc +++ b/common/windows/delphi/general/KeymanVersionInfo.inc @@ -1,6 +1,6 @@ type TKeymanVersionInfo = record - // These fields match fields in /resources/build/build-utils.sh + // These fields match fields in /resources/build/builder-basic.inc.sh Version: string; // 14.0.2 VersionWin: string; // 14.0.2.0 VersionRelease: string; // 14.0 diff --git a/common/windows/delphi/general/keymanversion_build.in b/common/windows/delphi/general/keymanversion_build.in index edd55572a6..a5ada65e15 100644 --- a/common/windows/delphi/general/keymanversion_build.in +++ b/common/windows/delphi/general/keymanversion_build.in @@ -6,7 +6,7 @@ // Keyman Version Information CKeymanVersionInfo: TKeymanVersionInfo = ( - // These fields match fields in /resources/build/build-utils.sh + // These fields match fields in /resources/build/builder-basic.inc.sh Version: '$Version'; VersionWin: '$VersionWin'; VersionRelease: '$VersionRelease'; diff --git a/common/windows/delphi/tools/build.sh b/common/windows/delphi/tools/build.sh index 6fad40a4d6..220463620b 100755 --- a/common/windows/delphi/tools/build.sh +++ b/common/windows/delphi/tools/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe \ diff --git a/common/windows/delphi/tools/build_standards_data/build.sh b/common/windows/delphi/tools/build_standards_data/build.sh index 3d39aefe9d..239bde79f0 100755 --- a/common/windows/delphi/tools/build_standards_data/build.sh +++ b/common/windows/delphi/tools/build_standards_data/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "Build build_standards_data tool" clean configure build test edit diff --git a/common/windows/delphi/tools/buildunidata/build.sh b/common/windows/delphi/tools/buildunidata/build.sh index b4e13c264d..36b069351b 100755 --- a/common/windows/delphi/tools/buildunidata/build.sh +++ b/common/windows/delphi/tools/buildunidata/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "Unicode character database build tool" \ diff --git a/common/windows/delphi/tools/certificates/build.sh b/common/windows/delphi/tools/certificates/build.sh index 10ab4c75ce..dfe4911f18 100755 --- a/common/windows/delphi/tools/certificates/build.sh +++ b/common/windows/delphi/tools/certificates/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "Build and install test certificates" clean configure build test \ diff --git a/common/windows/delphi/tools/devtools/build.sh b/common/windows/delphi/tools/devtools/build.sh index f514ea7578..f7b9dd52d4 100755 --- a/common/windows/delphi/tools/devtools/build.sh +++ b/common/windows/delphi/tools/devtools/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe \ diff --git a/common/windows/delphi/tools/sentrytool/build.sh b/common/windows/delphi/tools/sentrytool/build.sh index ca4e427c39..c1672b0aeb 100755 --- a/common/windows/delphi/tools/sentrytool/build.sh +++ b/common/windows/delphi/tools/sentrytool/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "Sentrytool for converting Delphi symbols into sentry-readable format" \ diff --git a/common/windows/delphi/tools/test-klog/build.sh b/common/windows/delphi/tools/test-klog/build.sh index b271565cae..acdd90cd53 100755 --- a/common/windows/delphi/tools/test-klog/build.sh +++ b/common/windows/delphi/tools/test-klog/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "Tool for validating klog is disabled for release builds" \ diff --git a/common/windows/delphi/tools/verify_signatures/build.sh b/common/windows/delphi/tools/verify_signatures/build.sh index f53883c70e..d1b29e89cb 100755 --- a/common/windows/delphi/tools/verify_signatures/build.sh +++ b/common/windows/delphi/tools/verify_signatures/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "Tool to verify all Windows executable signatures and manifests" \ diff --git a/common/windows/mkver.sh b/common/windows/mkver.sh index 8ddb9e34ed..84886666bd 100755 --- a/common/windows/mkver.sh +++ b/common/windows/mkver.sh @@ -9,7 +9,7 @@ set -u ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../resources/build/build-utils.sh" +. "${THIS_SCRIPT%/*}/../../resources/build/builder-basic.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE display_usage() { diff --git a/core/build.sh b/core/build.sh index 94e8ae4e38..1c1d337b1c 100755 --- a/core/build.sh +++ b/core/build.sh @@ -3,11 +3,11 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" . "$THIS_SCRIPT_PATH/commands.inc.sh" ################################ Main script ################################ diff --git a/core/include/ldml/build.sh b/core/include/ldml/build.sh index 17902411d3..f2633ed348 100755 --- a/core/include/ldml/build.sh +++ b/core/include/ldml/build.sh @@ -5,10 +5,11 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" +. "$KEYMAN_ROOT/resources/build/node.inc.sh" . "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" builder_describe "Keyman ldml-keyboard-constants package" \ @@ -30,7 +31,7 @@ builder_parse "$@" #------------------------------------------------------------------------------------------------------------------- builder_run_action clean rm -rf ./build/ -builder_run_action configure verify_npm_setup +builder_run_action configure node_select_version_and_npm_ci builder_run_action build tsc --build # builder_run_action test # no tests at this time builder_run_action publish builder_publish_npm diff --git a/core/meson.build b/core/meson.build index a5dffb5ede..01e016ad27 100644 --- a/core/meson.build +++ b/core/meson.build @@ -9,6 +9,7 @@ project('keyman_core', 'cpp', 'c', version: files('../VERSION.md'), license: 'MIT', default_options : ['buildtype=release', + 'cpp_std=c++17', 'b_vscrt=static_from_buildtype', 'warning_level=2', 'debug=true'], diff --git a/core/tools/api-header-extractor/build.sh b/core/tools/api-header-extractor/build.sh index fe048ce48b..bf26598ce2 100755 --- a/core/tools/api-header-extractor/build.sh +++ b/core/tools/api-header-extractor/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE CORE_ROOT="$KEYMAN_ROOT/core" diff --git a/core/tools/ldml-const-builder/build.sh b/core/tools/ldml-const-builder/build.sh index 26c7c0a60e..8c8bc364b5 100755 --- a/core/tools/ldml-const-builder/build.sh +++ b/core/tools/ldml-const-builder/build.sh @@ -5,10 +5,10 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" CORE_LDML_H_FILE="../../include/ldml/keyman_core_ldml.h" diff --git a/developer/build.sh b/developer/build.sh index b75967a4ce..74269abcc3 100755 --- a/developer/build.sh +++ b/developer/build.sh @@ -2,7 +2,7 @@ ## START STANDARD UTILITY SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../resources/build/build-utils.sh" +. "${THIS_SCRIPT%/*}/../resources/build/builder-basic.inc.sh" ## END STANDARD UTILITY SCRIPT INCLUDE # This is not a builder script but calls a builder script diff --git a/developer/docs/help/reference/bcp-47.md b/developer/docs/help/reference/bcp-47.md index f5c8a49539..0d087911e2 100644 --- a/developer/docs/help/reference/bcp-47.md +++ b/developer/docs/help/reference/bcp-47.md @@ -30,26 +30,30 @@ The following are all examples of valid BCP 47 tags: * `en-US`: English, in United States * `km-Khmr-KH`: Khmer, written in the Khmer script, in Cambodia * `km-fonipa`: Khmer, transcribed in IPA +* `und-cpmn`: Undetermined (Cypro-Minoan) +* `tok-Zzzz`: Toki Pona (Code for uncoded script) + +> [!NOTE] +> `Zzzz` is an uncoded script of ISO 15924 and one of the Special codes of the Script subtag. ### The language subtag -The only required option is the Language subtag, which is an [ISO 639-1][2] or -[ISO 639-3][3] code. +The only required option is the Language subtag, which is an [ISO 639][4] code. If a two-letter code[ISO 639-1][2] is available, it is used instead of the three-letter code [ISO 639-3][3]. -ISO 639-1 tags are a two-letter code. ISO 639-3 tags are a three-letter code. First, try to find your language on the list of two-letter ISO 639-1 codes. -[This Wikipedia page][4] lists all of the two-letter codes. +[This Wikipedia page][5] lists all of the two-letter codes. If you can't find a two-letter code, you'll need to find the closest -three-letter code. You can use [Glottolog][5] to search for your language, and +three-letter code. You can use [Glottolog][6] to search for your language, and it will give you an appropriate code. In this example, I searched Glottolog for -“[Saanich][6]” (name of the First Nations that speak SENĆOŦEN) and found `str` +“[Saanich][7]” (name of the First Nations that speak SENĆOŦEN) and found `str` as the code for all Straits Salish languages. -The Language subtag is conventionally written in lower case. +> [!IMPORTANT] +> The Language subtag is conventionally written in lower case. -The next two subtags are **optional**, however, they allow you to be more -specific about your language. +> [!NOTE] +> The next two subtags are **optional**, however, they allow you to be more specific about your language. ### The script subtag @@ -58,7 +62,7 @@ model or keyboard. If your language only uses one writing system, omit the Script subtag. Otherwise, in cases where a language can be written in many different writing -systems, you can choose the four letter [ISO 15924][7] script tag that your +systems, you can choose the four letter [ISO 15924][8] script tag that your keyboard or lexical model produces. For example, Plains Cree can either be written in _standard Roman orthography_, @@ -67,8 +71,8 @@ of the **Canadian Aboriginal syllabics** family of writing systems. If I wrote a keyboard or lexical model that produced syllabics, I would choose `Cans`, as that is the **ISO 15924** tag for Canadian Aboriginal syllabics. -The Script subtag is conventionally written in title case - first letter -capitalized. +> [!IMPORTANT] +> The Script subtag is conventionally written in title case - first letter capitalized. ### The region subtag @@ -88,11 +92,11 @@ Latin America. Additionally, regions may have vocabulary that doesn't exist in the other regions where the language is spoken. If I were working with a language specific to one country, I would use the [ISO -3166-1 alpha-2][8] country code for the region subtag. For example, `ES` for +3166-1 alpha-2][9] country code for the region subtag. For example, `ES` for Spain or `MX` for Mexico. However, if I were working with Latin American Spanish (a group of countries), I -would need to specify Latin America's [UN M49][9] region code. For Latin +would need to specify Latin America's [UN M49][10] region code. For Latin America, its code is `419`. My lexical model would not suggest words that are common in Spain, but vulgar in Latin America, however it would predict words like "pupupsas" and "chuchitos", which are words that are uncommon in both Spain @@ -100,14 +104,16 @@ and Mexico. Another common UN M49 region code is `001` for the whole world. -Alphabetic region subtags are conventionally written in upper case. +> [!IMPORTANT] +> Alphabetic region subtags are conventionally written in upper case. [1]: https://en.wikipedia.org/wiki/IETF_language_tag [2]: https://en.wikipedia.org/wiki/ISO_639-1 [3]: https://en.wikipedia.org/wiki/ISO_639-3 -[4]: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes -[5]: https://glottolog.org/glottolog/language -[6]: https://glottolog.org/resource/languoid/id/saan1246 -[7]: https://en.wikipedia.org/wiki/ISO_15924 -[8]: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 -[9]: https://en.wikipedia.org/wiki/UN_M49 +[4]: https://en.wikipedia.org/wiki/ISO_639 +[5]: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes +[6]: https://glottolog.org/glottolog/language +[7]: https://glottolog.org/resource/languoid/id/saan1246 +[8]: https://en.wikipedia.org/wiki/ISO_15924 +[9]: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 +[10]: https://en.wikipedia.org/wiki/UN_M49 diff --git a/developer/src/build.sh b/developer/src/build.sh index d81762aa2c..6e23dc8c0a 100755 --- a/developer/src/build.sh +++ b/developer/src/build.sh @@ -2,10 +2,10 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" . "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" . "$KEYMAN_ROOT/developer/src/packages.inc.sh" diff --git a/developer/src/common/build.sh b/developer/src/common/build.sh index b37c2bc948..8ef5a4a1f2 100755 --- a/developer/src/common/build.sh +++ b/developer/src/common/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe \ diff --git a/developer/src/common/delphi/build.sh b/developer/src/common/delphi/build.sh index 63680a5624..907621194f 100755 --- a/developer/src/common/delphi/build.sh +++ b/developer/src/common/delphi/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe \ diff --git a/developer/src/common/web/build.sh b/developer/src/common/web/build.sh index 7ca90bd986..9be3a521fa 100755 --- a/developer/src/common/web/build.sh +++ b/developer/src/common/web/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe \ diff --git a/developer/src/common/web/test-helpers/build.sh b/developer/src/common/web/test-helpers/build.sh index c1664cfddd..98b8e0b184 100755 --- a/developer/src/common/web/test-helpers/build.sh +++ b/developer/src/common/web/test-helpers/build.sh @@ -2,10 +2,11 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" +. "$KEYMAN_ROOT/resources/build/node.inc.sh" builder_describe "Keyman Developer unit test helpers" \ "@/developer/src/common/web/utils" \ @@ -20,6 +21,6 @@ builder_parse "$@" #------------------------------------------------------------------------------------------------------------------- builder_run_action clean rm -rf ./build/ -builder_run_action configure verify_npm_setup +builder_run_action configure node_select_version_and_npm_ci builder_run_action build tsc --build # builder_run_action test # no tests at this time diff --git a/developer/src/common/web/utils/build.sh b/developer/src/common/web/utils/build.sh index 251588e2f6..7c0f8f0ed9 100755 --- a/developer/src/common/web/utils/build.sh +++ b/developer/src/common/web/utils/build.sh @@ -2,10 +2,12 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" +. "$KEYMAN_ROOT/resources/build/node.inc.sh" +. "$KEYMAN_ROOT/resources/build/typescript.inc.sh" . "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" builder_describe "Build Keyman Developer web utility module" \ @@ -47,7 +49,7 @@ function do_build() { } builder_run_action clean rm -rf ./build/ -builder_run_action configure verify_npm_setup +builder_run_action configure node_select_version_and_npm_ci builder_run_action build do_build -builder_run_action test builder_do_typescript_tests 45 +builder_run_action test typescript_run_eslint_mocha_tests 45 builder_run_action publish builder_publish_npm diff --git a/developer/src/ext/browse4folder/build.sh b/developer/src/ext/browse4folder/build.sh index d59e17ee71..cc86bd3427 100755 --- a/developer/src/ext/browse4folder/build.sh +++ b/developer/src/ext/browse4folder/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "browse4folder component" clean configure build test diff --git a/developer/src/ext/build.sh b/developer/src/ext/build.sh index 6dd7a576a1..fda45cef67 100755 --- a/developer/src/ext/build.sh +++ b/developer/src/ext/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe \ diff --git a/developer/src/ext/jedi/build.sh b/developer/src/ext/jedi/build.sh index d43ad7e1fb..226819d268 100755 --- a/developer/src/ext/jedi/build.sh +++ b/developer/src/ext/jedi/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../resources/build/build-utils.sh" +. "${THIS_SCRIPT%/*}/../../../../resources/build/builder-basic.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE cd "$THIS_SCRIPT_PATH" diff --git a/developer/src/ext/mbcolor/build.sh b/developer/src/ext/mbcolor/build.sh index 7d1a2d174a..bbfc3a6fdc 100755 --- a/developer/src/ext/mbcolor/build.sh +++ b/developer/src/ext/mbcolor/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "mbcolor component" clean configure build test diff --git a/developer/src/ext/scfontcombobox/build.sh b/developer/src/ext/scfontcombobox/build.sh index 332f043875..72d0aec3fb 100755 --- a/developer/src/ext/scfontcombobox/build.sh +++ b/developer/src/ext/scfontcombobox/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "scfontcombobox component" clean configure build test diff --git a/developer/src/inst/build.sh b/developer/src/inst/build.sh index 504811eb4b..8b37048e1e 100755 --- a/developer/src/inst/build.sh +++ b/developer/src/inst/build.sh @@ -2,10 +2,10 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -source "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +source "$KEYMAN_ROOT/resources/build/utils.inc.sh" source "$KEYMAN_ROOT/resources/build/jq.inc.sh" builder_describe "Installation files for Keyman Developer" \ diff --git a/developer/src/kmanalyze/build.sh b/developer/src/kmanalyze/build.sh index ecd9fd263f..a72381557f 100755 --- a/developer/src/kmanalyze/build.sh +++ b/developer/src/kmanalyze/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "Legacy keyboard source analysis tool" \ diff --git a/developer/src/kmc-analyze/build.sh b/developer/src/kmc-analyze/build.sh index ace83ffbbe..d54ed8927f 100755 --- a/developer/src/kmc-analyze/build.sh +++ b/developer/src/kmc-analyze/build.sh @@ -2,10 +2,12 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" +. "$KEYMAN_ROOT/resources/build/node.inc.sh" +. "$KEYMAN_ROOT/resources/build/typescript.inc.sh" . "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" builder_describe "Keyman Developer Compiler Analysis Tools" \ @@ -26,8 +28,8 @@ builder_parse "$@" #------------------------------------------------------------------------------------------------------------------- builder_run_action clean rm -rf ./build/ -builder_run_action configure verify_npm_setup +builder_run_action configure node_select_version_and_npm_ci builder_run_action build tsc --build builder_run_action api api-extractor run --local --verbose -builder_run_action test builder_do_typescript_tests 70 +builder_run_action test typescript_run_eslint_mocha_tests 70 builder_run_action publish builder_publish_npm diff --git a/developer/src/kmc-copy/build.sh b/developer/src/kmc-copy/build.sh index b681757be2..eb52215ec9 100755 --- a/developer/src/kmc-copy/build.sh +++ b/developer/src/kmc-copy/build.sh @@ -5,10 +5,12 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" +. "$KEYMAN_ROOT/resources/build/node.inc.sh" +. "$KEYMAN_ROOT/resources/build/typescript.inc.sh" . "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" builder_describe "Build Keyman kmc-copy module" \ @@ -32,13 +34,13 @@ builder_parse "$@" builder_run_action clean rm -rf ./build/ -builder_run_action configure verify_npm_setup +builder_run_action configure node_select_version_and_npm_ci builder_run_action build tsc --build builder_run_action api api-extractor run --local --verbose # note: `export TEST_SAVE_ARTIFACTS=1` to save a copy of artifacts to temp path # note: `export TEST_SAVE_FIXTURES=1` to get a copy of cloud-based fixtures saved to online/ # TODO: -skip-full -builder_run_action test builder_do_typescript_tests 75 +builder_run_action test typescript_run_eslint_mocha_tests 75 builder_run_action publish builder_publish_npm diff --git a/developer/src/kmc-generate/build.sh b/developer/src/kmc-generate/build.sh index 7db46acd56..f1762f4ccf 100755 --- a/developer/src/kmc-generate/build.sh +++ b/developer/src/kmc-generate/build.sh @@ -5,10 +5,12 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" +. "$KEYMAN_ROOT/resources/build/node.inc.sh" +. "$KEYMAN_ROOT/resources/build/typescript.inc.sh" . "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" builder_describe "Build Keyman kmc-generate module" \ @@ -38,8 +40,8 @@ do_build() { } builder_run_action clean rm -rf ./build/ ./tsconfig.tsbuildinfo -builder_run_action configure verify_npm_setup +builder_run_action configure node_select_version_and_npm_ci builder_run_action build do_build builder_run_action api api-extractor run --local --verbose -builder_run_action test builder_do_typescript_tests +builder_run_action test typescript_run_eslint_mocha_tests builder_run_action publish builder_publish_npm diff --git a/developer/src/kmc-keyboard-info/build.sh b/developer/src/kmc-keyboard-info/build.sh index 87902b6876..b22d973636 100755 --- a/developer/src/kmc-keyboard-info/build.sh +++ b/developer/src/kmc-keyboard-info/build.sh @@ -2,10 +2,12 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" +. "$KEYMAN_ROOT/resources/build/node.inc.sh" +. "$KEYMAN_ROOT/resources/build/typescript.inc.sh" builder_describe "Build Keyman kmc keyboard-info Compiler module" \ "@/common/web/langtags" \ @@ -31,10 +33,10 @@ builder_parse "$@" #------------------------------------------------------------------------------------------------------------------- builder_run_action clean rm -rf ./build/ ./tsconfig.tsbuildinfo -builder_run_action configure verify_npm_setup +builder_run_action configure node_select_version_and_npm_ci builder_run_action build tsc --build builder_run_action api api-extractor run --local --verbose -builder_run_action test builder_do_typescript_tests +builder_run_action test typescript_run_eslint_mocha_tests #------------------------------------------------------------------------------------------------------------------- diff --git a/developer/src/kmc-kmn/build.sh b/developer/src/kmc-kmn/build.sh index c6ed29b6f9..867f791bf9 100755 --- a/developer/src/kmc-kmn/build.sh +++ b/developer/src/kmc-kmn/build.sh @@ -5,10 +5,12 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" +. "$KEYMAN_ROOT/resources/build/node.inc.sh" +. "$KEYMAN_ROOT/resources/build/typescript.inc.sh" . "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" builder_describe "Keyman Developer Compiler Module for .kmn to .kmx" \ @@ -43,7 +45,7 @@ fi #------------------------------------------------------------------------------------------------------------------- if builder_start_action configure; then - verify_npm_setup + node_select_version_and_npm_ci builder_finish_action success configure fi @@ -63,7 +65,7 @@ function do_build() { function do_test() { copy_deps - builder_do_typescript_tests 80 + typescript_run_eslint_mocha_tests 80 } builder_run_action build do_build diff --git a/developer/src/kmc-ldml/build.sh b/developer/src/kmc-ldml/build.sh index 689291b247..73763be4d5 100755 --- a/developer/src/kmc-ldml/build.sh +++ b/developer/src/kmc-ldml/build.sh @@ -5,10 +5,12 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" +. "$KEYMAN_ROOT/resources/build/node.inc.sh" +. "$KEYMAN_ROOT/resources/build/typescript.inc.sh" builder_describe "Keyman kmc Keyboard Compiler module" \ "@/common/web/keyman-version" \ @@ -38,7 +40,7 @@ function do_clean() { } function do_configure() { - verify_npm_setup + node_select_version_and_npm_ci do_build_abnf } @@ -87,7 +89,7 @@ builder_run_action configure do_configure builder_run_action build do_build builder_run_action build-fixtures do_build_fixtures builder_run_action api api-extractor run --local --verbose -builder_run_action test builder_do_typescript_tests 90 +builder_run_action test typescript_run_eslint_mocha_tests 90 #------------------------------------------------------------------------------------------------------------------- diff --git a/developer/src/kmc-model-info/build.sh b/developer/src/kmc-model-info/build.sh index 766c9be413..816a195e00 100755 --- a/developer/src/kmc-model-info/build.sh +++ b/developer/src/kmc-model-info/build.sh @@ -2,10 +2,12 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" +. "$KEYMAN_ROOT/resources/build/node.inc.sh" +. "$KEYMAN_ROOT/resources/build/typescript.inc.sh" builder_describe "Build Keyman kmc Lexical Model model-info Compiler module" \ "@/common/web/types" \ @@ -28,10 +30,10 @@ builder_parse "$@" #------------------------------------------------------------------------------------------------------------------- builder_run_action clean rm -rf ./build/ ./tsconfig.tsbuildinfo -builder_run_action configure verify_npm_setup +builder_run_action configure node_select_version_and_npm_ci builder_run_action build tsc --build builder_run_action api api-extractor run --local --verbose -builder_run_action test builder_do_typescript_tests 55 +builder_run_action test typescript_run_eslint_mocha_tests 55 #------------------------------------------------------------------------------------------------------------------- diff --git a/developer/src/kmc-model/build.sh b/developer/src/kmc-model/build.sh index 9e7166f8b7..f2eef55cfc 100755 --- a/developer/src/kmc-model/build.sh +++ b/developer/src/kmc-model/build.sh @@ -2,10 +2,12 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" +. "$KEYMAN_ROOT/resources/build/node.inc.sh" +. "$KEYMAN_ROOT/resources/build/typescript.inc.sh" . "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" builder_describe "Keyman kmc Lexical Model Compiler module" \ @@ -36,9 +38,9 @@ function do_build() { } builder_run_action clean rm -rf ./build/ ./tsconfig.tsbuildinfo -builder_run_action configure verify_npm_setup +builder_run_action configure node_select_version_and_npm_ci builder_run_action build do_build builder_run_action api api-extractor run --local --verbose -builder_run_action test builder_do_typescript_tests +builder_run_action test typescript_run_eslint_mocha_tests builder_run_action publish builder_publish_npm diff --git a/developer/src/kmc-package/build.sh b/developer/src/kmc-package/build.sh index 81f8b928c7..4b9379881a 100755 --- a/developer/src/kmc-package/build.sh +++ b/developer/src/kmc-package/build.sh @@ -5,10 +5,12 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" +. "$KEYMAN_ROOT/resources/build/node.inc.sh" +. "$KEYMAN_ROOT/resources/build/typescript.inc.sh" . "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" builder_describe "Build Keyman kmc Package Compiler module" \ @@ -33,8 +35,8 @@ builder_parse "$@" #------------------------------------------------------------------------------------------------------------------- builder_run_action clean rm -rf ./build/ ./tsconfig.tsbuildinfo -builder_run_action configure verify_npm_setup +builder_run_action configure node_select_version_and_npm_ci builder_run_action build tsc --build builder_run_action api api-extractor run --local --verbose -builder_run_action test builder_do_typescript_tests +builder_run_action test typescript_run_eslint_mocha_tests builder_run_action publish builder_publish_npm diff --git a/developer/src/kmc/build.sh b/developer/src/kmc/build.sh index b7f06852c4..1644540651 100755 --- a/developer/src/kmc/build.sh +++ b/developer/src/kmc/build.sh @@ -5,11 +5,13 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE . "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" +. "$KEYMAN_ROOT/resources/build/node.inc.sh" +. "$KEYMAN_ROOT/resources/build/typescript.inc.sh" . "$KEYMAN_ROOT/developer/src/packages.inc.sh" builder_describe "Build Keyman Keyboard Compiler kmc" \ @@ -54,7 +56,7 @@ function do_build() { #------------------------------------------------------------------------------------------------------------------- function do_test() { - builder_do_typescript_tests 50 + typescript_run_eslint_mocha_tests 50 ./test/command-line-tests.sh test } @@ -107,7 +109,7 @@ function do_bundle() { #------------------------------------------------------------------------------------------------------------------- builder_run_action clean rm -rf ./build/ ./tsconfig.tsbuildinfo -builder_run_action configure verify_npm_setup +builder_run_action configure node_select_version_and_npm_ci builder_run_action build do_build builder_run_action test do_test builder_run_action api do_api diff --git a/developer/src/kmc/test/command-line-tests.sh b/developer/src/kmc/test/command-line-tests.sh index 74447afd41..41652bcdfd 100755 --- a/developer/src/kmc/test/command-line-tests.sh +++ b/developer/src/kmc/test/command-line-tests.sh @@ -5,11 +5,11 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE # . "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" -# . "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +# . "$KEYMAN_ROOT/resources/build/utils.inc.sh" # . "$KEYMAN_ROOT/developer/src/packages.inc.sh" builder_describe "Test Keyman Keyboard Compiler kmc command line e2e" \ diff --git a/developer/src/kmcmplib/build.sh b/developer/src/kmcmplib/build.sh index 77036cc990..952c0732b8 100755 --- a/developer/src/kmcmplib/build.sh +++ b/developer/src/kmcmplib/build.sh @@ -3,10 +3,10 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" . "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" . "$THIS_SCRIPT_PATH/checkout-keyboards.inc.sh" . "$THIS_SCRIPT_PATH/commands.inc.sh" diff --git a/developer/src/kmcmplib/meson.build b/developer/src/kmcmplib/meson.build index 0493c504f4..935f8496f1 100644 --- a/developer/src/kmcmplib/meson.build +++ b/developer/src/kmcmplib/meson.build @@ -8,7 +8,7 @@ project('kmcmplib', 'cpp', 'c', version: files('../../../VERSION.md'), license: 'MIT', default_options : ['buildtype=release', - 'cpp_std=c++14', + 'cpp_std=c++17', 'b_vscrt=static_from_buildtype', 'default_library=static', 'debug=true']) diff --git a/developer/src/kmcmplib/src/Compiler.cpp b/developer/src/kmcmplib/src/Compiler.cpp index b09e9e704d..ab6296609b 100644 --- a/developer/src/kmcmplib/src/Compiler.cpp +++ b/developer/src/kmcmplib/src/Compiler.cpp @@ -3874,7 +3874,7 @@ bool isValidUtf8(KMX_BYTE* str, int sz) { // 2-byte sequence if (remaining < 2 || (str[i + 1] & 0xC0) != 0x80 || - str[i] == 0xC0 || + str[i] == 0xC0 || // C0 and C1 are illegal values str[i] == 0xC1) { return false; } diff --git a/developer/src/kmcmplib/tests/get-test-source.sh b/developer/src/kmcmplib/tests/get-test-source.sh index fe6cded2f1..af647ee311 100755 --- a/developer/src/kmcmplib/tests/get-test-source.sh +++ b/developer/src/kmcmplib/tests/get-test-source.sh @@ -3,7 +3,7 @@ # Finds all keyboards in the keyboards repo (passed in $1) that are valid source # keyboards (i.e. ///source/.kmn) # -# Called from meson.build, so this script does not use build-utils.sh. Do not run this +# Called from meson.build, so this script does not use builder-basic.inc.sh. Do not run this # script directly. # set -eu diff --git a/developer/src/kmcmplib/tests/gtest-compiler.tests.cpp b/developer/src/kmcmplib/tests/gtest-compiler.tests.cpp index 5589056d7e..757767762f 100644 --- a/developer/src/kmcmplib/tests/gtest-compiler.tests.cpp +++ b/developer/src/kmcmplib/tests/gtest-compiler.tests.cpp @@ -24,7 +24,8 @@ KMX_DWORD GetRHS(PFILE_KEYBOARD fk, PKMX_WCHAR p, PKMX_WCHAR buf, int bufsize, i bool isIntegerWstring(PKMX_WCHAR p); bool hasPreamble(std::u16string result); KMX_DWORD ProcessKeyLineImpl(PFILE_KEYBOARD fk, PKMX_WCHAR str, KMX_BOOL IsUnicode, PKMX_WCHAR pklIn, PKMX_WCHAR pklKey, PKMX_WCHAR pklOut); -bool UTF16TempFromUTF8(KMX_BYTE* infile, int sz, KMX_BYTE** tempfile, int* sz16); +extern bool UTF16TempFromUTF8(KMX_BYTE* infile, int sz, KMX_BYTE** tempfile, int* sz16); +extern bool isValidUtf8(KMX_BYTE* str, int sz); namespace kmcmp { extern int nErrors; @@ -2160,3 +2161,98 @@ TEST(UTF16TempFromUTF8, HandlesEmptyInput) { EXPECT_EQ(tempfile, nullptr); EXPECT_EQ(sz16, 0); } + +TEST(IsValidUtf8Test, ValidAscii) { + std::vector v = {'h', 'e', 'l', 'l', 'o'}; + EXPECT_TRUE(isValidUtf8(v.data(), v.size())); +} + +TEST(IsValidUtf8Test, Valid2Byte) { + std::vector v = {0xC2, 0xA2}; // U+00A2: ¢ + EXPECT_TRUE(isValidUtf8(v.data(), v.size())); +} + +TEST(IsValidUtf8Test, Valid3Byte) { + std::vector v = {0xE2, 0x82, 0xAC}; // U+20AC: € + EXPECT_TRUE(isValidUtf8(v.data(), v.size())); +} + +TEST(IsValidUtf8Test, Valid4Byte) { + std::vector v = {0xF0, 0x9F, 0x98, 0x80}; // U+1F600: 😀 + EXPECT_TRUE(isValidUtf8(v.data(), v.size())); +} + +TEST(IsValidUtf8Test, InvalidOverlongEncoding) { + std::vector v = {0xC1, 0x81}; // Overlong encoding for ASCII + EXPECT_FALSE(isValidUtf8(v.data(), v.size())); +} + +TEST(IsValidUtf8Test, InvalidMissingContinuation) { + std::vector v = {0xE2, 0x82}; // Missing one continuation byte + EXPECT_FALSE(isValidUtf8(v.data(), v.size())); +} + +TEST(IsValidUtf8Test, InvalidLoneContinuation) { + std::vector v = {0x80}; // Continuation byte without starter + EXPECT_FALSE(isValidUtf8(v.data(), v.size())); +} + +TEST(IsValidUtf8Test, Invalid4ByteOutOfRange) { + std::vector v = {0xF4, 0x90, 0x80, 0x80}; // > U+10FFFF + EXPECT_FALSE(isValidUtf8(v.data(), v.size())); +} + +TEST(IsValidUtf8Test, ValidMixedAsciiAndMultiByte) { + std::vector v = {'A', 0xC2, 0xA2, 0xE2, 0x82, 0xAC, 0xF0, 0x9F, 0x98, 0x80}; + EXPECT_TRUE(isValidUtf8(v.data(), v.size())); +} + +TEST(IsValidUtf8Test, Invalid2ByteBadSecondByte) { + std::vector v = {0xD2, 0x28}; + EXPECT_FALSE(isValidUtf8(v.data(), v.size())); +} + +TEST(IsValidUtf8Test, Invalid2ByteBadSecondByteTooHigh) { + std::vector v = {0xD2, 0xC8}; + EXPECT_FALSE(isValidUtf8(v.data(), v.size())); +} + +TEST(IsValidUtf8Test, Invalid3ByteBadSecondByte) { + std::vector v = {0xE2, 0x28, 0xA1}; + EXPECT_FALSE(isValidUtf8(v.data(), v.size())); +} + +TEST(IsValidUtf8Test, Invalid3ByteBadThirdByte) { + std::vector v = {0xE2, 0xA8, 0xD1}; + EXPECT_FALSE(isValidUtf8(v.data(), v.size())); +} + +TEST(IsValidUtf8Test, Invalid4ByteBadSecondByte) { + std::vector v = {0xF2, 0xC8, 0xB2, 0x88}; + EXPECT_FALSE(isValidUtf8(v.data(), v.size())); +} + +TEST(IsValidUtf8Test, Invalid4ByteBadThirdByte) { + std::vector v = {0xF2, 0xB8, 0x02, 0x88}; + EXPECT_FALSE(isValidUtf8(v.data(), v.size())); +} + +TEST(IsValidUtf8Test, Invalid4ByteBadFourthByte) { + std::vector v = {0xF2, 0xB8, 0xA2, 0xD8}; + EXPECT_FALSE(isValidUtf8(v.data(), v.size())); +} + +TEST(IsValidUtf8Test, InvalidByteC0) { + std::vector v = {0xC1}; + EXPECT_FALSE(isValidUtf8(v.data(), v.size())); +} + +TEST(IsValidUtf8Test, InvalidByteF5) { + std::vector v = {0xF5}; + EXPECT_FALSE(isValidUtf8(v.data(), v.size())); +} + +TEST(IsValidUtf8Test, ValidEmptyInput) { + std::vector v = {}; + EXPECT_TRUE(isValidUtf8(v.data(), v.size())); +} diff --git a/developer/src/kmcmplib/tests/prep.sh b/developer/src/kmcmplib/tests/prep.sh index 8ad9b81171..e00f2fc1fd 100755 --- a/developer/src/kmcmplib/tests/prep.sh +++ b/developer/src/kmcmplib/tests/prep.sh @@ -11,7 +11,7 @@ set -eu ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../resources/build/build-utils.sh" +. "${THIS_SCRIPT%/*}/../../../../resources/build/builder-basic.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE cd "$THIS_SCRIPT_PATH" diff --git a/developer/src/kmconvert/build.sh b/developer/src/kmconvert/build.sh index 3ba94c21dc..e18977f05b 100755 --- a/developer/src/kmconvert/build.sh +++ b/developer/src/kmconvert/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "Keyboard project generation and conversion tool" \ diff --git a/developer/src/kmdbrowserhost/build.sh b/developer/src/kmdbrowserhost/build.sh index 55e7ae8d14..8996b17bc4 100755 --- a/developer/src/kmdbrowserhost/build.sh +++ b/developer/src/kmdbrowserhost/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "Chromium browser host process for Keyman Developer" \ diff --git a/developer/src/kmdecomp/build.sh b/developer/src/kmdecomp/build.sh index 494b8afde5..069e3e836a 100755 --- a/developer/src/kmdecomp/build.sh +++ b/developer/src/kmdecomp/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe \ diff --git a/developer/src/samples/build.sh b/developer/src/samples/build.sh index 703a2691a8..c60602bf85 100755 --- a/developer/src/samples/build.sh +++ b/developer/src/samples/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe \ diff --git a/developer/src/samples/imsample/build.sh b/developer/src/samples/imsample/build.sh index 2cdd11ac70..50447040ac 100755 --- a/developer/src/samples/imsample/build.sh +++ b/developer/src/samples/imsample/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe \ diff --git a/developer/src/server/build.sh b/developer/src/server/build.sh index 6741bb68de..785fd496c0 100755 --- a/developer/src/server/build.sh +++ b/developer/src/server/build.sh @@ -3,10 +3,11 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh" +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" +. "$KEYMAN_ROOT/resources/build/node.inc.sh" . "$KEYMAN_ROOT/resources/build/jq.inc.sh" builder_describe "Build Keyman Developer Server" \ @@ -49,7 +50,7 @@ function clean_server() { } function configure_server() { - verify_npm_setup + node_select_version_and_npm_ci # See https://github.com/bubenshchykov/ngrok/issues/254, https://github.com/bubenshchykov/ngrok/pull/255 # TODO: this is horrible; is there a way we can avoid this? rm -f "$KEYMAN_ROOT"/node_modules/ngrok/bin/ngrok diff --git a/developer/src/server/package.json b/developer/src/server/package.json index 99cd6bb260..37192ca6f3 100644 --- a/developer/src/server/package.json +++ b/developer/src/server/package.json @@ -13,7 +13,7 @@ "@sentry/node": "^7.57.0", "chalk": "^4.1.2", "express": "^4.20.0", - "multer": "^2.0.1", + "multer": "^2.0.2", "ngrok": "^5.0.0-beta.2", "open": "^8.4.0", "restructure": "^3.0.1", diff --git a/developer/src/server/src/version-data.ts b/developer/src/server/src/version-data.ts index 05f266c5c6..a082a65170 100644 --- a/developer/src/server/src/version-data.ts +++ b/developer/src/server/src/version-data.ts @@ -1,5 +1,5 @@ /* - Version information from build-utils.sh: + Version information from builder-basic.inc.sh: # KEYMAN_VERSION: Full current build version, e.g. "14.0.1" # [KEYMAN_VERSION_WIN: Full current build version for Windows, e.g. "14.0.1.0"] diff --git a/developer/src/setup/build.sh b/developer/src/setup/build.sh index ef84122fdb..1e4ab94a68 100755 --- a/developer/src/setup/build.sh +++ b/developer/src/setup/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe \ diff --git a/developer/src/test/auto/build.sh b/developer/src/test/auto/build.sh index 043711e752..a2bca0e0dd 100755 --- a/developer/src/test/auto/build.sh +++ b/developer/src/test/auto/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe \ diff --git a/developer/src/test/auto/compile-supplementary-support/build.sh b/developer/src/test/auto/compile-supplementary-support/build.sh index b004605b1d..4f8acf40a9 100755 --- a/developer/src/test/auto/compile-supplementary-support/build.sh +++ b/developer/src/test/auto/compile-supplementary-support/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "test if KS=1 is in the right files, both in debug and non-debug versions" clean configure build test diff --git a/developer/src/test/auto/keyboard-js-info/build.sh b/developer/src/test/auto/keyboard-js-info/build.sh index 0a19929f4b..7bbf417681 100755 --- a/developer/src/test/auto/keyboard-js-info/build.sh +++ b/developer/src/test/auto/keyboard-js-info/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "Test the read of basic keyboard info info from js files" clean configure build test diff --git a/developer/src/test/auto/kmcomp/build.sh b/developer/src/test/auto/kmcomp/build.sh index 7239010b06..8bfcd69149 100755 --- a/developer/src/test/auto/kmcomp/build.sh +++ b/developer/src/test/auto/kmcomp/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "Test that kmc passes various compile tests" clean configure build test diff --git a/developer/src/test/auto/kmx-file-languages/build.sh b/developer/src/test/auto/kmx-file-languages/build.sh index 58ae1492ef..9bf1821450 100755 --- a/developer/src/test/auto/kmx-file-languages/build.sh +++ b/developer/src/test/auto/kmx-file-languages/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "Test the read of language info from kmx files and translation from legacy ids to BCP47" clean configure build test diff --git a/developer/src/test/auto/model-ts-parser/build.sh b/developer/src/test/auto/model-ts-parser/build.sh index eaf5bb4819..e4e2208e56 100755 --- a/developer/src/test/auto/model-ts-parser/build.sh +++ b/developer/src/test/auto/model-ts-parser/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "Test lexical model parser" clean configure build test diff --git a/developer/src/test/auto/package-info/build.sh b/developer/src/test/auto/package-info/build.sh index e67366b26e..32f9fbbbc4 100755 --- a/developer/src/test/auto/package-info/build.sh +++ b/developer/src/test/auto/package-info/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "Test lexical model parser" clean configure build test diff --git a/developer/src/test/build.sh b/developer/src/test/build.sh index 48f3e69ac5..6546dbf752 100755 --- a/developer/src/test/build.sh +++ b/developer/src/test/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe \ diff --git a/developer/src/tike/build.sh b/developer/src/tike/build.sh index b06fd1f847..0ba6c98642 100755 --- a/developer/src/tike/build.sh +++ b/developer/src/tike/build.sh @@ -2,7 +2,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE builder_describe "Build Keyman Developer IDE" \ diff --git a/developer/src/tools/sentry-upload-difs.sh b/developer/src/tools/sentry-upload-difs.sh index 34ab4c60b0..b45387ec3e 100755 --- a/developer/src/tools/sentry-upload-difs.sh +++ b/developer/src/tools/sentry-upload-difs.sh @@ -14,7 +14,7 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/build-utils.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-basic.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE cd "$KEYMAN_ROOT/developer" diff --git a/docs/build-bot.md b/docs/build-bot.md index e879154a96..642f285894 100644 --- a/docs/build-bot.md +++ b/docs/build-bot.md @@ -26,9 +26,43 @@ Build-bot: skip Or you may want to ensure that an artifact is built for Windows: ``` -Build-bot: release windows +Build-bot: release:windows ``` +## The Build-bot command + +The build bot is controlled through the `Build-bot` command, which can be put +into commit trailers or the PR body (not PR comments). The format of the command +is: + +``` +Build-bot: :[Platforms] ... +``` + +* `BuildLevel` can be `skip`, `build`, or `release`. See [Build Level] for more + details. +* `Platforms` can be omitted, in which case the command applies to all + previously-specified platforms (which is not equivalent to specifying `all` -- + if no platform is specified, it will only update platforms that were already + in the build set). If specified, it must be a comma-separated list, without + spaces, of one or more of the following platform identifiers: + + * `all`: apply to all platforms listed below + * `android` + * `developer` + * `ios` + * `linux` + * `mac` + * `web` + * `windows` + * `common`: build common components, on all three build platforms (note: + `release` is equivalent to `build` buildLevel for `common`) + * `core`: build Keyman Core, on all three build platforms, and also WASM + (note: `release` is equivalent to `build` buildLevel for `core`) + +The list of platforms can be found in the `available_platforms` variable in +trigger-definitions.inc.sh. + ## Build Level The build level specifies what we want to be run for a test build on a PR. @@ -42,8 +76,8 @@ other release distribution endpoints. The build level is controlled by the Build-bot commit trailer and PR body Build-bot/Test-bot trailers. The default build level will be 'build'. -For target branch builds, the build level will always be 'build', and Build-bot: -commit trailers are ignored. +For target branch (master, beta, stable-x.y) builds, the build level will always +be 'build', and Build-bot: commit trailers are ignored. ### 'skip' build level @@ -82,7 +116,8 @@ For a 'release' build level: * we won't upload artifacts to any release endpoint such as Debian, packages.sil.org, etc, or to the release areas for Play Store or App Store -(uploading to *.keyman.com and to release endpoints happens in the release TC build config/GHA) +(uploading to *.keyman.com and to release endpoints happens in the release TC +build config/GHA) ## Controlling the build bot with trailers @@ -113,10 +148,11 @@ The Build-bot has limited interactions with the Keyman test bot (aka keymanapp-test-bot): if a 'User Testing' section is found in the PR body, the default build level will be upgraded from 'build' to 'release'. -Build bot trailers found in the commits or in the PR body are applied after the -test bot command. +Build bot trailers found in either the commits or in the PR body are applied +after the test bot command. -WARNING: The build bot does not check PR comments for Test-bot commands. +WARNING: The build bot does not check PR comments for Test-bot commands or a +'User Testing' section. ## Example Build-bot interactions @@ -126,16 +162,68 @@ Say we have a PR that touches `/android/build.sh`. The default build set will be The PR body has a User Testing section: `# User Testing`. The build set is upgraded to: `(android:release)`. -The first commit includes a Build-bot command: `Build-bot: build ios`. The build +The first commit includes a Build-bot command: `Build-bot: build:ios`. The build set is now `(android:release ios:build)`. In a subsequent commit, the PR author decides that nothing needs to be built, after all: `Build-bot: skip`. The build set is now `(android:skip ios:skip)`. Note that other platforms are still 'skip' but not included in the build set. -Finally, the PR author pushes another commit, with `Build-bot: release windows`. +Finally, the PR author pushes another commit, with `Build-bot: release:windows`. The build set is now: `(android:skip ios:skip windows:release)`. +# FAQ +* How do I specify commands for multiple platforms, e.g. building on Windows and Linux? + +``` +Build-bot: build:windows,linux +``` + +* If I modify a file that would cause a build on all platforms, does `Build-bot: + build android` then cause a build only on Android and skip all others? Or is + it only additive? + +The commands are additive. To skip all others, you would do: + +``` +Build-bot: skip +Build-bot: build:android +``` + +* What happens in the following scenario: I have a PR that I only want to build + on Android and I add `Build-bot: build android`. Later on I merge in the + changes from `master` and add another commit. If I still only want to build on + Android, do I have to add `Build-bot: build android` on my new commit again? + Or what happens with merges that touch other files which would cause builds + for other platforms? + +First, you would need to specify `skip` for all other platforms in order to only +build on Android: + +``` +Build-bot: skip +Build-bot: build:android +``` + +Then, the build bot scans all the commits in the PR, and additively builds the +final build set from the `Build-bot` commands from all the commits (up to 2000 +in one PR). Thus, earlier bot commands commits will continue to be honoured. +This makes it easier to apply merge commits, for example, or small fixups, +without needing to think about what needs to be built again. + +* How can I re-trigger builds after changing my build bot commands? + +In [TeamCity - Trigger Test Builds](https://build.palaso.org/buildConfiguration/Keyman_Test), +select a custom Run (small button attached to right of Run button), and in the +"Changes" tab, "Build branch" field, enter the PR number to re-run the builds. +Any test builds currently running against that PR will be cancelled and +restarted. + +Note: if you reduce the build set (with `skip`), and re-run builds in this way +without pushing a new commit, you will end up with stale status checks on the +latest commit in your PR for the builds that are now skipped on the new run, so +in this scenario it is safest to push a new commit with the updated build bot +commands. [Build Level]: #Build_Level \ No newline at end of file diff --git a/docs/builder.md b/docs/builder.md index 18272accd0..538bf783bd 100644 --- a/docs/builder.md +++ b/docs/builder.md @@ -1,4 +1,7 @@ -# Using the build-utils.sh builder functions +# Using the builder.inc.sh builder functions + +Note: see [resources/build/README.md](../resources/build/README.md) for +distinction on builder-basic.inc.sh and builder-full.inc.sh. The Keyman repository is standardising on bash scripts for builds. These may call project-specific builders, such as `tsc` for Typescript projects, `meson` @@ -43,7 +46,7 @@ set -eu ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "$(dirname "$THIS_SCRIPT")//resources/build/build-utils.sh" +. "$(dirname "$THIS_SCRIPT")//resources/build/builder-basic.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE # . "$KEYMAN_ROOT/.../foo.inc.sh" # any other includes, such as jq.inc.sh @@ -78,7 +81,7 @@ Builder scripts will inherit `set -eu` from builder.inc.sh: ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "$(dirname "$THIS_SCRIPT")//resources/build/build-utils.sh" +. "$(dirname "$THIS_SCRIPT")//resources/build/builder-basic.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE ``` @@ -100,7 +103,7 @@ search-and-replace) this section in the future as required. ## Any other includes -Once `build-utils.sh` has been included, the variable `$KEYMAN_ROOT` will be +Once `builder-basic.inc.sh` has been included, the variable `$KEYMAN_ROOT` will be available, so other include scripts should be sourced accordingly, for example: ```bash @@ -114,7 +117,7 @@ to `cd` at the start of your script. ## Standard environment -`build-utils.sh` will prepend `$KEYMAN_ROOT/node_modules/.bin` to the `PATH` +`builder-basic.inc.sh` will prepend `$KEYMAN_ROOT/node_modules/.bin` to the `PATH` variable to ensure that we run the correct versions of npm package commands, so there is no need to hard-code path references or add script wrappers to package.json (`npm run