name: Build APK and Notify Discord on: push: branches: - dev paths-ignore: - '**/README.md' jobs: build: runs-on: ubuntu-latest env: CI: true steps: - name: Checkout repo uses: actions/checkout@v4 with: fetch-depth: 0 - name: Download last SHA artifact uses: dawidd6/action-download-artifact@v3 with: workflow: beta.yml name: last-sha path: . continue-on-error: true - name: Get Commits Since Last Run run: | if [ -f last_sha.txt ]; then LAST_SHA=$(cat last_sha.txt) else # Fallback to first commit if no previous SHA available LAST_SHA=$(git rev-list --max-parents=0 HEAD) fi echo "Commits since $LAST_SHA:" # Accumulate commit logs in a shell variable COMMIT_LOGS=$(git log $LAST_SHA..HEAD --pretty=format:"● %s ~%an") # 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 COMMIT_LOGS="${COMMIT_LOGS//'%'/'%25'}" COMMIT_LOGS="${COMMIT_LOGS//$'\n'/'%0A'}" COMMIT_LOGS="${COMMIT_LOGS//$'\r'/'%0D'}" # Append the encoded commit logs to the COMMIT_LOG environment variable echo "COMMIT_LOG=${COMMIT_LOGS}" >> $GITHUB_ENV # Debugging: Print the variable to check its content echo "$COMMIT_LOGS" echo "$COMMIT_LOGS" > commit_log.txt shell: /usr/bin/bash -e {0} env: CI: true continue-on-error: true - name: Save Current SHA for Next Run run: echo ${{ github.sha }} > last_sha.txt - name: Set variables run: | VER=$(grep -E -o "versionName \".*\"" app/build.gradle | sed -e 's/versionName //g' | tr -d '"') SHA=${{ github.sha }} VERSION="$VER+${SHA:0:7}" echo "Version $VERSION" echo "VERSION=$VERSION" >> $GITHUB_ENV - name: Setup JDK 17 uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: 17 cache: gradle - name: Decode Keystore File run: echo "${{ secrets.KEYSTORE_FILE }}" | base64 -d > $GITHUB_WORKSPACE/key.keystore - name: List files in the directory run: ls -l - name: Make gradlew executable 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 }} - name: Upload a Build Artifact uses: actions/upload-artifact@v4 with: name: Dantotsu retention-days: 5 compression-level: 9 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 fetch_user_details() { local login=$1 user_details=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ "https://api.github.com/users/$login") name=$(echo "$user_details" | jq -r '.name // .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]()" additional_info["aayush262"]=" Discord: <@918825160654598224>\n AniList: [aayush262]()" additional_info["rebelonion"]=" Discord: <@714249925248024617>\n AniList: [rebelonion]()\n PornHub: [rebelonion]()" # 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) # Fetch contributors from GitHub contributors=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ "https://api.github.com/repos/rebelonion/Dantotsu/contributors") # 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 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 extra_info="${additional_info[$name]}" if [ -n "$extra_info" ]; then extra_info=$(echo -e "$extra_info" | sed 's/^/- /') 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" else thumbnail_url="https://i.imgur.com/5o3Y9Jb.gif" 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/') # Truncate field values max_length=1000 if [ ${#developers} -gt $max_length ]; then developers="${developers:0:$max_length}... (truncated)" fi if [ ${#commit_messages} -gt $max_length ]; then commit_messages="${commit_messages:0:$max_length}... (truncated)" fi # Construct Discord payload discord_data=$(jq -nc \ --arg field_value "$commit_messages" \ --arg author_value "$developers" \ --arg footer_text "Version $VERSION" \ --arg timestamp "$(date -u +%Y-%m-%dT%H:%M:%S.000Z)" \ --arg thumbnail_url "$thumbnail_url" \ '{ "content": "@&1225347048321191996", "embeds": [ { "title": "New Alpha-Build dropped", "color": 15532323, "fields": [ { "name": "Commits:", "value": $field_value, "inline": true }, { "name": "Developers:", "value": $author_value, "inline": false } ], "footer": { "text": $footer_text }, "timestamp": $timestamp, "thumbnail": { "url": $thumbnail_url } } ], "attachments": [] }') # Send Discord message curl -H "Content-Type: application/json" \ -d "$discord_data" \ ${{ secrets.DISCORD_WEBHOOK }} # 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 }} # 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 }} - name: Upload Current SHA as Artifact uses: actions/upload-artifact@v4 with: name: last-sha path: last_sha.txt - name: Upload Commit log as Artifact uses: actions/upload-artifact@v4 with: name: commit-log path: commit_log.txt