Skip to content

Leaderboard Scheduler #1

Leaderboard Scheduler

Leaderboard Scheduler #1

name: Leaderboard Scheduler
on:
schedule:
- cron: "0 17 * * *"
workflow_dispatch:
permissions:
contents: read
concurrency:
group: leaderboard-scheduler
cancel-in-progress: false
jobs:
calculate-next-country:
name: Calculate next country leaderboard
runs-on: ubuntu-latest
timeout-minutes: 30
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN_DEVIMPACT }}
DATABASE_URL: ${{ secrets.DATABASE_URL }}
LEADERBOARD_SOURCE_URL_TEMPLATE: ${{ vars.LEADERBOARD_SOURCE_URL_TEMPLATE || 'https://raw.githubusercontent.com/ashkulz/committers.top/gh-pages/_data/locations/{country}.yml' }}
GITHUB_REPO_COUNT: ${{ vars.GITHUB_REPO_COUNT || '50' }}
GITHUB_PR_COUNT: ${{ vars.GITHUB_PR_COUNT || '300' }}
GITHUB_ISSUE_COUNT: ${{ vars.GITHUB_ISSUE_COUNT || '100' }}
GITHUB_DISCUSSION_COUNT: ${{ vars.GITHUB_DISCUSSION_COUNT || '50' }}
REDIS_URL: ${{ secrets.REDIS_URL }}
REDIS_ENABLED: ${{ vars.REDIS_ENABLED || 'false' }}
REDIS_PASSWORD: ${{ secrets.REDIS_PASSWORD }}
REDIS_CACHE_NAMESPACE: ${{ vars.REDIS_CACHE_NAMESPACE || 'devimpact:v1' }}
REDIS_CACHE_TTL_SECONDS: ${{ vars.REDIS_CACHE_TTL_SECONDS || '604800' }}
REDIS_CONNECT_TIMEOUT_MS: ${{ vars.REDIS_CONNECT_TIMEOUT_MS || '1500' }}
LEADERBOARD_SEED_LIMIT: ${{ vars.LEADERBOARD_SEED_LIMIT || '256' }}
LEADERBOARD_REFRESH_LIMIT: ${{ vars.LEADERBOARD_REFRESH_LIMIT || '500' }}
LEADERBOARD_USER_STALE_DAYS: ${{ vars.LEADERBOARD_USER_STALE_DAYS || '30' }}
GITHUB_USER_STALE_DAYS: ${{ vars.GITHUB_USER_STALE_DAYS || '14' }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10.29.2
run_install: false
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 24.x
cache: pnpm
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Calculate next country
run: pnpm leaderboard:calculate