diff --git a/.github/workflows/dl-stats.yml b/.github/workflows/dl-stats.yml new file mode 100644 index 000000000..518a85360 --- /dev/null +++ b/.github/workflows/dl-stats.yml @@ -0,0 +1,64 @@ +name: Report Download Stats + +on: + schedule: + - cron: '0/15 * * * *' # run every 15 min + +jobs: + report-download-stats: + runs-on: ubuntu-latest + steps: + - name: Get download count of latest releases + id: get-stats + uses: actions/github-script@v6 + with: + script: | + const query = `query($owner:String!, $name:String!) { + repository(owner:$owner, name:$name){ + releases(first: 10, orderBy: {field: CREATED_AT, direction: DESC}) { + nodes { + isPrerelease + tagName + releaseAssets(first: 20) { + nodes { + name + downloadCount + } + } + } + } + } + }`; + const variables = { + owner: context.repo.owner, + name: context.repo.repo + } + return await github.graphql(query, variables) + - name: Transform Results + id: transform-stats + run: | + TIME=$(date +%s) + echo ${JSON_DATA} | jq --arg TIME "$TIME" -c '.repository.releases.nodes[] | select(.isPrerelease == false) | .tagName as $tagName | .releaseAssets.nodes[] | {filename: .name, downloads: .downloadCount, release: $tagName, time: ($TIME|tonumber)}' > input.json + + jq -c 'select(.filename|endswith("-x86_64.AppImage")) | {name: "github.releases.downloads", tags: ["file=AppImage", "version=\(.release)", "arch=amd64"], value: .downloads, interval: 86400, time: .time}' input.json >> output.json + jq -c 'select(.filename|endswith("_amd64.deb")) | {name: "github.releases.downloads", tags: ["file=deb", "version=\(.release)", "arch=amd64"], value: .downloads, interval: 86400, time: .time}' input.json >> output.json + jq -c 'select(.filename|endswith("-x64.msi")) | {name: "github.releases.downloads", tags: ["file=msi", "version=\(.release)", "arch=amd64"], value: .downloads, interval: 86400, time: .time}' input.json >> output.json + jq -c 'select(.filename|endswith("-x64.exe")) | {name: "github.releases.downloads", tags: ["file=exe", "version=\(.release)", "arch=amd64"], value: .downloads, interval: 86400, time: .time}' input.json >> output.json + jq -c 'select(.filename|endswith("-arm64.dmg")) | {name: "github.releases.downloads", tags: ["file=dmg", "version=\(.release)", "arch=arm64"], value: .downloads, interval: 86400, time: .time}' input.json >> output.json + jq -c 'select(.filename|endswith(".dmg")) | select(.filename|endswith("-arm64.dmg")|not) | {name: "github.releases.downloads", tags: ["file=dmg", "version=\(.release)", "arch=arm64"], value: .downloads, interval: 86400, time: .time}' input.json >> output.json + jq -c 'select(.filename|endswith("-x86_64.AppImage")) | {name: "github.releases.downloads", tags: ["file=AppImage", "version=\(.release)", "arch=amd64"], value: .downloads, interval: 86400, time: .time}' input.json >> output.json + + RESULT=$(jq -s -c "." output.json) + echo "::set-output name=result::${RESULT}" + env: + JSON_DATA: ${{ steps.get-stats.outputs.result }} + - name: Upload Results + id: upload-stats + run: | + echo ${STATS} | curl -X POST -H "Authorization: Bearer ${BEARER_TOKEN}" -H "Content-Type: application/json" "https://graphite-us-central1.grafana.net/metrics" --data-binary @- + env: + BEARER_TOKEN : ${{ secrets.GRAFANA_GRAPHITE_TOKEN }} + STATS: ${{ steps.transform-stats.outputs.result }} + + +