mirror of
https://github.com/d4rken-org/capod.git
synced 2026-09-14 18:26:11 -04:00
100 lines
2.5 KiB
Bash
Executable File
100 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# Validates Fastlane metadata files stay within store character limits.
|
|
#
|
|
# Checked files per locale:
|
|
# title.txt - hard limit 30 chars
|
|
# short_description.txt - hard limit 80 chars
|
|
# full_description.txt - hard limit 3800 chars, warn at 3700
|
|
# changelogs/*.txt - hard limit 500 chars each
|
|
|
|
set -euo pipefail
|
|
export LC_ALL=C.UTF-8
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
METADATA_DIR="$SCRIPT_DIR/metadata/android"
|
|
|
|
TITLE_MAX=30
|
|
SHORT_DESC_MAX=80
|
|
FULL_DESC_MAX=3800
|
|
FULL_DESC_WARN=3700
|
|
CHANGELOG_MAX=500
|
|
|
|
failed=0
|
|
warned=0
|
|
checked=0
|
|
|
|
# Count characters excluding only the trailing newline
|
|
count_chars() {
|
|
sed -z 's/\n$//' < "$1" | wc -m | tr -d '[:space:]'
|
|
}
|
|
|
|
check_file() {
|
|
local file="$1"
|
|
local label="$2"
|
|
local hard_limit="$3"
|
|
local warn_limit="${4:-0}"
|
|
|
|
if [ ! -f "$file" ]; then
|
|
return
|
|
fi
|
|
|
|
local chars
|
|
chars="$(count_chars "$file")"
|
|
checked=$((checked + 1))
|
|
|
|
if [ "$chars" -gt "$hard_limit" ]; then
|
|
echo "FAIL $label: $chars chars (limit: $hard_limit)"
|
|
failed=$((failed + 1))
|
|
elif [ "$warn_limit" -gt 0 ] && [ "$chars" -gt "$warn_limit" ]; then
|
|
echo "WARN $label: $chars chars (approaching limit)"
|
|
warned=$((warned + 1))
|
|
fi
|
|
}
|
|
|
|
if [ ! -d "$METADATA_DIR" ]; then
|
|
echo "ERROR: Metadata directory not found: $METADATA_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
locale_count=0
|
|
for locale_dir in "$METADATA_DIR"/*/; do
|
|
[ -d "$locale_dir" ] || continue
|
|
locale="$(basename "$locale_dir")"
|
|
locale_count=$((locale_count + 1))
|
|
|
|
check_file "$locale_dir/title.txt" "$locale/title.txt" "$TITLE_MAX"
|
|
check_file "$locale_dir/short_description.txt" "$locale/short_description.txt" "$SHORT_DESC_MAX"
|
|
check_file "$locale_dir/full_description.txt" "$locale/full_description.txt" "$FULL_DESC_MAX" "$FULL_DESC_WARN"
|
|
|
|
for changelog in "$locale_dir"/changelogs/*.txt; do
|
|
[ -f "$changelog" ] || continue
|
|
changelog_name="changelogs/$(basename "$changelog")"
|
|
check_file "$changelog" "$locale/$changelog_name" "$CHANGELOG_MAX"
|
|
done
|
|
done
|
|
|
|
if [ "$locale_count" -eq 0 ]; then
|
|
echo "ERROR: No locale directories found in $METADATA_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$checked" -eq 0 ]; then
|
|
echo "ERROR: No metadata files found to check"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "Checked $checked files across $locale_count locales."
|
|
|
|
if [ "$failed" -gt 0 ]; then
|
|
echo "$failed failure(s), $warned warning(s)."
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$warned" -gt 0 ]; then
|
|
echo "All within limits. $warned warning(s)."
|
|
fi
|
|
|
|
exit 0
|