name: Archive GitHub Traffic on: schedule: - cron: '17 3 * * *' workflow_dispatch: permissions: contents: write concurrency: group: traffic-archive cancel-in-progress: false env: TRAFFIC_ARCHIVE_BRANCH: traffic-archive TRAFFIC_ARCHIVE_DIR: ../traffic-archive/traffic jobs: archive: name: Capture traffic snapshot runs-on: ubuntu-latest steps: - name: Checkout source uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Node uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: '20' cache: 'npm' - name: Prepare archive branch env: ARCHIVE_PUSH_TOKEN: ${{ github.token }} run: | set -euo pipefail git config --global user.name "github-actions[bot]" git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" server="${GITHUB_SERVER_URL#https://}" archive_remote="https://x-access-token:${ARCHIVE_PUSH_TOKEN}@${server}/${GITHUB_REPOSITORY}.git" if git ls-remote --exit-code --heads "${archive_remote}" "${TRAFFIC_ARCHIVE_BRANCH}" >/dev/null 2>&1; then git clone --branch "${TRAFFIC_ARCHIVE_BRANCH}" --depth 1 "${archive_remote}" ../traffic-archive else git init -b "${TRAFFIC_ARCHIVE_BRANCH}" ../traffic-archive git -C ../traffic-archive remote add origin "${archive_remote}" fi mkdir -p "${TRAFFIC_ARCHIVE_DIR}" - name: Collect traffic env: GH_TRAFFIC_TOKEN: ${{ secrets.TRAFFIC_ARCHIVE_TOKEN || github.token }} GITHUB_REPOSITORY: ${{ github.repository }} run: node scripts/archive-github-traffic.mjs --archive-dir "${TRAFFIC_ARCHIVE_DIR}" - name: Commit archive run: | set -euo pipefail cd ../traffic-archive git add traffic/archive.json traffic/summary.json git rm --ignore-unmatch traffic/README.md if git diff --cached --quiet; then echo "No traffic archive changes." exit 0 fi git commit -m "chore(traffic): archive repository traffic $(date -u +%F)" git push origin HEAD:${TRAFFIC_ARCHIVE_BRANCH}