Skip to content

Add sort to instance explorer (#1317) #468

Add sort to instance explorer (#1317)

Add sort to instance explorer (#1317) #468

Workflow file for this run

name: instances
on:
push:
branches:
- develop
workflow_dispatch:
jobs:
instances:
name: Instances
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Query Instances
run: |
# Query the list of instances
curl -H 'Content-Type: application/json' -X POST \
-d '{"query": "query {nodes(softwarename: \"lemmy\") {domain active_users_monthly}}"}' https://api.fediverse.observer 2> /dev/null | \
jq -r '.data.nodes | .[] | select(.active_users_monthly > 50) | .domain' > lemmy-instances.txt.tmp
# Combine the output with the existing instances.txt file.
sort lemmy-instances.txt lemmy-instances.txt.tmp | uniq -i > lemmy-instances.txt
# Delete the temp file
rm lemmy-instances.txt.tmp
# Convert the text file to a dart file
cat << EOF > lib/instances.dart
const List<String> instances = [
$(awk '{ print " \047"$0"\047," }' lemmy-instances.txt)
];
EOF
# Put the instances in the Android manifest file
manifestInstances="$(awk '{ print " <data android:host=\""$0"\" />" }' lemmy-instances.txt)"
inSection=false
while IFS= read -r line; do
if [[ $line == *"#AUTO_GEN_INSTANCE_LIST_DO_NOT_TOUCH#"* ]]; then
inSection=true
fi
if [[ $line == *"#INSTANCE_LIST_END#"* ]]; then
echo "$manifestInstances" >> android/app/src/main/AndroidManifest-new.xml
inSection=false
fi
if [[ $line == *"android:host"* ]]; then
if [ "$inSection" = true ]; then
continue
fi
fi
echo "$line" >> android/app/src/main/AndroidManifest-new.xml
done < android/app/src/main/AndroidManifest.xml
mv android/app/src/main/AndroidManifest-new.xml android/app/src/main/AndroidManifest.xml
# ---------- Safari Extension ----------
totalLines=$(wc -l < lemmy-instances.txt)
currentLine=0
safariManifestInstances=""
safariContentInstances=""
# Generate the Safari extension domains used in manifest.json and content.js
# It ignores the last comma in the list to generate proper json
while IFS= read -r instance; do
currentLine=$((currentLine + 1))
if [ "$currentLine" -eq 1 ]; then
# First line
safariManifestInstances=" \"*://$instance/*\""
safariContentInstances=" \"$instance\""
elif [ "$currentLine" -eq "$totalLines" ]; then
# Last line
safariManifestInstances="$safariManifestInstances,\n \"*://$instance/*\"\n"
safariContentInstances="$safariContentInstances,\n \"$instance\"\n"
else
safariManifestInstances="$safariManifestInstances,\n \"*://$instance/*\""
safariContentInstances="$safariContentInstances,\n \"$instance\""
fi
done < lemmy-instances.txt
# Generates the new manifest.json with the updated instances
inSection=false
while IFS= read -r line; do
if [[ $line == *"matches\": ["* ]]; then
inSection=true
fi
if [[ $line == " ]" ]]; then
printf "$safariManifestInstances" >> "ios/Open In Thunder/Resources/manifest-new.json"
inSection=false
fi
if [[ $line == *"*://"* ]]; then
if [ "$inSection" = true ]; then
continue
fi
fi
echo "$line" >> "ios/Open In Thunder/Resources/manifest-new.json"
done < "ios/Open In Thunder/Resources/manifest.json"
mv "ios/Open In Thunder/Resources/manifest-new.json" "ios/Open In Thunder/Resources/manifest.json"
# Generates the new content.js with the updated instances
inSection=false
while IFS= read -r line; do
if [[ $line == *"let instances = ["* ]]; then
inSection=true
fi
if [[ $line == "];" ]]; then
printf "$safariContentInstances" >> "ios/Open In Thunder/Resources/content-new.js"
inSection=false
fi
if [[ $line == *" \""* ]]; then
if [ "$inSection" = true ]; then
continue
fi
fi
echo "$line" >> "ios/Open In Thunder/Resources/content-new.js"
done < "ios/Open In Thunder/Resources/content.js"
mv "ios/Open In Thunder/Resources/content-new.js" "ios/Open In Thunder/Resources/content.js"
- name: Create Pull Request
uses: peter-evans/create-pull-request@v6.0.1
with:
commit-message: Update instances
title: Update instances
body: This PR is updating `lemmy-instances.txt`, `instances.dart`, `AndroidManifest.xml`, `manifest.json` and `content.js` with the latest list of instances retrieved from fediverse.observer.
branch: update-instances
delete-branch: true
author: GitHub <noreply@github.com>