chore: bump version for release #872
This file contains hidden or 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: 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 Lemmy 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' | sort | uniq -i > lemmy-instances.txt | |
| # Query the list of PieFed instances | |
| curl -H 'Content-Type: application/json' -X POST \ | |
| -d '{"query": "query {nodes(softwarename: \"piefed\") {domain active_users_monthly}}"}' https://api.fediverse.observer 2> /dev/null | \ | |
| jq -r '.data.nodes | .[] | select(.active_users_monthly > 50) | .domain' | sort | uniq -i > piefed-instances.txt | |
| # Combine both lemmy and piefed instances into a single sorted list for Android/Safari | |
| cat lemmy-instances.txt piefed-instances.txt | sort | uniq -i > instances.txt | |
| # Convert to a dart file with a map of domain -> platform | |
| cat << EOF > lib/instances.dart | |
| import 'package:thunder/src/core/enums/threadiverse_platform.dart'; | |
| const Map<String, ThreadiversePlatform> instances = { | |
| $(awk '{ print " \047"$0"\047: ThreadiversePlatform.lemmy," }' lemmy-instances.txt) | |
| $(awk '{ print " \047"$0"\047: ThreadiversePlatform.piefed," }' piefed-instances.txt) | |
| }; | |
| EOF | |
| # Put the instances in the Android manifest file | |
| manifestInstances="$(awk '{ print " <data android:host=\""$0"\" />" }' 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 < 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 < 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" | |
| # Clean up temporary txt files | |
| rm lemmy-instances.txt piefed-instances.txt instances.txt | |
| - 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 `instances.dart`, `AndroidManifest.xml`, `manifest.json` and `content.js` with the latest list of Lemmy and PieFed instances retrieved from fediverse.observer. | |
| branch: update-instances | |
| delete-branch: true | |
| author: GitHub <noreply@github.com> |