Get The Minecraft Overviewer Data #4930
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: Get The Minecraft Overviewer Data | |
| on: | |
| push: | |
| branches: | |
| - main | |
| workflow_dispatch: | |
| schedule: | |
| - cron: "* 6 * * *" | |
| permissions: | |
| contents: write | |
| jobs: | |
| update_data: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: "3.x" | |
| - name: Install Dependencies | |
| run: pip install requests | |
| - name: Fetch and Update Data | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| python - <<EOF | |
| import json | |
| import requests | |
| import os | |
| GITHUB_TOKEN = os.getenv("GITHUB_TOKEN") | |
| REPO = "GregoryAM-SP/The-Minecraft-Overviewer" | |
| HEADERS = {"Authorization": f"token {GITHUB_TOKEN}"} | |
| def fetch_repo_stats(): | |
| url = f"https://api.github.com/repos/{REPO}" | |
| response = requests.get(url, headers=HEADERS).json() | |
| return { | |
| "watchers": response.get("watchers_count", 0), | |
| "forks": response.get("forks_count", 0), | |
| "stars": response.get("stargazers_count", 0), | |
| } | |
| def fetch_release_data(): | |
| url = f"https://api.github.com/repos/{REPO}/releases" | |
| releases = requests.get(url, headers=HEADERS).json() | |
| tags = [] | |
| # Find the latest non-prerelease release | |
| latest_release_tag = None | |
| for release in releases: | |
| if not release.get("prerelease", False): | |
| latest_release_tag = release["tag_name"] | |
| break | |
| for release in releases: | |
| tag_name = release["tag_name"] | |
| assets = [] | |
| total_downloads = 0 | |
| for asset in release["assets"]: | |
| asset_data = { | |
| "name": asset["name"], | |
| "url": asset["browser_download_url"], | |
| "download_count": asset["download_count"] | |
| } | |
| assets.append(asset_data) | |
| total_downloads += asset["download_count"] | |
| assets.append({ | |
| "name": f"the-minecraft-overviewer-{tag_name}.zip", | |
| "url": f"https://github.com/gregoryam-sp/the-minecraft-overviewer/archive/refs/tags/{tag_name}.zip", | |
| "download_count": 0 | |
| }) | |
| assets.append({ | |
| "name": f"the-minecraft-overviewer-{tag_name}.tar.gz", | |
| "url": f"https://github.com/gregoryam-sp/the-minecraft-overviewer/archive/refs/tags/{tag_name}.tar.gz", | |
| "download_count": 0 | |
| }) | |
| is_latest = (tag_name == latest_release_tag) | |
| tags.append({ | |
| "tag": tag_name, | |
| "latest": is_latest, | |
| "prerelease": release.get("prerelease", False), | |
| "assets": assets, | |
| "totalDownloads": total_downloads | |
| }) | |
| return tags | |
| data = fetch_repo_stats() | |
| data["tags"] = fetch_release_data() | |
| with open("data.json", "w") as f: | |
| json.dump(data, f, indent=4) | |
| EOF | |
| - name: Commit and Push Changes | |
| run: | | |
| git config --global user.name "github-actions[bot]" | |
| git config --global user.email "github-actions[bot]@users.noreply.github.com" | |
| git add data.json | |
| git commit -m "Update repository data" || echo "No changes to commit" | |
| git push origin main | |
| continue-on-error: true | |
| check_api_usage: | |
| runs-on: ubuntu-latest | |
| needs: update_data | |
| steps: | |
| - name: Check GitHub API Rate Limit | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| python - <<EOF | |
| import requests | |
| import os | |
| from datetime import datetime, timezone | |
| GITHUB_TOKEN = os.getenv("GITHUB_TOKEN") | |
| HEADERS = {"Authorization": f"token {GITHUB_TOKEN}"} | |
| response = requests.get("https://api.github.com/rate_limit", headers=HEADERS).json() | |
| used = response["rate"]["limit"] - response["rate"]["remaining"] | |
| remaining = response["rate"]["remaining"] | |
| reset_time_epoch = response["rate"]["reset"] | |
| reset_time_utc = datetime.fromtimestamp(reset_time_epoch, tz=timezone.utc).strftime('%m/%d/%Y %I:%M:%S %p UTC') | |
| print(f"GitHub API Requests Used: {used}") | |
| print(f"GitHub API Requests Remaining: {remaining}") | |
| print(f"GitHub API Rate Limit Resets At: {reset_time_utc}") | |
| EOF |