feat(discord): send embeds through webhook for pretesters #612
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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](<https://anilist.co/user/takarealist112/>)" | |
additional_info["aayush262"]=" Discord: <@918825160654598224>\n AniList: [aayush262](<https://anilist.co/user/aayush262/>)" | |
additional_info["rebelonion"]=" Discord: <@714249925248024617>\n AniList: [rebelonion](<https://anilist.co/user/rebelonion/>)\n PornHub: [rebelonion](<https://www.cornhub.com/model/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": "@here", | |
"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 |