Skip to content

Commit 1904470

Browse files
committed
chore(web): Merge branch 'maint/web/13399_tc-config_refactor' into maint/web/13399_tc-config_dev
2 parents 86f3f77 + ab2f7c2 commit 1904470

File tree

85 files changed

+1361
-709
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

85 files changed

+1361
-709
lines changed

.github/actions/build-binary-packages/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ runs:
3131
path: artifacts/keyman-srcpkg
3232

3333
- name: Build
34-
uses: sillsdev/gha-ubuntu-packaging@b619077451b27c16dc6fd699bc1daf8d5ce07659 # v1.2
34+
uses: sillsdev/gha-ubuntu-packaging@556b268762be9bea0f39861a7392587211ef6a58 # v2.0.1
3535
with:
3636
dist: "${{ inputs.dist }}"
3737
platform: "${{ inputs.arch }}"

.github/labeler.yml

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,43 +11,56 @@ docs: docs/**
1111
# Add labels based on changed files using actions/labeler
1212
#
1313

14-
android/: android/**
14+
android/:
15+
- android/**
16+
- resources/teamcity/includes/**
17+
- resources/teamcity/android/**
1518
android/app/: android/KMAPro/**
1619
android/engine/: android/KMEA/**
1720
android/samples/: android/Samples/**
1821

19-
common/: common/**
22+
common/:
23+
- common/**
24+
- resources/teamcity/includes/**
25+
- resources/teamcity/common/**
2026
common/web/: common/web/**
2127

2228
core/:
2329
- core/**
30+
- resources/teamcity/includes/**
31+
- resources/teamcity/core/**
2432

2533
developer/:
2634
- developer/**
27-
35+
- resources/teamcity/includes/**
36+
- resources/teamcity/developer/**
2837
developer/compilers/:
2938
- developer/src/kmc/**
3039
- developer/src/kmcmplib/**
3140
- developer/src/kmc-*/**
32-
3341
developer/ide/:
3442
- developer/src/server/**
3543
- developer/src/tike/**
3644

37-
ios/: ios/**
45+
ios/:
46+
- ios/**
47+
- resources/teamcity/includes/**
48+
- resources/teamcity/ios/**
3849
ios/app/: ios/keyman/**
3950
ios/engine/: ios/engine/**
4051
ios/samples/: ios/samples/**
4152

42-
linux/: linux/**
53+
linux/:
54+
- linux/**
55+
- resources/teamcity/includes/**
56+
- resources/teamcity/linux/**
4357
linux/config/: linux/keyman-config/**
44-
linux/engine/:
45-
- linux/ibus-keyman/**
46-
- linux/legacy/ibus-kmfl/**
47-
- linux/legacy/kmflcomp/**
48-
- linux/legacy/libkmfl/**
58+
linux/engine/: linux/ibus-keyman/**
4959

50-
mac/: mac/**
60+
mac/:
61+
- mac/**
62+
- resources/teamcity/includes/**
63+
- resources/teamcity/mac/**
5164
# mac/config/:
5265
# mac/engine/: mac/**
5366

@@ -59,13 +72,19 @@ oem/fv/windows/: oem/firstvoices/windows/**
5972

6073
resources/: resources/**
6174

62-
web/: web/**
75+
web/:
76+
- web/**
77+
- resources/teamcity/includes/**
78+
- resources/teamcity/web/**
6379
# web/bookmarklet/
6480
web/engine/: web/source/**
6581
web/ui/: web/source/kmwui*
6682
web/samples/: web/samples/**
6783
web/predictive-text/: web/src/engine/predictive-text/**
6884

69-
windows/: windows/**
85+
windows/:
86+
- windows/**
87+
- resources/teamcity/includes/**
88+
- resources/teamcity/windows/**
7089
windows/config/: windows/src/desktop/**
7190
windows/engine/: windows/src/engine/**

HISTORY.md

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,48 @@
11
# Keyman Version History
22

3+
## 19.0.57 alpha 2025-06-03
4+
5+
* fix(windows): change from error to breadcrumb and log (#14069)
6+
* maint(mac): make make-km-dmg.sh less quiet (#14105)
7+
8+
## 19.0.56 alpha 2025-06-02
9+
10+
* maint(ios): Use zip.inc.sh to prep release artifacts (#13919)
11+
* maint(linux): update to new version of gha-ubuntu-packaging (#14094)
12+
* chore(linux): add Python TC test runner (#14062)
13+
14+
## 19.0.55 alpha 2025-05-31
15+
16+
* maint(linux): `sudo` not required for removing temporary files (#14086)
17+
* maint(linux): update to new version of gha-ubuntu-packaging (#14089)
18+
19+
## 19.0.54 alpha 2025-05-30
20+
21+
* maint(linux): move TC build scripts to `resources/teamcity/linux` (#14061)
22+
23+
## 19.0.53 alpha 2025-05-29
24+
25+
* fix(developer): ensure that kmc doesn't skip validate phase of kmc-ldml (#14068)
26+
27+
## 19.0.52 alpha 2025-05-28
28+
29+
* feat(developer): line numbers for tran compiler (#14037)
30+
* feat(developer): add line numbers to disp compiler (#14048)
31+
* feat(developer): line numbers for layr compiler (#14050)
32+
* feat(developer): line numbers for LocaCompiler (#14054)
33+
* fix(common): properly use newly installed node version (#14057)
34+
* maint(common): update build coordinator and labels for `resources/teamcity` changes (#14047)
35+
36+
## 19.0.51 alpha 2025-05-27
37+
38+
* maint: add stable-19.0 triggers (#14043)
39+
* maint: add empty 'scripts' tag to package.json to silence warning (#14044)
40+
* fix(linux): fix version variable references in kmconfig (#14032)
41+
42+
## 19.0.50 alpha 2025-05-26
43+
44+
* chore(web): mark async methods in UI components (#14034)
45+
346
## 19.0.49 alpha 2025-05-25
447

548
* feat(developer): revamp line numbers per design doc (#14016)
@@ -302,6 +345,32 @@
302345
* refactor(windows): rename `TKeymanMutex.MutexOwned` to `TakeOwnership` and add `ReleaseOwnership` (#13168)
303346
* chore: increment to alpha 19.0 (#13187)
304347

348+
## 18.0.238 stable 2025-06-04
349+
350+
* fix(developer): ldml: make sure .run() calls compile() for validation (#14071)
351+
* maint(linux): fix typo of temporary dependency package (#14085)
352+
* maint(linux): update to new version of gha-ubuntu-packaging (#14096)
353+
* maint(mac): make make-km-dmg.sh less quiet (#14106)
354+
355+
## 18.0.237 stable 2025-05-30
356+
357+
* maint(android): Update FirstVoices launcher icon and red theme (#13917)
358+
* fix(web): empty layout fontSize property should default to 1em (#13960)
359+
* fix(linux): use correct header guard define in OrderedOutputDevice.h (#13963)
360+
* chore(linux): Update debian changelog (#13888)
361+
* fix(mac): handle PackageInfo section in kmp.inf file (#13957)
362+
* feat(android): log active keyboard, model IDs with reported errors (#14003)
363+
* chore(ios): FirstVoices certificate update (#14005)
364+
* feat(ios): log active keyboard, model IDs with reported errors (#14006)
365+
* fix(linux): configurable path in `.service` file when using basu (#13999)
366+
* maint(linux): add `--no-werror` option to not report warnings as errors (#14000)
367+
* fix(windows): use json file name against cache folder and ename Enter and Exit methods for TState Object (#14010)
368+
* chore(ios): update FirstVoices AppIcon (#14011)
369+
* maint: change builder_completion script to a .inc.sh (#14008)
370+
* fix(windows): only breadcrumb unexpected state on first run (#14026)
371+
* fix(windows): skip sending handle kmshell events to upgrade state machine for keyboard install modes (#14028)
372+
* fix(windows): fix sentry error message reporting (#14029)
373+
305374
## 18.0.236 stable 2025-05-12
306375

307376
* chore(linux): Update debian changelog (#13737)

VERSION.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
19.0.50
1+
19.0.58

android/.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ KMAPro/**/assets/*.kmp
5757
# Play Store release notes (copied from whatsnew.md)
5858
KMAPro/kMAPro/src/main/play/release-notes/**/*.txt
5959

