From 45634f7a4f252aab183a5ee129167ee26703c766 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Tue, 5 Aug 2025 10:32:43 +1000 Subject: [PATCH 1/5] maint(common): reorganize mac/ios build script includes Move mac-specific build scripts and functions into our established patterns for scripts under resources/build: * new mac/mac.inc.sh for mac-specific functions, from mac-utils.inc.sh, utils.inc.sh, builder-basic.inc.sh * move other mac-specific scripts into mac/ Relates-to: #14065 Build-bot: build Test-bot: skip --- ios/ci.sh | 12 +- .../KeymanEngine.xcodeproj/project.pbxproj | 4 +- ios/engine/build.sh | 7 +- ios/i18n-export.sh | 6 +- .../Keyman/Keyman.xcodeproj/project.pbxproj | 6 +- ios/keyman/build.sh | 1 + ios/samples/KMSample1/build.sh | 13 +- ios/samples/KMSample2/build.sh | 13 +- ios/samples/common.inc.sh | 10 +- ios/test.sh | 14 ++ mac/build.sh | 4 +- mac/is_same_version.sh | 2 + mac/mac-utils.inc.sh | 2 + mac/setup/build.sh | 6 +- .../ios/FirstVoices.xcodeproj/project.pbxproj | 4 +- oem/firstvoices/ios/build.sh | 7 +- resources/build/builder-basic.inc.sh | 90 ---------- resources/build/mac/mac.inc.sh | 159 ++++++++++++++++++ resources/build/mac/sentry-dsym-upload.sh | 7 + ...set-bundle-versions-and-settings-tagged.sh | 3 +- ...t-bundle-versions-and-settings-untagged.sh | 3 +- .../{ => mac}/set-bundle-versions-tagged.sh | 3 +- .../build/mac/set-bundle-versions-untagged.sh | 7 + .../xcode-utils.inc.sh} | 3 +- resources/build/mac/xcode-wrap.sh | 16 ++ resources/build/sentry-dsym-upload.sh | 6 - .../build/set-bundle-versions-untagged.sh | 6 - resources/build/utils.inc.sh | 9 - resources/build/xcode-wrap.sh | 11 -- 29 files changed, 252 insertions(+), 182 deletions(-) create mode 100644 resources/build/mac/mac.inc.sh create mode 100755 resources/build/mac/sentry-dsym-upload.sh rename resources/build/{ => mac}/set-bundle-versions-and-settings-tagged.sh (71%) rename resources/build/{ => mac}/set-bundle-versions-and-settings-untagged.sh (71%) rename resources/build/{ => mac}/set-bundle-versions-tagged.sh (65%) create mode 100755 resources/build/mac/set-bundle-versions-untagged.sh rename resources/build/{xcode-utils.sh => mac/xcode-utils.inc.sh} (98%) mode change 100755 => 100644 create mode 100755 resources/build/mac/xcode-wrap.sh delete mode 100755 resources/build/sentry-dsym-upload.sh delete mode 100755 resources/build/set-bundle-versions-untagged.sh delete mode 100755 resources/build/xcode-wrap.sh diff --git a/ios/ci.sh b/ios/ci.sh index c05b063381..03c1e11df8 100755 --- a/ios/ci.sh +++ b/ios/ci.sh @@ -3,17 +3,11 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../resources/build/builder-basic.inc.sh" +. "${THIS_SCRIPT%/*}/../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -# This script runs from its own folder -cd "$THIS_SCRIPT_PATH" - -# Include our resource functions; they're pretty useful! . "$KEYMAN_ROOT/resources/build/utils.inc.sh" - -# Please note that this build script (understandably) assumes that it is running on Mac OS X. -verify_on_mac +. "$KEYMAN_ROOT/resources/build/mac/mac.inc.sh" builder_describe "Defines actions for use in CI-related iOS builds." \ "build" \ @@ -25,6 +19,8 @@ builder_describe "Defines actions for use in CI-related iOS builds." \ builder_parse "$@" +verify_on_mac + function do_build() { ./build.sh clean configure build:engine build:app --sim-artifact diff --git a/ios/engine/KMEI/KeymanEngine.xcodeproj/project.pbxproj b/ios/engine/KMEI/KeymanEngine.xcodeproj/project.pbxproj index 524aecdfba..94dea1d5c7 100644 --- a/ios/engine/KMEI/KeymanEngine.xcodeproj/project.pbxproj +++ b/ios/engine/KMEI/KeymanEngine.xcodeproj/project.pbxproj @@ -1363,7 +1363,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = "/usr/bin/env bash"; - shellScript = "\"$KEYMAN_ROOT/resources/build/xcode-wrap.sh\" \"$KEYMAN_ROOT/resources/build/set-bundle-versions-tagged.sh\"\n"; + shellScript = "\"$KEYMAN_ROOT/resources/build/mac/xcode-wrap.sh\" \"$KEYMAN_ROOT/resources/build/mac/set-bundle-versions-tagged.sh\"\n"; showEnvVarsInLog = 0; }; CEC0C66F2410B005003E1BCD /* Run Script - upload dsyms to Sentry */ = { @@ -1383,7 +1383,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = "/usr/bin/env bash"; - shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n. \"$KEYMAN_ROOT/resources/build/xcode-utils.sh\"\n\nif [ ${UPLOAD_SENTRY:-false} = true ]; then\n # Calls resource script to perform the dSYM upload\n phaseSentryDsymUpload \"keyman-ios\"\nfi\n"; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n. \"$KEYMAN_ROOT/resources/build/mac/xcode-utils.inc.sh\"\n\nif [ ${UPLOAD_SENTRY:-false} = true ]; then\n # Calls resource script to perform the dSYM upload\n phaseSentryDsymUpload \"keyman-ios\"\nfi\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ diff --git a/ios/engine/build.sh b/ios/engine/build.sh index e564ecf8d7..cafd7692b7 100755 --- a/ios/engine/build.sh +++ b/ios/engine/build.sh @@ -6,13 +6,10 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "${THIS_SCRIPT%/*}/../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -# Include our resource functions; they're pretty useful! . "$KEYMAN_ROOT/resources/build/utils.inc.sh" +. "$KEYMAN_ROOT/resources/build/mac/mac.inc.sh" . "$KEYMAN_ROOT/resources/build/build-download-resources.sh" -# Please note that this build script (understandably) assumes that it is running on Mac OS X. -verify_on_mac - builder_describe "Builds Keyman Engine for use on iOS devices - iPhone and iPad." \ "@/web/src/app/webview build" \ "@/web/src/engine/sentry-manager build" \ @@ -23,6 +20,8 @@ builder_describe "Builds Keyman Engine for use on iOS devices - iPhone and iPad. builder_parse "$@" +verify_on_mac + CONFIG="Release" if builder_is_debug_build; then CONFIG="Debug" diff --git a/ios/i18n-export.sh b/ios/i18n-export.sh index 208caee92a..aa41fd8b30 100755 --- a/ios/i18n-export.sh +++ b/ios/i18n-export.sh @@ -6,18 +6,14 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "${THIS_SCRIPT%/*}/../resources/build/builder-basic.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -# Include our resource functions; they're pretty useful! . "$KEYMAN_ROOT/resources/build/utils.inc.sh" +. "$KEYMAN_ROOT/resources/build/mac/mac.inc.sh" # This script runs from its own folder cd "$(dirname "$THIS_SCRIPT")" -# Please note that this build script (understandably) assumes that it is running on Mac OS X. verify_on_mac -## END STANDARD BUILD SCRIPT INCLUDE - - #xcodebuild -exportLocalizations -project "engine/KMEI/KeymanEngine.xcodeproj" #xcodebuild -exportLocalizations -project "keyman/Keyman/Keyman.xcodeproj" diff --git a/ios/keyman/Keyman/Keyman.xcodeproj/project.pbxproj b/ios/keyman/Keyman/Keyman.xcodeproj/project.pbxproj index 010674c7e0..7292a3f91d 100644 --- a/ios/keyman/Keyman/Keyman.xcodeproj/project.pbxproj +++ b/ios/keyman/Keyman/Keyman.xcodeproj/project.pbxproj @@ -974,7 +974,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = "/usr/bin/env bash"; - shellScript = ". \"$KEYMAN_ROOT/resources/build/xcode-utils.sh\"\n\nif [ ${UPLOAD_SENTRY:-false} = true ]; then\n # Calls resource script to perform the dSYM upload\n \"$KEYMAN_ROOT/resources/build/xcode-wrap.sh\" \"$KEYMAN_ROOT/resources/build/sentry-dsym-upload.sh\"\nfi\n"; + shellScript = ". \"$KEYMAN_ROOT/resources/build/mac/xcode-utils.inc.sh\"\n\nif [ ${UPLOAD_SENTRY:-false} = true ]; then\n # Calls resource script to perform the dSYM upload\n \"$KEYMAN_ROOT/resources/build/mac/xcode-wrap.sh\" \"$KEYMAN_ROOT/resources/build/mac/sentry-dsym-upload.sh\"\nfi\n"; }; CE06AA671F161422006D91C3 /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -1006,7 +1006,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = "/usr/bin/env bash"; - shellScript = "\"$KEYMAN_ROOT/resources/build/xcode-wrap.sh\" \"$KEYMAN_ROOT/resources/build/set-bundle-versions-and-settings-tagged.sh\"\necho \"script - set version complete\"\n"; + shellScript = "\"$KEYMAN_ROOT/resources/build/mac/xcode-wrap.sh\" \"$KEYMAN_ROOT/resources/build/mac/set-bundle-versions-and-settings-tagged.sh\"\necho \"script - set version complete\"\n"; showEnvVarsInLog = 0; }; CED3CFDA240E49DF001540A1 /* ShellScript */ = { @@ -1024,7 +1024,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = "/usr/bin/env bash"; - shellScript = "\"$KEYMAN_ROOT/resources/build/xcode-wrap.sh\" \"$KEYMAN_ROOT/resources/build/set-bundle-versions-untagged.sh\"\n"; + shellScript = "\"$KEYMAN_ROOT/resources/build/mac/xcode-wrap.sh\" \"$KEYMAN_ROOT/resources/build/mac/set-bundle-versions-untagged.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ diff --git a/ios/keyman/build.sh b/ios/keyman/build.sh index d37a583dc5..5c6182a036 100755 --- a/ios/keyman/build.sh +++ b/ios/keyman/build.sh @@ -8,6 +8,7 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" # Include our resource functions; they're pretty useful! . "$KEYMAN_ROOT/resources/build/utils.inc.sh" +. "$KEYMAN_ROOT/resources/build/mac/mac.inc.sh" . "$KEYMAN_ROOT/resources/build/build-help.inc.sh" # Please note that this build script (understandably) assumes that it is running on Mac OS X. diff --git a/ios/samples/KMSample1/build.sh b/ios/samples/KMSample1/build.sh index 479ebe5d42..c3bf1cc712 100755 --- a/ios/samples/KMSample1/build.sh +++ b/ios/samples/KMSample1/build.sh @@ -3,19 +3,10 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder-basic.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -# This script runs from its own folder -cd "$THIS_SCRIPT_PATH" - -# Include our resource functions; they're pretty useful! -. "$KEYMAN_ROOT/resources/build/utils.inc.sh" - -# Please note that this build script (understandably) assumes that it is running on Mac OS X. -verify_on_mac - -source "${THIS_SCRIPT%/*}/../common.inc.sh" +source "${THIS_SCRIPT_PATH}/../common.inc.sh" TARGET=KMSample1 execute_sample_build "$@" \ No newline at end of file diff --git a/ios/samples/KMSample2/build.sh b/ios/samples/KMSample2/build.sh index 2d73deec66..3b3f58ccfe 100755 --- a/ios/samples/KMSample2/build.sh +++ b/ios/samples/KMSample2/build.sh @@ -3,19 +3,10 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../resources/build/builder-basic.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -# This script runs from its own folder -cd "$THIS_SCRIPT_PATH" - -# Include our resource functions; they're pretty useful! -. "$KEYMAN_ROOT/resources/build/utils.inc.sh" - -# Please note that this build script (understandably) assumes that it is running on Mac OS X. -verify_on_mac - -source "${THIS_SCRIPT%/*}/../common.inc.sh" +source "${THIS_SCRIPT_PATH}/../common.inc.sh" TARGET=KMSample2 execute_sample_build "$@" \ No newline at end of file diff --git a/ios/samples/common.inc.sh b/ios/samples/common.inc.sh index 7d3c8cd920..fa91b4301d 100755 --- a/ios/samples/common.inc.sh +++ b/ios/samples/common.inc.sh @@ -1,7 +1,11 @@ #!/usr/bin/env bash +# Keyman is copyright (C) SIL Global. MIT License. -# This script is included by each sample build.sh. Accordingly, it inherits builder-basic.inc.sh, etc -# from the including script. +# This script is included by each sample build.sh. Accordingly, it inherits +# builder-full.inc.sh from the including script. + +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" +. "$KEYMAN_ROOT/resources/build/mac.inc.sh" function do_build() { # Copy resources. @@ -32,6 +36,8 @@ function execute_sample_build() { builder_parse "$@" + verify_on_mac + local CONFIG=Release if builder_is_debug_build; then CONFIG="Debug" diff --git a/ios/test.sh b/ios/test.sh index fbff357cdb..e93614f682 100755 --- a/ios/test.sh +++ b/ios/test.sh @@ -1,3 +1,17 @@ +#!/usr/bin/env bash +# Keyman is copyright (C) SIL Global. MIT License. + +## START STANDARD BUILD SCRIPT INCLUDE +# adjust relative paths as necessary +THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" +. "${THIS_SCRIPT%/*}/../resources/build/builder-basic.inc.sh" +## END STANDARD BUILD SCRIPT INCLUDE + +. "$KEYMAN_ROOT/resources/build/utils.inc.sh" +. "$KEYMAN_ROOT/resources/build/mac/mac.inc.sh" + +verify_on_mac + if [ "$#" -ge 1 ]; then DEVICE=$1 else diff --git a/mac/build.sh b/mac/build.sh index 8921aa82cc..cff2b22b84 100755 --- a/mac/build.sh +++ b/mac/build.sh @@ -6,8 +6,8 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" ## END STANDARD BUILD SCRIPT INCLUDE . "$KEYMAN_ROOT/resources/build/utils.inc.sh" +. "$KEYMAN_ROOT/resources/build/mac/mac.inc.sh" . "$KEYMAN_ROOT/resources/build/build-help.inc.sh" -. "$KEYMAN_ROOT/mac/mac-utils.inc.sh" builder_describe "Builds Keyman for macOS." \ "@/core:mac" \ @@ -27,6 +27,8 @@ builder_describe "Builds Keyman for macOS." \ builder_parse "$@" +verify_on_mac + # Default is release build of Engine and (code-signed) Input Method if builder_is_debug_build; then CONFIG="Debug" diff --git a/mac/is_same_version.sh b/mac/is_same_version.sh index 4eef7647e0..d8c3441a6e 100755 --- a/mac/is_same_version.sh +++ b/mac/is_same_version.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash +# TODO: this is currently a no-op. Eliminate or fix. + # compares the version of this branch (in ../VERSION.md) to the # version in the Xcode project file of the subproject named in $1 # returns zero if they are the same, non-zero if not the same or a problem occurs diff --git a/mac/mac-utils.inc.sh b/mac/mac-utils.inc.sh index a9d814d247..28f96f616c 100644 --- a/mac/mac-utils.inc.sh +++ b/mac/mac-utils.inc.sh @@ -1,4 +1,6 @@ +# TODO: merge with resources/build/mac/mac.inc.sh + if [ -z "${DEVELOPMENT_TEAM+x}" ]; then DEVELOPMENT_TEAM=3YE4W86L3G fi diff --git a/mac/setup/build.sh b/mac/setup/build.sh index 962e702b60..f8c161c08a 100755 --- a/mac/setup/build.sh +++ b/mac/setup/build.sh @@ -1,15 +1,15 @@ #!/usr/bin/env bash +# Keyman is copyright (C) SIL Global. MIT License. + ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "${THIS_SCRIPT%/*}/../../resources/build/builder-basic.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -# Include our resource functions; they're pretty useful! . "$KEYMAN_ROOT/resources/build/utils.inc.sh" -. "$KEYMAN_ROOT/mac/mac-utils.inc.sh" +. "$KEYMAN_ROOT/resources/build/mac/mac.inc.sh" -# Please note that this build script (understandably) assumes that it is running on Mac OS X. verify_on_mac cd "${THIS_SCRIPT_PATH}" diff --git a/oem/firstvoices/ios/FirstVoices.xcodeproj/project.pbxproj b/oem/firstvoices/ios/FirstVoices.xcodeproj/project.pbxproj index 7546e31557..1242db1b8f 100644 --- a/oem/firstvoices/ios/FirstVoices.xcodeproj/project.pbxproj +++ b/oem/firstvoices/ios/FirstVoices.xcodeproj/project.pbxproj @@ -440,7 +440,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = "/usr/bin/env bash"; - shellScript = "\"$KEYMAN_ROOT/resources/build/xcode-wrap.sh\" \"$KEYMAN_ROOT/resources/build/set-bundle-versions-untagged.sh\"\n"; + shellScript = "\"$KEYMAN_ROOT/resources/build/mac/xcode-wrap.sh\" \"$KEYMAN_ROOT/resources/build/mac/set-bundle-versions-untagged.sh\"\n"; showEnvVarsInLog = 0; }; 37DF007C24595F6F00C73128 /* Run Script */ = { @@ -459,7 +459,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = "/usr/bin/env bash"; - shellScript = "\"$KEYMAN_ROOT/resources/build/xcode-wrap.sh\" \"$KEYMAN_ROOT/resources/build/set-bundle-versions-and-settings-untagged.sh\"\n"; + shellScript = "\"$KEYMAN_ROOT/resources/build/mac/xcode-wrap.sh\" \"$KEYMAN_ROOT/resources/build/mac/set-bundle-versions-and-settings-untagged.sh\"\n"; showEnvVarsInLog = 0; }; 9800EC5D1C029FCD00BF0FB5 /* ShellScript */ = { diff --git a/oem/firstvoices/ios/build.sh b/oem/firstvoices/ios/build.sh index 38c55f86fa..18fe62ef44 100755 --- a/oem/firstvoices/ios/build.sh +++ b/oem/firstvoices/ios/build.sh @@ -7,15 +7,12 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "${THIS_SCRIPT%/*}/../../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -# Include our resource functions; they're pretty useful! . "$KEYMAN_ROOT/resources/build/utils.inc.sh" +. "$KEYMAN_ROOT/resources/build/mac/mac.inc.sh" . "$KEYMAN_ROOT/resources/build/build-download-resources.sh" # ################################ Main script ################################ -# Please note that this build script (understandably) assumes that it is running on Mac OS X. -verify_on_mac - export TARGET=FirstVoices builder_describe "Builds the $TARGET app for use on iOS devices - iPhone and iPad." \ @@ -27,6 +24,8 @@ builder_describe "Builds the $TARGET app for use on iOS devices - iPhone and iPa builder_parse "$@" +verify_on_mac + KMEI_BUILD_DIR="$KEYMAN_ROOT/ios/build" DERIVED_DATA="$THIS_SCRIPT_PATH/build" diff --git a/resources/build/builder-basic.inc.sh b/resources/build/builder-basic.inc.sh index 13c33cc798..83f77c3134 100644 --- a/resources/build/builder-basic.inc.sh +++ b/resources/build/builder-basic.inc.sh @@ -193,36 +193,6 @@ function _builder_basic_find_should_sentry_release() { esac } -# Intended for use with macOS-based builds, as Xcode build phase "run script"s do not have access to important -# environment variables. Doesn't hurt to run it at other times as well. The output file is .gitignore'd. -function _builder_generate_xcode_environment_definition_script() { - ENVIRONMENT_SH="$KEYMAN_ROOT/resources/environment.sh" - - # Remove old copy if it exists - [ -f "$ENVIRONMENT_SH" ] && rm "$ENVIRONMENT_SH" - - # Documentation about the script, within the script. - echo "# Do not edit - this is an autogenerated script. See build/builder-basic.inc.sh for more details." >> "$ENVIRONMENT_SH" - echo "# This file redefines critical environment variables for import to Xcode build phases." >> "$ENVIRONMENT_SH" - echo "" >> "$ENVIRONMENT_SH" - - # Defining variables for KEYMAN_VERSION here will leave static definitions that don't automatically update when a user - # changes branches; some branches are 'similar enough' to not require full command-line based rebuilds. - # We want that KEYMAN_VERSION number to properly mirror the state of its branch during development so that it matches - # any error reports that get logged to Sentry. - # - # As a result, we explicitly do NOT define KEYMAN_VERSION or KEYMAN_VERSION_TAG as part of ENVIRONMENT_SH. - - echo "# Required for successful dSYM upload for Sentry error reporting" >> "$ENVIRONMENT_SH" - echo "export SENTRY_AUTH_TOKEN=${SENTRY_AUTH_TOKEN:-}" >> "$ENVIRONMENT_SH" - echo "export SENTRY_URL=${SENTRY_URL:-}" >> "$ENVIRONMENT_SH" - echo "export SENTRY_ORG=${SENTRY_ORG:-}" >> "$ENVIRONMENT_SH" - - # Ensure the autogenerated file may be successfully run/included by xcode-utils.sh. - chmod +x "$ENVIRONMENT_SH" -} - - replaceVersionStrings() { local infile=$1 local outfile=$2 @@ -289,58 +259,6 @@ _builder_basic_set_keyman_standard_build_path() { PATH="$KEYMAN_ROOT/node_modules/.bin:$PATH" } -# -# printXCodeBuildScriptLogs: xcodebuild does not emit stdout from scripts in -# PBXShellScriptBuildPhase phases. This is a real problem for us because if -# there is an issue, we just can't see it. So we capture the output in a -# separate logfile, and then call printXCodeBuildScriptLogs after any xcodebuild -# call to get the output. -# -# This file is captured in xcode-utils.sh, logScriptsToFile function, and each -# script phase will append to the log file, until funprintXCodeBuildScriptLogs -# is called, at which point the logfile will be deleted. -# -# The logfile is placed in $KEYMAN_ROOT/xcodebuild-scripts.log. It is used for -# both iOS and macOS builds. -# -# If there is no logfile, then this function will not emit anything. -# -printXCodeBuildScriptLogs() { - local SCRIPT_LOG="$KEYMAN_ROOT/xcodebuild-scripts.log" - if [ -f "$SCRIPT_LOG" ]; then - echo "printXCodeBuildScriptLogs: reporting script results from previous xcode build" - cat "$SCRIPT_LOG" - rm "$SCRIPT_LOG" - echo "printXCodeBuildScriptLogs: done" - echo - fi -} - -# -# Wraps xcodebuild with error handling and log printing -# -run_xcodebuild() { - typeset cmnd="$*" - typeset ret_code - local hasSetErrExit=false - if [ -o errexit ]; then - hasSetErrExit=true - set +e - fi - eval xcodebuild $cmnd - ret_code=$? - if $hasSetErrExit; then - set -e - fi - - printXCodeBuildScriptLogs - if [ $ret_code != 0 ]; then - builder_die "Build failed! Error: [$ret_code] when executing command: 'xcodebuild $cmnd'" - fi -} - - - _builder_basic_find_keyman_root # Source builder_script @@ -354,14 +272,6 @@ _builder_basic_print_build_number_for_teamcity _builder_basic_find_should_sentry_release -# If this script is running on macOS but not within xcode script calls, generate the -# env script that will be used for xcode scripts -# Reference: https://gist.github.com/gdavis/6670468 -# shellcheck disable=2310 -if builder_is_macos && [[ -z "${XCODE_VERSION_ACTUAL:-}" ]] && [[ -z "${XCODE_PRODUCT_BUILD_VERSION:-}" ]]; then - _builder_generate_xcode_environment_definition_script -fi - # # We always want to use tools out of node_modules/.bin to guarantee that we get the # correct version diff --git a/resources/build/mac/mac.inc.sh b/resources/build/mac/mac.inc.sh new file mode 100644 index 0000000000..e64dccbffa --- /dev/null +++ b/resources/build/mac/mac.inc.sh @@ -0,0 +1,159 @@ +# shellcheck shell=bash +# Keyman is copyright (C) SIL Global. MIT License. + +if [ -z "${DEVELOPMENT_TEAM+x}" ]; then + DEVELOPMENT_TEAM=3YE4W86L3G +fi + +function mac_notarize() { + local TARGET_PATH="$1" + local TARGET_FILE="$2" + + local NOTARYTOOL_LOG_PATH="$TARGET_PATH/notarytool.log" + + xcrun notarytool submit \ + --apple-id "$APPSTORECONNECT_USERNAME" \ + --team-id "$DEVELOPMENT_TEAM" \ + --password "$APPSTORECONNECT_PASSWORD" \ + --output-format json \ + --wait \ + "$TARGET_FILE" > "$NOTARYTOOL_LOG_PATH" + # notarytool output: {"status":"Accepted","id":"ca62bba0-6c49-43c2-90d8-83a8ef306e0f","message":"Processing complete"} + + cat "$NOTARYTOOL_LOG_PATH" + local NOTARYTOOL_STATUS=`cat "$NOTARYTOOL_LOG_PATH" | jq -r .status` + local NOTARYTOOL_SUBMISSION_ID=`cat "$NOTARYTOOL_LOG_PATH" | jq -r .id` + if [[ "$NOTARYTOOL_STATUS" != Accepted ]]; then + # We won't assume notarytool returns an error code if status != Accepted + builder_die "Notarization failed with $NOTARYTOOL_STATUS" + fi + + builder_heading "Notarization completed successfully. Review logs below for any warnings." + + xcrun notarytool log \ + --apple-id "$APPSTORECONNECT_USERNAME" \ + --team-id "$DEVELOPMENT_TEAM" \ + --password "$APPSTORECONNECT_PASSWORD" \ + "$NOTARYTOOL_SUBMISSION_ID" + + rm -f "$NOTARYTOOL_LOG_PATH" +} + +execCodeSign() { + # Allow the signing to fail up to 5 times (network transient error on timestamping) + local ret_code=0 + local count=0 + local method="$1" + shift + if [[ "$method" == direct ]]; then + method= + fi + while (( count < 5 )); do + $method codesign "$@" || ret_code=$? + if [ $ret_code == 0 ]; then + return 0 + fi + (( count++ )) + builder_echo "codesign attempt $count failed with error $ret_code" + sleep 5 + done + + builder_echo "*** codesign parameters: $@" + builder_die "Unable to sign component after 5 attempts (exit code $ret_code)" +} + +# Allows for a quick macOS check for those scripts requiring a macOS environment. +verify_on_mac() { + if ! builder_is_macos; then + builder_die "This build script will only run in a Mac environment." + exit 1 + fi +} + +# Intended for use with macOS-based builds, as Xcode build phase "run script"s do not have access to important +# environment variables. Doesn't hurt to run it at other times as well. The output file is .gitignore'd. +function _mac_generate_xcode_environment_definition_script() { + ENVIRONMENT_SH="$KEYMAN_ROOT/resources/environment.sh" + + # Remove old copy if it exists + [ -f "$ENVIRONMENT_SH" ] && rm "$ENVIRONMENT_SH" + + # Documentation about the script, within the script. + echo "# Do not edit - this is an autogenerated script. See build/builder-basic.inc.sh for more details." >> "$ENVIRONMENT_SH" + echo "# This file redefines critical environment variables for import to Xcode build phases." >> "$ENVIRONMENT_SH" + echo "" >> "$ENVIRONMENT_SH" + + # Defining variables for KEYMAN_VERSION here will leave static definitions that don't automatically update when a user + # changes branches; some branches are 'similar enough' to not require full command-line based rebuilds. + # We want that KEYMAN_VERSION number to properly mirror the state of its branch during development so that it matches + # any error reports that get logged to Sentry. + # + # As a result, we explicitly do NOT define KEYMAN_VERSION or KEYMAN_VERSION_TAG as part of ENVIRONMENT_SH. + + echo "# Required for successful dSYM upload for Sentry error reporting" >> "$ENVIRONMENT_SH" + echo "export SENTRY_AUTH_TOKEN=${SENTRY_AUTH_TOKEN:-}" >> "$ENVIRONMENT_SH" + echo "export SENTRY_URL=${SENTRY_URL:-}" >> "$ENVIRONMENT_SH" + echo "export SENTRY_ORG=${SENTRY_ORG:-}" >> "$ENVIRONMENT_SH" + + # Ensure the autogenerated file may be successfully run/included by xcode-utils.inc.sh. + chmod +x "$ENVIRONMENT_SH" +} + +# +# printXCodeBuildScriptLogs: xcodebuild does not emit stdout from scripts in +# PBXShellScriptBuildPhase phases. This is a real problem for us because if +# there is an issue, we just can't see it. So we capture the output in a +# separate logfile, and then call printXCodeBuildScriptLogs after any xcodebuild +# call to get the output. +# +# This file is captured in xcode-utils.inc.sh, logScriptsToFile function, and +# each script phase will append to the log file, until printXCodeBuildScriptLogs +# is called, at which point the logfile will be deleted. +# +# The logfile is placed in $KEYMAN_ROOT/xcodebuild-scripts.log. It is used for +# both iOS and macOS builds. +# +# If there is no logfile, then this function will not emit anything. +# +printXCodeBuildScriptLogs() { + local SCRIPT_LOG="$KEYMAN_ROOT/xcodebuild-scripts.log" + if [ -f "$SCRIPT_LOG" ]; then + echo "printXCodeBuildScriptLogs: reporting script results from previous xcode build" + cat "$SCRIPT_LOG" + rm "$SCRIPT_LOG" + echo "printXCodeBuildScriptLogs: done" + echo + fi +} + +# +# Wraps xcodebuild with error handling and log printing +# +run_xcodebuild() { + typeset cmnd="$*" + typeset ret_code + local hasSetErrExit=false + if [ -o errexit ]; then + hasSetErrExit=true + set +e + fi + eval xcodebuild $cmnd + ret_code=$? + if $hasSetErrExit; then + set -e + fi + + printXCodeBuildScriptLogs + if [ $ret_code != 0 ]; then + builder_die "Build failed! Error: [$ret_code] when executing command: 'xcodebuild $cmnd'" + fi +} + +# If this script is running on macOS but not within xcode script calls, generate the +# env script that will be used for xcode scripts +# Reference: https://gist.github.com/gdavis/6670468 +# shellcheck disable=2310 +if builder_is_macos && [[ -z "${XCODE_VERSION_ACTUAL:-}" ]] && [[ -z "${XCODE_PRODUCT_BUILD_VERSION:-}" ]]; then + _mac_generate_xcode_environment_definition_script +fi + diff --git a/resources/build/mac/sentry-dsym-upload.sh b/resources/build/mac/sentry-dsym-upload.sh new file mode 100755 index 0000000000..6da9c944dc --- /dev/null +++ b/resources/build/mac/sentry-dsym-upload.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +# Keyman is copyright (C) SIL Global. MIT License. + +# Calls resource script to perform the dSYM upload + +source "$KEYMAN_ROOT/resources/build/mac/xcode-utils.inc.sh" +phaseSentryDsymUpload "keyman-ios" \ No newline at end of file diff --git a/resources/build/set-bundle-versions-and-settings-tagged.sh b/resources/build/mac/set-bundle-versions-and-settings-tagged.sh similarity index 71% rename from resources/build/set-bundle-versions-and-settings-tagged.sh rename to resources/build/mac/set-bundle-versions-and-settings-tagged.sh index 6985ae3c3c..69b7a0ac45 100755 --- a/resources/build/set-bundle-versions-and-settings-tagged.sh +++ b/resources/build/mac/set-bundle-versions-and-settings-tagged.sh @@ -1,10 +1,11 @@ #!/usr/bin/env bash +# Keyman is copyright (C) SIL Global. MIT License. # Calls script in xcode-utils to update the version # true: applies KEYMAN_VERSION_WITH_TAG to custom KeymanVersionWithTag plist member used for in-app display # updates the version string for Settings -source "$KEYMAN_ROOT/resources/build/xcode-utils.sh" +source "$KEYMAN_ROOT/resources/build/mac/xcode-utils.inc.sh" phaseSetBundleVersions true diff --git a/resources/build/set-bundle-versions-and-settings-untagged.sh b/resources/build/mac/set-bundle-versions-and-settings-untagged.sh similarity index 71% rename from resources/build/set-bundle-versions-and-settings-untagged.sh rename to resources/build/mac/set-bundle-versions-and-settings-untagged.sh index 93cd8a7eab..2906cfa971 100755 --- a/resources/build/set-bundle-versions-and-settings-untagged.sh +++ b/resources/build/mac/set-bundle-versions-and-settings-untagged.sh @@ -1,10 +1,11 @@ #!/usr/bin/env bash +# Keyman is copyright (C) SIL Global. MIT License. # Calls script in xcode-utils to update the version # true: applies KEYMAN_VERSION_WITH_TAG to custom KeymanVersionWithTag plist member used for in-app display # updates the version string for Settings -source "$KEYMAN_ROOT/resources/build/xcode-utils.sh" +source "$KEYMAN_ROOT/resources/build/mac/xcode-utils.inc.sh" phaseSetBundleVersions diff --git a/resources/build/set-bundle-versions-tagged.sh b/resources/build/mac/set-bundle-versions-tagged.sh similarity index 65% rename from resources/build/set-bundle-versions-tagged.sh rename to resources/build/mac/set-bundle-versions-tagged.sh index a941d460fe..c3a91d055f 100755 --- a/resources/build/set-bundle-versions-tagged.sh +++ b/resources/build/mac/set-bundle-versions-tagged.sh @@ -1,7 +1,8 @@ #!/usr/bin/env bash +# Keyman is copyright (C) SIL Global. MIT License. # Calls script in xcode-utils to update the version # true: applies KEYMAN_VERSION_WITH_TAG to custom KeymanVersionWithTag plist member used for in-app display -source "$KEYMAN_ROOT/resources/build/xcode-utils.sh" +source "$KEYMAN_ROOT/resources/build/mac/xcode-utils.inc.sh" phaseSetBundleVersions true diff --git a/resources/build/mac/set-bundle-versions-untagged.sh b/resources/build/mac/set-bundle-versions-untagged.sh new file mode 100755 index 0000000000..98f737e120 --- /dev/null +++ b/resources/build/mac/set-bundle-versions-untagged.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +# Keyman is copyright (C) SIL Global. MIT License. + +# Calls script in xcode-utils to update the version + +source "$KEYMAN_ROOT/resources/build/mac/xcode-utils.inc.sh" +phaseSetBundleVersions \ No newline at end of file diff --git a/resources/build/xcode-utils.sh b/resources/build/mac/xcode-utils.inc.sh old mode 100755 new mode 100644 similarity index 98% rename from resources/build/xcode-utils.sh rename to resources/build/mac/xcode-utils.inc.sh index 3b9ad4b8e3..9cdb85de2d --- a/resources/build/xcode-utils.sh +++ b/resources/build/mac/xcode-utils.inc.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +# Keyman is copyright (C) SIL Global. MIT License. # This script will automatically have Xcode's build environment (and variables), # so there's no need to do anything extra to fetch them. @@ -163,7 +164,7 @@ function phaseSentryDsymUpload() { } # -# All calls to xcode-utils.sh scripts will have their output redirected to +# All calls to xcode-utils.inc.sh scripts will have their output redirected to # $KEYMAN_ROOT/xcodebuild-scripts.log. This will redirect both stdout and stderr # to this log file. See the corresponding printXCodeBuildScriptLogs function in # builder-basic.inc.sh to print the log after xcodebuild returns. diff --git a/resources/build/mac/xcode-wrap.sh b/resources/build/mac/xcode-wrap.sh new file mode 100755 index 0000000000..3b97ab57fd --- /dev/null +++ b/resources/build/mac/xcode-wrap.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +# Keyman is copyright (C) SIL Global. MIT License. + +# Runs a script using the homebrew version of bash from within an xcode script; +# we need this because xcode does not inherit paths from user's terminal +# environment. + +echo "xcode-wrap: wrap script for arch $(arch)" +if [[ $(arch) == i386 ]] && [[ -f /usr/local/bin/bash ]]; then + /usr/local/bin/bash -l "$@" || exit $? +elif [[ $(arch) == arm64 ]] && [[ -f /opt/homebrew/bin/bash ]]; then + /opt/homebrew/bin/bash -l "$@" || exit $? +else + >&2 echo "xcode-wrap: Could not start build due to missing homebrew bash" + exit 55 +fi \ No newline at end of file diff --git a/resources/build/sentry-dsym-upload.sh b/resources/build/sentry-dsym-upload.sh deleted file mode 100755 index 47f73b7a77..0000000000 --- a/resources/build/sentry-dsym-upload.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash - -# Calls resource script to perform the dSYM upload - -source "$KEYMAN_ROOT/resources/build/xcode-utils.sh" -phaseSentryDsymUpload "keyman-ios" \ No newline at end of file diff --git a/resources/build/set-bundle-versions-untagged.sh b/resources/build/set-bundle-versions-untagged.sh deleted file mode 100755 index 85ea09f9c3..0000000000 --- a/resources/build/set-bundle-versions-untagged.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash - -# Calls script in xcode-utils to update the version - -source "$KEYMAN_ROOT/resources/build/xcode-utils.sh" -phaseSetBundleVersions \ No newline at end of file diff --git a/resources/build/utils.inc.sh b/resources/build/utils.inc.sh index 04c39915ff..d8b0e6fa7f 100644 --- a/resources/build/utils.inc.sh +++ b/resources/build/utils.inc.sh @@ -6,15 +6,6 @@ _utils_inc_sh=1 -# Allows for a quick macOS check for those scripts requiring a macOS environment. -# TODO: move to resources/build/mac/ -verify_on_mac() { - if ! builder_is_macos; then - builder_die "This build script will only run in a Mac environment." - exit 1 - fi -} - # # Write ${UPLOAD_DIR}/${ARTIFACT_FILENAME}.download_info file for the target # artifact diff --git a/resources/build/xcode-wrap.sh b/resources/build/xcode-wrap.sh deleted file mode 100755 index 61d79ca24e..0000000000 --- a/resources/build/xcode-wrap.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -echo "wrap script for arch $(arch)" -if [[ $(arch) == i386 ]] && [[ -f /usr/local/bin/bash ]]; then - /usr/local/bin/bash -l "$@" || exit $? -elif [[ $(arch) == arm64 ]] && [[ -f /opt/homebrew/bin/bash ]]; then - /opt/homebrew/bin/bash -l "$@" || exit $? -else - >&2 echo "Could not start build due to missing homebrew bash" - exit 55 -fi \ No newline at end of file From 3c3ad4a0885179e9ae8da6018ea1e80d84190c65 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Tue, 5 Aug 2025 10:51:19 +1000 Subject: [PATCH 2/5] maint(common): move github.inc.sh to ci/ Relates-to: #14453 --- resources/build/{ => ci}/github.inc.sh | 3 ++- web/src/tools/building/check-build-size.sh | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) rename resources/build/{ => ci}/github.inc.sh (96%) diff --git a/resources/build/github.inc.sh b/resources/build/ci/github.inc.sh similarity index 96% rename from resources/build/github.inc.sh rename to resources/build/ci/github.inc.sh index ff7779d242..af51c7a313 100644 --- a/resources/build/github.inc.sh +++ b/resources/build/ci/github.inc.sh @@ -1,4 +1,5 @@ -#!/usr/bin/env bash +# shellcheck shell=bash +# Keyman is copyright (C) SIL Global. MIT License. ## ## Writes a status check message to GitHub against the reported SHA diff --git a/web/src/tools/building/check-build-size.sh b/web/src/tools/building/check-build-size.sh index ce19e0b226..f4741cbce6 100755 --- a/web/src/tools/building/check-build-size.sh +++ b/web/src/tools/building/check-build-size.sh @@ -16,7 +16,7 @@ SIZE_THRESHOLD=1024 THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "${THIS_SCRIPT%/*}/../../../../resources/build/builder-basic.inc.sh" . "$KEYMAN_ROOT/resources/build/jq.inc.sh" -. "$KEYMAN_ROOT/resources/build/github.inc.sh" +. "$KEYMAN_ROOT/resources/build/ci/github.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE display_usage() { From e46828b3395fd2c225cd0bb29d73a15e3085a843 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Tue, 5 Aug 2025 11:06:14 +1000 Subject: [PATCH 3/5] maint(common): move trigger*.inc.sh and sentry-control.inc.sh to ci/ Relates-to: #14453 --- resources/build/{ => ci}/sentry-control.inc.sh | 3 ++- resources/build/{ => ci}/trigger-build-bot.inc.sh | 3 ++- resources/build/{ => ci}/trigger-builds.inc.sh | 3 ++- resources/build/{ => ci}/trigger-definitions.inc.sh | 3 ++- resources/build/increment-version.sh | 6 +++--- resources/build/run-required-test-builds.sh | 6 +++--- resources/build/test/build-bot/trigger-build-bot.test.sh | 4 ++-- 7 files changed, 16 insertions(+), 12 deletions(-) rename resources/build/{ => ci}/sentry-control.inc.sh (94%) rename resources/build/{ => ci}/trigger-build-bot.inc.sh (98%) rename resources/build/{ => ci}/trigger-builds.inc.sh (98%) rename resources/build/{ => ci}/trigger-definitions.inc.sh (98%) diff --git a/resources/build/sentry-control.inc.sh b/resources/build/ci/sentry-control.inc.sh similarity index 94% rename from resources/build/sentry-control.inc.sh rename to resources/build/ci/sentry-control.inc.sh index b01695af19..9331152eed 100644 --- a/resources/build/sentry-control.inc.sh +++ b/resources/build/ci/sentry-control.inc.sh @@ -1,4 +1,5 @@ -#!/usr/bin/env bash +# shellcheck shell=bash +# Keyman is copyright (C) SIL Global. MIT License. # # This script centralises sentry symbol uploads and releases diff --git a/resources/build/trigger-build-bot.inc.sh b/resources/build/ci/trigger-build-bot.inc.sh similarity index 98% rename from resources/build/trigger-build-bot.inc.sh rename to resources/build/ci/trigger-build-bot.inc.sh index f9b428be35..e538382f2d 100644 --- a/resources/build/trigger-build-bot.inc.sh +++ b/resources/build/ci/trigger-build-bot.inc.sh @@ -1,4 +1,5 @@ -#!/usr/bin/env bash +# shellcheck shell=bash +# Keyman is copyright (C) SIL Global. MIT License. # set -eu diff --git a/resources/build/trigger-builds.inc.sh b/resources/build/ci/trigger-builds.inc.sh similarity index 98% rename from resources/build/trigger-builds.inc.sh rename to resources/build/ci/trigger-builds.inc.sh index bfea20bb1a..0d54971b15 100644 --- a/resources/build/trigger-builds.inc.sh +++ b/resources/build/ci/trigger-builds.inc.sh @@ -1,4 +1,5 @@ -#!/usr/bin/env bash +# shellcheck shell=bash +# Keyman is copyright (C) SIL Global. MIT License. # # Tell TeamCity to trigger new release builds diff --git a/resources/build/trigger-definitions.inc.sh b/resources/build/ci/trigger-definitions.inc.sh similarity index 98% rename from resources/build/trigger-definitions.inc.sh rename to resources/build/ci/trigger-definitions.inc.sh index 8748e63edf..74380e7311 100644 --- a/resources/build/trigger-definitions.inc.sh +++ b/resources/build/ci/trigger-definitions.inc.sh @@ -1,4 +1,5 @@ -#!/usr/bin/env bash +# shellcheck shell=bash +# Keyman is copyright (C) SIL Global. MIT License. # # This file maps specific paths to build triggers # diff --git a/resources/build/increment-version.sh b/resources/build/increment-version.sh index 1340deac14..f8d460174e 100755 --- a/resources/build/increment-version.sh +++ b/resources/build/increment-version.sh @@ -22,9 +22,9 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "${THIS_SCRIPT%/*}/../../resources/build/builder-basic.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "${THIS_SCRIPT%/*}/trigger-definitions.inc.sh" -. "${THIS_SCRIPT%/*}/trigger-builds.inc.sh" -. "${THIS_SCRIPT%/*}/sentry-control.inc.sh" +. "${THIS_SCRIPT%/*}/ci/trigger-definitions.inc.sh" +. "${THIS_SCRIPT%/*}/ci/trigger-builds.inc.sh" +. "${THIS_SCRIPT%/*}/ci/sentry-control.inc.sh" gitbranch=`git branch --show-current` diff --git a/resources/build/run-required-test-builds.sh b/resources/build/run-required-test-builds.sh index 0ccffd69a2..64ff30a1fd 100755 --- a/resources/build/run-required-test-builds.sh +++ b/resources/build/run-required-test-builds.sh @@ -12,9 +12,9 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "${THIS_SCRIPT%/*}/../../resources/build/builder-full.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "${THIS_SCRIPT%/*}/trigger-definitions.inc.sh" -. "${THIS_SCRIPT%/*}/trigger-builds.inc.sh" -. "${THIS_SCRIPT%/*}/trigger-build-bot.inc.sh" +. "${THIS_SCRIPT%/*}/ci/trigger-definitions.inc.sh" +. "${THIS_SCRIPT%/*}/ci/trigger-builds.inc.sh" +. "${THIS_SCRIPT%/*}/ci/trigger-build-bot.inc.sh" . "${THIS_SCRIPT%/*}/jq.inc.sh" builder_describe "Run test builds for the given pull request/primary branch" \ diff --git a/resources/build/test/build-bot/trigger-build-bot.test.sh b/resources/build/test/build-bot/trigger-build-bot.test.sh index 28d6f169ea..b321f7cafa 100755 --- a/resources/build/test/build-bot/trigger-build-bot.test.sh +++ b/resources/build/test/build-bot/trigger-build-bot.test.sh @@ -6,8 +6,8 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "${THIS_SCRIPT%/*}/../../../../resources/build/builder-basic.inc.sh" # END STANDARD BUILD SCRIPT INCLUDE -. "${THIS_SCRIPT_PATH}/../../trigger-definitions.inc.sh" -. "${THIS_SCRIPT_PATH}/../../trigger-build-bot.inc.sh" +. "${THIS_SCRIPT_PATH}/../../ci/trigger-definitions.inc.sh" +. "${THIS_SCRIPT_PATH}/../../ci/trigger-build-bot.inc.sh" . "${THIS_SCRIPT_PATH}/../test-utils.inc.sh" . "${KEYMAN_ROOT}/resources/build/jq.inc.sh" From 358b6665c283c1bbde3a5f817348dccc81116476 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Tue, 5 Aug 2025 11:59:15 +1000 Subject: [PATCH 4/5] maint(common): move help-keyman-com.sh to ci/ Relates-to: #14453 --- resources/build/{ => ci}/help-keyman-com.sh | 6 +++++- resources/teamcity/includes/tc-helpers.inc.sh | 8 +------- resources/teamcity/linux/keyman-linux-release.sh | 3 +-- 3 files changed, 7 insertions(+), 10 deletions(-) rename resources/build/{ => ci}/help-keyman-com.sh (96%) diff --git a/resources/build/help-keyman-com.sh b/resources/build/ci/help-keyman-com.sh similarity index 96% rename from resources/build/help-keyman-com.sh rename to resources/build/ci/help-keyman-com.sh index 8d851b0afe..5f2d1420dc 100755 --- a/resources/build/help-keyman-com.sh +++ b/resources/build/ci/help-keyman-com.sh @@ -3,11 +3,15 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../resources/build/builder-basic.inc.sh" +. "${THIS_SCRIPT%/*}/../../../resources/build/builder-basic.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE . "$KEYMAN_ROOT/resources/build/ci/pull-requests.inc.sh" +# TODO: convert to builder-full-compliant script + +cd "${THIS_SCRIPT_PATH}" + # # Allows us to check for existence of subfolders in help/ # diff --git a/resources/teamcity/includes/tc-helpers.inc.sh b/resources/teamcity/includes/tc-helpers.inc.sh index 17776033fe..b4c62826e1 100644 --- a/resources/teamcity/includes/tc-helpers.inc.sh +++ b/resources/teamcity/includes/tc-helpers.inc.sh @@ -27,13 +27,7 @@ tc_upload_help() { local PRODUCT=$1 local PRODUCT_PATH=$2 builder_echo start "upload help" "Uploading new ${PRODUCT} help to help.keyman.com" - - ( - # shellcheck disable=SC2164,SC2154 - cd "${KEYMAN_ROOT}/resources/build" - "${KEYMAN_ROOT}/resources/build/help-keyman-com.sh" "${PRODUCT_PATH}" - ) - + "${KEYMAN_ROOT}/resources/build/ci/help-keyman-com.sh" "${PRODUCT_PATH}" builder_echo end "upload help" success "Finished uploading new ${PRODUCT} help to help.keyman.com" } diff --git a/resources/teamcity/linux/keyman-linux-release.sh b/resources/teamcity/linux/keyman-linux-release.sh index 78369686f9..87d2a51c03 100755 --- a/resources/teamcity/linux/keyman-linux-release.sh +++ b/resources/teamcity/linux/keyman-linux-release.sh @@ -120,8 +120,7 @@ function _publish_linux_help() { cd "${KEYMAN_ROOT}/../help.keyman.com" || exit 1 # shellcheck disable=SC2016 git config credential.helper '!f() { sleep 1; echo "username=${GITHUB_USER}"; echo "password=${GITHUB_TOKEN}"; }; f' - cd "${KEYMAN_ROOT}/resources/build" - ./help-keyman-com.sh linux + "${KEYMAN_ROOT}/resources/build/ci/help-keyman-com.sh" linux ) builder_echo end "upload linux help" success "Upload new Keyman Linux help to help.keyman.com" From f3fb3ac87b4a11c5ef4f77695ea399c64815fcae Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Tue, 5 Aug 2025 12:54:56 +1000 Subject: [PATCH 5/5] maint(common): move build-utils-ci.inc.sh to ci/ci-publish.inc.sh Removes a number of unused functions from the file, renames remaining functions to match our builder script prefix patterns, removes unused imports from various build scripts (e.g. Android). Fixes: #14453 --- android/KMAPro/build.sh | 1 - android/KMEA/build.sh | 1 - android/Samples/KMSample1/build.sh | 1 - android/Samples/KMSample2/build.sh | 1 - android/Tests/KeyboardHarness/build.sh | 1 - android/build.sh | 1 - common/web/keyman-version/build.sh | 4 +- common/web/langtags/build.sh | 4 +- common/web/types/build.sh | 4 +- core/include/ldml/build.sh | 4 +- developer/src/build.sh | 6 +- developer/src/common/web/utils/build.sh | 4 +- developer/src/kmc-analyze/build.sh | 4 +- developer/src/kmc-copy/build.sh | 4 +- developer/src/kmc-generate/build.sh | 4 +- developer/src/kmc-keyboard-info/build.sh | 4 +- developer/src/kmc-kmn/build.sh | 4 +- developer/src/kmc-ldml/build.sh | 4 +- developer/src/kmc-model-info/build.sh | 4 +- developer/src/kmc-model/build.sh | 4 +- developer/src/kmc-package/build.sh | 4 +- developer/src/kmc/build.sh | 4 +- developer/src/kmc/test/command-line-tests.sh | 4 - developer/src/kmcmplib/build.sh | 1 - oem/firstvoices/android/build.sh | 1 - resources/build/build-utils-ci.test.sh | 57 ------------- .../ci-publish.inc.sh} | 82 ++++--------------- web/build.sh | 1 - web/common.inc.sh | 3 - .../engine/predictive-text/templates/build.sh | 1 - .../predictive-text/wordbreakers/build.sh | 1 - .../predictive-text/worker-main/build.sh | 1 - .../worker-main/unit_tests/test.sh | 6 +- .../predictive-text/worker-thread/build.sh | 1 - web/test.sh | 1 - windows/src/desktop/build.sh | 1 - 36 files changed, 48 insertions(+), 185 deletions(-) delete mode 100755 resources/build/build-utils-ci.test.sh rename resources/build/{build-utils-ci.inc.sh => ci/ci-publish.inc.sh} (73%) diff --git a/android/KMAPro/build.sh b/android/KMAPro/build.sh index 525b951138..a2761002ca 100755 --- a/android/KMAPro/build.sh +++ b/android/KMAPro/build.sh @@ -7,7 +7,6 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" ## END STANDARD BUILD SCRIPT INCLUDE . "$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/KMEA/build.sh b/android/KMEA/build.sh index 9b6d0d4892..f4d7705815 100755 --- a/android/KMEA/build.sh +++ b/android/KMEA/build.sh @@ -8,7 +8,6 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" ## END STANDARD BUILD SCRIPT INCLUDE . "$KEYMAN_ROOT/resources/build/utils.inc.sh" -. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" # ################################ Main script ################################ diff --git a/android/Samples/KMSample1/build.sh b/android/Samples/KMSample1/build.sh index 65e5619815..5893deb856 100755 --- a/android/Samples/KMSample1/build.sh +++ b/android/Samples/KMSample1/build.sh @@ -8,7 +8,6 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" ## END STANDARD BUILD SCRIPT INCLUDE . "$KEYMAN_ROOT/resources/build/utils.inc.sh" -. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" ################################ Main script ################################ diff --git a/android/Samples/KMSample2/build.sh b/android/Samples/KMSample2/build.sh index 08c5261778..cc4d224477 100755 --- a/android/Samples/KMSample2/build.sh +++ b/android/Samples/KMSample2/build.sh @@ -8,7 +8,6 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" ## END STANDARD BUILD SCRIPT INCLUDE . "$KEYMAN_ROOT/resources/build/utils.inc.sh" -. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" ################################ Main script ################################ diff --git a/android/Tests/KeyboardHarness/build.sh b/android/Tests/KeyboardHarness/build.sh index 66f2b0496e..1cf1d02c54 100755 --- a/android/Tests/KeyboardHarness/build.sh +++ b/android/Tests/KeyboardHarness/build.sh @@ -8,7 +8,6 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" ## END STANDARD BUILD SCRIPT INCLUDE . "$KEYMAN_ROOT/resources/build/utils.inc.sh" -. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" ################################ Main script ################################ diff --git a/android/build.sh b/android/build.sh index e00c99e634..636386dc9d 100755 --- a/android/build.sh +++ b/android/build.sh @@ -15,7 +15,6 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" # shellcheck disable=SC2154 . "${KEYMAN_ROOT}/resources/build/utils.inc.sh" -. "${KEYMAN_ROOT}/resources/build/build-utils-ci.inc.sh" . "${KEYMAN_ROOT}/resources/build/zip.inc.sh" ################################ Main script ################################ diff --git a/common/web/keyman-version/build.sh b/common/web/keyman-version/build.sh index 0c9657f74b..781c63bbec 100755 --- a/common/web/keyman-version/build.sh +++ b/common/web/keyman-version/build.sh @@ -7,7 +7,7 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "$KEYMAN_ROOT/resources/build/utils.inc.sh" . "$KEYMAN_ROOT/resources/build/node.inc.sh" -. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" +. "$KEYMAN_ROOT/resources/build/ci/ci-publish.inc.sh" ################################ Main script ################################ @@ -56,4 +56,4 @@ export default KEYMAN_VERSION; builder_run_action clean rm -rf version.inc.ts keyman-version.mts build/ builder_run_action configure node_select_version_and_npm_ci builder_run_action build do_build -builder_run_action publish builder_publish_npm +builder_run_action publish ci_publish_npm diff --git a/common/web/langtags/build.sh b/common/web/langtags/build.sh index d1b951b624..4eec3d2c6a 100755 --- a/common/web/langtags/build.sh +++ b/common/web/langtags/build.sh @@ -7,7 +7,7 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "$KEYMAN_ROOT/resources/build/utils.inc.sh" . "$KEYMAN_ROOT/resources/build/node.inc.sh" -. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" +. "$KEYMAN_ROOT/resources/build/ci/ci-publish.inc.sh" builder_describe "Build Keyman langtags.js common module" \ "clean" \ @@ -43,4 +43,4 @@ builder_run_action clean rm -rf ./build ./src/imports ./node_modules builder_run_action configure do_configure builder_run_action build tsc --build builder_run_action test echo 'no tests for langtags' -builder_run_action publish builder_publish_npm +builder_run_action publish ci_publish_npm diff --git a/common/web/types/build.sh b/common/web/types/build.sh index 1ece69f2af..97ed5b603e 100755 --- a/common/web/types/build.sh +++ b/common/web/types/build.sh @@ -7,7 +7,7 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "$KEYMAN_ROOT/resources/build/utils.inc.sh" . "$KEYMAN_ROOT/resources/build/node.inc.sh" -. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" +. "$KEYMAN_ROOT/resources/build/ci/ci-publish.inc.sh" builder_describe "Build Keyman common file types module" \ "@/core/include/ldml" \ @@ -105,4 +105,4 @@ builder_run_action clean rm -rf ./build/ ./tsconfig.tsbuildinfo ./src/schem builder_run_action configure do_configure builder_run_action build tsc --build builder_run_action test do_test -builder_run_action publish builder_publish_npm +builder_run_action publish ci_publish_npm diff --git a/core/include/ldml/build.sh b/core/include/ldml/build.sh index f2633ed348..4029d732ce 100755 --- a/core/include/ldml/build.sh +++ b/core/include/ldml/build.sh @@ -10,7 +10,7 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "$KEYMAN_ROOT/resources/build/utils.inc.sh" . "$KEYMAN_ROOT/resources/build/node.inc.sh" -. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" +. "$KEYMAN_ROOT/resources/build/ci/ci-publish.inc.sh" builder_describe "Keyman ldml-keyboard-constants package" \ "@/common/web/keyman-version" \ @@ -34,4 +34,4 @@ builder_run_action clean rm -rf ./build/ 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 +builder_run_action publish ci_publish_npm diff --git a/developer/src/build.sh b/developer/src/build.sh index 6e23dc8c0a..fae0699748 100755 --- a/developer/src/build.sh +++ b/developer/src/build.sh @@ -6,7 +6,7 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" ## END STANDARD BUILD SCRIPT INCLUDE . "$KEYMAN_ROOT/resources/build/utils.inc.sh" -. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" +. "$KEYMAN_ROOT/resources/build/ci/ci-publish.inc.sh" . "$KEYMAN_ROOT/developer/src/packages.inc.sh" builder_describe \ @@ -93,7 +93,7 @@ function do_prepublish() { # the global publish # - builder_publish_cleanup + ci_publish_cleanup # # Verify that the Delphi environment is correct for a release build @@ -164,7 +164,7 @@ function do_publish() { builder_echo info "Cleaning up package.json after 'npm version'" # And then cleanup the mess - builder_publish_cleanup + ci_publish_cleanup # Restore all the package.json files and package-lock.json files that # were clobbered by 'npm version' pushd "$KEYMAN_ROOT" >/dev/null diff --git a/developer/src/common/web/utils/build.sh b/developer/src/common/web/utils/build.sh index 7c0f8f0ed9..0f5aacbac5 100755 --- a/developer/src/common/web/utils/build.sh +++ b/developer/src/common/web/utils/build.sh @@ -8,7 +8,7 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "$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" +. "$KEYMAN_ROOT/resources/build/ci/ci-publish.inc.sh" builder_describe "Build Keyman Developer web utility module" \ "@/common/web/types" \ @@ -52,4 +52,4 @@ builder_run_action clean rm -rf ./build/ builder_run_action configure node_select_version_and_npm_ci builder_run_action build do_build builder_run_action test typescript_run_eslint_mocha_tests 45 -builder_run_action publish builder_publish_npm +builder_run_action publish ci_publish_npm diff --git a/developer/src/kmc-analyze/build.sh b/developer/src/kmc-analyze/build.sh index d54ed8927f..5dc53b4312 100755 --- a/developer/src/kmc-analyze/build.sh +++ b/developer/src/kmc-analyze/build.sh @@ -8,7 +8,7 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "$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" +. "$KEYMAN_ROOT/resources/build/ci/ci-publish.inc.sh" builder_describe "Keyman Developer Compiler Analysis Tools" \ "@/common/web/types" \ @@ -32,4 +32,4 @@ 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 typescript_run_eslint_mocha_tests 70 -builder_run_action publish builder_publish_npm +builder_run_action publish ci_publish_npm diff --git a/developer/src/kmc-copy/build.sh b/developer/src/kmc-copy/build.sh index eb52215ec9..45e9029f09 100755 --- a/developer/src/kmc-copy/build.sh +++ b/developer/src/kmc-copy/build.sh @@ -11,7 +11,7 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "$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" +. "$KEYMAN_ROOT/resources/build/ci/ci-publish.inc.sh" builder_describe "Build Keyman kmc-copy module" \ "@/common/web/keyman-version" \ @@ -43,4 +43,4 @@ builder_run_action api api-extractor run --local --verbose # TODO: -skip-full builder_run_action test typescript_run_eslint_mocha_tests 75 -builder_run_action publish builder_publish_npm +builder_run_action publish ci_publish_npm diff --git a/developer/src/kmc-generate/build.sh b/developer/src/kmc-generate/build.sh index f1762f4ccf..c02a7ed26a 100755 --- a/developer/src/kmc-generate/build.sh +++ b/developer/src/kmc-generate/build.sh @@ -11,7 +11,7 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "$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" +. "$KEYMAN_ROOT/resources/build/ci/ci-publish.inc.sh" builder_describe "Build Keyman kmc-generate module" \ "@/common/web/keyman-version" \ @@ -44,4 +44,4 @@ 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 typescript_run_eslint_mocha_tests -builder_run_action publish builder_publish_npm +builder_run_action publish ci_publish_npm diff --git a/developer/src/kmc-keyboard-info/build.sh b/developer/src/kmc-keyboard-info/build.sh index b22d973636..36a840212f 100755 --- a/developer/src/kmc-keyboard-info/build.sh +++ b/developer/src/kmc-keyboard-info/build.sh @@ -40,6 +40,6 @@ builder_run_action test typescript_run_eslint_mocha_tests #------------------------------------------------------------------------------------------------------------------- -. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" +. "$KEYMAN_ROOT/resources/build/ci/ci-publish.inc.sh" -builder_run_action publish builder_publish_npm +builder_run_action publish ci_publish_npm diff --git a/developer/src/kmc-kmn/build.sh b/developer/src/kmc-kmn/build.sh index 867f791bf9..7d94f880df 100755 --- a/developer/src/kmc-kmn/build.sh +++ b/developer/src/kmc-kmn/build.sh @@ -11,7 +11,7 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "$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" +. "$KEYMAN_ROOT/resources/build/ci/ci-publish.inc.sh" builder_describe "Keyman Developer Compiler Module for .kmn to .kmx" \ "@/common/web/keyman-version" \ @@ -74,4 +74,4 @@ builder_run_action test do_test #------------------------------------------------------------------------------------------------------------------- -builder_run_action publish builder_publish_npm +builder_run_action publish ci_publish_npm diff --git a/developer/src/kmc-ldml/build.sh b/developer/src/kmc-ldml/build.sh index 73763be4d5..2f3eb01bc2 100755 --- a/developer/src/kmc-ldml/build.sh +++ b/developer/src/kmc-ldml/build.sh @@ -93,6 +93,6 @@ builder_run_action test typescript_run_eslint_mocha_tests 90 #------------------------------------------------------------------------------------------------------------------- -. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" +. "$KEYMAN_ROOT/resources/build/ci/ci-publish.inc.sh" -builder_run_action publish builder_publish_npm +builder_run_action publish ci_publish_npm diff --git a/developer/src/kmc-model-info/build.sh b/developer/src/kmc-model-info/build.sh index 816a195e00..00983ae6ea 100755 --- a/developer/src/kmc-model-info/build.sh +++ b/developer/src/kmc-model-info/build.sh @@ -37,6 +37,6 @@ builder_run_action test typescript_run_eslint_mocha_tests 55 #------------------------------------------------------------------------------------------------------------------- -. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" +. "$KEYMAN_ROOT/resources/build/ci/ci-publish.inc.sh" -builder_run_action publish builder_publish_npm +builder_run_action publish ci_publish_npm diff --git a/developer/src/kmc-model/build.sh b/developer/src/kmc-model/build.sh index f2eef55cfc..bd758b18f9 100755 --- a/developer/src/kmc-model/build.sh +++ b/developer/src/kmc-model/build.sh @@ -8,7 +8,7 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "$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" +. "$KEYMAN_ROOT/resources/build/ci/ci-publish.inc.sh" builder_describe "Keyman kmc Lexical Model Compiler module" \ "@/common/web/keyman-version" \ @@ -42,5 +42,5 @@ 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 typescript_run_eslint_mocha_tests -builder_run_action publish builder_publish_npm +builder_run_action publish ci_publish_npm diff --git a/developer/src/kmc-package/build.sh b/developer/src/kmc-package/build.sh index 4b9379881a..66f430ceb4 100755 --- a/developer/src/kmc-package/build.sh +++ b/developer/src/kmc-package/build.sh @@ -11,7 +11,7 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "$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" +. "$KEYMAN_ROOT/resources/build/ci/ci-publish.inc.sh" builder_describe "Build Keyman kmc Package Compiler module" \ "@/common/web/keyman-version" \ @@ -39,4 +39,4 @@ 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 typescript_run_eslint_mocha_tests -builder_run_action publish builder_publish_npm +builder_run_action publish ci_publish_npm diff --git a/developer/src/kmc/build.sh b/developer/src/kmc/build.sh index 1644540651..e784a441cc 100755 --- a/developer/src/kmc/build.sh +++ b/developer/src/kmc/build.sh @@ -8,7 +8,7 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "${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/build/ci/ci-publish.inc.sh" . "$KEYMAN_ROOT/resources/build/utils.inc.sh" . "$KEYMAN_ROOT/resources/build/node.inc.sh" . "$KEYMAN_ROOT/resources/build/typescript.inc.sh" @@ -114,4 +114,4 @@ builder_run_action build do_build builder_run_action test do_test builder_run_action api do_api builder_run_action bundle do_bundle -builder_run_action publish builder_publish_npm +builder_run_action publish ci_publish_npm diff --git a/developer/src/kmc/test/command-line-tests.sh b/developer/src/kmc/test/command-line-tests.sh index 41652bcdfd..9d4a1281c5 100755 --- a/developer/src/kmc/test/command-line-tests.sh +++ b/developer/src/kmc/test/command-line-tests.sh @@ -8,10 +8,6 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "${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/build/utils.inc.sh" -# . "$KEYMAN_ROOT/developer/src/packages.inc.sh" - builder_describe "Test Keyman Keyboard Compiler kmc command line e2e" \ "test" \ "--verbose,-v Verbose logging of output from kmc" \ diff --git a/developer/src/kmcmplib/build.sh b/developer/src/kmcmplib/build.sh index 952c0732b8..71fa331f41 100755 --- a/developer/src/kmcmplib/build.sh +++ b/developer/src/kmcmplib/build.sh @@ -7,7 +7,6 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" ## END STANDARD BUILD SCRIPT INCLUDE . "$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/oem/firstvoices/android/build.sh b/oem/firstvoices/android/build.sh index f571c8209b..3334b4746e 100755 --- a/oem/firstvoices/android/build.sh +++ b/oem/firstvoices/android/build.sh @@ -8,7 +8,6 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" ## END STANDARD BUILD SCRIPT INCLUDE . "$KEYMAN_ROOT/resources/build/utils.inc.sh" -. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" . "$KEYMAN_ROOT/resources/build/build-download-resources.sh" # ################################ Main script ################################ diff --git a/resources/build/build-utils-ci.test.sh b/resources/build/build-utils-ci.test.sh deleted file mode 100755 index a4d79e5d5a..0000000000 --- a/resources/build/build-utils-ci.test.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env bash -# -# This script tests build-utils-ci.sh -# - -set -eu - -## START STANDARD BUILD SCRIPT INCLUDE -# adjust relative paths as necessary -THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../resources/build/builder-basic.inc.sh" -# END STANDARD BUILD SCRIPT INCLUDE - -. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" -. "$KEYMAN_ROOT/resources/build/utils.inc.sh" - -# Tests - -builder_echo "${COLOR_BLUE}## Testing: builder_pull_get_details with \$TEAMCITY_PR_NUMBER not set${COLOR_RESET}" -if ! builder_pull_get_details; then - builder_echo green " ✓ PASS: builder_pull_get_details should get no details if \$TEAMCITY_PR_NUMBER is not set" -else - builder_die "FAIL: builder_pull_get_details should get no details if \$TEAMCITY_PR_NUMBER is not set" -fi - - -builder_echo "${COLOR_BLUE}## Testing: builder_pull_get_details with \$TEAMCITY_PR_NUMBER=master${COLOR_RESET}" -TEAMCITY_PR_NUMBER=master -if ! builder_pull_get_details; then - builder_echo green " ✓ PASS: builder_pull_get_details should get no details if \$TEAMCITY_PR_NUMBER=master" -else - builder_die "FAIL: builder_pull_get_details should get no details if \$TEAMCITY_PR_NUMBER=master" -fi - - -builder_echo "${COLOR_BLUE}## Testing: builder_pull_get_details with \$TEAMCITY_PR_NUMBER=$TEAMCITY_PR_NUMBER${COLOR_RESET}" -TEAMCITY_PR_NUMBER=7248 -if ! builder_pull_get_details; then - builder_die "FAIL: builder_pull_get_details was unable to read and parse PR details for #$TEAMCITY_PR_NUMBER from GitHub" -fi - -# print metadata from PR -builder_echo " pull number: $builder_pull_number" -builder_echo " title: $builder_pull_title" -builder_echo " labels: ${builder_pull_labels[*]}" - -builder_echo green " ✓ PASS: builder_pull_get_details with \$TEAMCITY_PR_NUMBER=$TEAMCITY_PR_NUMBER" - - -builder_echo "${COLOR_BLUE}## Testing: builder_pull_has_label epic-ldml${COLOR_RESET}" -if ! builder_pull_has_label epic-ldml; then - builder_die "FAIL: builder_pull_has_label epic-ldml" -fi - -builder_echo green " ✓ PASS: builder_pull_has_label epic-ldml" - -builder_echo "All tests passed." diff --git a/resources/build/build-utils-ci.inc.sh b/resources/build/ci/ci-publish.inc.sh similarity index 73% rename from resources/build/build-utils-ci.inc.sh rename to resources/build/ci/ci-publish.inc.sh index 33c074037a..d8fc1e77a2 100644 --- a/resources/build/build-utils-ci.inc.sh +++ b/resources/build/ci/ci-publish.inc.sh @@ -8,60 +8,6 @@ . "$KEYMAN_ROOT/resources/build/jq.inc.sh" -# -# Returns 0 if current build is in CI and triggered from a pull request. If it -# returns 0, then a call is made to GitHub to get pull request details, and the -# PR details are added to $builder_pull_title, $builder_pull_number, and -# the $builder_pull_labels array. -# -# Note that the GitHub REST call is made with credentials if $GITHUB_TOKEN is -# available; without credentials it will be subject to IP-based rate limits. -# -builder_pull_get_details() { - builder_pull_title= - builder_pull_number= - builder_pull_labels=() - if [[ ! ${TEAMCITY_PR_NUMBER-} =~ ^[0-9]+$ ]]; then - return 1 - fi - - if [ -z "${GITHUB_TOKEN-}" ]; then - local pull_data=`curl -s https://api.github.com/repos/keymanapp/keyman/pulls/$TEAMCITY_PR_NUMBER` - else - local pull_data=`curl -H "Authorization: Bearer $GITHUB_TOKEN" -s https://api.github.com/repos/keymanapp/keyman/pulls/$TEAMCITY_PR_NUMBER` - fi - - builder_pull_title=`echo $pull_data | $JQ .title` - - # Simple poor bash test if data returned from API is valid - if [[ -z builder_pull_title ]]; then - return 1 - fi - - builder_pull_number=$TEAMCITY_PR_NUMBER - builder_pull_labels=(`echo $pull_data | $JQ -jr '.labels[].name|.," "'`) - - return 0 -} - - -# -# Returns 0 if the current PR has a particular label. Requires -# builder_pull_get_details to have successfully run first -# -# Usage: -# builder_pull_has_label "label-name" -# Parameters -# 1: $label label to test -# -function builder_pull_has_label() { - local label="$1" - if [[ " ${builder_pull_labels[*]} " =~ " $label " ]]; then - return 0 - fi - return 1 -} - # # Publishes the package in `cwd` to npm # @@ -73,27 +19,27 @@ function builder_pull_has_label() { # modified. This change should not be committed to the repository. # # If --npm-publish is set: -# * then builder_publish_npm publishes to the public registry -# * else builder_publish_npm creates a local tarball which can be used to test +# * then ci_publish_npm publishes to the public registry +# * else ci_publish_npm creates a local tarball which can be used to test # # Usage: # ```bash -# builder_publish_npm +# ci_publish_npm # ``` # -function builder_publish_npm() { +function ci_publish_npm() { if builder_has_option --npm-publish; then # Require --dry-run if local or test to avoid accidentally clobbering npm packages if [[ $KEYMAN_VERSION_ENVIRONMENT =~ local|test ]] && ! builder_has_option --dry-run; then builder_die "publish --npm-publish must use --dry-run flag for local or test builds" fi - _builder_publish_npm_package publish + _ci_publish_npm_package publish else - _builder_publish_npm_package pack + _ci_publish_npm_package pack fi } -function _builder_publish_npm_package() { +function _ci_publish_npm_package() { local action=$1 local dist_tag=$KEYMAN_TIER dry_run= @@ -105,9 +51,9 @@ function _builder_publish_npm_package() { dry_run=--dry-run fi - _builder_publish_cache_package_json - _builder_write_npm_version - _builder_prepublish + _ci_publish_cache_package_json + _ci_write_npm_version + _ci_prepublish # Note: In either case, npm publish MUST be given --access public to publish a # package in the @keymanapp scope on the public npm package index. @@ -124,7 +70,7 @@ function _builder_publish_npm_package() { fi } -function _builder_write_npm_version() { +function _ci_write_npm_version() { # We use --no-git-tag-version because our CI system controls version numbering # and already tags releases. We also want to have the version of this match # the release of Keyman Developer -- these two versions should be in sync. @@ -160,7 +106,7 @@ function _builder_write_npm_version() { # the target's package.json in its node_modules folder. Must run from # the target's folder. # -function _builder_prepublish() { +function _ci_prepublish() { mkdir -p node_modules/@keymanapp local packages=($(cat package.json | "$JQ" --raw-output '.bundleDependencies | join(" ")')) local package @@ -198,7 +144,7 @@ function _builder_prepublish() { # dependencies easily. Part of the https://github.com/npm/cli/issues/3466 # workaround. # -function _builder_publish_cache_package_json() { +function _ci_publish_cache_package_json() { if [[ -f "$KEYMAN_ROOT/builder_package_publish.json" ]]; then return 0 fi @@ -210,6 +156,6 @@ function _builder_publish_cache_package_json() { cp "$KEYMAN_ROOT/package.json" "$KEYMAN_ROOT/builder_package_publish.json" } -function builder_publish_cleanup() { +function ci_publish_cleanup() { rm -f "$KEYMAN_ROOT/builder_package_publish.json" } diff --git a/web/build.sh b/web/build.sh index 4cb01f840e..4dc5189353 100755 --- a/web/build.sh +++ b/web/build.sh @@ -9,7 +9,6 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" ## END STANDARD BUILD SCRIPT INCLUDE . "$KEYMAN_ROOT/resources/build/utils.inc.sh" -. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" # ################################ Main script ################################ diff --git a/web/common.inc.sh b/web/common.inc.sh index 4b24730d5d..fed2af8c7b 100644 --- a/web/common.inc.sh +++ b/web/common.inc.sh @@ -1,9 +1,6 @@ #!/usr/bin/env bash # -# Needed for builder_is_ci_build check. -. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" - BUNDLE_CMD="node $KEYMAN_ROOT/web/src/tools/es-bundling/build/common-bundle.mjs" # Compiles all build products corresponding to the specified target. diff --git a/web/src/engine/predictive-text/templates/build.sh b/web/src/engine/predictive-text/templates/build.sh index bc500492a1..b0f8ea912a 100755 --- a/web/src/engine/predictive-text/templates/build.sh +++ b/web/src/engine/predictive-text/templates/build.sh @@ -10,7 +10,6 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "$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 ################################ diff --git a/web/src/engine/predictive-text/wordbreakers/build.sh b/web/src/engine/predictive-text/wordbreakers/build.sh index 31089f99c9..1eb6faeeb1 100755 --- a/web/src/engine/predictive-text/wordbreakers/build.sh +++ b/web/src/engine/predictive-text/wordbreakers/build.sh @@ -10,7 +10,6 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "$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 ################################ diff --git a/web/src/engine/predictive-text/worker-main/build.sh b/web/src/engine/predictive-text/worker-main/build.sh index d6ddebc697..0fc63bfb32 100755 --- a/web/src/engine/predictive-text/worker-main/build.sh +++ b/web/src/engine/predictive-text/worker-main/build.sh @@ -13,7 +13,6 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "$KEYMAN_ROOT/resources/build/utils.inc.sh" . "$KEYMAN_ROOT/resources/build/node.inc.sh" -. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" BUNDLE_CMD="node $KEYMAN_ROOT/web/src/tools/es-bundling/build/common-bundle.mjs" diff --git a/web/src/engine/predictive-text/worker-main/unit_tests/test.sh b/web/src/engine/predictive-text/worker-main/unit_tests/test.sh index 292f5d2442..4bf6fe8030 100755 --- a/web/src/engine/predictive-text/worker-main/unit_tests/test.sh +++ b/web/src/engine/predictive-text/worker-main/unit_tests/test.sh @@ -3,16 +3,12 @@ ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../../../resources/build/builder-basic.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/build/utils.inc.sh" . "$KEYMAN_ROOT/resources/build/node.inc.sh" -# This script runs from its own folder -cd "$THIS_SCRIPT_PATH" - ################################ Main script ################################ # Defaults diff --git a/web/src/engine/predictive-text/worker-thread/build.sh b/web/src/engine/predictive-text/worker-thread/build.sh index 9492d4be93..09945fe725 100755 --- a/web/src/engine/predictive-text/worker-thread/build.sh +++ b/web/src/engine/predictive-text/worker-thread/build.sh @@ -11,7 +11,6 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "$KEYMAN_ROOT/resources/build/utils.inc.sh" . "$KEYMAN_ROOT/resources/build/node.inc.sh" -. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" WORKER_OUTPUT=build/obj WORKER_OUTPUT_FILENAME=build/lib/worker-main.js diff --git a/web/test.sh b/web/test.sh index 9c877e8d6e..b65af498df 100755 --- a/web/test.sh +++ b/web/test.sh @@ -8,7 +8,6 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "${THIS_SCRIPT%/*}/../resources/build/builder-basic.inc.sh" ## END STANDARD BUILD SCRIPT INCLUDE -. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" . "$KEYMAN_ROOT/resources/build/utils.inc.sh" # This script runs from its own folder diff --git a/windows/src/desktop/build.sh b/windows/src/desktop/build.sh index bcfd7cdc20..f5401e22b5 100755 --- a/windows/src/desktop/build.sh +++ b/windows/src/desktop/build.sh @@ -6,7 +6,6 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" ## END STANDARD BUILD SCRIPT INCLUDE . "$KEYMAN_ROOT/resources/build/utils.inc.sh" -. "$KEYMAN_ROOT/resources/build/build-utils-ci.inc.sh" . "$KEYMAN_ROOT/developer/src/packages.inc.sh" builder_describe \