Skip to content

Instantly share code, notes, and snippets.

@rokibhasansagar
Last active November 6, 2023 17:50
Show Gist options
  • Save rokibhasansagar/a0dedd612279d26c472e473f2c09e64a to your computer and use it in GitHub Desktop.
Save rokibhasansagar/a0dedd612279d26c472e473f2c09e64a to your computer and use it in GitHub Desktop.
PitchBlack Recovery Builder Setup for Android 10
version: 2.1
jobs:
build:
docker:
# Use this New Image for Starting things up
- image: fr3akyphantom/droid-runner:latest # DO Not Change
environment:
MANIFEST_BRANCH: "android-10.0"
VERSION: "2.9.1" # Change as necessary
VENDOR: "" # Mandatory
CODENAME: "" # Mandatory
FLAVOR: "" # Mandatory:: Input "eng" or "userdebug"
MAINTAINER: "PBRP Team"
TEST_BUILD: 'true'
# PB_OFFICIAL: 'true' # REQUIRED-FOR-TEAM:: Uncomment only for Stable Official builds
# PB_ENGLISH: 'true' # Use if necessary
# EXTRA_CMD: "" # OPTIONAL COMMANDS:: USE WITHIN DOUBLE-QUOTE
CHANGELOG: |
What's been done?
- Update done for xx
What's fixed?
- Fixed yy things
- Which is actually Changed by ZZ
And something else
working_directory: /home/builder/ # This MUST NOT Be Changed
steps:
- setup_remote_docker:
version: 19.03.8
- run:
name: "ALL IN REMOTE"
command: |
curl -sL https://gist.github.com/rokibhasansagar/a0dedd612279d26c472e473f2c09e64a/raw/remote_build.sh -o remote_build.sh
source remote_build.sh
workflows:
version: 2
remote_builder:
jobs:
- build:
filters:
branches:
only: "android-10.0-remote" # Use Appropriate Branch Name
context: org-global
#!/bin/bash
set -eo pipefail
# SANITY CHECKS
if [[ -z $GitHubMail ]]; then echo -e "You haven't configured GitHub E-Mail Address." && exit 1; fi
if [[ -z $GitHubName ]]; then echo -e "You haven't configured GitHub Username." && exit 1; fi
if [[ -z $GITHUB_TOKEN ]]; then echo -e "You haven't configured GitHub Token.\nWithout it, recovery can't be published." && exit 1; fi
if [[ -z $MANIFEST_BRANCH ]]; then echo -e "You haven't configured PitchBlack Recovery Project Manifest Branch." && exit 1; fi
if [[ -z $VENDOR ]]; then echo -e "You haven't configured Vendor name." && exit 1; fi
if [[ -z $CODENAME ]]; then echo -e "You haven't configured Device Codename." && exit 1; fi
if [[ -z $BUILD_LUNCH && -z $FLAVOR ]]; then echo -e "Set at least one variable. BUILD_LUNCH or FLAVOR." && exit 1; fi
[[ ! -d /home/builder/.ccache ]] && mkdir -p /home/builder/.ccache
cd /home/builder/
docker run --privileged -i --name worker --user builder \
-e USER_ID=$(id -u) -e GROUP_ID=$(id -g) \
-e GitHubMail="${GitHubMail}" -e GitHubName="${GitHubName}" -e GITHUB_TOKEN="${GITHUB_TOKEN}" \
-e CIRCLE_PROJECT_USERNAME="${CIRCLE_PROJECT_USERNAME}" -e CIRCLE_PROJECT_REPONAME="${CIRCLE_PROJECT_REPONAME}" \
-e CIRCLE_BRANCH="${CIRCLE_BRANCH}" -e CIRCLE_SHA1="${CIRCLE_SHA1}" \
-e MANIFEST_BRANCH="${MANIFEST_BRANCH}" -e PBRP_BRANCH="${PBRP_BRANCH}" \
-e USE_SECRET_BOOTABLE="${USE_SECRET_BOOTABLE}" -e SECRET_BR="${SECRET_BR}" \
-e VERSION="${VERSION}" -e VENDOR="${VENDOR}" -e CODENAME="${CODENAME}" \
-e BUILD_LUNCH="${BUILD_LUNCH}" -e FLAVOR="${FLAVOR}" \
-e MAINTAINER="${MAINTAINER}" -e CHANGELOG="${CHANGELOG}" \
-e TEST_BUILD="${TEST_BUILD}" -e PB_OFFICIAL="${PB_OFFICIAL}" \
-e PB_ENGLISH="${PB_ENGLISH}" -e EXTRA_CMD="${EXTRA_CMD}" \
-v "${pwd}:/home/builder/:rw,z" \
-v "/home/builder/.ccache:/srv/ccache:rw,z" \
--workdir /home/builder/ \
fr3akyphantom/droid-builder:edge bash \<< EOF
cd /home/builder/
( mkdir -p android || true ) && cd android
# Set GitAuth Infos"
git config --global user.email $GitHubMail
git config --global user.name $GitHubName
git config --global credential.helper store
git config --global color.ui true
if [[ "${CIRCLE_PROJECT_USERNAME}" == "PitchBlackRecoveryProject" ]]; then
# Use Google Git Cookies for Smooth repo-sync
git clone -q "https://$GITHUB_TOKEN@github.com/PitchBlackRecoveryProject/google-git-cookies.git" &> /dev/null
bash google-git-cookies/setup_cookies.sh
rm -rf google-git-cookies
fi
[[ ! -d /tmp ]] && mkdir -p /tmp
# Make a keepalive shell so that it can bypass CI Termination on output freeze
cat << EOF > /tmp/keepalive.sh
#!/bin/bash
echo \$$ > /tmp/keepalive.pid # keep this so that it can be killed from other command
while true; do
echo "." && sleep 300
done
EOF
chmod a+x /tmp/keepalive.sh
# sync
echo -e "Initializing PBRP repo sync..."
repo init -q -u https://github.com/PitchBlackRecoveryProject/manifest_pb.git -b ${MANIFEST_BRANCH} --depth 1
/tmp/keepalive.sh & repo sync -c -q --force-sync --no-clone-bundle --no-tags -j6 #THREADCOUNT is only 2 in remote docker
kill -s SIGTERM $(cat /tmp/keepalive.pid)
# clean unneeded files
rm -rf development/apps/ development/samples/ packages/apps/
# use pb-10.0
rm -rf vendor/pb && git clone --quiet --progress https://github.com/PitchBlackRecoveryProject/vendor_pb -b pb-10.0 --depth 1 vendor/pb
rm vendor/pb/vendorsetup.sh || true
echo -e "\nGetting the Device Tree on place"
if [[ "${CIRCLE_PROJECT_USERNAME}" == "PitchBlackRecoveryProject" ]]; then
git clone --quiet --progress https://$GitHubName:$GITHUB_TOKEN@github.com/PitchBlackRecoveryProject/${CIRCLE_PROJECT_REPONAME} -b ${CIRCLE_BRANCH} device/${VENDOR}/${CODENAME}
else
git clone --quiet --progress https://github.com/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME} -b ${CIRCLE_BRANCH} device/${VENDOR}/${CODENAME}
fi
if [[ -n ${USE_SECRET_BOOTABLE} ]]; then
if [[ -n ${PBRP_BRANCH} ]]; then
unset PBRP_BRANCH
fi
if [[ -z ${SECRET_BR} ]]; then
SECRET_BR="android-9.0"
fi
rm -rf bootable/recovery
git clone --quiet --progress https://$GitHubName:$GITHUB_TOKEN@github.com/PitchBlackRecoveryProject/pbrp_recovery_secrets -b ${SECRET_BR} --single-branch bootable/recovery
elif [[ -n ${PBRP_BRANCH} ]]; then
# FOR EVERYBODY
rm -rf bootable/recovery
git clone --quiet --progress https://github.com/PitchBlackRecoveryProject/android_bootable_recovery -b ${PBRP_BRANCH} --single-branch bootable/recovery
fi
if [[ -n $EXTRA_CMD ]]; then
eval "$EXTRA_CMD"
cd /home/builder/android/
fi
# See whta's inside
echo -e "\n" && ls -lA .
echo -e "\nPreparing Delicious Lunch..."
export ALLOW_MISSING_DEPENDENCIES=true
source build/envsetup.sh
if [[ -n $BUILD_LUNCH ]]; then
lunch ${BUILD_LUNCH}
elif [[ -n $FLAVOR ]]; then
lunch omni_${CODENAME}-${FLAVOR}
fi
# Keep the whole .repo/manifests folder
cp -a .repo/manifests $(pwd)/
rm -rf .repo
mkdir -p .repo && mv manifests .repo/ && ln -s .repo/manifests/default.xml .repo/manifest.xml
/tmp/keepalive.sh & make -j6 recoveryimage
kill -s SIGTERM $(cat /tmp/keepalive.pid)
echo -e "\nYummy Recovery is Served.\n"
echo "Ready to Deploy"
export TEST_BUILDFILE=$(find $(pwd)/out/target/product/${CODENAME}/PitchBlack*-UNOFFICIAL.zip 2>/dev/null)
export BUILDFILE=$(find $(pwd)/out/target/product/${CODENAME}/PitchBlack*-OFFICIAL.zip 2>/dev/null)
export BUILD_FILE_TAR=$(find $(pwd)/out/target/product/${CODENAME}/*.tar 2>/dev/null)
export UPLOAD_PATH=$(pwd)/out/target/product/${CODENAME}/upload/
mkdir ${UPLOAD_PATH}
if [[ -n ${BUILD_FILE_TAR} ]]; then
echo "Samsung's Odin Tar available: $BUILD_FILE_TAR"
cp ${BUILD_FILE_TAR} ${UPLOAD_PATH}
fi
if [[ "${CIRCLE_PROJECT_USERNAME}" == "PitchBlackRecoveryProject" ]] && [[ -n $BUILDFILE ]]; then
echo "Got the Official Build: $BUILDFILE"
sudo chmod a+x vendor/pb/pb_deploy.sh
./vendor/pb/pb_deploy.sh ${CODENAME} ${SFUserName} ${SFPassword} ${GITHUB_TOKEN} ${VERSION} ${MAINTAINER}
cp $BUILDFILE $UPLOAD_PATH
export BUILDIMG=$(find $(pwd)/out/target/product/${CODENAME}/recovery.img 2>/dev/null)
cp $BUILDIMG $UPLOAD_PATH
ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} \
-n "Latest Release for $(echo $CODENAME)" -b "PBRP $(echo $VERSION)" -c ${CIRCLE_SHA1} -delete \
${VERSION} ${UPLOAD_PATH}
elif [[ $TEST_BUILD == 'true' ]] && [[ -n $TEST_BUILDFILE ]]; then
echo "Got the Unofficial Build: $TEST_BUILDFILE"
cp $TEST_BUILDFILE $UPLOAD_PATH
export TEST_BUILDIMG=$(find $(pwd)/out/target/product/${CODENAME}/recovery.img 2>/dev/null)
cp $TEST_BUILDIMG $UPLOAD_PATH
ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} \
-n "Test Release for $(echo $CODENAME)" -b "PBRP $(echo $VERSION)" -c ${CIRCLE_SHA1} -delete \
${VERSION}-test ${UPLOAD_PATH}
else
echo -e "Something Wrong with your build system.\nPlease fix it." && exit 1
fi
# SEND NOTIFICATION TO MAINTAINERS, AVAILABLE FOR TEAM DEVS ONLY
if [[ "${CIRCLE_PROJECT_USERNAME}" == "PitchBlackRecoveryProject" ]] && [[ ! -z $TEST_BUILDFILE ]]; then
echo -e "\nSending the Test build info in Maintainer Group\n"
TEST_LINK="https://github.com/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}/releases/download/${VERSION}-test/$(echo $TEST_BUILDFILE | awk -F'[/]' '{print $NF}')"
MAINTAINER_MSG="PitchBlack Recovery for \`${VENDOR}\` \`${CODENAME}\` is available Only For Testing Purpose\n\n"
if [[ ! -z $MAINTAINER ]]; then MAINTAINER_MSG=${MAINTAINER_MSG}"Maintainer: ${MAINTAINER}\n\n"; fi
if [[ ! -z $CHANGELOG ]]; then MAINTAINER_MSG=${MAINTAINER_MSG}"Changelog:\n"${CHANGELOG}"\n\n"; fi
MAINTAINER_MSG=${MAINTAINER_MSG}"Go to ${TEST_LINK} to download it."
if [[ $USE_SECRET_BOOTABLE == 'true' ]]; then
cd vendor/pb; python3 telegram.py -c "-1001465331122" -M "$MAINTAINER_MSG" -m HTML; cd /home/builder/android/
else
cd vendor/pb; python3 telegram.py -c "-1001228903553" -M "$MAINTAINER_MSG" -m HTML; cd /home/builder/android/
fi
fi
echo -e "\n\nAll Done Gracefully\n\n"
@rokibhasansagar
Copy link
Author

@manjotsidhu @rezaadi0105 @AndroiableDroid
These are the new config and build script which are written for the Android-10 Builds

@punkzappa007
Copy link

Sir sorry for asking but where I can put the remote_build.sh? Thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment