关于 crontap-replace-github-actions-cron
此技能指导将 GitHub Actions 定时任务迁移为由 Crontap 触发的仓库 dispatch,并涵盖工作流调整、令牌配置、切换与验证。
主要功能
- 01将定时触发器改为 dispatch
- 02配置限定仓库的 GitHub 令牌
- 03创建和管理 Crontap 计划
- 04验证工作流运行并排查错误
适用场景
- 01将仓库工作流从 GitHub cron 迁出
- 02维护期间暂停或恢复定时 dispatch
- 03切换后检查重复运行
MCP 相关
通过 Crontap MCP 创建、暂停和恢复向 GitHub 发送仓库 dispatch 请求的计划。
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ crontap/ skills --skill crontap-replace-github-actions-cron安装后在 Claude Code 中输入/crontap-replace-github-actions-cron确认已加载。
详细介绍
替换 GitHub Actions cron
Crontap 会发送 repository dispatch 请求。GitHub 仍负责运行工作流。
前提条件
使用所需工具前,请先检查这些工具是否可用。如果有任何工具缺失,请停止操作,并向用户提供以下两个选项,且只能提供这两个选项:
- 连接 Crontap MCP:
https://mcp.crontap.com/mcp。所有 Crontap 套餐均支持 MCP 访问。 - 为原始 API 配置
$CRONTAP_CLIENT_ID和$CRONTAP_API_KEY。原始 API 访问需要 Ultra 套餐。
在用户选择之前,不要擅自选择路径或继续操作。
- 确保工作流可安全地重复触发。
- 创建一个仅限目标仓库使用、并具备 repository dispatch 端点所需权限的细粒度 GitHub 令牌。
- 将令牌存储在安全的存储位置,并规划其过期时间和轮换方式。
- 确认所需的 IANA 时区。
更改工作流
将定时触发器替换为手动和 repository dispatch 触发器:
on:
workflow_dispatch:
repository_dispatch:
types: [scheduled-run]
保留 workflow_dispatch 以便手动运行。Crontap 会调用
repository_dispatch。切换完成后,不要保留启用状态的 on.schedule。
工作流
- 提交并部署支持 dispatch 的工作流。
- 使用不适用于生产环境的工作流路径测试 repository dispatch。
- 在约定的切换时间移除旧的
schedule触发器。 - 创建 Crontap 定时任务。
- 确认 GitHub 返回 204,并且出现一次工作流运行记录。
- 在维护或回滚期间暂停 Crontap 定时任务。
MCP 示例
创建外部 dispatch:
{
"tool": "create_schedule",
"arguments": {
"url": "https://api.github.com/repos/example-org/example-repo/dispatches",
"text": "every weekday at 09:00",
"timezone": "Europe/London",
"method": "POST",
"headers": {
"Authorization": "Bearer <fine-grained-token-from-secure-store>",
"Accept": "application/vnd.github+json",
"X-GitHub-Api-Version": "2022-11-28",
"Content-Type": "application/json"
},
"body": {
"event_type": "scheduled-run"
},
"label": "GitHub scheduled run"
}
}
暂停:
{
"tool": "pause_schedule",
"arguments": {
"scheduleId": "<schedule-id>"
}
}
恢复:
{
"tool": "resume_schedule",
"arguments": {
"scheduleId": "<schedule-id>"
}
}
REST 备用方案
创建 REST 请求需要 Ultra API 访问权限:
curl --fail-with-body https://api.crontap.com/v1/schedule \
-X POST \
-H "ClientId: $CRONTAP_CLIENT_ID" \
-H "ApiKey: $CRONTAP_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"url": "https://api.github.com/repos/example-org/example-repo/dispatches",
"interval": "0 9 * * 1-5",
"timezone": "Europe/London",
"verb": "POST",
"headers": {
"Authorization": "Bearer <fine-grained-token-from-secure-store>",
"Accept": "application/vnd.github+json",
"X-GitHub-Api-Version": "2022-11-28",
"Content-Type": "application/json"
},
"data": {"event_type": "scheduled-run"},
"label": "GitHub scheduled run"
}'
验证
- 确认已部署的工作流不再包含
on.schedule。 - 确认
event_type与工作流的 dispatch 类型完全一致。 - 验证一次 Crontap 运行对应一次 GitHub 工作流运行。
- 确认令牌未过期,且仅限所需的仓库和操作。
安全与套餐限制
- 如果受限的细粒度令牌可用,切勿使用权限宽泛的经典令牌。
- 对比旧的 GitHub 触发时间记录时,避免假设任务会在整点运行。
- 确保下游工作流的写入操作具有幂等性。
- 如果 Crontap 创建请求触及上限或最小执行间隔限制,请展示返回的四档选项,并选择可行的最小选项。
故障排除
- GitHub 401 表示令牌无效或已过期。
- GitHub 403 通常表示仓库访问权限或权限不足。
- GitHub 404 可能是因为令牌无权访问该仓库,且 GitHub 会有意隐藏该仓库。
- GitHub 422 通常表示事件类型或请求正文无效。
- 出现重复运行通常表示旧的定时触发器和 Crontap 同时处于启用状态。
参考资料
评论
支持 Markdown