
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
https://img.shields.io/badge/marketplace-cmake--swiss--army--knife-blue?logo=github](https://github.com/marketplace/actions/cmake-swiss-army-knife) https://github.com/lpenz/ghaction-cmake/workflows/CI/badge.svg](https://github.com/lpenz/ghaction-cmake/actions) https://img.shields.io/github/v/release/lpenz/ghaction-cmake?include_prereleases&label=release&logo=github](https://github.com/lpenz/ghaction-cmake/releases) https://img.shields.io/docker/v/lpenz/ghaction-cmake?label=release&logo=docker&sort=semver](https://hub.docker.com/repository/docker/lpenz/ghaction-cmake)
ghaction-cmake是一个用于使用CMake的项目的GitHub Action。默认情况下,它构建、测试和安装项目——但通过使用预设,它可以轻松运行代码检查工具、覆盖率测试、Valgrind内存检查或sanitizers等。
ghaction-cmake按阶段运行:
make VERBOSE=1(显示构建命令)。ctest --output-on-failure .。preset设置预设,详见下方预设部分。
dependencies_debian要在容器中安装的项目依赖项(Debian包),以空格分隔。
working-directory将此目录用作cmake的源目录。主要用于CMake项目位于仓库子目录中的情况。
cmakeflags传递给cmake的标志。例如-DSOME_OPTION=On,用于向CMakeLists.txt传递选项。
build_command自定义构建命令。默认是make VERBOSE=1。
test_command自定义测试命令。未使用预设时,默认是ctest --output-on-failure .。
post_command测试后运行的自定义命令。未使用预设时,默认为空。
cmake是一个非常通用的工具,给定适当的参数可以完成多种不同任务。为了简化矩阵构建(matrix builds),ghaction-cmake提供预设,用于为特定模式配置这些选项。
可用的预设包括:
cppcheck:运行http://cppcheck.sourceforge.net/%E9%9D%99%E6%80%81%E5%88%86%E6%9E%90%E3%80%82
cmakeflags附加-DCMAKE_C/CXX_CPPCHECK=cppcheck。iwyu:运行include-what-you-use静态分析。
cmakeflags附加-DCMAKE_C/CXX_INCLUDE_WHAT_YOU_USE=iwyu。install:测试安装。
cmakeflags附加'-DCMAKE_INSTALL_PREFIX'。make install作为测试。find显示所有已安装文件。clang-tidy:运行https://clang.llvm.org/extra/clang-tidy/%E9%9D%99%E6%80%81%E5%88%86%E6%9E%90%E3%80%82
cmakeflags附加-DCMAKE_C/CXX_CLANG_TIDY=clang-tidy。clang-sanitize-<sanitizer>:使用https://clang.llvm.org/docs/index.html%E4%B9%8B%E4%B8%80%E7%BC%96%E8%AF%91%E5%B9%B6%E8%BF%90%E8%A1%8C%E6%B5%8B%E8%AF%95%E3%80%82
cmakeflags附加-DCMAKE_C/CXX_COMPILER=clang/clang++ -DCMAKE_C/CXX_FLAGS=-fno-omit-frame-pointer -fsanitize=<sanitizer>。valgrind:使用Valgrind运行测试。
ctest -DExperimentalMemCheck --output-on-failure .。coverage:运行覆盖率测试。
cmakeflags附加-DCMAKE_C/CXX_FLAGS=--coverage。此预设可与上传覆盖率数据到在线服务(如https://github.com/marketplace/actions/codecov%E5%92%8Chttps://github.com/marketplace/actions/coveralls-github-action%EF%BC%89%E7%9A%84GitHub Action配合使用。下方示例展示了如何实现。
下表总结了各预设的具体更改:
| 预设 | cmake | test | post |
|---|---|---|---|
| cppcheck | -DCMAKE_C/CXX_CPPCHECK=cppcheck | (删除) | |
| iwyu | -DCMAKE_C/CXX_INCLUDE_WHAT_YOU_USE=iwyu | (删除) | |
| install | -DCMAKE_INSTALL_PREFIX=/tmp/_install | make install | find /tmp_install -type f |
| clang-tidy | -DCMAKE_C/CXX_CLANG_TIDY=clang-tidy | (删除) | |
| clang-sanitize-<sanitizer> | -DCMAKE_C/CXX_COMPILER=clang/clang++ | ||
| valgrind | -DExperimentalMemCheck | ||
| coverage | -DCMAKE_C/CXX_FLAGS=--coverage | lcov -c -d . -o lcov.info |
请注意,预设会覆盖默认值,而其他更具体的输入(build_command、test_command、post_command)会覆盖预设。
以下工作流展示了如何在矩阵作业中使用预设:
yml--- name: CI on: [push, pull_request] jobs: # 使用环境变量的常规C构建,使用两种编译器: build_using_compiler_in_environment: strategy: matrix: compiler: - gcc - clang runs-on: ubuntu-latest # 可使用cmakeflags,或直接使用常规环境变量(GitHub Action已支持): env: - CC: ${{ matrix.compiler }} steps: - uses: actions/checkout@v2 - uses: docker://lpenz/ghaction-cmake:v0.10 # 使用cmakeflags的常规C构建,使用两种编译器: build_using_compiler_in_cmakeflags: strategy: matrix: compiler: - gcc - clang runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 # 此示例使用适当的cmakeflags - uses: docker://lpenz/ghaction-cmake:v0.10 with: cmakeflags: ${{ format('-DCMAKE_C_COMPILER={0}', matrix.compiler) }} # 使用codecov的覆盖率测试: codecov: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: docker://lpenz/ghaction-cmake:v0.10 with: preset: coverage # ghaction-cmake可与codecov提供的GitHub Action配合使用: - uses: codecov/codecov-action@v1 with: fail_ci_if_error: true # 使用coveralls的覆盖率测试: coveralls: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: docker://lpenz/ghaction-cmake:v0.10 with: preset: coverage # 若传递path-to-lcov,ghaction-cmake可与coveralls提供的GitHub Action配合使用: - uses: coverallsapp/github-action@master with: github-token: ${{ secrets.GITHUB_TOKEN }} path-to-lcov: lcov.info # 静态分析工具: linters: strategy: matrix: preset: [ cppcheck, iwyu, clang-tidy ] runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: docker://lpenz/ghaction-cmake:v0.10 with: preset: ${{ matrix.preset }} # 使用多种sanitizers和valgrind的测试: test: strategy: matrix: preset: - clang-sanitizer-address - clang-sanitizer-memory - clang-sanitizer-undefined - clang-sanitizer-dataflow - clang-sanitizer-safe-stack - valgrind runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: docker://lpenz/ghaction-cmake:v0.10 with: preset: ${{ matrix.preset }} # 测试安装: install: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: docker://lpenz/ghaction-cmake:v0.10 with: preset: install
注意,上述文件将静态分析工具与sanitizers分开,但实际上它们可放在同一个矩阵作业中,因为其他参数相同。
此GitHub Action实际上是一个Docker镜像,可在本地甚至[***]
shdocker pull docker.xuanyuan.run/lpenz/ghaction-cmake:v0.10
然后,在项目目录中运行容器,例如:
shdocker run --rm -t -u "$UID" -w "$PWD" -v "${PWD}:${PWD}" -e INPUT_PRESET=valgrind docker.xuanyuan.run/lpenz/ghaction-cmake:v0.10
需注意,Action参数通过大写环境变量传递,前缀为INPUT_。
以下.travis.yml在travis-ci中运行相同内容:
yml--- language: generic jobs: include: - install: docker pull docker.xuanyuan.run/lpenz/ghaction-cmake:v0.10 - script: docker run --rm -t -u "$UID" -w "$PWD" -v "${PWD}:${PWD}" -e INPUT_PRESET=valgrind lpenz/ghaction-cmake:v0.10
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务