查找GitHub组织中仍使用Node 12的GitHub Actions工作流
批量找出GitHub组织里用Node 12的工作流
给你两个不用手动挨个查的实用方案:
方案一:用GitHub CLI写脚本扫描
先确保你装了GitHub CLI并完成登录(执行gh auth login),然后用下面的shell脚本(适配Linux/macOS,Windows可改成PowerShell版本):
ORG_NAME="你的组织名称" # 拉取组织下所有仓库并逐个遍历 gh repo list $ORG_NAME --limit 1000 --json name --jq '.[].name' | while read repo; do # 筛选仓库内的所有工作流文件 gh repo view $ORG_NAME/$repo --json files --jq '.files[] | select(.path | startswith(".github/workflows/") and (endswith(".yaml") or endswith(".yml"))) | .path' | while read workflow_path; do # 解码工作流文件内容,检查是否存在Node 12相关配置 gh api repos/$ORG_NAME/$repo/contents/$workflow_path --jq '.content' | base64 --decode | grep -qE 'node-version:.*12|uses:.*actions/setup-node@v2' if [ $? -eq 0 ]; then echo "⚠️ 仓库: $ORG_NAME/$repo,工作流: $workflow_path 可能在使用Node 12" fi done done
这个脚本会自动遍历组织内所有仓库,只要工作流文件里明确指定了Node 12,或者用了默认搭载Node 12的actions/setup-node@v2,就会输出对应的仓库和工作流路径。
方案二:用Python脚本调用GitHub API
如果需要更灵活的排查逻辑(比如要检查工作流运行时的官方警告),可以用以下Python脚本:
import requests import base64 # 替换为你的组织名和GitHub个人访问令牌(令牌需要repo权限) ORG_NAME = "你的组织名称" TOKEN = "你的GitHub个人访问令牌" headers = {"Authorization": f"token {TOKEN}"} # 拉取组织下所有仓库(处理分页) repo_url = f"https://api.github.com/orgs/{ORG_NAME}/repos?per_page=100" all_repos = [] while repo_url: resp = requests.get(repo_url, headers=headers) all_repos.extend(resp.json()) repo_url = resp.links.get('next', {}).get('url') for repo in all_repos: repo_full_name = repo['full_name'] # 获取仓库内的工作流文件列表 workflows_url = f"https://api.github.com/repos/{repo_full_name}/contents/.github/workflows" try: resp = requests.get(workflows_url, headers=headers) workflows = resp.json() for workflow in workflows: if workflow['name'].endswith(('.yaml', '.yml')): # 解码工作流文件内容 content = base64.b64decode(workflow['content']).decode('utf-8') # 检查Node 12相关配置 if 'node-version: 12' in content or 'actions/setup-node@v2' in content: print(f"⚠️ {repo_full_name} 中的 {workflow['name']} 可能使用Node 12") except Exception as e: print(f"处理仓库 {repo_full_name} 时出错:{str(e)}")
要是你还想排查工作流运行时的官方警告(比如“Node.js 12 is no longer supported”),可以在脚本中添加逻辑:获取每个工作流的最新运行记录,拉取日志内容并搜索警告关键词。不过这种方法速度会慢一些,因为需要加载大量日志数据。
内容的提问来源于stack exchange,提问作者Silverblaze
相关产品推荐
相关产品推荐

