Files
IronFox/scripts/ci-update-fdroid.sh
Akash Yadav f940a5a54e fix: format and lint with shfmt + shellcheck
Signed-off-by: Akash Yadav <contact@itsaky.com>
2026-07-31 00:39:10 +00:00

149 lines
6.0 KiB
Bash

#!/bin/bash
# Script is used to update the F-Droid repository
# This script is expected to be run in a CI environment
# DO NOT execute this manually!
set -euo pipefail
# Set-up our environment
if [[ -z "${IRONFOX_CI+x}" ]]; then
export IRONFOX_CI=1
fi
if [[ -z "${IRONFOX_SET_ENVS+x}" ]]; then
/bin/bash "$(realpath $(dirname "$0"))/env.sh"
fi
source "$(realpath $(dirname "$0"))/env.sh"
# Include utilities
source "${IRONFOX_UTILS}"
# Set verbosity
if [[ "${IRONFOX_VERBOSE}" == 1 ]]; then
set -x
else
set +x
fi
# Function to download an APK for a desired release
function download_release() {
local -r version="$1"
local -r arch="$2"
local -r output_dir="$3"
local -r target_apk="ironfox-${version}-${arch}.apk"
local -r target_expected_sha512sum="${target_apk}-sha512sum.txt"
local -r target_expected_sha512sum_url="https://releases.ironfoxoss.org/ironfox/releases/${version}/${arch}/${target_expected_sha512sum}"
local -r target_apk_url="https://releases.ironfoxoss.org/ironfox/releases/${version}/${arch}/${target_apk}"
local -r output_apk="${output_dir}/${target_apk}"
local -r output_expected_sha512sum="${output_dir}/${target_expected_sha512sum}"
# Download the APK
echo_red_text "Downloading ${target_apk} from ${target_apk_url}..."
"${IRONFOX_CURL}" ${IRONFOX_CURL_FLAGS} --location "${target_apk_url}" --output "${output_apk}"
echo_green_text "SUCCESS: Downloaded ${target_apk}"
# Check the SHA512sum
echo_red_text "Validating SHA512sum for ${target_apk}.."
"${IRONFOX_CURL}" ${IRONFOX_CURL_FLAGS} --location "${target_expected_sha512sum_url}" --output "${output_expected_sha512sum}"
local -r expected_sha512sum=$("${IRONFOX_CAT}" "${output_expected_sha512sum}" | "${IRONFOX_XARGS}")
local -r local_sha512sum=$("${IRONFOX_SHA512SUM}" "${output_apk}" | "${IRONFOX_AWK}" '{print $1}')
if [[ "${local_sha512sum}" != "${expected_sha512sum}" ]]; then
echo_red_text 'ERROR: Checksum validation failed.'
echo "Expected SHA512sum: ${expected_sha512sum}"
echo "Actual SHA512sum: ${local_sha512sum}"
# If checksum validation fails, also just clean-up the files
"${IRONFOX_RM}" -f "${output_apk}"
"${IRONFOX_RM}" -f "${output_expected_sha512sum}"
exit 1
fi
echo_green_text "SUCCESS: Checksum validated for ${target_apk}"
echo "SHA512sum: ${local_sha512sum}"
}
# Function to download all APKs for a desired release
function download_releases() {
# ARM64
download_release "${IRONFOX_VERSION}" 'arm64-v8a' "${REPO_DIR_PATH}"
# ARM
download_release "${IRONFOX_VERSION}" 'armeabi-v7a' "${REPO_DIR_PATH}"
# x86_64
download_release "${IRONFOX_VERSION}" 'x86_64' "${REPO_DIR_PATH}"
}
"${IRONFOX_GIT}" clone --recurse-submodules "https://${IF_CI_USERNAME}:${GITLAB_CI_PUSH_TOKEN}@gitlab.com/${FDROID_REPO_PATH}.git" fdroid
pushd fdroid || {
echo "Unable to pushd into 'fdroid'"
exit 1
}
"${IRONFOX_MKDIR}" -vp "${REPO_DIR_PATH}"
"${IRONFOX_GIT}" lfs install
# Download all variants of the latest release
download_releases
# Because we now upload releases to releases.ironfoxoss.org, the F-Droid repo doesn't need to store them all anymore
# So to improve performance and reduce size, we can keep only the last 3 releases
"${IRONFOX_CURL}" ${IRONFOX_CURL_FLAGS} --location 'https://releases.ironfoxoss.org/ironfox/releases/previous_release.txt' --output "${IRONFOX_ROOT}/previous_release.txt"
"${IRONFOX_CURL}" ${IRONFOX_CURL_FLAGS} --location 'https://releases.ironfoxoss.org/ironfox/releases/previous_previous_release.txt' --output "${IRONFOX_ROOT}/previous_previous_release.txt"
readonly previous_version=$("${IRONFOX_CAT}" "${IRONFOX_ROOT}/previous_release.txt" | "${IRONFOX_XARGS}")
readonly previous_previous_version=$("${IRONFOX_CAT}" "${IRONFOX_ROOT}/previous_previous_release.txt" | "${IRONFOX_XARGS}")
readonly current_apk_arm64="ironfox-${IRONFOX_VERSION}-arm64-v8a.apk"
readonly previous_apk_arm64="ironfox-${previous_version}-arm64-v8a.apk"
readonly previous_previous_apk_arm64="ironfox-${previous_previous_version}-arm64-v8a.apk"
readonly current_apk_arm="ironfox-${IRONFOX_VERSION}-armeabi-v7a.apk"
readonly previous_apk_arm="ironfox-${previous_version}-armeabi-v7a.apk"
readonly previous_previous_apk_arm="ironfox-${previous_previous_version}-armeabi-v7a.apk"
readonly current_apk_x86_64="ironfox-${IRONFOX_VERSION}-x86_64.apk"
readonly previous_apk_x86_64="ironfox-${previous_version}-x86_64.apk"
readonly previous_previous_apk_x86_64="ironfox-${previous_previous_version}-x86_64.apk"
for apk in "${REPO_DIR_PATH}"/*.apk; do
apk_basename=$("${IRONFOX_BASENAME}" "${apk}")
if [[ "${apk_basename}" != "${current_apk_arm64}" ]] && [[ "${apk_basename}" != "${previous_apk_arm64}" ]] &&
[[ "${apk_basename}" != "${previous_previous_apk_arm64}" ]] && [[ "${apk_basename}" != "${current_apk_arm}" ]] &&
[[ "${apk_basename}" != "${previous_apk_arm}" ]] && [[ "${apk_basename}" != "${previous_previous_apk_arm}" ]] &&
[[ "${apk_basename}" != "${current_apk_x86_64}" ]] && [[ "${apk_basename}" != "${previous_apk_x86_64}" ]] &&
[[ "${apk_basename}" != "${previous_previous_apk_x86_64}" ]]; then
"${IRONFOX_RM}" -vf "${apk}"
fi
done
source "${IRONFOX_PYENV}"
IFS=":" read -r vercode vername <<< "$("${IRONFOX_PYTHON}" "${IRONFOX_SCRIPTS}/get_latest_version.py" $("${IRONFOX_LS}" "${REPO_DIR_PATH}"/*.apk))"
readonly META_FILE_PATH="${META_DIR_PATH}/${META_FILE_NAME}"
"${IRONFOX_SED}" -i \
-e "s/CurrentVersion: .*/CurrentVersion: \"v${vername}\"/" \
-e "s/CurrentVersionCode: .*/CurrentVersionCode: ${vercode}/" "${META_FILE_PATH}"
pushd "${META_DIR_PATH}" || {
echo "Unable to pushd into '${META_DIR_PATH}'"
exit 1
}
# Update metadata repository
"${IRONFOX_GIT}" add "${META_FILE_NAME}"
"${IRONFOX_GIT}" commit -m "feat: update for release ${CI_COMMIT_TAG}"
"${IRONFOX_GIT}" push origin "HEAD:${META_REPO_BRANCH}"
popd || {
echo "Unable to popd from '${META_DIR_PATH}'"
exit 1
}
# Update F-Droid repository
"${IRONFOX_GIT}" add "${REPO_DIR_PATH}" "${META_DIR_PATH}"
"${IRONFOX_GIT}" commit -m "feat: update for release ${CI_COMMIT_TAG}"
"${IRONFOX_GIT}" push origin "HEAD:${FDROID_REPO_BRANCH}"
popd # ignore error