feat: add native ota delivery and aab release
This commit is contained in:
29
scripts/build-release-aab.sh
Executable file
29
scripts/build-release-aab.sh
Executable file
@@ -0,0 +1,29 @@
|
||||
#!/bin/zsh
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
ANDROID_DIR="$ROOT_DIR/android"
|
||||
RELEASE_AAB="$ANDROID_DIR/app/build/outputs/bundle/release/app-release.aab"
|
||||
BUILD_GRADLE="$ROOT_DIR/android/app/build.gradle"
|
||||
|
||||
VERSION_NAME="$(sed -n 's/.*versionName \"\([^\"]*\)\"/\1/p' "$BUILD_GRADLE" | head -n 1)"
|
||||
VERSIONED_RELEASE_AAB="$ANDROID_DIR/app/build/outputs/bundle/release/boss-android-v${VERSION_NAME}-release.aab"
|
||||
|
||||
zsh "$ROOT_DIR/scripts/prepare-android-signing.sh"
|
||||
|
||||
cd "$ANDROID_DIR"
|
||||
./gradlew bundleRelease
|
||||
|
||||
cd "$ROOT_DIR"
|
||||
cp "$RELEASE_AAB" "$VERSIONED_RELEASE_AAB"
|
||||
zsh "$ROOT_DIR/scripts/publish-aab-to-public.sh" "$RELEASE_AAB"
|
||||
|
||||
JARSIGNER="$(command -v jarsigner || true)"
|
||||
if [[ -n "${JARSIGNER:-}" ]]; then
|
||||
"$JARSIGNER" -verify -verbose -certs "$RELEASE_AAB"
|
||||
else
|
||||
echo "jarsigner not found, skipped signature verification output" >&2
|
||||
fi
|
||||
|
||||
echo "Signed release AAB ready: $RELEASE_AAB"
|
||||
echo "Versioned release AAB ready: $VERSIONED_RELEASE_AAB"
|
||||
59
scripts/publish-aab-to-public.sh
Executable file
59
scripts/publish-aab-to-public.sh
Executable file
@@ -0,0 +1,59 @@
|
||||
#!/bin/zsh
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
SOURCE_AAB="${1:-$ROOT_DIR/android/app/build/outputs/bundle/release/app-release.aab}"
|
||||
TARGET_DIR="$ROOT_DIR/public/downloads"
|
||||
TARGET_AAB="$TARGET_DIR/boss-android-latest.aab"
|
||||
TARGET_META="$TARGET_DIR/boss-android-latest-aab.json"
|
||||
STANDALONE_DIR="$ROOT_DIR/.next/standalone/public/downloads"
|
||||
BUILD_GRADLE="$ROOT_DIR/android/app/build.gradle"
|
||||
SOURCE_NAME="$(basename "$SOURCE_AAB")"
|
||||
BUILD_FLAVOR="release"
|
||||
|
||||
if [[ "$SOURCE_NAME" == *debug* ]]; then
|
||||
BUILD_FLAVOR="debug"
|
||||
fi
|
||||
|
||||
if [[ ! -f "$SOURCE_AAB" ]]; then
|
||||
echo "AAB not found: $SOURCE_AAB" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "$TARGET_DIR"
|
||||
cp "$SOURCE_AAB" "$TARGET_AAB"
|
||||
|
||||
SIZE_BYTES="$(stat -f '%z' "$TARGET_AAB" 2>/dev/null || stat -c '%s' "$TARGET_AAB")"
|
||||
UPDATED_AT="$(date -u '+%Y-%m-%dT%H:%M:%SZ')"
|
||||
SHA256="$(shasum -a 256 "$TARGET_AAB" | awk '{print $1}')"
|
||||
VERSION_NAME="$(sed -n 's/.*versionName \"\([^\"]*\)\"/\1/p' "$BUILD_GRADLE" | head -n 1)"
|
||||
VERSION_CODE="$(sed -n 's/.*versionCode \([0-9][0-9]*\).*/\1/p' "$BUILD_GRADLE" | head -n 1)"
|
||||
VERSIONED_AAB_NAME="boss-android-v${VERSION_NAME}-${BUILD_FLAVOR}.aab"
|
||||
VERSIONED_TARGET_AAB="$TARGET_DIR/$VERSIONED_AAB_NAME"
|
||||
|
||||
cp "$TARGET_AAB" "$VERSIONED_TARGET_AAB"
|
||||
|
||||
cat > "$TARGET_META" <<EOF
|
||||
{
|
||||
"artifactType": "aab",
|
||||
"fileName": "$VERSIONED_AAB_NAME",
|
||||
"urlPath": "/downloads/$VERSIONED_AAB_NAME",
|
||||
"sizeBytes": $SIZE_BYTES,
|
||||
"updatedAt": "$UPDATED_AT",
|
||||
"sha256": "$SHA256",
|
||||
"versionName": "$VERSION_NAME",
|
||||
"versionCode": $VERSION_CODE,
|
||||
"buildFlavor": "$BUILD_FLAVOR"
|
||||
}
|
||||
EOF
|
||||
|
||||
if [[ -d "$ROOT_DIR/.next/standalone/public" ]]; then
|
||||
mkdir -p "$STANDALONE_DIR"
|
||||
cp "$TARGET_AAB" "$STANDALONE_DIR/boss-android-latest.aab"
|
||||
cp "$VERSIONED_TARGET_AAB" "$STANDALONE_DIR/$VERSIONED_AAB_NAME"
|
||||
cp "$TARGET_META" "$STANDALONE_DIR/boss-android-latest-aab.json"
|
||||
fi
|
||||
|
||||
echo "Published AAB to $TARGET_AAB"
|
||||
echo "Published versioned AAB to $VERSIONED_TARGET_AAB"
|
||||
echo "Metadata written to $TARGET_META"
|
||||
Reference in New Issue
Block a user