Refresh forks list #301
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: Refresh forks list | |
| on: | |
| schedule: | |
| - cron: '0 */6 * * *' # Run every 6 hours | |
| workflow_dispatch: | |
| jobs: | |
| refresh-forks: | |
| if: github.repository_owner == 'LongQT-sea' # Be mindful of free public resources | |
| runs-on: ubuntu-slim | |
| permissions: | |
| contents: write # needed to create releases | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| - name: Fetch fork data | |
| id: fetch_forks | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| run: | | |
| PAST_15_DAYS=$(date -u -d '15 days ago' +%Y-%m-%dT%H:%M:%SZ) | |
| curl --silent --show-error --fail \ | |
| --retry 5 --retry-delay 2 --retry-max-time 60 --retry-connrefused \ | |
| --connect-timeout 10 --max-time 30 \ | |
| -H "Accept: application/vnd.github+json" \ | |
| -H "X-GitHub-Api-Version: 2022-11-28" \ | |
| "https://api.github.com/repos/${{ github.repository }}/forks?sort=newest&per_page=100" \ | |
| > forks.json | |
| jq --arg date "$PAST_15_DAYS" \ | |
| '[.[] | select(.created_at > $date) | { | |
| owner: .owner.login, | |
| name: .name, | |
| html_url: .html_url, | |
| created_at: .created_at | |
| }]' forks.json > recent_forks.json | |
| # Iterate through each fork to get the latest successful run | |
| echo "[" > runs_data.json | |
| FIRST=true | |
| while IFS= read -r fork; do | |
| OWNER=$(echo "$fork" | jq -r '.owner') | |
| REPO=$(echo "$fork" | jq -r '.name') | |
| CREATED=$(echo "$fork" | jq -r '.created_at') | |
| RUN_INFO=$(curl --silent --show-error --fail \ | |
| --retry 5 --retry-delay 2 --retry-max-time 60 --retry-connrefused \ | |
| --connect-timeout 10 --max-time 30 \ | |
| -H "Authorization: Bearer $GH_TOKEN" \ | |
| -H "Accept: application/vnd.github+json" \ | |
| -H "X-GitHub-Api-Version: 2022-11-28" \ | |
| "https://api.github.com/repos/$OWNER/$REPO/actions/runs?per_page=1&status=success") | |
| RUN_ID=$(echo "$RUN_INFO" | jq -r '.workflow_runs[0].id // ""') | |
| RUN_URL=$(echo "$RUN_INFO" | jq -r '.workflow_runs[0].html_url // "#"') | |
| RUN_DATE=$(echo "$RUN_INFO" | jq -r '.workflow_runs[0].run_started_at // "" | if . != "" then .[:10] else "" end') | |
| ARTIFACT_NAME="N/A" | |
| if [ -n "$RUN_ID" ] && [ "$RUN_ID" != "null" ]; then | |
| ARTIFACT_NAME=$(curl --silent --show-error \ | |
| --retry 5 --retry-delay 2 --retry-max-time 60 --retry-connrefused \ | |
| --connect-timeout 10 --max-time 30 \ | |
| -H "Authorization: Bearer $GH_TOKEN" \ | |
| -H "Accept: application/vnd.github+json" \ | |
| -H "X-GitHub-Api-Version: 2022-11-28" \ | |
| "https://api.github.com/repos/$OWNER/$REPO/actions/runs/$RUN_ID/artifacts" \ | |
| | jq -r '.artifacts[0].name // "N/A"') | |
| fi | |
| if [ "$FIRST" = false ]; then echo "," >> runs_data.json; fi | |
| jq -n \ | |
| --arg owner "$OWNER" \ | |
| --arg repo "$REPO" \ | |
| --arg created "$CREATED" \ | |
| --arg artifact_name "$ARTIFACT_NAME" \ | |
| --arg run_url "$RUN_URL" \ | |
| --arg run_date "$RUN_DATE" \ | |
| '{owner: $owner, name: $repo, created_at: $created, artifact_name: $artifact_name, run_url: $run_url, run_date: $run_date}' \ | |
| >> runs_data.json | |
| FIRST=false | |
| done < <(jq -c '.[]' recent_forks.json) | |
| echo "]" >> runs_data.json | |
| - name: Generate Forks content | |
| run: | | |
| CURRENT_TIME=$(date -u +"%Y-%m-%d %H:%M UTC") | |
| cat > release_notes.md << 'EOF' | |
| ## How to Use This List | |
| 1. Sign in to GitHub https://github.com/login | |
| 2. Browse macOS ISO/DMG links in the list below | |
| 3. Scroll down to **Artifacts** section to download | |
| > ISO for virtual machines, DMG for bootable USB drives | |
| <details> | |
| <summary>❌ DO NOT EXPAND — contains mass unmarketable truths</summary> | |
| <details> | |
| <summary>❌ FINAL WARNING — you will not recover from this</summary> | |
| <br> | |
| Too late. You're one of us now.<br> | |
| You just ran mass forbidden fruit extraction protocol on Apple's own CDN. | |
| **Damage report:** | |
| - ✅ Legitimate macOS installer: acquired | |
| - ✅ Sketchy torrent sites: avoided | |
| - ✅ 3+ hours of troubleshooting: skipped | |
| - ✅ Your sanity: intact (for now) | |
| The one thing that could make this mass worse? | |
| If you [⭐ starred this repo](https://github.com/LongQT-sea/macos-iso-builder) and mass spread it around. | |
|  | |
| Please don't. Apple is already mass upset. | |
| *(do it)* | |
| </details> | |
| </details> | |
| --- | |
| ## Recently Active Forks | |
| | Recent Fork | Latest Build | Build Date | Fork Created | | |
| |-------------|--------------|------------|--------------| | |
| EOF | |
| jq -r '.[] | select(.artifact_name != "N/A") | "| [\(.owner)/\(.name)](https://github.com/\(.owner)/\(.name)/actions) | [\(.artifact_name)](\(.run_url)) | \(.run_date) | \(.created_at[:10]) |"' runs_data.json >> release_notes.md | |
| cat >> release_notes.md << EOF | |
| --- | |
| * **Last updated:** ${CURRENT_TIME} | |
| * **Auto-updates:** This list refreshes every 6 hours | |
| --- | |
| ### Can't Find What You Need? | |
| If none of the recent forks have the macOS version you need: | |
| 1. [Fork this repository](../../fork) | |
| 2. Follow the [Usage guide](../../#how-to-use) to build your own image | |
| 3. Your fork will appear here for others to benefit from! | |
| EOF | |
| - name: Update release notes | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| run: | | |
| DATE_TAG=$(date -u +"%Y%m%d") | |
| RELEASE_NAME="forks-list-${DATE_TAG}" | |
| if gh release view "$RELEASE_NAME"; then | |
| gh release delete "$RELEASE_NAME" -y --cleanup-tag | |
| sleep 5 | |
| fi | |
| gh release create "$RELEASE_NAME" \ | |
| --title "Recent Forks List (${DATE_TAG})" \ | |
| --notes-file release_notes.md |