当前位置: 首页 > news >正文

如何用 GitHub Actions 自部署 GitHub Readme Stats,并统计私有仓库数据

目录

      • 背景介绍
      • 通过 GitHub Actions 自部署 GitHub Readme Stats
      • 如何使用 GitHub Actions 配置统计私有仓库数据
        • 1. 生成 Personal Access Token (PAT) 以统计私有仓库
        • **如何生成 Personal Access Token (PAT)**:
        • 2. 使用 GitHub Secrets 存储 PAT
        • 3. 为什么默认配置无法统计私有仓库
        • 4. 修改配置以支持私有仓库统计

想要更好的阅读体验?点击直接这里查看原文

背景介绍

经常逛 GitHub 的人,应该都见过个人主页上的这种统计卡片。
这背后常见的实现方案,就是GitHub Readme Stats
它的统计原理是通过调用 GitHub API 获取用户的公共或私有数据,
然后通过动态生成的 SVG 图像呈现出来。

但是最近,由于用户量的增加,GitHub Readme Stats的公共实例在 Vercel 上面临了流量和额度超限的问题,
导致许多用户无法加载其统计卡片。官方在其 GitHub 仓库的说明中指出:

这件事有多严重呢?比如下面,不仅我自己的统计无法显示,甚至 GitHub Readme Stats 官方仓库的统计也无法显示了。

官方声明中提到,虽然公共实例通过缓存来提高稳定性,但由于流量高峰和 API 限制,卡片显示已经不再稳定。
为了避免此问题,官方建议用户自行托管服务(如 Vercel 或其他平台),
或者使用GitHub Actions工作流生成卡片并存储在个人仓库中。

下面就介绍一种几乎零维护的方案:直接用 GitHub Actions 生成静态 SVG,同时支持私有仓库统计。

通过 GitHub Actions 自部署 GitHub Readme Stats

为了避免公共实例的流量限制,可以选择通过GitHub Actions自行部署 GitHub Readme Stats。
这种方法最简单,不需要自行设置服务器,相比于自己部署 Vercel 服务,
它的部署过程更方便。只需要在个人 GitHub 仓库中配置一次 GitHub Actions 工作流,
GitHub 将自动为你生成并更新统计卡片,避免了公共服务的限制。

这个方法甚至不需要 fork 官方仓库,只需要在自己的 README 仓库
(也就是与你 GitHub 用户名同名的仓库)中,新建一个 workflow 即可。

比如我的仓库原来只有一个README.md文件,现在只需要新建
.github/workflows/github-readme-stats.yml,填入以下内容:

name:Update README cardson:schedule:-cron:"0 3 * * *"# 每天更新一次workflow_dispatch:# 允许手动触发permissions:contents:write# 允许工作流提交生成后的 SVGjobs:build:runs-on:ubuntu-lateststeps:-uses:actions/checkout@v6-name:Generate stats carduses:readme-tools/github-readme-stats-action@v1with:card:statsoptions:username=${{github.repository_owner}}&show_icons=truepath:profile/stats.svgtoken:${{secrets.GITHUB_TOKEN}}-name:Generate top languages carduses:readme-tools/github-readme-stats-action@v1with:card:top-langsoptions:username=${{github.repository_owner}}&layout=compact&langs_count=6path:profile/top-langs.svgtoken:${{secrets.GITHUB_TOKEN}}-name:Commit cardsrun:|git config user.name "github-actions[bot]" git config user.email "41898282+github-actions[bot]@users.noreply.github.com" git add profile/*.svg git commit -m "Update README cards" || exit 0 git push

注意这里生成的图片位置分别是profile/stats.svgprofile/top-langs.svg
所以需要你在README.md中把原来对公共实例的引用,替换成本仓库里的静态文件,例如:

![Stats](./profile/stats.svg) ![Top Languages](./profile/top-langs.svg)

然后提交代码。由于上述配置是每天生成一次,所以第一次通常需要你到 GitHub Actions 页面手动触发一次。

如何使用 GitHub Actions 配置统计私有仓库数据

1. 生成 Personal Access Token (PAT) 以统计私有仓库

如果你希望通过GitHub Actions统计私有仓库的数据,
必须生成一个Personal Access Token (PAT)
因为默认工作流中使用的GITHUB_TOKEN更适合当前仓库内的自动化操作,
并不适合拿来读取你账号下所有私有仓库的统计信息。
要统计私有仓库数据,更稳妥的做法是使用你自己创建的PAT

如何生成 Personal Access Token (PAT)
  1. 登录 GitHub

    • 访问 GitHub 并登录到你的账户。
  2. 进入开发者设置

    • 在 GitHub 首页右上角点击头像,选择Settings
    • 在左侧菜单中,选择Developer settings

  1. 生成 Personal Access Token

    • Developer settings中选择Personal access tokens。如果只是为了统计私有仓库,建议直接使用Tokens (classic)

    • 点击Generate new token创建一个新的 token。

    • 根据 GitHub Readme Stats 官方说明,如果要读取私有仓库统计,至少需要以下权限:

      • repo:允许访问私有仓库。
      • read:user:访问用户数据(用于获取贡献信息等)。

    官方文档还提到,fine-grained token在这个场景下对私有贡献统计并不理想,
    因此这里更推荐 classic PAT。

  2. 生成并保存 Token

    • 设置Token description(例如 “GitHub Stats Token”)并选择所需的权限。

    • 点击Generate token,生成后保存好这个 Token。

    注意PAT生成后只能在此页面显示一次,因此请务必将其保存好。如果丢失,你将无法查看这个 Token,只能重新生成。


2. 使用 GitHub Secrets 存储 PAT

