maint(common): consolidate write_download_info functions

Fixes: #14259
Build-bot: skip
Test-bot: skip
This commit is contained in:
Eberhard Beilharz 2025-07-03 20:11:57 +02:00
parent 9cabc3d56e
commit a25202530e
No known key found for this signature in database
GPG key ID: E9140597606020D3
4 changed files with 57 additions and 129 deletions

View file

@ -109,12 +109,11 @@ if builder_start_action archive; then
# Write download info files
#
cd "${UPLOAD_PATH}"
write_download_info "Keyman Engine for Android" "${KEYMAN_ENGINE_ANDROID_ZIP}" "${KEYMAN_VERSION}" "${KEYMAN_TIER}" "android"
write_download_info "Keyman for Android" "${KEYMAN_APK}" "${KEYMAN_VERSION}" "${KEYMAN_TIER}" "android"
write_download_info "${UPLOAD_PATH}" "${KEYMAN_ENGINE_ANDROID_ZIP}" "Keyman Engine for Android" zip android
write_download_info "${UPLOAD_PATH}" "${KEYMAN_APK}" "Keyman for Android" apk android
if [ "${RELEASE_OEM_FIRSTVOICES-false}" = true ]; then
write_download_info "FirstVoices Keyboards" "${FIRSTVOICES_APK}" "${KEYMAN_VERSION}" "${KEYMAN_TIER}" "android"
if [[ "${RELEASE_OEM_FIRSTVOICES-false}" = true ]]; then
write_download_info "${UPLOAD_PATH}" "${FIRSTVOICES_APK}" "FirstVoices Keyboards" apk android
fi
builder_finish_action success archive

View file

@ -129,11 +129,9 @@ fi
# Write download info files
#
cd "${UPLOAD_DIR}"
write_download_info "${UPLOAD_DIR}" "${KMEI_DST_NAME}" "Keyman Engine for iOS" zip ios
write_download_info "${UPLOAD_DIR}" "${KEYMANAPP_IPA_DST}" "Keyman for iPhone and iPad" ipa ios
write_download_info "Keyman Engine for iOS" "${KMEI_DST_NAME}" "${BUILD_NUMBER}" "${KEYMAN_TIER}" "ios"
write_download_info "Keyman for iPhone and iPad" "${KEYMANAPP_IPA_DST}" "${BUILD_NUMBER}" "${KEYMAN_TIER}" "ios"
if [ ${RELEASE_OEM_FIRSTVOICES} = true ]; then
write_download_info "FirstVoices Keyboards" "${FIRSTVOICESAPP_IPA_DST}" "${BUILD_NUMBER}" "${KEYMAN_TIER}" "ios"
if [[ ${RELEASE_OEM_FIRSTVOICES} = true ]]; then
write_download_info "${UPLOAD_DIR}" "${FIRSTVOICESAPP_IPA_DST}" "FirstVoices Keyboards" ipa ios
fi

View file

