LastPipeBender/.github/scripts/brave-new-pipe-releast-actions.sh
evermind 7772621f8a BraveNewPipe: refactor the data.json creation script to work with several branches
As for now we use separated release data.json.
One for brave and braveConscrypt flavor and one for braveLegacy
2024-04-26 00:47:00 +02:00

132 lines
5.3 KiB
Bash
Executable file

#!/usr/bin/env bash
# this script updates the json file with new version that BraveNewPipe is fetching regulary
set -e
if [[ $# -ne 2 ]]; then
echo "This needs a release tag and a apk file:"
echo "e.g. $0 v0.22.0-1.0.5 /path/to/BraveNewPipe_v0.22.0-1.0.5.apk"
exit 1
fi
if [[ -z "$GITHUB_SUPER_TOKEN" ]]; then
echo "This script needs a GitHub personal access token."
exit 1
fi
TAG=$1
APK_FILE=$2
BNP_R_MGR_REPO="bnp-r-mgr"
GITHUB_USER="bravenewpipe"
RELEASE_REPO="NewPipe"
RELEASE_BODY="Apk available at ${GITHUB_USER}/${RELEASE_REPO}@${TAG}](https://github.com/${GITHUB_USER}/${RELEASE_REPO}/releases/tag/${TAG})."
PRERELEASE="false"
if [[ "$TAG" == "latest" ]]; then
PRERELEASE="true"
fi
if [[ "$GITHUB_REPOSITORY" != "${GITHUB_USER}/${RELEASE_REPO}" ]]; then
echo "This mirror script is only meant to be run from ${GITHUB_USER}/${RELEASE_REPO}, not ${GITHUB_REPOSITORY}. Nothing to do here."
exit 0
fi
create_tagged_release() {
local L_REPO=$1
local L_BRANCH=$2
local L_COMMIT_MSG=$3
pushd /tmp/${L_REPO}/
# Set the local git identity
git config user.email "${GITHUB_USER}@users.noreply.github.com"
git config user.name "$GITHUB_USER"
# Obtain the release ID for the previous release of $TAG (if present)
local previous_release_id=$(curl --user ${GITHUB_USER}:${GITHUB_SUPER_TOKEN} --request GET --silent https://api.github.com/repos/${GITHUB_USER}/${L_REPO}/releases/tags/${TAG} | jq '.id')
# Delete the previous release (if present)
if [[ -n "$previous_release_id" ]]; then
echo "Deleting previous release: ${previous_release_id}"
curl \
--user ${GITHUB_USER}:${GITHUB_SUPER_TOKEN} \
--request DELETE \
--silent \
https://api.github.com/repos/${GITHUB_USER}/${L_REPO}/releases/${previous_release_id}
fi
# Delete previous identical tags, if present
git tag -d $TAG || true
git push origin :$TAG || true
# Add all the changed files and push the changes upstream
git add -f .
git commit -m "${L_COMMIT_MSG}" || true
git push -f origin ${L_BRANCH}:${L_BRANCH}
git tag $TAG
git push origin $TAG
# evermind -- we don't want any release entries there # Generate a skeleton release on GitHub
# evermind -- we don't want any release entries there curl \
# evermind -- we don't want any release entries there --user ${GITHUB_USER}:${GITHUB_SUPER_TOKEN} \
# evermind -- we don't want any release entries there --request POST \
# evermind -- we don't want any release entries there --silent \
# evermind -- we don't want any release entries there --data @- \
# evermind -- we don't want any release entries there https://api.github.com/repos/${GITHUB_USER}/${L_REPO}/releases <<END
# evermind -- we don't want any release entries there {
# evermind -- we don't want any release entries there "tag_name": "$TAG",
# evermind -- we don't want any release entries there "name": "Auto-generated release for tag $TAG",
# evermind -- we don't want any release entries there "body": "$RELEASE_BODY",
# evermind -- we don't want any release entries there "draft": false,
# evermind -- we don't want any release entries there "prerelease": $PRERELEASE
# evermind -- we don't want any release entries there }
# evermind -- we don't want any release entries thereEND
popd
}
create_json_file_and_create_tagged_release() {
local L_BRANCH="$1"
local L_URL_STABLE="$2"
local L_URL_ALTERNATIVE="$3"
# checkout json release file repo
rm -rf "/tmp/${BNP_R_MGR_REPO}"
git clone --branch "${L_BRANCH}" "https://${GITHUB_USER}:${GITHUB_SUPER_TOKEN}@github.com/${GITHUB_USER}/${BNP_R_MGR_REPO}.git" /tmp/${BNP_R_MGR_REPO}
# update version{code,name} and download url
cat $JSON_FILE \
| jq '.flavors.github.stable.version_code = '${VERSION_CODE}'' \
| jq '.flavors.github.stable.version = "'${VERSION_NAME}'"' \
| jq '.flavors.github.stable.apk = "'${L_URL_STABLE}'"' \
| jq '( .flavors.github.stable.alternative_apks[] | select(.alternative == "conscrypt") ).url |= "'${L_URL_ALTERNATIVE}'"' \
> $TEMPFILE
mv $TEMPFILE $JSON_FILE
create_tagged_release "$BNP_R_MGR_REPO" "$L_BRANCH" "\"version\": \"$VERSION_NAME\""
}
detect_build_tools_version() {
ls /usr/local/lib/android/sdk/build-tools/ | tail -n 1
}
BUILD_TOOLS_VERSION="${BUILD_TOOLS_VERSION:-$(detect_build_tools_version)}"
AAPT=$ANDROID_HOME/build-tools/$BUILD_TOOLS_VERSION/aapt
URL_PREFIX="https://github.com/${GITHUB_USER}/${RELEASE_REPO}/releases/download/${TAG}"
URL="$URL_PREFIX/BraveNewPipe_${TAG}.apk"
URL_CONSCRYPT="$URL_PREFIX/BraveNewPipe_conscrypt_${TAG}.apk"
URL_LEGACY="$URL_PREFIX/BraveNewPipe_legacy_${TAG}.apk"
VERSION_NAME=${TAG/v/}
VERSION_CODE="$($AAPT d badging $APK_FILE | grep -Po "(?<=\sversionCode=')([0-9.-]+)")"
TEMPFILE="$(mktemp -p /tmp -t sdflhXXXXXXXXX)"
JSON_FILE=/tmp/${BNP_R_MGR_REPO}/api/data.json
# We have two different json files for now:
# The first is used within the flavors brave and braveConscrypt
# and the second is used in braveLegacy. The json files
# are stored in the same repo but in different branches.
# We call kitkat stuff first as each call tags and delete same exising
# tags before and we want the master branch to have the actual tag.
create_json_file_and_create_tagged_release "kitkat" "$URL_LEGACY" "$URL_LEGACY"
create_json_file_and_create_tagged_release "master" "$URL" "$URL_CONSCRYPT"