TDD
FastLED/FastLED
Guide Test-Driven Development workflow for FastLED. An agent skill from FastLED/FastLED.
A skill your agent uses when releasing a new version of mcpp — bumps version, creates tag, triggers release CI, and monitors until all platforms succeed.
$ npx skills add mcpp-community/mcpp --skill mcpp-release -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install mcpp-community/mcpp mcpp-release --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/mcpp-community/mcpp.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/mcpp-release .claude/skills/mcpp-release && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "mcpp-release" agent skill from https://github.com/mcpp-community/mcpp/tree/main/.agents/skills/mcpp-release into .claude/skills/mcpp-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mcpp-release", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/mcpp-community/mcpp/tree/main/.agents/skills/mcpp-releaseType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add mcpp-community/mcpp --skill mcpp-release -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install mcpp-community/mcpp mcpp-release --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mcpp-community/mcpp.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/mcpp-release .agents/skills/mcpp-release && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "mcpp-release" agent skill from https://github.com/mcpp-community/mcpp/tree/main/.agents/skills/mcpp-release into .agents/skills/mcpp-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mcpp-release", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mcpp-community/mcpp --skill mcpp-release -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install mcpp-community/mcpp mcpp-release --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mcpp-community/mcpp.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/mcpp-release .cursor/skills/mcpp-release && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "mcpp-release" agent skill from https://github.com/mcpp-community/mcpp/tree/main/.agents/skills/mcpp-release into .cursor/skills/mcpp-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mcpp-release", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/mcpp-community/mcpp.git --path .agents/skills/mcpp-release--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add mcpp-community/mcpp --skill mcpp-release -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install mcpp-community/mcpp mcpp-release --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mcpp-community/mcpp.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/mcpp-release .gemini/skills/mcpp-release && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "mcpp-release" agent skill from https://github.com/mcpp-community/mcpp/tree/main/.agents/skills/mcpp-release into .gemini/skills/mcpp-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mcpp-release", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install mcpp-community/mcpp mcpp-releaseInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add mcpp-community/mcpp --skill mcpp-release -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/mcpp-community/mcpp.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/mcpp-release .github/skills/mcpp-release && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "mcpp-release" agent skill from https://github.com/mcpp-community/mcpp/tree/main/.agents/skills/mcpp-release into .github/skills/mcpp-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mcpp-release", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mcpp-community/mcpp --skill mcpp-release -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install mcpp-community/mcpp mcpp-release --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mcpp-community/mcpp.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/mcpp-release .opencode/skills/mcpp-release && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "mcpp-release" agent skill from https://github.com/mcpp-community/mcpp/tree/main/.agents/skills/mcpp-release into .opencode/skills/mcpp-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mcpp-release", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
mcpp-releaseA skill your agent uses when releasing a new version of mcpp — bumps version, creates tag, triggers release CI, and monitors until all platforms succeed.
Mcpp Release is an agent skill from mcpp-community/mcpp. Use when releasing a new version of mcpp — bumps version, creates tag, triggers release CI, and monitors until all platforms succeed. Covers the full release checklist to avoid common pitfalls like version string mismatches.
Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Testing & QA, covering Feature launches and release readiness. It works with C++ and Bash. The repository describes itself as: A modern C++ module-first build tool — written in pure C++23 modules, fully self-hosted. The licence is Apache-2.0.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit de9c290. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
ghgitbashcurlFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
github.comraw.githubusercontent.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
HOMEBREW_TAP_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Mcpp Release loads about 3.1k tokens when it runs. Until then it costs about 59 tokens; SKILL.md has 910 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from mcpp-community/mcpp at commit de9c290, republished under its Apache-2.0 licence (© mcpp-community). 910 words, ~3,145 tokens.
.claude/skills/mcpp-release/SKILL.md (or your agent's skills folder).格式:YYYY.M.D.N(日期版本,月/日不补零),例如 2026.7.27.1。
自 2026.7.27.1 起启用,此前为 0.0.x。与 xlings 生态一致(xlings 于同日从 0.4.70 迁入)。
第 4 段的语义:
.0保留给正式版本 / 稳定版本。日常迭代默认从.1开始。
即一天内可发 .1、.2、.3 …… 若干次常规版本;.0 只在该版本被认定为正式 release 或稳定版时使用。
跨方案的序是单调的:0.0.109 < 2026.7.27.1,第一段从 0 变 2026,不存在回退。
比较逻辑见
src/version_req.cppm。它支持 4 段;改动那里时务必保证str()精确回写,src/pm/resolver.cppm用它重建依赖版本串,会流向 lock 文件与 xlings wire 地址。 尤其.0结尾的版本不能塌成三段。
mcpp 有 三个持久化版本位置,以及 ci-fresh-install 的一个运行时推导值。它们分属
两组,在不同时间更新;把"正在构建的版本"与 bootstrap pin 一起前移会让 CI 尝试安装
尚未发布的 mcpp。
第一组:正在构建的版本(发布时改,走 bump PR)
mcpp.toml → [package].version — 构建系统读取的项目版本,release.yml 由它推导 tagsrc/version.cppm → MCPP_VERSION — 编译期硬编码常量(--version 输出、BMI 指纹、E0006 索引底线比较)这两处必须在同一个 commit 里一起改:tests/e2e/01_help_and_version.sh 交叉比对
mcpp.toml 与 mcpp --version,只改一处 CI 立刻红。
第二组:bootstrap pin —— CI 用哪个 mcpp 来自举(发布并进索引之后才可改)
.xlings.json → workspace.mcpp — CI bootstrap 装哪个 mcpp.xlings.json 必须指向一个已经发布、镜像并进入索引的版本。因此它在 bump PR 中
保持已有的可安装版本,直到发布收尾时才可前移。
ci-fresh-install.yml 的 MCPP_PIN 不是持久化 pin:wait-index 从最新 GitHub
Release 推导一次,所有安装 job 消费同一个输出。绝不能手工编辑或恢复字面量
MCPP_PIN,否则 index guard 和实际安装版本会再次漂移。
.github/tools/check_version_pins.sh 校验版本关系和 xlings pin:
bash .github/tools/check_version_pins.sh必须用 bash 跑,不能用 sh。 脚本用了进程替换(done < <(...)),POSIX
sh/dash 解析不了,用 sh 调用会在第 95 行附近报 Syntax error: redirection unexpected。那是调用它的 shell 的问题,不是脚本的缺陷 —— 它的 shebang 是
#!/usr/bin/env bash,CI 也是用 bash 调的。别据此把这条 guard 当成坏的而跳过:
它是唯一能机器化捕捉 pin 漂移的东西。
也不要通过修改文档或 workflow 绕开动态 MCPP_PIN 设计。src/platform/xlings/xlings.cppm 的
pinned::kXlingsVersion 仍是 xlings 版本的唯一真源。
git checkout main && git pull origin main
# 确认 CI 全部通过
gh run list --branch main --limit 3以分支保护和 gh pr checks <pr-number> 显示的 actual required checks 为准。
在 main 上监控当前运行时,检查 ci 这一个工作流的运行(它包含各平台、e2e 分片、
交叉构建与 e2e-coverage);known-red 的腿(名字里带 issue 号)允许失败。跳过或
非 required 的 workflow 不是合入 gate。不要在 ci 红的时候发版。
只改第一组的两个文件,并且在同一个 commit 里。.xlings.json bootstrap pin
不要动;MCPP_PIN 是 workflow 运行时推导值,绝不能手工编辑,见 Overview。
# 日期版本:当天序号从 .1 起;.0 仅用于正式/稳定版
NEW_VERSION="2026.7.27.1"
git checkout -b "chore/bump-$NEW_VERSION"
sed -i "s/^version.*=.*/version = \"$NEW_VERSION\"/" mcpp.toml
sed -i "s/MCPP_VERSION = \".*\"/MCPP_VERSION = \"$NEW_VERSION\"/" src/version.cppm
# 校验:mcpp.toml 与 MCPP_VERSION 相等,.xlings.json 不领先于正在构建的版本。
bash .github/tools/check_version_pins.sh
# 自查:构建产物真的报新版本。注意 target/ 目录名带指纹哈希,
# 版本一变就是新目录 —— 用 `ls -dt` 取最新的那个,`head -1` 会拿到旧二进制。
mcpp build && "$(ls -dt target/*/*/bin/mcpp | head -1)" --version
git commit -am "chore: bump version to $NEW_VERSION"
git push -u origin "chore/bump-$NEW_VERSION"
gh pr create --title "chore: bump version to $NEW_VERSION" --body "..."
# CI 绿后合入;版本 bump 同样禁止直推 main(见 mcpp-contributing)git tag "v$NEW_VERSION"
git push origin "v$NEW_VERSION"Tag push 会自动触发 release.yml workflow。
Release workflow 包含四个平台的构建,外加一个生态发布 job:
| Job | 平台 | 产物 | 依赖 |
|---|---|---|---|
build-release | Linux x86_64 | mcpp-X.Y.Z-linux-x86_64.tar.gz | 无(先执行) |
build-linux-aarch64 | Linux aarch64(交叉) | mcpp-X.Y.Z-linux-aarch64.tar.gz | 等 Linux x86_64 完成 |
build-macos | macOS ARM64 | mcpp-X.Y.Z-macosx-arm64.tar.gz | 等 Linux 完成 |
build-windows | Windows x86_64 | mcpp-X.Y.Z-windows-x86_64.zip | 等 Linux 完成 |
publish-ecosystem | — | 镜像到 xlings-res 双端 + 开索引 bump PR | 等全部四个构建完成 |
build-linux-aarch64 是两段式的(bootstrap 先构出本 release 的 x86_64 mcpp,再用它交叉构建
aarch64),因为 bootstrap 装的是上一个已发布版本,可能不认新特性。
# 监控 release workflow
gh run list --workflow release.yml --limit 1
# 查看详细步骤状态
gh run view <run-id>
# 如果失败,下载日志分析
gh api repos/mcpp-community/mcpp/actions/runs/<run-id>/logs \
-H "Accept: application/vnd.github+json" > /tmp/release-logs.zip
unzip -p /tmp/release-logs.zip "build + upload (linux _ x86_64)/8_Smoke-test the bundled tarball.txt"gh release view "v$NEW_VERSION"确认以下产物全部存在:
mcpp-X.Y.Z-linux-x86_64.tar.gz + .sha256mcpp-X.Y.Z-linux-aarch64.tar.gz + .sha256mcpp-X.Y.Z-macosx-arm64.tar.gz + .sha256mcpp-X.Y.Z-windows-x86_64.zip + .sha256mcpp-linux-x86_64.tar.gz 等)+ .sha256mcpp-X.Y.Z.tar.gz(源码包)mcpp.lua(xpkg 描述)install.shSHA256SUMS同时比较 Linux 资产与最近一次成功 release 的体积。若出现明显回升,先确认 strip 和打包步骤的断言仍然执行,再继续发布。
每个平台的 smoke test 验证:
test -x)file ... | grep 'statically linked')mcpp --version 输出包含版本号mcpp --help 正常输出mcpp self env 中 MCPP_HOME 正确解析每个 linux 平台在打包后、打 tar 前调用 .github/tools/slim_linux_payload.sh,
strip bin/mcpp 与 registry/bin/xlings 并断言结果(file 不得再含
not stripped)。
为什么必须断言:单独执行一次 strip 不足以证明最终 tarball 已变小,后续的
mcpp pack 可能重建并覆盖二进制。检查最终 payload 的 file 输出和资产体积,而非
依赖固定的 MB 数或历史发布大小。
macOS / Windows 故意不做:strip Mach-O 会让 ad-hoc 签名失效;按各平台的 release 规则验证最终资产,不要套用 Linux 的 strip 判断。
四个构建 job 全绿后自动执行,做两件事:
xlings-res/mcpp 双端(GitHub + GitCode),由
.github/tools/mirror_res.sh 完成 —— 单 leg 内资产并发上传
(MIRROR_MAX_PARALLEL,默认 8),预算是整条 leg 的 deadline
(MIRROR_LEG_DEADLINE_GH 600s / _GTC 2400s),不是 per-asset cap。openxlings/xim-pkgindex 开 bump PR(带每平台 sha256)。为什么不是 per-asset cap:实测(探针 PR #301)GitHub US runner 上传到
file.gitcode.com(单 IP 华为云北京)只有 0.012 MB/s —— 而同一台 runner
从同一个 IP 下载有 3.87 MB/s、传 GitHub 有 16 MB/s、大陆本机传它有
1.84 MB/s。被限的是国际入境方向,且速率有 ~4.6× 抖动,所以任何固定
per-asset 值都不可能既安全又有用。限速是 per-connection 的(1/4/8 并发
= 76/80/93s 墙钟),所以并发能叠加;但预签名是 OBS 单次 PUT 签名,无
multipart/无断点续传,单文件拆不开 —— 这正是必须先把载荷 strip 小的原因。
gtc 的退出码两个方向都会撒谎:PUT 头里的 x-obs-callback 让 OBS 存完对象
再回调 GitCode API,回调失败就返回 code:400 ... EOF,而对象其实已落盘。
判定上传成功只能靠回探下载 URL,脚本就是这么做的。
# 1) 索引 PR:CI 绿后合入,合入即自动发布索引 artifact
gh pr merge <n> --repo openxlings/xim-pkgindex --squash --admin
# 2) 真实验证(注意:不带 @版本 不会升级已装的旧版)
xlings update && xlings install mcpp@$NEW_VERSION -y
# 3) bootstrap pin 收尾 —— 仅 .xlings.json;新版此时已发布、已镜像、已进索引
sed -i "s/\"mcpp\": \"[^\"]*\"/\"mcpp\": \"$NEW_VERSION\"/" .xlings.json
# 不编辑 ci-fresh-install.yml 的 MCPP_PIN:它由 wait-index 运行时推导。
bash .github/tools/check_version_pins.sh # 复核 pin 关系
git commit -am "ci: workspace mcpp bootstrap pin -> $NEW_VERSION (released, mirrored, indexed)"顺序不能反:pin 一旦领先于"索引里真实存在的版本",每个 CI job 的 bootstrap 都会
package 'mcpp@X.Y.Z' not found。这就是 bump PR 里不许碰这两处的原因。
索引 PR 不要手写:publish-ecosystem 已经开好了 bot PR —— 分支
bump/mcpp-<ver>,提交者 xlings-ci <ci@xlings.dev>,diff 恒为 +22/-3。
承重的是那三行删除:生成器对每个平台表替换 ["latest"] 那一行,而不是新增一行。
收尾时只要合入它。
2026-09-05 手写了一个平行的索引 PR(xim-pkgindex#764,分支 feat/mcpp-<ver>,
+22/-0),两个缺陷一起产生:
["latest"] 键。Lua 表构造器以最后一次赋值
为准,latest 静默解析回上一个发布。精确版本条目仍在且正确,所以 mcpp 自己的
CI(精确 pin)完全看不见;只有不带版本的 xlings install mcpp 会拿到旧二进制。pkgs/m/mcpp.lua —— 它与手写后的 main 只差那几行陈旧的 ["latest"]。索引传播有滞后:索引 artifact 发布后,latest tag 上的指针文件在 GitHub
资产 CDN 上可能还要几分钟才更新。紧接着跑的 CI 可能仍拿到旧索引并报
package 'mcpp@X.Y.Z' not found —— 这不是 release 坏了,等指针稳定后重跑即可。
两个判据(都不是"文件里有这个版本字符串"):
# 1) 索引 main 上,latest 解析到新版本:恰好三行,每平台一行,都指向新版本
curl -fsSL https://raw.githubusercontent.com/openxlings/xim-pkgindex/main/pkgs/m/mcpp.lua \
| grep -n '\["latest"\]'
# 2) 推 pin 之前,指针已经跟上索引 main 的短 SHA
curl -fsSL https://github.com/xlings-res/xim-index/releases/download/latest/xim-index-latest.json \
| grep -E '"(index_version|source_commit)"'滞后的量级实测过:2026-09-05 那次,指针资产 17:20:32 就替换完了,CI 17:21:23 才去解析 (晚 51 秒),拿到的仍是上一份 artifact。所以"索引 PR 合入了"不足以放行 pin,要看指针。
两条渠道都挂在 release workflow 的 workflow_run: completed 上,不需要人工推:
| 渠道 | workflow | 核验 |
|---|---|---|
AUR (mcpp-bin / mcpp-m) | .github/workflows/aur-publish.yml | gh run list --workflow aur-publish.yml --limit 1 |
Homebrew tap (mcpp-m) | .github/workflows/homebrew-publish.yml → ping mcpp-community/homebrew-mcpp | gh api repos/mcpp-community/homebrew-mcpp/contents/Formula/mcpp-m.rb --jq .content | base64 -d | grep '^ version' |
Homebrew 那条不写公式,只发一个 repository_dispatch;公式重写由 tap 仓库自己的
bump-formula.yml 完成(它读 release 的 .sha256 边车)。这条 ping 依赖仓库 secret
HOMEBREW_TAP_TOKEN;没配也不会让发布失败 —— tap 有每日 schedule 兜底,24h 内自己跟上。
想立刻跟上就手动触发一次:
gh workflow run bump-formula.yml -R mcpp-community/homebrew-mcpp| 症状 | 原因 | 修复 |
|---|---|---|
mcpp X.Y.Z-1 但 tag 是 vX.Y.Z | fingerprint.cppm 版本未更新 | 更新 MCPP_VERSION,重新打 tag |
bump PR 里所有 CI job 都红在 bootstrap,报 package 'mcpp@X.Y.Z' not found | 把 .xlings.json bootstrap pin 一起 bump 了,CI 去装一个还没发布的版本 | 把 .xlings.json 回退到上一个已发布版本;不要修改运行时推导的 MCPP_PIN |
main 上所有 workflow 都红在 bootstrap,报 package 'mcpp@X.Y.Z' not found,而该版本确实已发布并已合入索引 | pin 推得比索引指针稳定早;客户端读 CDN artifact 不读 git 树 | 等 xim-index-latest.json 的 index_version 等于索引 main 短 SHA 后重跑;不要改 pin |
xlings install mcpp(不带 @版本)装到上一个版本,而索引文件里明明有新版本 | 同一平台表里两个 ["latest"] 键(手写索引 PR 追加而非替换),Lua 后写的赢 | 删掉陈旧的那行,使每个平台表只剩一个 ["latest"]。精确 pin 仍可用,所以 mcpp 自己的 CI 不会报这个 |
自查 --version 显示旧版本,但源码已改 | target/<triple>/<指纹>/ 的指纹随版本变,ls | head -1 取到了上一次构建的目录 | 用 ls -dt … | head -1 取最新构建 |
| Smoke test 输出旧版本 | CI 缓存了旧的 sandbox/target | 删除 GitHub Actions cache 后重跑 |
e2e 01_help_and_version.sh 挂 | 只改了 mcpp.toml 没改 fingerprint.cppm(它把两者交叉比对) | 同步两处正在构建的版本;注意这个 e2e 只在部分分片里跑,可能表现为"只有某个平台红" |
| xlings bootstrap 失败 | xlings 版本不兼容 | 改 src/platform/xlings/xlings.cppm::kXlingsVersion(唯一真源),再核对引用它的 workflow 与脚本;当前 pin-check 脚本修复前不能依赖它完成扫描 |
| macOS/Windows 构建失败 | 需要等 Linux job 先完成 | 检查 Linux job 是否成功 |
slim: FAIL: ... still not stripped | strip 工具没生效/被 pack 覆盖 | 别绕过断言——它就是为了拦住 34.8MB 的 tarball 再次发出去 |
mirror leg 报 missing/unverified | 资产没传上去或还没传播 | 先 GET 核验(必须 GET,curl -I 会骗你),gitcode 用 gitcode.com 直链而非 api. 主机;确认缺件后本地补传再 gh run rerun --failed(脚本幂等,已验证的资产会跳过) |
Release CI 使用多层缓存加速。如果怀疑缓存问题:
# 列出缓存
gh cache list | grep release
# 删除特定缓存
gh cache delete <cache-id>
# 重跑 release(不改 tag)
gh workflow run release.yml --ref "v$NEW_VERSION"如果发版后发现问题需要紧急修复:
# 1. 在 main 上修复
git checkout main && git pull
# ... 修改代码 ...
git commit -m "fix: <what the fix does, in English>"
git push origin main
# 2. 更新 tag 指向新 commit(包含修复)
git tag -d "v$NEW_VERSION"
git tag "v$NEW_VERSION"
git push origin "v$NEW_VERSION" --force
# 3. 删除旧 release(如果已创建)
gh release delete "v$NEW_VERSION" --yes
# 4. 重跑 release
gh workflow run release.yml --ref "v$NEW_VERSION"注意:如果修复涉及版本号变化,应该 bump 到新的 patch 版本而不是覆盖旧 tag。
| 文件 | 版本相关内容 |
|---|---|
mcpp.toml | version = "X.Y.Z" — 项目版本,release.yml 由它推导 tag |
src/version.cppm | MCPP_VERSION = "X.Y.Z" — 编译期版本常量 |
.xlings.json | workspace.mcpp — CI bootstrap 装哪个 mcpp(发布后才 bump) |
.github/workflows/ci-fresh-install.yml | MCPP_PIN — 由 wait-index 从最新 release 推导,从不手工 bump |
src/platform/xlings/xlings.cppm | kXlingsVersion — xlings pin 的唯一真源 |
.github/tools/check_version_pins.sh | 版本/pin 校验 guard(用 bash 跑,不能用 sh) |
.github/tools/slim_linux_payload.sh | linux 载荷 strip + 断言 |
.github/tools/mirror_res.sh | 双端镜像(并发上传 + leg deadline + 完整性 gate) |
.github/tools/gtc | GitCode CLI(release create/upload、PR) |
.github/workflows/release.yml | Release workflow 定义(四平台 + publish-ecosystem) |
install.sh | 安装脚本(随 release 发布) |
CHANGELOG.md | Release notes 来源(按 ## [X.Y.Z] 提取);条目、commit 与 release notes 一律用英文(2026.9.28.3 起) |
注意版本 bump 的两个阶段:
mcpp.toml+fingerprint.cppm在发版前改 (它们定义要发什么);.xlings.json只在发版成功、镜像并进索引后才可更新 (它指定 bootstrap 使用的已发布版本)。MCPP_PIN是被测版本的运行时推导值, 不属于任何手工 bump 阶段。这些关系由bash .github/tools/check_version_pins.sh校验。
© mcpp-community, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/mcpp-release of mcpp-community/mcpp.
Open the folder on GitHubat commit de9c290
Mcpp Release next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Mcpp Release this skillmcpp-community/mcpp | 155 | — | ~3.1k | Automated safety check: Pass | Apache-2.0 | |
| TDDFastLED/FastLED | 7.5k | — | ~848 | Automated safety check: Pass | MIT | |
| Ue Code AuthoringJasonMa0012/MooaToon | 749 | — | ~1.9k | Automated safety check: Notes | Custom licence | |
| Cppcrazyguitar/cppcheatsheet | 290 | — | ~1.8k | Automated safety check: Pass | MIT | |
| Ue Live DebuggingJasonMa0012/MooaToon | 749 | — | ~2.9k | Automated safety check: Notes | Custom licence | |
| Benchflow Experiment Reviewbenchflow-ai/benchflow | 353 | — | ~4k | Automated safety check: Pass | Apache-2.0 |
FastLED/FastLED
Guide Test-Driven Development workflow for FastLED. An agent skill from FastLED/FastLED.
JasonMa0012/MooaToon
A skill your agent uses when writing or modifying UE C++ (classes, actors, components, subsystems, interfaces, function libraries) with Rider MCP available.
crazyguitar/cppcheatsheet
Comprehensive C/C++ programming reference covering everything from C11-C23 and C++11-C++23, system programming, CUDA GPU computing, debugging tools, Rust interop, and advanced topics.
JasonMa0012/MooaToon
A skill your agent uses when debugging UE C++ crashes, runtime bugs, or unexpected behavior with Rider MCP available.
benchflow-ai/benchflow
Review Benchflow or SkillsBench task-run trajectories and integration-test Benchflow code changes.
LanternOps/breeze
A skill your agent uses when running a broad manual/AI-driven end-to-end verification of Breeze RMM across many merged PRs or commits — "test everything since the last release", release-readiness…
mcpp-community/mcpp
A skill your agent uses when contributing to the mcpp project — submitting bug fixes, new features, code optimizations, documentation improvements, or any PR.
mcpp-community/mcpp
A skill your agent uses when writing or editing anything under docs/ (English or 简体中文), docs/specs/, README files, or the design records under .agents/docs/ — states which tree a document belongs…
Categories
A skill your agent uses when releasing a new version of mcpp — bumps version, creates tag, triggers release CI, and monitors until all platforms succeed. Mcpp Release is an agent skill from mcpp-community/mcpp. Use when releasing a new version of mcpp — bumps version, creates tag, triggers release CI, and monitors until all platforms succeed.
Mcpp Release fits situations like: releasing a new version of mcpp — bumps version; triggers release CI; monitors until all platforms succeed.
Run `npx skills add mcpp-community/mcpp --skill mcpp-release -a claude-code`. Or copy the skill folder (.agents/skills/mcpp-release in mcpp-community/mcpp) into .claude/skills/mcpp-release in your project. Claude Code loads it when a task matches its description.
Run `npx skills add mcpp-community/mcpp --skill mcpp-release -a codex`. Or copy the skill folder (.agents/skills/mcpp-release in mcpp-community/mcpp) into .agents/skills/mcpp-release in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add mcpp-community/mcpp --skill mcpp-release -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/mcpp-release, .gemini/skills/mcpp-release, .github/skills/mcpp-release and .opencode/skills/mcpp-release in your project.
Going by SKILL.md and its folder, Mcpp Release needs the command-line tools its instructions call (gh, git, bash and curl) and credentials named HOMEBREW_TAP_TOKEN.
SKILL.md names 2 domains. In commands or code: github.com and raw.githubusercontent.com; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Mcpp Release is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.1k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Mcpp Release: TDD (FastLED/FastLED, 7.5k stars), Ue Code Authoring (JasonMa0012/MooaToon, 749 stars), Cpp (crazyguitar/cppcheatsheet, 290 stars) and Ue Live Debugging (JasonMa0012/MooaToon, 749 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
mcpp-community (a GitHub organization) maintains it in mcpp-community/mcpp, which has 155 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 6, 2026.
Source: mcpp-community/mcpp on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.