name: Build Modules on: workflow_call: inputs: from_ci: type: boolean required: false default: true workflow_dispatch: jobs: run: permissions: write-all runs-on: ubuntu-latest steps: - uses: actions/setup-java@v4 with: distribution: "zulu" java-version: "17" - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 submodules: true - name: Update config if: ${{ inputs.from_ci }} run: | if git checkout origin/update build.md; then UPDATE_CFG=$(./build.sh config.toml --config-update) if [ "$UPDATE_CFG" ]; then echo "$UPDATE_CFG" > config.json fi fi - name: Get next version code id: next_ver_code env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | TAG=$(gh release list -L 1 | awk -F '\t' '{print $3}') if [ -z "$TAG" ]; then TAG=0; fi echo "NEXT_VER_CODE=$((TAG + 1))" >> $GITHUB_OUTPUT - name: Build modules/APKs 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 NEXT_VER_CODE: ${{ steps.next_ver_code.outputs.NEXT_VER_CODE }} - name: Get output id: get_output run: | DELIM="$(openssl rand -hex 8)" echo "BUILD_LOG<<${DELIM}" >> "$GITHUB_OUTPUT" cat build.md >> "$GITHUB_OUTPUT" echo "${DELIM}" >> "$GITHUB_OUTPUT" cp -f build.md build.tmp - name: Upload modules to release uses: svenstaro/upload-release-action@v2 with: body: ${{ steps.get_output.outputs.BUILD_LOG }} repo_token: ${{ secrets.GITHUB_TOKEN }} file: ./build/* release_name: ReVanced tag: ${{ steps.next_ver_code.outputs.NEXT_VER_CODE }} file_glob: true overwrite: true - name: Update changelog and Magisk update json id: update_config run: | git checkout -f update || git switch --discard-changes --orphan update cp -f build.tmp build.md get_update_json() { echo "{ \"version\": \"$1\", \"versionCode\": ${{ steps.next_ver_code.outputs.NEXT_VER_CODE }}, \"zipUrl\": \"$2\", \"changelog\": \"https://raw.githubusercontent.com/$GITHUB_REPOSITORY/update/build.md\" }" } cd build || { echo "build folder not found"; exit 1; } for OUTPUT in *magisk*.zip; do [ "$OUTPUT" = "*magisk*.zip" ] && continue ZIP_S=$(unzip -p "$OUTPUT" module.prop) if ! UPDATE_JSON=$(echo "$ZIP_S" | grep updateJson); then continue; fi UPDATE_JSON="${UPDATE_JSON##*/}" VER=$(echo "$ZIP_S" | grep version=) VER="${VER##*=}" DLURL="$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/releases/download/${{ steps.next_ver_code.outputs.NEXT_VER_CODE }}/${OUTPUT}" get_update_json "$VER" "$DLURL" >"../$UPDATE_JSON" done cd .. find . -name "*-update.json" | grep . || : >dummy-update.json - uses: stefanzweifel/git-auto-commit-action@v5 with: branch: update skip_checkout: true file_pattern: build.md *-update.json commit_message: Bump version ${{ steps.next_ver_code.outputs.NEXT_VER_CODE }} - name: Report to Telegram env: TG_TOKEN: ${{ secrets.TG_TOKEN }} if: env.TG_TOKEN != null run: | cd build || { echo "build folder not found"; exit 1; } TG_CHAT="-1002417137882" NL=$'\n' APKS="" MODULES="" for OUTPUT in *; do DL_URL="$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/releases/download/${{ steps.next_ver_code.outputs.NEXT_VER_CODE }}/${OUTPUT}" if [[ $OUTPUT = *.apk ]]; then APKS+="${NL}📦[${OUTPUT}](${DL_URL})" elif [[ $OUTPUT = *.zip ]]; then MODULES+="${NL}📦[${OUTPUT}](${DL_URL})" fi done MODULES=${MODULES#"$NL"} APKS=${APKS#"$NL"} BODY="$(sed 's/^\* \*\*/↪ \*\*/g; s/^\* `/↪ \*\*/g; s/`/\*/g; s/^\* /\↪/g; s/\*\*/\*/g; s/###//g; s/^- /↪ /g; /^==/d;' ../build.md)" MSG="*New build!* ${BODY} *▼ Download Links:* Modules: ${MODULES} APKs: ${APKS} " echo "'$MSG'" MSG=${MSG:0:9450} POST="https://api.telegram.org/bot${TG_TOKEN}/sendMessage" curl -X POST --data-urlencode "parse_mode=Markdown" --data-urlencode "disable_web_page_preview=true" --data-urlencode "text=${MSG}" --data-urlencode "chat_id=${TG_CHAT}" "$POST" - name: Report to Discord env: DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }} if: env.DISCORD_WEBHOOK_URL != null run: | cd build || { echo "build folder not found"; exit 1; } NL=$'\n' APKS="" MODULES="" for OUTPUT in *; do DL_URL="$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/releases/download/${{ steps.next_ver_code.outputs.NEXT_VER_CODE }}/${OUTPUT}" if [[ $OUTPUT = *.apk ]]; then APKS+="${NL}- [${OUTPUT}](${DL_URL})" elif [[ $OUTPUT = *.zip ]]; then MODULES+="${NL}- [${OUTPUT}](${DL_URL})" fi done MODULES=${MODULES#"$NL"} APKS=${APKS#"$NL"} BODY="$(sed 's/^\* \*\*/- \*\*/g; s/^\* `/- \*\*/g; s/`/\*/g; s/^\* /\-/g; s/\*\*/\*/g; s/###//g; s/^- /- /g; /^==/d;' ../build.md)" MSG="**New build is ready!** ${BODY} **Download Links:** **Modules:** ${MODULES} **APKs:** ${APKS} " # Function to split messages by line and send them send_discord_message() { local message="$1" local buffer="" while IFS= read -r line || [ -n "$line" ]; do # Check if adding the current line exceeds 2000 characters if [ ${#buffer} -ge 2000 ]; then # Send the current buffer and reset it curl -X POST -H "Content-Type: application/json" \ -d "$(jq -n --arg content "$buffer" '{content: $content}')" \ "$DISCORD_WEBHOOK_URL" buffer="" fi buffer+="$line\n" done <<< "$message" # Send any remaining content in the buffer if [ -n "$buffer" ]; then curl -X POST -H "Content-Type: application/json" \ -d "$(jq -n --arg content "$buffer" '{content: $content}')" \ "$DISCORD_WEBHOOK_URL" fi } send_discord_message "$MSG"