@ -16,7 +16,7 @@ verify_on_mac() {
projects=("android" "ios" "linux" "lmlayer" "mac" "web" "windows")
# Used to validate a specified 'project' parameter.
verify_project() {
_verify_project() {
match=false
for proj in "${projects[@]}"
do
@ -88,79 +88,64 @@ dl_info_display_usage() {
exit 1
}
#
# Write ${UPLOAD_DIR}/${ARTIFACT_FILENAME}.download_info file for the target
# artifact
#
# Parameters:
# 1: UPLOAD_DIR Directory where artifact can be found
# 2: ARTIFACT_FILENAME Filename (without path) of artifact
# 3: ARTIFACT_NAME Descriptive name of artifact
# 4: ARTIFACT_TYPE File extension of artifact, without initial period (e.g. tar.gz)
# 5: PLATFORM Target platform for artifact
#
write_download_info() {
#Process file & path information.
PRODUCT_NAME="$1"
BASE_PATH="$2"
KM_VERSION="$3"
KM_TIER="$4"
KM_PLATFORM="$5"
local UPLOAD_DIR="$1"
local ARTIFACT_FILENAME="$2"
local ARTFIACT_NAME="$3"
local ARTIFACT_TYPE="$4"
local PLATFORM="$5"
verify_project "$KM_PLATFORM"
local DATE HASH SIZE DOWNLOAD_INFO STAT_FLAGS
BASE_DIR=$(dirname "${BASE_PATH}")
BASE_FILE=$(basename "${BASE_PATH}");
_verify_project "${PLATFORM}"
if ([ -h "${BASE_DIR}" ]) then
while([ -h "${BASE_DIR}" ]) do BASE_PATH=`readlink "${BASE_DIR}"`;
done
fi
assertFileExists "$2"
pushd . > /dev/null
cd `dirname ${BASE_DIR}` > /dev/null
BASE_PATH=`pwd`;
popd > /dev/null
DEST_DIR="$BASE_DIR"
#Process version parameter.
assertValidVersionNbr "$3"
KM_BLD_COUNTER="$((${KM_VERSION##*.}))"
if [ "$KM_VERSION" = "" ]; then
builder_die "Required -version parameter not specified!"
fi
if [ "$KM_TIER" = "" ]; then
builder_die "Required -tier parameter not specified!"
fi
DOWNLOAD_INFO_FILEPATH="${BASE_PATH}/${BASE_FILE}.download_info"
if [[ ! -f "${BASE_PATH}/${BASE_FILE}" ]]; then
builder_die "Cannot compute file size or MD5 for non-existent DMG file: ${BASE_PATH}/${BASE_FILE}"
fi
FILE_EXTENSION="${BASE_FILE##*.}"
# stat flags to get filesize in bytes
if [ "$BUILDER_OS" == "mac" ] && [[ $(which stat) == /usr/bin/stat ]]; then
# shellcheck disable=SC2312
if [[ "${BUILDER_OS}" == "mac" ]] && [[ $(command -v stat) == /usr/bin/stat ]]; then
# /usr/bin/stat on mac is BSD
STAT_FLAGS="-f%z"
else
# GNU (coreutils)
STAT_FLAGS="-c%s"
fi
FILE_SIZE=$(stat ${STAT_FLAGS} "${BASE_PATH}/${BASE_FILE}")
MD5_HASH=$(md5sum "${BASE_PATH}/${BASE_FILE}" | cut -d" " -f 1 -) # hash is the first element returned
if [[ -f "$DOWNLOAD_INFO_FILEPATH" ]]; then
builder_warn "Overwriting $DOWNLOAD_INFO_FILEPATH"
STAT_FLAGS="--print=%s"
fi
echo { > "$DOWNLOAD_INFO_FILEPATH"
echo " \"name\": \"${PRODUCT_NAME}\"," >> "$DOWNLOAD_INFO_FILEPATH"
echo " \"version\": \"${KM_VERSION}\"," >> "$DOWNLOAD_INFO_FILEPATH"
echo " \"date\": \"$(date "+%Y-%m-%d")\"," >> "$DOWNLOAD_INFO_FILEPATH"
echo " \"platform\": \"${KM_PLATFORM}\"," >> "$DOWNLOAD_INFO_FILEPATH"
echo " \"stability\": \"${KM_TIER}\"," >> "$DOWNLOAD_INFO_FILEPATH"
echo " \"file\": \"${BASE_FILE}\"," >> "$DOWNLOAD_INFO_FILEPATH"
echo " \"md5\": \"${MD5_HASH}\"," >> "$DOWNLOAD_INFO_FILEPATH"
echo " \"type\": \"${FILE_EXTENSION}\"," >> "$DOWNLOAD_INFO_FILEPATH"
echo " \"build\": \"${KM_BLD_COUNTER}\"," >> "$DOWNLOAD_INFO_FILEPATH"
echo " \"size\": \"${FILE_SIZE}\"" >> "$DOWNLOAD_INFO_FILEPATH"
echo } >> "$DOWNLOAD_INFO_FILEPATH"
# Construct .download_info
DATE=$(date +%F)
# shellcheck disable=SC2312
HASH=$(md5sum "${UPLOAD_DIR}/${ARTIFACT_FILENAME}" | cut -d ' ' -f 1)
# shellcheck disable=SC2248
SIZE=$(stat ${STAT_FLAGS} "${UPLOAD_DIR}/${ARTIFACT_FILENAME}")
# shellcheck disable=SC2016,SC2154
DOWNLOAD_INFO=$(
"${JQ}" -n \
--arg NAME "${ARTFIACT_NAME}" \
--arg BUILD_NUMBER "${KEYMAN_VERSION}" \
--arg DATE "${DATE}" \
--arg PLATFORM "${PLATFORM}" \
--arg KEYMAN_TIER "${KEYMAN_TIER}" \
--arg FILENAME "${ARTIFACT_FILENAME}" \
--arg ARTIFACT_TYPE "${ARTIFACT_TYPE}" \
--arg HASH "${HASH}" \
--arg BUILD_COUNTER "${KEYMAN_VERSION_PATCH}" \
--arg SIZE "${SIZE}" \
'{
name: $NAME, version: $BUILD_NUMBER, date: $DATE, platform: $PLATFORM,
stability: $KEYMAN_TIER, file: $FILENAME, md5: $HASH, type: $ARTIFACT_TYPE,
build: $BUILD_COUNTER, size: $SIZE
}'
)
echo "${DOWNLOAD_INFO}" | "${JQ}" . >> "${UPLOAD_DIR}/${ARTIFACT_FILENAME}.download_info"
}
# set_version sets the file version on mac/ios projects

View file

@ -1,54 +0,0 @@
# shellcheck shell=bash
# Keyman is copyright (C) SIL Global. MIT License.
# shellcheck disable=SC2154
. "${KEYMAN_ROOT}/resources/build/jq.inc.sh"
#
# Write ${UPLOAD_DIR}/${ARTIFACT_FILENAME}.download_info file for the target
# artifact
#
# Parameters:
# 1: UPLOAD_DIR Directory where artifact can be found
# 2: ARTIFACT_FILENAME Filename (without path) of artifact
# 3: ARTIFACT_NAME Descriptive name of artifact
# 4: ARTIFACT_TYPE File extension of artifact, without initial period (e.g. tar.gz)
# 5: PLATFORM Target platform for artifact
#
write_download_info() {
# TODO: DRY out with Linux download_info writer, others
local UPLOAD_DIR="$1"
local ARTIFACT_FILENAME="$2"
local ARTFIACT_NAME="$3"
local ARTIFACT_TYPE="$4"
local PLATFORM="$5"
local DATE HASH SIZE DOWNLOAD_INFO
# Construct .download_info
DATE=$(date +%F)
# shellcheck disable=SC2312
HASH=$(md5sum "${UPLOAD_DIR}/${ARTIFACT_FILENAME}" | cut -d ' ' -f 1)
SIZE=$(stat --print="%s" "${UPLOAD_DIR}/${ARTIFACT_FILENAME}")
# shellcheck disable=SC2016
DOWNLOAD_INFO=$(
"${JQ}" -n \
--arg NAME "${ARTFIACT_NAME}" \
--arg BUILD_NUMBER "${KEYMAN_VERSION}" \
--arg DATE "${DATE}" \
--arg PLATFORM "${PLATFORM}" \
--arg KEYMAN_TIER "${KEYMAN_TIER}" \
--arg FILENAME "${ARTIFACT_FILENAME}" \
--arg ARTIFACT_TYPE "${ARTIFACT_TYPE}" \
--arg HASH "${HASH}" \
--arg BUILD_COUNTER "${KEYMAN_VERSION_PATCH}" \
--arg SIZE "${SIZE}" \
'{
name: $NAME, version: $BUILD_NUMBER, date: $DATE, platform: $PLATFORM,
stability: $KEYMAN_TIER, file: $FILENAME, md5: $HASH, type: $ARTIFACT_TYPE,
build: $BUILD_COUNTER, size: $SIZE
}'
)
echo "${DOWNLOAD_INFO}" | "${JQ}" . >> "${UPLOAD_DIR}/${ARTIFACT_FILENAME}.download_info"
}