#!/usr/bin/env bash
# Copyright (C) 2018-20 Akhil Narang
# SPDX-License-Identifier: GPL-3.0-only
# AOSiP upload script
# shellcheck disable=SC2086,SC2029
# SC2086: Double quote to prevent globbing and word splitting
# SC2029: Note that, unescaped, this expands on the client side.
case "${BRANCH}" in
"ten")
VERSION=10
;;
"eleven")
VERSION=11
;;
esac
source ~/scripts/functions
function notify() {
if [[ ! $AOSIP_BUILDTYPE =~ ^(Official|Gapps)$ ]]; then
sendAOSiP "$@"
fi
}
export TZ=UTC
DATE="$(date +%Y%m%d)"
AOSIP_VERSION="AOSiP-${VERSION}-${AOSIP_BUILDTYPE}-${DEVICE}-${DATE}"
SIGNED_OTAPACKAGE="${AOSIP_VERSION}.zip"
BOOTIMAGE="${AOSIP_VERSION}-boot.img"
RECOVERYIMAGE="${AOSIP_VERSION}-recovery.img"
SIGNED_TARGET_FILES="signed-target_files.zip"
SIGNED_IMAGE_PACKAGE="${AOSIP_VERSION}-img.zip"
OUT="./out/target/product/$DEVICE"
UPLOAD="./upload_assets"
UPDATER_JSON="$DEVICE-$AOSIP_BUILDTYPE".json
mkdir -pv "$UPLOAD"
BACKUPTOOL="--backup=true"
if [[ $WITH_GAPPS == "true" ]]; then
SIGNING_FLAGS="-e CronetDynamite.apk= -e DynamiteLoader.apk= -e DynamiteModulesA.apk= -e AdsDynamite.apk= -e DynamiteModulesC.apk= -e MapsDynamite.apk= -e GoogleCertificates.apk= -e AndroidPlatformServices.apk="
BACKUPTOOL="--backup=false"
fi
echo "Signing target_files APKs"
python2 ./build/make/tools/releasetools/sign_target_files_apks -p out/host/linux-x86/ -o -d ~/.android-certs $SIGNING_FLAGS "$OUT"/obj/PACKAGING/target_files_intermediates/aosip_"$DEVICE"-target_files-"$BUILD_NUMBER".zip "$UPLOAD/$SIGNED_TARGET_FILES" || exit 1
echo "Generating signed otapackage"
python2 ./build/make/tools/releasetools/ota_from_target_files -p out/host/linux-x86/ -k ~/.android-certs/releasekey "$BACKUPTOOL" "$UPLOAD/$SIGNED_TARGET_FILES" "$UPLOAD/$SIGNED_OTAPACKAGE" || exit 1
echo "Generating signed images package"
python2 ./build/make/tools/releasetools/img_from_target_files -p out/soong/host/linux-x86/ "$UPLOAD/$SIGNED_TARGET_FILES" "$UPLOAD/$SIGNED_IMAGE_PACKAGE" || exit 1
echo "Extracting build.prop to get build timestamp"
BUILD_TIMESTAMP=$(grep -oP "(?<=ro.build.date.utc=).*" "$OUT"/system/build.prop)
echo "Generating JSON for updater"
~/api/generate_json.py "$UPLOAD/$SIGNED_OTAPACKAGE" "$BUILD_TIMESTAMP" > "$UPDATER_JSON"
echo "Extracting signed boot image"
7z e "$UPLOAD/$SIGNED_TARGET_FILES" IMAGES/boot.img -so > "$UPLOAD/$BOOTIMAGE"
echo "Extracting signed recovery image"
7z e "$UPLOAD/$SIGNED_TARGET_FILES" IMAGES/recovery.img -so > "$UPLOAD/$RECOVERYIMAGE"
echo "Generating MD5 checksums"
md5sum "$UPLOAD/$SIGNED_OTAPACKAGE" > "$UPLOAD/$SIGNED_OTAPACKAGE".md5sum
md5sum "$UPLOAD/$SIGNED_IMAGE_PACKAGE" > "$UPLOAD/$SIGNED_IMAGE_PACKAGE".md5sum
# Create an archive out of everything
cd $UPLOAD || exit
tar -cvf ~/nginx/"$BUILD_NUMBER".tar AOSiP*
cd - || exit
rm -rfv $UPLOAD
# Mirror the archive
ssh Illusion "mkdir /tmp/$BUILD_NUMBER; curl -Ls https://$(hostname)/$BUILD_NUMBER.tar | tar xv -C /tmp/$BUILD_NUMBER; rclone copy -P --drive-chunk-size 256M /tmp/$BUILD_NUMBER/ aosip-jenkins:$BUILD_NUMBER"
rm -fv ~/nginx/$BUILD_NUMBER.tar
if [[ $AOSIP_BUILDTYPE =~ ^(CI|CI_Gapps|Quiche|Quiche_Gapps|Ravioli|Ravioli_Gapps)$ ]]; then
ssh Illusion "rm -rfv /tmp/$BUILD_NUMBER"
scp "$UPDATER_JSON" Illusion:/tmp/
ssh Illusion "rclone copy /tmp/$UPDATER_JSON aosip-jenkins:; rm -fv /tmp/$UPDATER_JSON"
FOLDER_LINK="$(ssh Illusion rclone link aosip-jenkins:"$BUILD_NUMBER")"
export PARSE_MODE="html"
notify "Build $BUILD_NUMBER - $DEVICE $AOSIP_BUILDTYPE"
notify "Direct link for $DEVICE $AOSIP_BUILDTYPE"
notify "$(./jenkins/message_testers.py "${DEVICE}")"
if [[ -n $REPOPICK_LIST ]]; then
notify "$(python3 ~/scripts/gerrit/parsepicks.py "${REPOPICK_LIST}")"
fi
elif [[ $AOSIP_BUILDTYPE =~ ^(Official|Gapps)$ ]]; then
ssh Illusion "bash ~/scripts/aosip/release.sh $DEVICE $BUILD_NUMBER $AOSIP_BUILDTYPE"
python3 ~/api/post_device.py "$DEVICE" "$AOSIP_BUILDTYPE"
fi
rm -fv "$DEVICE-$AOSIP_BUILDTYPE".json