为了避免将PAT直接暴露在工作流文件中(这将会泄露敏感信息),
我们使用GitHub Secrets来存储 Token。GitHub Secrets是加密存储的环境变量,它可以在 GitHub Actions 中安全地使用,而不会被公开。

  1. 进入仓库的 Settings

    • 在 GitHub README 这个仓库(也就是与你用户名同名的仓库)页面,点击右上角的Settings
  2. 创建新的 Secret

    • 在左侧菜单中选择Secrets and variablesActions
    • 点击New repository secret
    • Name中输入GH_TOKEN(这是我们后续在工作流文件中使用的环境变量名称)。
    • Value中粘贴你生成的Personal Access Token (PAT)
    • 点击Add secret保存。
  3. 在 GitHub Actions 中使用 Secret

    • 你可以通过${{ secrets.GH_TOKEN }}来引用在Secrets中存储的 Token。

3. 为什么默认配置无法统计私有仓库

上面官方给出的基础配置无法统计私有仓库数据,是因为在那个配置中,
使用的是token: ${{ secrets.GITHUB_TOKEN }}
根据 GitHub Readme Stats 官方文档,默认的GITHUB_TOKEN仅适用于公开统计
如果要统计私有仓库,则需要改用带reporead:user权限的PAT


4. 修改配置以支持私有仓库统计

为了确保 GitHub Actions 能统计私有仓库的数据,
我们需要修改配置文件,使用Personal Access Token (PAT)
并将其存储在GitHub Secrets中。以下是完整的工作流配置:

name:Update README cardson:schedule:-cron:"0 6 * * *"# 每天早上6点更新workflow_dispatch:# 允许手动触发permissions:contents:write# 允许 GitHub Actions 写入仓库内容jobs:build:runs-on:ubuntu-lateststeps:-uses:actions/checkout@v6-name:Generate stats carduses:readme-tools/github-readme-stats-action@v1with:card:statsoptions:username=${{github.repository_owner}}&show_icons=truepath:profile/stats.svgtoken:${{secrets.GH_TOKEN}}# 使用 GitHub Secrets 中存储的 PAT-name:Generate top languages carduses:readme-tools/github-readme-stats-action@v1with:card:top-langsoptions:username=${{github.repository_owner}}&layout=compact&langs_count=6path:profile/top-langs.svgtoken:${{secrets.GH_TOKEN}}-name:Commit cardsrun:|git config user.name "github-actions[bot]" git config user.email "41898282+github-actions[bot]@users.noreply.github.com" git add profile/*.svg git commit -m "Update README cards" || exit 0 git push

配置解析

  • permissions: contents: write:确保 GitHub Actions 有权限将生成的卡片推送到仓库。
  • token: ${{ secrets.GH_TOKEN }}:使用存储在 GitHub Secrets 中的PAT,允许读取私有仓库统计数据。
  • top-langs:额外生成语言分布卡片,避免只生成总览 stats 卡片。
  • cron: "0 6 * * *":设置工作流每天凌晨六点自动更新统计卡片。

这种方法也有缺点,就是更新不够及时,比如我的配置是一天一次。
但是因为这个方法实在太简单太方便了,足以抵消这些缺点。

http://www.jsqmd.com/news/598082/

相关文章:

  • 下篇:JavaScript 异步编程深度剖析 —— 事件循环、Promise、async/await 与并发模型
  • 用快马平台十分钟克隆qclaw官网:法律科技产品的快速原型验证
  • 循环神经网络:浅析RNN、LSTM与BiLSTM的算法思想
  • s11_自主代理设计:为什么 Agent 空闲时不该只是等下一条指令
  • Vueform中的Authorization头设置
  • 蔚蓝档案鼠标指针主题:3分钟为Windows桌面注入动漫灵魂的完整指南
  • 3个实用技巧:用Immich打造你的私人智能相册库
  • 为你的项目量身定制,基于快马ai生成openclaw实战集成安装方案
  • XXMI启动器终极指南:如何像职业玩家一样管理多游戏模组
  • 解密BG3ModManager:如何应对Pak模组文件加载挑战
  • 4DGL嵌入式图形库:工业HMI串行屏驱动实战指南
  • 终极指南:5分钟掌握RePKG,解锁Wallpaper Engine资源宝库
  • Qwen3-4B-Instruct-2507完整使用手册:从部署到高级应用全解析
  • BepInEx终极指南:5个实战场景快速掌握Unity游戏插件开发框架
  • 号令天下:2026年天蝎女选什么手机号利贵人
  • 老板与员工:分钟理解 Subagent 架构
  • 避坑指南:用STM32CubeProgrammer解锁STM32WB55时最容易忽略的3个细节
  • TinkerKit!嵌入式传感器库原理与工程实践
  • 终极指南:如何使用OpenCore Legacy Patcher让旧Mac重获新生
  • 用快马ai快速构建java学习路线可视化原型,直观掌握知识体系
  • ArcGIS个人版许可(一):从零开始的美元购买实战
  • 无需本地安装,用快马平台五分钟构建你的第一个openclaw概念演示应用
  • 罗湖配眼镜哪里好?本地人真实推荐,附避坑指南
  • 告别‘炼丹’:用人类反馈(Human-in-the-Loop)让机器人强化学习训练快2倍
  • 颠覆式配置革命:OpCore-Simplify让黑苹果爱好者效率提升83%的智能工具
  • ai辅助开发新体验:让快马ai生成会学习的智能c盘清理顾问
  • 绘制动态直线的艺术:Java Graphics2D实战
  • 网站 SEO 诊断工具哪个最好用
  • 华硕笔记本合盖不休眠解决方案:GHelper智能合盖模式全攻略
  • 从零搭建Simulink四旋翼6DOF模型:悬停控制仿真全流程解析