尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

自建你的hackernews-daily:GitHub Actions定时部署完整指南(cron调度 + secrets配置手把手教学)

自建你的hackernews-daily:GitHub Actions定时部署完整指南(cron调度 + secrets配置手把手教学) 自建你的hackernews-dailyGitHub Actions定时部署完整指南cron调度 secrets配置手把手教学【免费下载链接】hackernews-dailyHacker News daily top 10 posts项目地址: https://gitcode.com/gh_mirrors/ha/hackernews-dailyhackernews-daily 是一个自动抓取Hacker News 每日 Top 10 头条并自动发布为 Issue 的开源项目。本文将手把手教你用GitHub Actions 定时部署你自己的 hackernews-daily从 cron 调度表达式、workflow 配置到 secrets 密钥设置零基础也能在 30 分钟内搭建完成 一、hackernews-daily 是什么一句话概括每天准点自动把 Hacker News 热度最高的 10 篇文章整理成 Markdown并发布到你仓库的 Issue 里。你只需要 watch 仓库或订阅 RSS就能每天免费收到科技头条 它的工作原理分三步脚本通过 Hacker News 官方 Algolia API 抓取当日热门帖子自动在你的仓库开一个 Issue把 Top 10 头条存入其中开完后立即锁定 Issue防止评论区灌水文件结构一览整个项目非常轻量核心文件只有 4 个文件作用index.js主入口抓头条 → 开 Issue → 锁 Issueutils/getHeadlines.js抓取 Hacker News Top 10 并排版utils/issue.jsGitHub App 认证 开/锁 Issue.github/workflows/main.ymlGitHub Actions 定时任务配置二、快速上手克隆仓库本地跑起来打开终端执行以下命令克隆项目git clone https://gitcode.com/gh_mirrors/ha/hackernews-daily cd hackernews-daily npm installpackage.json中声明了核心依赖axios请求 API、octokit/coreoctokit/auth-app操作 GitHub、timeago.js2 小时前这种相对时间。 本地直接跑node index.js会失败因为它需要 GitHub 密钥。本文后面会完整讲 secrets 配置配置完就能本地/云端通跑。三、看懂两个核心模块1分钟在部署之前花 1 分钟了解脚本在做什么后续排查问题会轻松很多。3.1 抓取模块utils/getHeadlines.js关键逻辑就两行const endTime Math.round(new Date(date).getTime() / 1000); const startTime Math.round(new Date(date).getTime() / 1000) - (25 * 60 * 60);以「当前时间」为终点、「25 小时前」为起点查询 Algolia API为什么是 25 小时而不是 24 小时——多出的 1 小时是容错窗口避免跨天边界导致漏抓帖子取hits.slice(0, 10)即热度前 10每条渲染成「标题 分数 作者 评论数」的 Markdown3.2 发布模块utils/issue.js它用GitHub App身份调用 API提供两个操作open向指定仓库提交 Issue头条正文lock以resolved理由锁定 Issue⚠️自建时必改的两处index.js中的owner: headllines、repo: hackernews-daily→ 改成你自己的仓库utils/issue.js中的id、installationId、clientId等 → 换成你自己创建的 GitHub App 信息四、GitHub Actions 定时部署cron 调度手把手4.1 cron 表达式怎么读GitHub Actions 的 cron 采用标准 5 字段格式┌──────────── 分钟 (0-59) │ ┌────────── 小时 (0-23) │ │ ┌──────── 日 (1-31) │ │ │ ┌────── 月 (1-12) │ │ │ │ ┌──── 星期 (0-70和7都是周日) * * * * *hackernews-daily 使用的调度是1 0 * * *意思是每天 UTC 时间 00:01 执行一次——正好对应index.js顶部注释run every day at 00:01 UTC。⏰注意时区cron 按 UTC 计算。UTC 00:01 即北京时间 08:01。想在别的时间执行比如每天中午 12 点UTC 04:00改成0 4 * * *即可。4.2 完整 workflow 配置可直接复制在仓库中创建.github/workflows/main.yml项目自带的就是这份配置name: hackernews-daily-top on: schedule: - cron: 1 0 * * * # 每天 UTC 00:01 触发 jobs: fetch-top-posts: runs-on: ubuntu-latest steps: - uses: actions/checkoutv1 - name: Use Node.js uses: actions/setup-nodev1 with: node-version: 12.x - name: npm install run: npm install --onlyprod - name: fetch run: node index.js env: clientSecret: ${{ secrets.clientSecret }} privateKey: ${{ secrets.privateKey }}4.3 每一步在做什么步骤命令说明1actions/checkoutv1检出你的仓库代码2actions/setup-nodev1安装 Node.js 运行环境3npm install --onlyprod只装生产依赖加快速度4node index.js执行主脚本注入两个密钥环境变量五、secrets 配置手把手教学 脚本需要以 GitHub App 身份写 Issue所以必须配置两个密钥。5.1 第一步创建 GitHub App在你的账号下新建一个 GitHub App授予Administration权限并安装Install到目标仓库。你会得到App ID纯数字Installation ID安装后生成Client ID形如Iv1.xxxxxxxxClient Secret点击 Generate 生成只显示一次Private Key生成并下载的.pem私钥文件然后把 App ID、Installation ID、Client ID 填进utils/issue.js的auth对象中。5.2 第二步在仓库中配置 secrets进入仓库Settings → Secrets and variables → Actions → New repository secret添加Secret 名称填入内容clientSecretGitHub App 的 Client SecretprivateKey.pem私钥的完整文件内容含 BEGIN/END 行原样粘贴5.3 第三步workflow 中通过 env 注入上面 workflow 里的这两行就是密钥的投递通道env: clientSecret: ${{ secrets.clientSecret }} privateKey: ${{ secrets.privateKey }}utils/issue.js会优先读取环境变量process.env.clientSecret/process.env.privateKey所以云端运行时密钥全程不落盘、不入库 ✅5.4 本地运行的替代方案在仓库根目录手动创建一个secret.js文件名写死在utils/issue.js里导出同样的两个字段即可本地调试。记得把它加入.gitignore千万别把密钥提交到仓库六、常见坑与快速排查 ️没按时发布—— 检查 cron 是否按 UTC 理解错了时间也可以手动在 Actions 页面 Run workflow 验证脚本本身没问题Issue 开了但没锁定——index.js中issue.lock在issue.open之后执行看 Actions 日志确认两步都通过提示 403 / 认证错误—— 90% 是clientSecret或privateKey粘贴不全.pem内容务必包含首尾的-----BEGIN/END PRIVATE KEY-----行抓到的帖子偏少—— 抓取窗口固定为 25 小时这是源码里写死的容错设计属正常现象改了仓库名不生效—— 确认index.js里的owner和repo已同步更新七、部署完成后的订阅方式 一切就绪后每天 UTC 00:01 你的仓库就会自动多出一个Hacker News Daily Top 10 日期的 IssueWatch 仓库勾选 Custom → Issues新 Issue 直接进邮箱RSS 订阅配合 RSSHub 的 GitHub Issue 路由把 Issue 流转换成标准 RSS从零到每天自动收到科技头条你只需要一份 cron 两个 secret——这就是 GitHub Actions 定时部署的魅力所在。现在就去动手打造属于你的 hackernews-daily 吧【免费下载链接】hackernews-dailyHacker News daily top 10 posts项目地址: https://gitcode.com/gh_mirrors/ha/hackernews-daily创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表