|
@@ -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 }}
|
|
|
+
|
|
|
+
|
|
|
+
|