60+
# Release artifacts
61+
upload/
62+
6063
# Eclipse files
6164
.project
6265
.settings/

android/build.sh

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
1515

1616
. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
1717
. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh"
18+
. "$KEYMAN_ROOT/resources/build/zip.inc.sh"
1819

1920
################################ Main script ################################
2021

@@ -37,6 +38,7 @@ builder_describe \
3738
build \
3839
test \
3940
"publish Publishes symbols to Sentry and the APKs to the Play Store." \
41+
"archive Copy release artifacts to upload/ and rsync to downloads.keyman" \
4042
"--ci+ Deprecated build option. Remove in 20.0" \
4143
--upload-sentry+ \
4244
":engine=KMEA Keyman Engine for Android" \
@@ -70,4 +72,51 @@ function do_test_help() {
7072

7173
builder_run_action test:help do_test_help
7274

73-
builder_run_child_actions publish
75+
builder_run_child_actions publish
76+
77+
# Copy release artifacts to upload/ and rsync to downloads.keyman.com
78+
if builder_start_action archive; then
79+
UPLOAD_PATH="$KEYMAN_ROOT/android/upload/${KEYMAN_VERSION}"
80+
KEYMAN_ENGINE_ANDROID_ZIP="keyman-engine-android-${KEYMAN_VERSION}.zip"
81+
KEYMAN_APK="keyman-${KEYMAN_VERSION}.apk"
82+
FIRSTVOICES_APK="firstvoices-${KEYMAN_VERSION}.apk"
83+
ZIP_FILE="${UPLOAD_PATH}/${KEYMAN_ENGINE_ANDROID_ZIP}"
84+
ZIP_FLAGS=("-q" "-r") # quiet, recursive
85+
86+
mkdir -p "${UPLOAD_PATH}"
87+
88+
# Create Keyman Engine for Android archive
89+
builder_echo "Copying Keyman Engine for Android into ${UPLOAD_PATH}..."
90+
cd "${UPLOAD_PATH}"
91+
cp "${KEYMAN_ROOT}/android/KMAPro/kMAPro/libs/keyman-engine.aar" ./
92+
add_zip_files "${ZIP_FILE}" "${ZIP_FLAGS[@]}" "keyman-engine.aar"
93+
rm -f "keyman-engine.aar"
94+
95+
builder_echo "Copying Keyman Engine for Android Sample projects into ${UPLOAD_PATH}..."
96+
cp -rf "${KEYMAN_ROOT}/android/Samples" ./
97+
add_zip_files "${ZIP_FILE}" "-x@../../zip-excludes" "${ZIP_FLAGS[@]}" "Samples"
98+
rm -rf "Samples"
99+
100+
# Copy release APK
101+
cp "${KEYMAN_ROOT}/android/KMAPro/kMAPro/build/outputs/apk/release/${KEYMAN_APK}" ./
102+
103+
# FirstVoices app
104+
105+
if [ "${RELEASE_OEM_FIRSTVOICES-false}" = true ]; then
106+
cp "${KEYMAN_ROOT}/oem/firstvoices/android/app/build/outputs/apk/release/${FIRSTVOICES_APK}" ./
107+
fi
108+
109+
#
110+
# Write download info files
111+
#
112+
113+
cd "${UPLOAD_PATH}"
114+
write_download_info "Keyman Engine for Android" "${KEYMAN_ENGINE_ANDROID_ZIP}" "${KEYMAN_VERSION}" "${KEYMAN_TIER}" "android"
115+
write_download_info "Keyman for Android" "${KEYMAN_APK}" "${KEYMAN_VERSION}" "${KEYMAN_TIER}" "android"
116+
117+
if [ "${RELEASE_OEM_FIRSTVOICES-false}" = true ]; then
118+
write_download_info "FirstVoices Keyboards" "${FIRSTVOICES_APK}" "${KEYMAN_VERSION}" "${KEYMAN_TIER}" "android"
119+
fi
120+
121+
builder_finish_action success archive
122+
fi

android/zip-excludes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Samples/*/build.sh

common/test/resources/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"description": "Common test resources for Keyman's JS & TS-based components & products",
44
"type": "module",
55
"license": "MIT",
6+
"scripts": {},
67
"devDependencies": {
78
"@keymanapp/resources-gosh": "*",
89
"typescript": "^5.4.5"

common/web/keyman-version/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"/build/"
1212
],
1313
"license": "MIT",
14+
"scripts": {},
1415
"type": "module",
1516
"devDependencies": {
1617
"typescript": "^5.4.5"

common/web/types/src/kmx/kmx-plus/element-string.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { constants } from '@keymanapp/ldml-keyboard-constants';
2-
import { DependencySections, StrsItem, UsetItem } from './kmx-plus.js';
2+
import { DependencySections, StrsItem, StrsOptions, UsetItem } from './kmx-plus.js';
33
import { ElementParser, ElementSegment, ElementType } from '../../ldml-keyboard/pattern-parser.js';
44
import * as util from '../../util/util.js';
55
import MATCH_HEX_ESCAPE = util.MATCH_HEX_ESCAPE;
@@ -33,7 +33,7 @@ export class ElementString extends Array<ElemElement> {
3333
* @param source if a string array, does not get reinterpreted as UnicodeSet. This is used with vars, etc. Or pass `["str"]` for an explicit 1-element elem.
3434
* If it is a string, will be interpreted per reorder element rules.
3535
*/
36-
static fromStrings(sections: DependencySections, source: string | string[], order?: string, tertiary?: string, tertiary_base?: string, prebase?: string) : ElementString {
36+
static fromStrings(sections: DependencySections, options: StrsOptions, source: string | string[], order?: string, tertiary?: string, tertiary_base?: string, prebase?: string) : ElementString {
3737
// the returned array
3838
const array = new ElementString();
3939
if(!source) {
@@ -81,21 +81,21 @@ export class ElementString extends Array<ElemElement> {
8181
// error. So we can just exit here.
8282
return null; // UnicodeSet error
8383
}
84-
const uset = sections.usetparser.parseUnicodeSet(item.segment, needRanges);
84+
const uset = sections.usetparser.parseUnicodeSet(item.segment, needRanges, options?.x);
8585
if (!uset) {
86-
return null; // UnicodeSet error already thrown
86+
return null; // UnicodeSet error already added to callback
8787
}
88-
elem.uset = sections.uset.allocUset(uset, sections);
89-
elem.value = sections.strs.allocString('', {singleOk: true}); // no string
88+
elem.uset = sections.uset.allocUset(uset, sections, options?.x);
89+
elem.value = sections.strs.allocString('', {...options, singleOk: true}); // no string
9090
} else if (item.type === ElementType.codepoint || item.type === ElementType.escaped || item.type === ElementType.string) {
9191
// some kind of a string
9292
let str = item.segment;
9393
if (item.type === ElementType.escaped && !MATCH_HEX_ESCAPE.test(str)) {
9494
str = unescapeOneQuadString(str);
9595
// TODO-LDML: any other escape forms here?
96-
elem.value = sections.strs.allocString(str, { singleOk: true });
96+
elem.value = sections.strs.allocString(str, { ...options, singleOk: true });
9797
} else {
98-
elem.value = sections.strs.allocString(str, { unescape: true, singleOk: true });
98+
elem.value = sections.strs.allocString(str, { ...options, unescape: true, singleOk: true });
9999
}
100100
// Now did we end up with one char or no?
101101
if (elem.value.isOneChar) {

0 commit comments

Comments
 (0)