99 lines
2.3 KiB
Bash
Executable File
99 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
KEYSTORE_PROPERTIES="$SCRIPT_DIR/keystore.properties"
|
|
|
|
log() {
|
|
printf '\n[%s] %s\n' "create-upload-key" "$1"
|
|
}
|
|
|
|
fail() {
|
|
echo "$1" >&2
|
|
exit 1
|
|
}
|
|
|
|
require_tool() {
|
|
if ! command -v "$1" >/dev/null 2>&1; then
|
|
fail "Missing required tool: $1"
|
|
fi
|
|
}
|
|
|
|
get_property() {
|
|
local key="$1"
|
|
python - "$KEYSTORE_PROPERTIES" "$key" <<'PY'
|
|
from pathlib import Path
|
|
import sys
|
|
|
|
path = Path(sys.argv[1])
|
|
target_key = sys.argv[2]
|
|
|
|
for raw_line in path.read_text().splitlines():
|
|
line = raw_line.strip()
|
|
if not line or line.startswith('#'):
|
|
continue
|
|
if '=' not in line:
|
|
continue
|
|
key, value = line.split('=', 1)
|
|
if key.strip() == target_key:
|
|
print(value.strip())
|
|
break
|
|
PY
|
|
}
|
|
|
|
ensure_required_property() {
|
|
local key="$1"
|
|
local value="$2"
|
|
|
|
if [ -z "$value" ]; then
|
|
fail "Missing required property '$key' in $KEYSTORE_PROPERTIES"
|
|
fi
|
|
}
|
|
|
|
main() {
|
|
require_tool keytool
|
|
require_tool python
|
|
|
|
if [ ! -f "$KEYSTORE_PROPERTIES" ]; then
|
|
fail "Missing $KEYSTORE_PROPERTIES. Create it from keystore.properties.example first."
|
|
fi
|
|
|
|
local store_file
|
|
local store_password
|
|
local key_alias
|
|
local key_password
|
|
|
|
store_file="$(get_property storeFile)"
|
|
store_password="$(get_property storePassword)"
|
|
key_alias="$(get_property keyAlias)"
|
|
key_password="$(get_property keyPassword)"
|
|
|
|
ensure_required_property storeFile "$store_file"
|
|
ensure_required_property storePassword "$store_password"
|
|
ensure_required_property keyAlias "$key_alias"
|
|
ensure_required_property keyPassword "$key_password"
|
|
|
|
if [ -f "$store_file" ]; then
|
|
fail "Keystore already exists at $store_file. Delete or move it first if you want to regenerate it."
|
|
fi
|
|
|
|
mkdir -p "$(dirname "$store_file")"
|
|
|
|
log "Creating upload keystore at $store_file"
|
|
keytool -genkeypair \
|
|
-v \
|
|
-keystore "$store_file" \
|
|
-storepass "$store_password" \
|
|
-alias "$key_alias" \
|
|
-keypass "$key_password" \
|
|
-keyalg RSA \
|
|
-keysize 2048 \
|
|
-validity 10000 \
|
|
-dname "CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, S=Unknown, C=US"
|
|
|
|
log "Upload keystore created successfully"
|
|
log "Back up both the keystore file and the matching keystore.properties secrets"
|
|
}
|
|
|
|
main "$@" |