diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 1cc4f6bd290..8a20867db0e 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -12,6 +12,7 @@ jobs: runs-on: ubuntu-latest env: CI: true + SKIP_BUILD: false steps: - name: Checkout repo @@ -19,7 +20,6 @@ jobs: with: fetch-depth: 0 - - name: Download last SHA artifact uses: dawidd6/action-download-artifact@v3 with: @@ -38,7 +38,7 @@ jobs: fi echo "Commits since $LAST_SHA:" # Accumulate commit logs in a shell variable - COMMIT_LOGS=$(git log $LAST_SHA..HEAD --pretty=format:"[[%h](https://github.com/${{ github.repository }}/commit/%H)] %s ~%an") + COMMIT_LOGS=$(git log $LAST_SHA..HEAD --pretty=format:"● %s ~%an [֍](https://github.com/${{ github.repository }}/commit/%H)") # Replace commit messages with pull request links COMMIT_LOGS=$(echo "$COMMIT_LOGS" | sed -E 's/#([0-9]+)/[#\1](https:\/\/github.com\/rebelonion\/Dantotsu\/pull\/\1)/g') # URL-encode the newline characters for GitHub Actions @@ -66,26 +66,40 @@ jobs: echo "Version $VERSION" echo "VERSION=$VERSION" >> $GITHUB_ENV + - name: List files in the directory + run: ls -l + - name: Setup JDK 17 + if: ${{ env.SKIP_BUILD != 'true' }} uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: 17 cache: gradle - + - name: Decode Keystore File + if: ${{ github.repository == 'rebelonion/Dantotsu' }} run: echo "${{ secrets.KEYSTORE_FILE }}" | base64 -d > $GITHUB_WORKSPACE/key.keystore - - name: List files in the directory - run: ls -l - - name: Make gradlew executable + if: ${{ env.SKIP_BUILD != 'true' }} run: chmod +x ./gradlew - name: Build with Gradle - run: ./gradlew assembleGoogleAlpha -Pandroid.injected.signing.store.file=$GITHUB_WORKSPACE/key.keystore -Pandroid.injected.signing.store.password=${{ secrets.KEYSTORE_PASSWORD }} -Pandroid.injected.signing.key.alias=${{ secrets.KEY_ALIAS }} -Pandroid.injected.signing.key.password=${{ secrets.KEY_PASSWORD }} - + if: ${{ env.SKIP_BUILD != 'true' }} + run: | + if [ "${{ github.repository }}" == "rebelonion/Dantotsu" ]; then + ./gradlew assembleGoogleAlpha \ + -Pandroid.injected.signing.store.file=$GITHUB_WORKSPACE/key.keystore \ + -Pandroid.injected.signing.store.password=${{ secrets.KEYSTORE_PASSWORD }} \ + -Pandroid.injected.signing.key.alias=${{ secrets.KEY_ALIAS }} \ + -Pandroid.injected.signing.key.password=${{ secrets.KEY_PASSWORD }}; + else + ./gradlew assembleGoogleAlpha; + fi + - name: Upload a Build Artifact + if: ${{ env.SKIP_BUILD != 'true' }} uses: actions/upload-artifact@v4 with: name: Dantotsu @@ -94,7 +108,6 @@ jobs: path: "app/build/outputs/apk/google/alpha/app-google-alpha.apk" - name: Upload APK to Discord and Telegram - if: ${{ github.repository == 'rebelonion/Dantotsu' }} shell: bash run: | # Prepare Discord embed @@ -103,55 +116,96 @@ jobs: user_details=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ "https://api.github.com/users/$login") name=$(echo "$user_details" | jq -r '.name // .login') + login=$(echo "$user_details" | jq -r '.login') avatar_url=$(echo "$user_details" | jq -r '.avatar_url') echo "$name|$login|$avatar_url" } # Additional information for the goats declare -A additional_info - additional_info["ibo"]=" Discord: <@951737931159187457>\n AniList: [takarealist112]()\n" - additional_info["aayush262"]=" Discord: <@918825160654598224>\n AniList: [aayush262]()\n" - additional_info["rebelonion"]=" Discord: <@714249925248024617>\n AniList: [rebelonion]()\n PornHub: [rebelonion]()\n" - # Extract contributor names from commit log and make unique list - committers=$(echo "$COMMIT_LOG" | sed 's/%0A/\n/g' | grep -oP '(?<=~)[^%]*') - committers=$(echo "$committers" | sort | uniq) + additional_info["ibo"]="\n Discord: <@951737931159187457>\n AniList: [takarealist112]()" + additional_info["aayush262"]="\n Discord: <@918825160654598224>\n AniList: [aayush262]()" + additional_info["rebelonion"]="\n Discord: <@714249925248024617>\n AniList: [rebelonion]()\n PornHub: [rebelonion]()" + + # Count recent commits and create an associative array + declare -A recent_commit_counts + while read -r count name; do + recent_commit_counts["$name"]=$count + done < <(echo "$COMMIT_LOG" | sed 's/%0A/\n/g' | grep -oP '(?<=~)[^[]*' | sort | uniq -c | sort -rn) # Fetch contributors from GitHub contributors=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ - "https://api.github.com/repos/rebelonion/Dantotsu/contributors") + "https://api.github.com/repos/${{ github.repository }}/contributors") + + # Create a sorted list of contributors based on recent commit counts + sorted_contributors=$(for login in $(echo "$contributors" | jq -r '.[].login'); do + user_info=$(fetch_user_details "$login") + name=$(echo "$user_info" | cut -d'|' -f1) + count=${recent_commit_counts["$name"]:-0} + echo "$count|$login" + done | sort -rn | cut -d'|' -f2) + # Initialize needed variables developers="" committers_count=0 - thumbnail_url="https://i.imgur.com/5o3Y9Jb.gif" - # Process contributors and filter by committers - while read -r login commits; do + max_commits=0 + top_contributor="" + top_contributor_count=0 + top_contributor_avatar="" + + # Process contributors in the new order + while read -r login; do user_info=$(fetch_user_details "$login") name=$(echo "$user_info" | cut -d'|' -f1) login=$(echo "$user_info" | cut -d'|' -f2) avatar_url=$(echo "$user_info" | cut -d'|' -f3) - if echo "$committers" | grep -qw "$name"; then + + # Only process if they have recent commits + commit_count=${recent_commit_counts["$name"]:-0} + if [ $commit_count -gt 0 ]; then + # Update top contributor information + if [ $commit_count -gt $max_commits ]; then + max_commits=$commit_count + top_contributor="$login" + top_contributor_count=1 + top_contributor_avatar="$avatar_url" + elif [ $commit_count -eq $max_commits ]; then + top_contributor_count=$((top_contributor_count + 1)) + fi + + # Get commit count for this contributor on the dev branch + branch_commit_count=$(git rev-list --count dev --author="$login") + extra_info="${additional_info[$name]}" if [ -n "$extra_info" ]; then - extra_info=$(echo -e "$extra_info" | sed 's/^/- /') + extra_info=$(echo "$extra_info" | sed 's/\\n/\n- /g') fi - developers="${developers}◗ **${name}** - ${extra_info} Github: [${login}](https://github.com/${login}) - - Commits: ${commits} - " - committers_count=$((committers_count + 1)) - if [ $committers_count -eq 1 ]; then - thumbnail_url="$avatar_url" + + # Construct the developer entry + developer_entry="◗ **${name}** ${extra_info} + - Github: [${login}](https://github.com/${login}) + - Commits: ${branch_commit_count}" + + # Add the entry to developers, with a newline if it's not the first entry + if [ -n "$developers" ]; then + developers="${developers} + ${developer_entry}" else - thumbnail_url="https://i.imgur.com/5o3Y9Jb.gif" + developers="${developer_entry}" fi - fi - done < <(echo "$contributors" | jq -r '.[] | "\(.login) \(.contributions)"') - - - # Remove trailing newline - developers=$(echo "$developers" | sed '$ s/$//') - commit_messages=$(echo "$COMMIT_LOG" | sed 's/%0A/\n/g; s/^/\n/') + committers_count=$((committers_count + 1)) + fi + done <<< "$sorted_contributors" + + # Set the thumbnail URL based on top contributor(s) + if [ $top_contributor_count -eq 1 ]; then + thumbnail_url="$top_contributor_avatar" + else + thumbnail_url="https://i.imgur.com/5o3Y9Jb.gif" + fi + # Truncate field values max_length=1000 + commit_messages=$(echo "$COMMIT_LOG" | sed 's/%0A/\n/g; s/^/\n/') if [ ${#developers} -gt $max_length ]; then developers="${developers:0:$max_length}... (truncated)" fi @@ -195,22 +249,47 @@ jobs: ], "attachments": [] }') + # Send Discord message curl -H "Content-Type: application/json" \ -d "$discord_data" \ ${{ secrets.DISCORD_WEBHOOK }} + echo "You have only send an embed to discord due to SKIP_BUILD being set to true" # Upload APK to Discord - curl -F "payload_json=${contentbody}" \ - -F "dantotsu_debug=@app/build/outputs/apk/google/alpha/app-google-alpha.apk" \ - ${{ secrets.DISCORD_WEBHOOK }} + if [ "$SKIP_BUILD" != "true" ]; then + curl -F "payload_json=${contentbody}" \ + -F "dantotsu_debug=@app/build/outputs/apk/google/alpha/app-google-alpha.apk" \ + ${{ secrets.DISCORD_WEBHOOK }} + else + echo "Skipping APK upload to Discord due to SKIP_BUILD being set to true" + fi + + # Format commit messages for Telegram + telegram_commit_messages=$(echo "$COMMIT_LOG" | sed 's/%0A/\n/g' | while read -r line; do + message=$(echo "$line" | sed -E 's/● (.*) ~(.*) \[֍\]\((.*)\)/● \1 ~\2 ֍<\/a>/') + message=$(echo "$message" | sed -E 's/\[#([0-9]+)\]\((https:\/\/github\.com\/[^)]+)\)/#\1<\/a>/g') + echo "$message" + done) + telegram_commit_messages="
${telegram_commit_messages}
" + + # Upload APK to Telegram + if [ "$SKIP_BUILD" != "true" ]; then + APK_PATH="app/build/outputs/apk/google/alpha/app-google-alpha.apk" + response=$(curl -sS -f -X POST \ + "https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendDocument" \ + -F "chat_id=${{ secrets.TELEGRAM_CHANNEL_ID }}" \ + -F "document=@$APK_PATH" \ + -F "caption=New Alpha-Build dropped 🔥 + + Commits: + ${telegram_commit_messages} + version: ${VERSION}" \ + -F "parse_mode=HTML") + else + echo "Skipping Telegram message and APK upload due to SKIP_BUILD being set to true" + fi - # Send Telegram message and upload APK - curl -F "chat_id=${{ secrets.TELEGRAM_CHANNEL_ID }}" \ - -F "document=@app/build/outputs/apk/google/alpha/app-google-alpha.apk" \ - -F "caption=Alpha-Build: ${VERSION}: ${commit_messages}" \ - https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendDocument - env: COMMIT_LOG: ${{ env.COMMIT_LOG }} VERSION: ${{ env.VERSION }}