diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2f0204b..c14a6e5 100755 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -31,7 +31,7 @@ jobs: if git checkout origin/update build.md; then UPDATE_CFG=$(./build.sh config.toml --config-update) if [ "$UPDATE_CFG" ]; then - echo "$UPDATE_CFG" > config.toml + echo "$UPDATE_CFG" > config.json fi fi @@ -45,7 +45,7 @@ jobs: echo "NEXT_VER_CODE=$((TAG + 1))" >> $GITHUB_OUTPUT - name: Build modules/APKs - run: ./build.sh config.toml + run: if [ -f "config.json" ]; then ./build.sh config.json; else ./build.sh config.toml; fi env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_REPOSITORY: $GITHUB_REPOSITORY diff --git a/build.sh b/build.sh index 4607da6..0200062 100755 --- a/build.sh +++ b/build.sh @@ -10,7 +10,7 @@ if [ "${1-}" = "clean" ]; then fi source utils.sh -get_prebuilts +set_prebuilts vtf() { if ! isoneof "${1}" "true" "false"; then abort "ERROR: '${1}' is not a valid option for '${2}': only true or false is allowed"; fi; } @@ -22,7 +22,6 @@ if ! PARALLEL_JOBS=$(toml_get "$main_config_t" parallel-jobs); then if [ "$OS" = Android ]; then PARALLEL_JOBS=1; else PARALLEL_JOBS=$(nproc); fi fi REMOVE_RV_INTEGRATIONS_CHECKS=$(toml_get "$main_config_t" remove-rv-integrations-checks) || REMOVE_RV_INTEGRATIONS_CHECKS="true" - DEF_PATCHES_VER=$(toml_get "$main_config_t" patches-version) || DEF_PATCHES_VER="latest" DEF_CLI_VER=$(toml_get "$main_config_t" cli-version) || DEF_CLI_VER="latest" DEF_PATCHES_SRC=$(toml_get "$main_config_t" patches-source) || DEF_PATCHES_SRC="ReVanced/revanced-patches" @@ -41,20 +40,23 @@ if [ "$ENABLE_MAGISK_UPDATE" = true ] && [ -z "${GITHUB_REPOSITORY-}" ]; then pr "You are building locally. Magisk updates will not be enabled." ENABLE_MAGISK_UPDATE=false fi -# ----------------- - if ((COMPRESSION_LEVEL > 9)) || ((COMPRESSION_LEVEL < 0)); then abort "compression-level must be within 0-9"; fi -# -- check_deps -- jq --version >/dev/null || abort "\`jq\` is not installed. install it with 'apt install jq' or equivalent" java --version >/dev/null || abort "\`openjdk 17\` is not installed. install it with 'apt install openjdk-17-jre' or equivalent" zip --version >/dev/null || abort "\`zip\` is not installed. install it with 'apt install zip' or equivalent" -# ---------------- + rm -rf revanced-magisk/bin/*/tmp.* if [ "$(echo "$TEMP_DIR"/*-rv/changelog.md)" ]; then : >"$TEMP_DIR"/*-rv/changelog.md || : fi +mkdir -p ${MODULE_TEMPLATE_DIR}/bin/arm64 ${MODULE_TEMPLATE_DIR}/bin/arm ${MODULE_TEMPLATE_DIR}/bin/x86 ${MODULE_TEMPLATE_DIR}/bin/x64 +gh_dl "${MODULE_TEMPLATE_DIR}/bin/arm64/cmpr" "https://github.com/j-hc/cmpr/releases/latest/download/cmpr-arm64-v8a" +gh_dl "${MODULE_TEMPLATE_DIR}/bin/arm/cmpr" "https://github.com/j-hc/cmpr/releases/latest/download/cmpr-armeabi-v7a" +gh_dl "${MODULE_TEMPLATE_DIR}/bin/x86/cmpr" "https://github.com/j-hc/cmpr/releases/latest/download/cmpr-x86" +gh_dl "${MODULE_TEMPLATE_DIR}/bin/x64/cmpr" "https://github.com/j-hc/cmpr/releases/latest/download/cmpr-x86_64" + declare -A cliriplib idx=0 for table_name in $(toml_get_table_names); do diff --git a/utils.sh b/utils.sh index eaefc6f..c64513d 100755 --- a/utils.sh +++ b/utils.sh @@ -10,7 +10,14 @@ if [ "${GITHUB_TOKEN-}" ]; then GH_HEADER="Authorization: token ${GITHUB_TOKEN}" NEXT_VER_CODE=${NEXT_VER_CODE:-$(date +'%Y%m%d')} OS=$(uname -o) -toml_prep() { __TOML__=$($TOML --output json --file "$1" .); } +toml_prep() { + if [ ! -f "$1" ]; then return 1; fi + if [ "${1##*.}" == toml ]; then + __TOML__=$($TOML --output json --file "$1" .) + elif [ "${1##*.}" == json ]; then + __TOML__=$(cat "$1") + else abort "config extension not supported"; fi +} toml_get_table_names() { jq -r -e 'to_entries[] | select(.value | type == "object") | .key' <<<"$__TOML__"; } toml_get_table_main() { jq -r -e 'to_entries | map(select(.value | type != "object")) | from_entries' <<<"$__TOML__"; } toml_get_table() { jq -r -e ".\"${1}\"" <<<"$__TOML__"; } @@ -110,7 +117,7 @@ get_rv_prebuilts() { echo } -get_prebuilts() { +set_prebuilts() { APKSIGNER="${BIN_DIR}/apksigner.jar" if [ "$OS" = Android ]; then local arch @@ -122,21 +129,13 @@ get_prebuilts() { HTMLQ="${BIN_DIR}/htmlq/htmlq-x86_64" TOML="${BIN_DIR}/toml/tq-x86_64" fi - mkdir -p ${MODULE_TEMPLATE_DIR}/bin/arm64 ${MODULE_TEMPLATE_DIR}/bin/arm ${MODULE_TEMPLATE_DIR}/bin/x86 ${MODULE_TEMPLATE_DIR}/bin/x64 - gh_dl "${MODULE_TEMPLATE_DIR}/bin/arm64/cmpr" "https://github.com/j-hc/cmpr/releases/latest/download/cmpr-arm64-v8a" - gh_dl "${MODULE_TEMPLATE_DIR}/bin/arm/cmpr" "https://github.com/j-hc/cmpr/releases/latest/download/cmpr-armeabi-v7a" - gh_dl "${MODULE_TEMPLATE_DIR}/bin/x86/cmpr" "https://github.com/j-hc/cmpr/releases/latest/download/cmpr-x86" - gh_dl "${MODULE_TEMPLATE_DIR}/bin/x64/cmpr" "https://github.com/j-hc/cmpr/releases/latest/download/cmpr-x86_64" } config_update() { if [ ! -f build.md ]; then abort "build.md not available"; fi declare -A sources : >"$TEMP_DIR"/skipped - local conf="" - # shellcheck disable=SC2154 - conf+=$(sed '1d' <<<"$main_config_t") - conf+=$'\n' + local upped=() local prcfg=false for table_name in $(toml_get_table_names); do if [ -z "$table_name" ]; then continue; fi @@ -146,10 +145,7 @@ config_update() { PATCHES_SRC=$(toml_get "$t" patches-source) || PATCHES_SRC=$DEF_PATCHES_SRC PATCHES_VER=$(toml_get "$t" patches-version) || PATCHES_VER=$DEF_PATCHES_VER if [[ -v sources["$PATCHES_SRC/$PATCHES_VER"] ]]; then - if [ "${sources["$PATCHES_SRC/$PATCHES_VER"]}" = 1 ]; then - conf+="$t" - conf+=$'\n' - fi + if [ "${sources["$PATCHES_SRC/$PATCHES_VER"]}" = 1 ]; then upped+=("$table_name"); fi else sources["$PATCHES_SRC/$PATCHES_VER"]=0 local rv_rel="https://api.github.com/repos/${PATCHES_SRC}/releases" @@ -167,15 +163,21 @@ config_update() { if ! OP=$(grep "^Patches: ${PATCHES_SRC%%/*}/" build.md | grep "$last_patches"); then sources["$PATCHES_SRC/$PATCHES_VER"]=1 prcfg=true - conf+="$t" - conf+=$'\n' + upped+=("$table_name") else echo "$OP" >>"$TEMP_DIR"/skipped fi fi fi done - if [ "$prcfg" = true ]; then echo "$conf"; fi + if [ "$prcfg" = true ]; then + local query="" + for table in "${upped[@]}"; do + if [ -n "$query" ]; then query+=" or "; fi + query+=".key == \"$table\"" + done + jq "to_entries | map(select(${query} or (.value | type != \"object\"))) | from_entries" <<<"$__TOML__" + fi } _req() {