Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Save clone count badge in comment #6

Open
sekedus opened this issue Jun 28, 2024 · 0 comments
Open

Save clone count badge in comment #6

sekedus opened this issue Jun 28, 2024 · 0 comments

Comments

@sekedus
Copy link
Contributor

sekedus commented Jun 28, 2024

Just as an alternative, save clone count badge as a comment in gist:

name: GitHub Clone Count Update Everyday

on:
  schedule:
    # Runs at 12am UTC
    - cron: "0 0 * * *"
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      
      - name: gh login
        run: echo "${{ secrets.SECRET_TOKEN }}" | gh auth login --with-token

      - name: parse latest clone count
        run: |
          curl --user "${{ github.actor }}:${{ secrets.SECRET_TOKEN }}" \
            -H "Accept: application/vnd.github.v3+json" \
            https://api.github.com/repos/${{ github.repository }}/traffic/clones \
            > clone.json

      - name: create gist and download previous count
        id: set_id
        run: |
          if gh secret list | grep -q "GIST_ID"
          then
              echo "GIST_ID found"
              echo "GIST=${{ secrets.GIST_ID }}" >> $GITHUB_OUTPUT
              curl https://gist.githubusercontent.com/${{ github.actor }}/${{ secrets.GIST_ID }}/raw/clone.json > clone_before.json
              if cat clone_before.json | grep '404: Not Found'; then
                echo "GIST_ID not valid anymore. Creating another gist..."
                gist_id=$(gh gist create clone.json | awk -F / '{print $NF}')
                echo $gist_id | gh secret set GIST_ID
                echo "GIST=$gist_id" >> $GITHUB_OUTPUT
                cp clone.json clone_before.json
              fi
          else
              echo "GIST_ID not found. Creating a gist..."
              gist_id=$(gh gist create clone.json | awk -F / '{print $NF}')
              echo $gist_id | gh secret set GIST_ID
              echo "GIST=$gist_id" >> $GITHUB_OUTPUT
              cp clone.json clone_before.json
          fi

          if gh secret list | grep -q "GIST_COMMENT_ID"
          then
              echo "GIST_COMMENT_ID found"
              echo "COMMENT=${{ secrets.GIST_COMMENT_ID }}" >> $GITHUB_OUTPUT
              curl --user "${{ github.actor }}:${{ secrets.SECRET_TOKEN }}" \
              -H "Accept: application/vnd.github.v3+json" \
              https://api.github.com/gists/${{ secrets.GIST_ID }}/comments/${{ secrets.GIST_COMMENT_ID }} \
              > comment.json
              if cat comment.json | grep 'Not Found'; then
                echo "GIST_COMMENT_ID not found."
                echo "COMMENT=not_found" >> $GITHUB_OUTPUT
              fi
          else
              echo "GIST_COMMENT_ID not found."
              echo "COMMENT=not_found" >> $GITHUB_OUTPUT
          fi

      - name: update clone.json
        run: |
          curl https://raw.githubusercontent.com/MShawon/github-clone-count-badge/master/main.py > main.py
          python3 main.py

      - name: Update gist with latest count
        run: |
          if ! diff -q "clone.json" "clone_before.json" >/dev/null
          then
            content=$(sed -e 's/\\/\\\\/g' -e 's/\t/\\t/g' -e 's/\"/\\"/g' -e 's/\r//g' "clone.json" | sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g')
            echo '{"description": "Clone statistics: ${{ github.repository }}", "files": {"clone.json": {"content": "'"$content"'"}}}' > post_clone.json
            curl -s -X PATCH \
              --user "${{ github.actor }}:${{ secrets.SECRET_TOKEN }}" \
              -H "Content-Type: application/json" \
              -d @post_clone.json https://api.github.com/gists/${{ steps.set_id.outputs.GIST }} > /dev/null 2>&1
            fi

      - name: Add badge comments
        run: |
          if [ "${{ steps.set_id.outputs.COMMENT }}" == "not_found" ]; then
            shields="https://img.shields.io/badge/dynamic/json?color=success&label=Clone&query=count&url="
            url="https://gist.githubusercontent.com/${{ github.actor }}/${{ steps.set_id.outputs.GIST }}/raw/clone.json"
            repo="https://github.com/MShawon/github-clone-count-badge"
            echo ''> BADGE.md
            echo '
            **Markdown**

            ```markdown' >> BADGE.md
            echo "[![GitHub Clones]($shields$url&logo=github)]($repo)" >> BADGE.md
            echo '
            ```

            **HTML**
            ```html' >> BADGE.md
            echo "<a href='$repo'><img alt='GitHub Clones' src='$shields$url&logo=github'></a>" >> BADGE.md
            echo '```' >> BADGE.md

            body=$(sed -e 's/\\/\\\\/g' -e 's/\t/\\t/g' -e 's/\"/\\"/g' -e 's/\r//g' "BADGE.md" | sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g')
            echo '{"body": "'"$body"'"}' > post_comment.json
            comment_id=$(curl -s -X POST \
            --user "${{ github.actor }}:${{ secrets.SECRET_TOKEN }}" \
            -H "Content-Type: application/json" \
            -d @post_comment.json https://api.github.com/gists/${{ steps.set_id.outputs.GIST }}/comments \
            | jq '.id')
            echo $comment_id | gh secret set GIST_COMMENT_ID
          fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant