
awesome-copilot 仓库维护工具链完全指南构建脚本、插件市场生成与贡献者管理实战【免费下载链接】awesome-copilotCommunity-contributed instructions, agents, skills, and configurations to help you make the most of GitHub Copilot.项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-copilot本指南面向 awesome-copilot 仓库的维护者与贡献者系统讲解 eng/README.md 所定义的构建与工具体系从update-readme.mjs的 README 自动生成、generate-marketplace.mjs的插件市场marketplace.json构建到基于 all-contributors 的缺失贡献者检测与自动补录流程。阅读本文后你将掌握npm run build的完整执行链、marketplace.json 的生成原理与手动触发方式以及贡献者报告/补录脚本的依赖条件、令牌配置与优雅退出机制可直接在本仓库复现整套维护流程。一、维护工具链全景eng/ 目录扮演什么角色eng/engineering目录集中存放了 awesome-copilot 仓库的构建脚本与维护工具是社区内容agents、instructions、skills、hooks、plugins、workflows与对外产物README、marketplace.json、网站数据之间的加工厂。从仓库根目录的 package.json 可以看到所有工程化入口都指向该目录下的脚本npm script实际命令用途buildnode ./eng/update-readme.mjs node ./eng/generate-marketplace.mjs构建主 README 与插件市场文件plugin:generate-marketplacenode ./eng/generate-marketplace.mjs单独生成.github/plugin/marketplace.jsonplugin:validate/plugin:createnode ./eng/validate-plugins.mjs/create-plugin.mjs校验 / 脚手架新插件skill:validate/skill:createnode ./eng/validate-skills.mjs/create-skill.mjs校验 / 脚手架新技能contributors:reportnode ./eng/contributor-report.mjs生成缺失贡献者报告website:datanode ./eng/generate-website-data.mjs为网站生成 JSON 数据eng/目录中的核心文件包括三个构建脚本update-readme.mjs、generate-marketplace.mjs、generate-website-data.mjs、两个贡献者工具contributor-report.mjs、add-missing-contributors.mjs以及支撑它们的共享常量constants.mjs、YAML 解析器yaml-parser.mjs和工具函数eng/utils/graceful-shutdown.mjs等。下面逐一深入。二、构建脚本一update-readme.mjs —— 从内容目录自动生成 README2.1 职责与输入update-readme.mjs是 package.json 声明的包入口main: ./eng/update-readme.mjs它的职责是扫描仓库内的 agents、instructions、skills、hooks、plugins、workflows 等目录自动生成主 README.md 及对应的文档文件保证目录与文档始终同步避免手工维护出错。它依赖 constants.mjs 中定义的一组目录常量const ROOT_FOLDER path.join(__dirname, ..); const INSTRUCTIONS_DIR path.join(ROOT_FOLDER, instructions); const AGENTS_DIR path.join(ROOT_FOLDER, agents); const SKILLS_DIR path.join(ROOT_FOLDER, skills); const HOOKS_DIR path.join(ROOT_FOLDER, hooks); const EXTENSIONS_DIR path.join(ROOT_FOLDER, extensions); const PLUGINS_DIR path.join(ROOT_FOLDER, plugins); const WORKFLOWS_DIR path.join(ROOT_FOLDER, workflows); const COOKBOOK_DIR path.join(ROOT_FOLDER, cookbook);同文件中的TEMPLATES对象则为每一类内容预置了如何贡献 / 如何安装 / 如何使用的 Markdown 模板片段instructions、plugins、agents、skills、hooks、workflows 各自独立生成 README 时直接拼接进对应章节。也就是说README 中Custom Instructions / Plugins / Custom Agents / Agent Skills / Hooks / Agentic Workflows等章节的固定文案全部来自这些模板而每个条目的名称、描述、安装链接则由目录扫描动态填充。2.2 生成过程中值得关注的细节MCP 注册表感知脚本会从 GitHub MCP registry APIhttps://api.mcp.github.com/v0.1/servers/分页拉取并缓存服务器名单用于校验 agent 声明的 MCP server 是否真实存在网络异常或解析失败时会安全降级为空数组不影响 README 生成见 update-readme.mjs 附近的loadMcpRegistryNames。Frontmatter 与元数据解析脚本复用 yaml-parser.mjs 导出的parseFrontmatter、parseSkillMetadata、parseHookMetadata、parseWorkflowMetadata等函数从.agent.md、SKILL.md、hooks.json中提取结构化元数据再渲染进 README 表格。发布分支约定constants.mjs中定义了SOURCE_CONTENT_BRANCH main与PUBLISHED_ARTIFACT_BRANCH marketplaceREADME 中的安装链接指向 raw 资源的基础 URL 也由此生成说明仓库采用源码分支 产物分支分离的发布模型。运行方式npm run build # 等价于node ./eng/update-readme.mjs node ./eng/generate-marketplace.mjs三、构建脚本二generate-marketplace.mjs —— 插件市场的生成器3.1 输出产物与消费方generate-marketplace.mjs自动生成.github/plugin/marketplace.json该文件供GitHub Copilot CLI发现并安装本仓库的插件。当前仓库中该产物已存在.github/plugin/marketplace.json约 200 余条插件条目可用以下命令随时重新生成npm run plugin:generate-marketplace3.2 生成流程四步管线对照 generate-marketplace.mjs 源码生成过程可拆为四步扫描plugins/下所有子目录collectLocalPluginsFromRoot(PLUGINS_DIR, plugins)只保留目录条目并按名称排序generate-marketplace.mjs中的fs.readdirSyncfilter(entry entry.isDirectory())。读取每个插件的根级plugin.jsonreadPluginMetadata解析 JSON若目录缺plugin.json则跳过产出条目包含name、source形如plugins/dir、description、version缺省为1.0.0。合并外部插件调用 external-plugin-validation.mjs 的readExternalPlugins传入本地插件名集合与policy: marketplace从extensions/external.json读取外部插件并原样并入若外部条目校验失败脚本会报错并以非零码退出。排序并落盘所有插件按名称做大小写不敏感排序localeCompare(..., { sensitivity: base })组装成包含name、metadata、owner、plugins的 marketplace 结构写入.github/plugin/marketplace.json目录不存在时自动mkdirSync创建。最终的 JSON 结构形如{ name: awesome-copilot, metadata: { description: Community-driven collection of GitHub Copilot plugins, agents, prompts, and skills, version: 1.0.0 }, owner: { name: GitHub, email: copilotgithub.com }, plugins: [ { name: ..., source: plugins/dir, description: ..., version: 1.0.0 } ] }由于npm run build的第二步就是执行本脚本因此任何本地插件目录的增删都会在下次构建时自动反映到 marketplace.json 中。四、构建脚本三generate-website-data.mjs —— 网站数据导出generate-website-data.mjs为仓库官网website/下的 GitHub Pages 站点生成 JSON 数据文件它从 agents、instructions、skills、plugins、extensions 等目录提取元数据写入website/public/data/供前端做客户端搜索与展示见 generate-website-data.mjs 头部的注释与目录常量定义。关键实现点复用 yaml-parser.mjs 的parseFrontmatter/parseSkillMetadata/parseYamlFile解析各目录元数据通过 eng/utils/git-dates.mjs 的getGitFileDates从 git 历史中取文件日期这解释了为什么 README 特别要求 CI 使用完整 git 历史见下文通过 extension-plugin-ownership.mjs 解析扩展插件归属通过hasExtensionEntryPoint判断扩展目录是否包含extension.mjs等入口文件候选路径包括extension.mjs、extensions/extension.mjs、extensions/name/extension.mjs。手动运行npm run website:data网站相关的完整构建链在 package.json 中定义为npm run website:build # npm run build npm run website:data npm run --prefix website build五、贡献者管理工具缺失贡献者检测与自动补录5.1 工作流概述仓库使用 all-contributors 生态管理贡献者荣誉。维护者工具分为两个脚本脚本用途contributor-report.mjs生成 Markdown 格式的缺失贡献者报告人工审查用add-missing-contributors.mjs按需运行自动检测缺失贡献者、推断贡献类型并执行npx all-contributors add更新.all-contributorsrc报告按需生成输出到reports/contributor-report.md供人工复核报告刻意保持最小化只列出受影响的 PR 清单以及一条用于补录贡献者的命令。5.2 核心函数与判定逻辑源码级getMissingContributors是检测缺失贡献者的唯一事实来源single source of truth实现于 contributor-report.mjs逻辑如下读取仓库根目录的.all-contributorsrc解析ignoreList或旧字段ignore构造忽略集合执行npx all-contributors check超时 30 秒解析输出中Missing contributors in .all-contributorsrc:标记行后的用户名列表过滤掉位于忽略列表中的用户名如机器人或已注销账号返回最终缺失名单。贡献类型推断是本工具链的另一核心。TYPE_PATTERNS定义了从文件路径到 all-contributors 类型的映射规则见 contributor-report.mjs类型匹配 glob 模式instructionsinstructions/*.instructions.mdagentschatmodes/*.chatmode.md、agents/*.agent.mdskillsskills/pluginsplugins/**/plugin.jsondocdocs/**/*.md、.github/**/*.md、CONTRIBUTING.md、SECURITY.md、SUPPORT.md、*.md等infra.github/workflows/**/*.yml、**/*.yml、**/*.yamlmaintenancepackage*.json、*config*、tsconfig*.jsoncode**/*.js、**/*.ts、**/*.mjs、**/*.cjs、**/*.py同时AUTO_GENERATED_PATTERNS定义了应被剔除的自动生成文件README.md、README.*.md、docs/README.*.md、docs/*.generated.md贡献者不会因为这些非实质性内容获得署名。推断函数getContributionTypes遍历 PR 文件跳过自动生成文件汇总类型集合并按字典序排序、逗号拼接若存在文件但未命中任何类型回退为code。为支持这套匹配仓库自带了一个轻量 glob→RegExp 转换器globToRegExpcontributor-report.mjs它先转义正则特殊字符再把**替换为占位符、*替换为[^/]*、?替换为.并统一\与/分隔符。README 特别注明该实现有意保持小而确定intentionally small and deterministic只支持仓库模式所需的最小 glob 子集。PR 获取fetchContributorMergedPrs通过gh pr list --repo owner/repo --state merged --author user --json number,title,mergedAt,files,url --limit 100查询某用户的已合并 PR仓库名优先从git config remote.upstream.url解析其次origin均失败时回退github/awesome-copilot。默认情况下includeAllFiles: false会过滤掉只改自动生成文件的 PR。5.3 运行前提与令牌配置运行贡献者工具需要满足以下前置条件GitHub CLIgh可用用于查询已合并 PR.all-contributorsrc存在于仓库根目录认证令牌已配置避免匿名 GitHub API 限流设置GITHUB_TOKEN优先或为ghCLI 设置GH_TOKEN若本地使用PRIVATE_TOKENcontributor-report.mjs会自动将其映射为GITHUB_TOKEN见main()中的process.env.GITHUB_TOKEN process.env.PRIVATE_TOKEN分支再补写GH_TOKEN供gh使用。在 CI 中一般可直接使用 GitHub Actions 自动注入的secrets.GITHUB_TOKEN。若凭据失效Bad credentials / 401脚本会给出可操作提示设置PRIVATE_TOKEN/GH_TOKEN且永远不会打印令牌值本身。5.4 报告格式与一键补录generateMarkdownReport生成的报告contributor-report.mjs按贡献者分组对每个 PR 输出标题、链接和可直接评论的all-contributors please add user for types片段末尾附上Alternate CLI Commandnpx all-contributors add username types报告写入reports/contributor-report.md后人工审查。若确认无误可直接运行add-missing-contributors.mjs完成自动化补录node ./eng/add-missing-contributors.mjs该脚本的执行流水线对应 add-missing-contributors.mjs 的mainStep 1 检测调用getMissingContributors()获取缺失名单Step 2 分析对每位贡献者调用fetchContributorMergedPrs(username, { includeAllFiles: true })取全部 PR 文件去重后交给getContributionTypes推断类型无匹配则回退codeStep 3 补录执行npx all-contributors add username types并做错误分级处理——限流rate limit / 403与网络错误network / timeout直接抛出终止用户不存在404 / not found则把该用户写入.all-contributorsrc的 ignore 列表后跳过其余未知错误记录后继续。脚本结束时会打印执行摘要processed / added / failed与下一步建议审查.all-contributorsrc、提交并推送、可选执行npm run contributors:generate更新 README并以退出码 0全部成功、1全部失败、2部分成功结束。六、工程细节优雅退出机制与完整 git 历史要求6.1 setupGracefulShutdown一次性脚本的健壮性保障README 特别指出contributor-report.mjs会在文件早期调用setupGracefulShutdown(script-name)。该辅助函数实现在 eng/utils/graceful-shutdown.mjs为SIGINT、SIGTERM、SIGHUP、uncaughtException、unhandledRejection统一挂接处理器收到信号或异常后打印received signal, shutting down gracefully...执行同步的轻量清理随后以非零退出码默认1结束进程标识异常终止返回一个 teardown 函数用于移除处理器便于测试场景复用_shuttingDown标志保证清理只执行一次。add-missing-contributors.mjs同样在入口处调用了setupGracefulShutdown(add-missing-contributors)保证批量补录过程中被中断时能干净退出。6.2 为什么需要完整 git 历史README 明确要求本仓库需要完整 git 历史以进行准确分析在 CI 中请设置fetch-depth: 0。原因在于generate-website-data.mjs通过 eng/utils/git-dates.mjs 的getGitFileDates从 git 提交历史推导文件日期而贡献者分析与 PR 关联同样依赖历史与 GitHub API 数据。若 CI 采用浅克隆shallow clone历史信息缺失将导致文件日期不准确、分析结果不可靠。因此在使用 GitHub Actions 等 CI 时checkout 步骤应显式配置fetch-depth: 0。七、测试与维护约定eng/目录内建了配套的单元测试保证工具函数行为可回归验证测试文件覆盖对象materialize-plugins.test.mjs插件物化逻辑validate-plugins.test.mjs插件校验逻辑external-plugin-intake.test.mjs外部插件接入流程external-plugin-quality-gates.test.mjs外部插件质量门禁external-plugin-validation.test.mjs外部插件校验extension-plugin-ownership.test.mjs扩展插件归属解析yaml-parser.test.mjsYAML/Frontmatter 解析eng/lib/markdown.test.mjsMarkdown 辅助函数README 中的维护约定可以总结为三条辅助函数保持小而确定核心函数如getMissingContributors、globToRegExp、matchGlob行为确定、附带 JSDoc 注释便于审查与测试报告输出刻意精简reports/contributor-report.md只保留受影响的 PR 列表 一条补录命令把决策权交给维护者工具脚本按需运行、不默认进 CI贡献者相关脚本目前刻意设计为 on-demand 模式未来可接入 CI而构建脚本update-readme、generate-marketplace则作为npm run build的固定环节自动执行。八、维护者速查清单以下是本仓库维护者最常用的操作入口汇总目标命令全量构建README marketplacenpm run build单独重新生成插件市场npm run plugin:generate-marketplace生成缺失贡献者报告npm run contributors:report输出reports/contributor-report.md自动补录缺失贡献者node ./eng/add-missing-contributors.mjs生成网站数据npm run website:data校验插件 / 技能npm run plugin:validate/npm run skill:validate新插件 / 新技能脚手架npm run plugin:create/npm run skill:create手动补录单个贡献者npx all-contributors add username types重新生成 README 贡献者章节npm run contributors:generate动手前请确认ghCLI 已安装并登录、GITHUB_TOKEN或GH_TOKEN/PRIVATE_TOKEN已配置、.all-contributorsrc存在在 CI 中执行分析类任务时记得在 checkout 步骤设置fetch-depth: 0以保证完整 git 历史。这样你就能完全复用 awesome-copilot 这套内容目录 → 自动文档 → 插件市场 → 贡献者治理的一体化维护流水线了。【免费下载链接】awesome-copilotCommunity-contributed instructions, agents, skills, and configurations to help you make the most of GitHub Copilot.项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-copilot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考