Skip to content

Validate Latest Release URLs #77

Validate Latest Release URLs

Validate Latest Release URLs #77

Workflow file for this run

name: Validate Latest Release URLs
on:
workflow_dispatch: # Allows manual triggering
jobs:
check-badges:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
fetch-depth: 0 # Ensures full branch history
- name: Fetch badges.json from gh-pages
run: |
git fetch --all
git checkout --track origin/gh-pages || git checkout gh-pages
cp badges.json ../badges.json # Move file to main working directory
- name: Install jq
run: sudo apt-get install jq
- name: Check Latest Release URLs
run: |
BADGES_FILE="../badges.json"
OUTDATED_PLUGINS=0
echo "🔍 Checking latest releases for themes and plugins..."
# Process themes and plugins separately
for SECTION in "themes" "plugins"; do
cat $BADGES_FILE | jq -c --arg section "$SECTION" '.[$section][]' | while read entry; do
NAME=$(echo $entry | jq -r '.name')
REPO_URL=$(echo $entry | jq -r '.url')
LATEST_STORED=$(echo $entry | jq -r '.latestReleaseUrl')
OWNER=$(echo $REPO_URL | awk -F '/' '{print $(NF-1)}')
REPO=$(echo $REPO_URL | awk -F '/' '{print $NF}')
API_URL="https://api.github.com/repos/$OWNER/$REPO/releases/latest"
echo "Checking: $OWNER/$REPO"
# Fetch latest release info
RESPONSE=$(curl -s -H "Accept: application/vnd.github.v3+json" $API_URL)
# Get latest release tag
RELEASE_TAG=$(echo $RESPONSE | jq -r '.tag_name')
# Get the first downloadable asset URL (if exists)
LATEST_RELEASE=$(echo $RESPONSE | jq -r '.assets[0].browser_download_url')
# Fallback: Use the release page if no direct download is available
if [[ "$LATEST_RELEASE" == "null" || -z "$LATEST_RELEASE" ]]; then
if [[ "$RELEASE_TAG" != "null" && -n "$RELEASE_TAG" ]]; then
LATEST_RELEASE="https://github.com/$OWNER/$REPO/releases/tag/$RELEASE_TAG"
else
echo "::warning file=badges.json,title=No Releases Found::$OWNER/$REPO has no releases."
continue
fi
fi
if [[ "$LATEST_STORED" != "$LATEST_RELEASE" ]]; then
echo "::error file=badges.json,title=Outdated Release::$OWNER/$REPO"
echo "::error file=badges.json,title=Stored URL::$LATEST_STORED"
echo "::error file=badges.json,title=Latest URL::$LATEST_RELEASE"
echo "-----------------------------------"
OUTDATED_PLUGINS=1
fi
done
done
if [[ $OUTDATED_PLUGINS -eq 1 ]]; then
echo "::error:: Some plugins/themes have outdated release URLs! Check annotations for details."
exit 1
fi