179 lines
7.9 KiB
YAML
179 lines
7.9 KiB
YAML
name: Model Resolver Top Downloads Badge
|
|
|
|
on:
|
|
schedule:
|
|
- cron: "0 0,8,16 * * *"
|
|
workflow_dispatch:
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
|
|
- name: gh login
|
|
run: echo "${{ secrets.SECRET_TOKEN }}" | gh auth login --with-token
|
|
|
|
- name: Query Model Resolver API and find top download
|
|
run: |
|
|
max_downloads=0
|
|
top_node_json="{}"
|
|
node_id="comfyui-model-resolver"
|
|
|
|
for i in {1..3}; do
|
|
echo "Fetching data for attempt $i..."
|
|
curl -s "https://api.comfy.org/nodes/${node_id}" > tmp_$i.json
|
|
|
|
if [ ! -s tmp_$i.json ] || ! jq empty tmp_$i.json 2>/dev/null; then
|
|
echo "Error: invalid JSON for attempt $i"
|
|
continue
|
|
fi
|
|
|
|
if jq -e 'type == "array"' tmp_$i.json >/dev/null; then
|
|
node_count=$(jq 'length' tmp_$i.json)
|
|
echo "Found $node_count nodes in attempt $i"
|
|
|
|
for j in $(seq 0 $((node_count - 1))); do
|
|
downloads=$(jq -r ".[$j].downloads // 0" tmp_$i.json)
|
|
name=$(jq -r ".[$j].name // \"\"" tmp_$i.json)
|
|
|
|
if [ "$downloads" -gt "$max_downloads" ]; then
|
|
max_downloads=$downloads
|
|
top_node_json=$(jq ".[$j]" tmp_$i.json)
|
|
echo "New maximum found: $downloads (node: $name)"
|
|
fi
|
|
done
|
|
else
|
|
downloads=$(jq -r '.downloads // 0' tmp_$i.json)
|
|
name=$(jq -r '.name // ""' tmp_$i.json)
|
|
|
|
if [ "$downloads" -gt "$max_downloads" ]; then
|
|
max_downloads=$downloads
|
|
top_node_json=$(cat tmp_$i.json)
|
|
echo "New maximum found: $downloads (node: $name)"
|
|
fi
|
|
fi
|
|
|
|
rm -f tmp_$i.json
|
|
done
|
|
|
|
if [ "$max_downloads" -gt 0 ]; then
|
|
echo "$top_node_json" > top_modelresolver.json
|
|
echo "Highest download count: $max_downloads"
|
|
echo "Node details:"
|
|
jq . top_modelresolver.json
|
|
else
|
|
echo "Error: no valid data found"
|
|
echo '{"name": "ComfyUI Model Resolver", "downloads": 0}' > top_modelresolver.json
|
|
fi
|
|
|
|
- name: create or update gist with top download
|
|
id: set_id
|
|
run: |
|
|
BADGE_DOC="badges/DOWNLOADS.md"
|
|
|
|
if gh secret list | grep -q "MODELRESOLVER_GIST_ID"
|
|
then
|
|
echo "GIST_ID found"
|
|
echo "GIST=${{ secrets.MODELRESOLVER_GIST_ID }}" >> $GITHUB_OUTPUT
|
|
|
|
if gh gist view ${{ secrets.MODELRESOLVER_GIST_ID }} &>/dev/null; then
|
|
echo "Gist exists and will be updated"
|
|
else
|
|
echo "Gist does not exist, creating a new one"
|
|
gist_id=$(gh gist create top_modelresolver.json | awk -F / '{print $NF}')
|
|
echo $gist_id | gh secret set MODELRESOLVER_GIST_ID
|
|
echo "GIST=$gist_id" >> $GITHUB_OUTPUT
|
|
git rm --ignore-unmatch "$BADGE_DOC" MODELRESOLVER.md
|
|
fi
|
|
else
|
|
echo "Creating a new gist"
|
|
gist_id=$(gh gist create top_modelresolver.json | awk -F / '{print $NF}')
|
|
echo $gist_id | gh secret set MODELRESOLVER_GIST_ID
|
|
echo "GIST=$gist_id" >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
- name: create badge if needed
|
|
run: |
|
|
COUNT=$(jq '.downloads' top_modelresolver.json)
|
|
NAME=$(jq -r '.name' top_modelresolver.json)
|
|
BADGE_DOC="badges/DOWNLOADS.md"
|
|
|
|
if [ ! -f "$BADGE_DOC" ] || ! grep -q "Combined HTML (for-the-badge)" "$BADGE_DOC"; then
|
|
mkdir -p badges
|
|
shields="https://img.shields.io/badge/dynamic/json?color=informational&label=TopModelResolver&query=downloads&url="
|
|
shields_for_the_badge="https://img.shields.io/badge/dynamic/json?color=2F80ED&label=TopModelResolver&query=downloads&url="
|
|
comfy_badge="https://img.shields.io/badge/ComfyUI-1a1a1a?style=for-the-badge&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAMAAABF0y+mAAAASFBMVEVHcEwYLtsYLtkXLtkXLdkYLtkWLdcFIdoAD95uerfI1XLR3mq3xIP8/yj0/zvw/0FSYMP5/zKMmKQtPNOuuozj8FOhrZW7x4FMWFFbAAAABnRSTlMAUrPX87KxijklAAAA00lEQVR4AX3SBw6DMAxA0UzbrIzO+9+02GkEpoWP9hPZZs06Hw75aI3k4W/+wkQtnGZNhF1I34BzalQcxkmasY0b9raklNcvLYU1GNiiOeVWauOa/XS526gRyzpV/7HeUOG9Jp6vcsvUrCPeKg/3KBKBQhoTD1dQggPWzPVfFOIgo85/kR4y6oB/8SlIEh7wvmTuKd3wgLVW1sTfRBoR7oWVqy/U2NcrWDYMINE7NUuJuoV+2fhaWmnbjzcOWnRv7XbiLh/Y9dNUqk2y0QcNwTu7wgf+/BhsPUhf4QAAAABJRU5ErkJggg=="
|
|
combined_downloads="https://img.shields.io/badge/dynamic/json?color=%230D2A4A&label=&query=downloads&url="
|
|
url="https://gist.githubusercontent.com/${{ github.actor }}/${{ steps.set_id.outputs.GIST }}/raw/top_modelresolver.json"
|
|
repo="https://registry.comfy.org/publishers/azornes/nodes/comfyui-model-resolver"
|
|
echo ''> "$BADGE_DOC"
|
|
echo '
|
|
**Markdown**
|
|
|
|
```markdown' >> "$BADGE_DOC"
|
|
echo "[]($repo)" >> "$BADGE_DOC"
|
|
echo '
|
|
```' >> "$BADGE_DOC"
|
|
echo "[]($repo)" >> "$BADGE_DOC"
|
|
echo '
|
|
|
|
**HTML**
|
|
```html' >> "$BADGE_DOC"
|
|
echo "<a href='$repo'><img alt='Top Model Resolver Node' src='$shields$url'></a>" >> "$BADGE_DOC"
|
|
echo '
|
|
```' >> "$BADGE_DOC"
|
|
echo "<a href='$repo'><img alt='Top Model Resolver Node' src='$shields$url'></a>" >> "$BADGE_DOC"
|
|
echo '
|
|
|
|
**HTML (for-the-badge)**
|
|
```html' >> "$BADGE_DOC"
|
|
echo "<a href='$repo'><img alt='Top Model Resolver Node' src='$shields_for_the_badge$url&style=for-the-badge'></a>" >> "$BADGE_DOC"
|
|
echo '```' >> "$BADGE_DOC"
|
|
echo "<a href='$repo'><img alt='Top Model Resolver Node' src='$shields_for_the_badge$url&style=for-the-badge'></a>" >> "$BADGE_DOC"
|
|
echo '
|
|
|
|
**Combined Markdown (for-the-badge)**
|
|
```markdown' >> "$BADGE_DOC"
|
|
echo "[]($repo)" >> "$BADGE_DOC"
|
|
echo '
|
|
```' >> "$BADGE_DOC"
|
|
echo "[]($repo)" >> "$BADGE_DOC"
|
|
echo '
|
|
|
|
**Combined HTML (for-the-badge)**
|
|
```html' >> "$BADGE_DOC"
|
|
echo "<a href='$repo'><img alt='ComfyUI' src='$comfy_badge'><img alt='Downloads' src='$combined_downloads$url&style=for-the-badge'></a>" >> "$BADGE_DOC"
|
|
echo '```' >> "$BADGE_DOC"
|
|
echo "<a href='$repo'><img alt='ComfyUI' src='$comfy_badge'><img alt='Downloads' src='$combined_downloads$url&style=for-the-badge'></a>" >> "$BADGE_DOC"
|
|
|
|
git add "$BADGE_DOC"
|
|
git config --global user.name "GitHub Action"
|
|
git config --global user.email "action@github.com"
|
|
git commit -m "Create or update Model Resolver downloads badge"
|
|
fi
|
|
|
|
- name: Update Gist
|
|
run: |
|
|
if jq empty top_modelresolver.json 2>/dev/null; then
|
|
content=$(jq -c . top_modelresolver.json)
|
|
echo "{\"description\": \"Top Model Resolver Node\", \"files\": {\"top_modelresolver.json\": {\"content\": $(jq -Rs . <<< "$content")}}}" > patch.json
|
|
|
|
curl -s -X PATCH \
|
|
--user "${{ github.actor }}:${{ secrets.SECRET_TOKEN }}" \
|
|
-H "Content-Type: application/json" \
|
|
-d @patch.json https://api.github.com/gists/${{ steps.set_id.outputs.GIST }}
|
|
else
|
|
echo "Error: invalid JSON in top_modelresolver.json"
|
|
exit 1
|
|
fi
|
|
|
|
- name: Push
|
|
uses: ad-m/github-push-action@master
|
|
with:
|
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|