erlef/mix_sbom

GitHub: erlef/mix_sbom

为 Elixir/Mix 项目自动生成 CycloneDX 格式软件物料清单的工具,由 Erlang Ecosystem Foundation 安全工作组维护。

Stars: 47 | Forks: 20

# SBoM [![EEF Security WG 项目](https://img.shields.io/badge/EEF-Security-black)](https://github.com/erlef/security-wg) [![.github/workflows/branch_main.yml](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/47b6cf51f1151105.svg)](https://github.com/erlef/mix_sbom/actions/workflows/branch_main.yml) [![覆盖率状态](https://coveralls.io/repos/github/erlef/mix_sbom/badge.svg?branch=main)](https://coveralls.io/github/erlef/mix_sbom?branch=main) [![OpenSSF 记分卡](https://api.scorecard.dev/projects/github.com/erlef/mix_sbom/badge)](https://scorecard.dev/viewer/?uri=github.com/erlef/mix_sbom) [![OpenSSF 最佳实践](https://www.bestpractices.dev/projects/11509/badge)](https://www.bestpractices.dev/projects/11509) [![REUSE 状态](https://api.reuse.software/badge/github.com/erlef/mix_sbom)](https://api.reuse.software/info/github.com/erlef/mix_sbom) 以 [CycloneDX](https://cyclonedx.org) 格式为 Mix 项目生成软件物料清单。 完整文档可在 [https://hexdocs.pm/sbom](https://hexdocs.pm/sbom) 找到。 有关如何使用此工具的快速演示,请查看[此博客文章](https://blog.voltone.net/post/24)。 ## 安装 此工具可以通过多种方式安装: ### 1. 项目依赖(推荐用于开发) 将依赖项添加到项目的 `mix.exs` 中(仅用于开发环境): ``` def deps do [ {:sbom, "~> 0.8", only: :dev, runtime: false}, # If using Elixir < 1.18 and want JSON output, also add: # {:jason, "~> 1.4"} ] end ``` ### 2. Mix Escript(全局安装) 在您的系统上全局安装 Mix 任务: ``` mix escript.install hex sbom ``` ### 4. Burrito 二进制文件(从 releases 获取) 从 [releases 页面](https://github.com/erlef/mix_sbom/releases) 下载独立的二进制文件(不需要 BEAM 运行时)。 ## 用法 ### 作为 Mix 任务(仅限项目依赖) 当作为项目依赖安装时,从包含 `mix.exs` 的项目目录运行: ``` mix sbom.cyclonedx ``` 结果将被写入 `bom.cdx.json`,除非使用 `-o` 选项指定了不同的文件名。使用 `--only dev --only test --only prod` 可以包含来自特定环境的依赖。 ### 作为独立二进制文件(escript 安装或 Burrito) 当使用全局安装的 escript、下载的 escript 或 Burrito 二进制文件时,您必须将项目路径作为参数提供: ``` # 全局 escript 或下载的 binary mix_sbom cyclonedx /path/to/your/project # 或使用 options mix_sbom cyclonedx --output=my-sbom.json --format=json --only prod \ /path/to/your/project ``` ### 常见注意事项 默认情况下,所有环境的依赖都会被包含。若仅包含生产环境依赖,请使用 `--only prod`。要包含特定环境,请使用多个 `--only` 标志,如 `--only dev --only test --only prod`。 *请注意,MIX_ENV 不会影响输出中包含的依赖项;该任务通常应在默认环境 中运行* ### 可用选项 - `-o, --output PATH`:输出文件路径(默认为 `bom.cdx.json`) 使用 `-` 输出到 STDOUT - `-s, --schema VERSION`:CycloneDX 架构版本 - 1.3、1.4、1.5、1.6、1.7(默认为 1.6) - `-t, --format FORMAT`:输出格式 - xml、json、protobuf(默认为 json) - `-l, --only ENV`:仅包含指定环境的依赖(默认为所有环境,使用多个标志可指定多个环境) - `-a, --targets TARGET`:包含来自指定 Mix 目标的组件(默认为所有目标,使用多个标志可指定多个目标) - `-c, --classification TYPE`:组件分类类型(默认为 application)。常见类型包括 `application`、`framework` 和 `library`。有关所有可用类型,请参阅 [CycloneDX 文档](https://cyclonedx.org/docs/1.7/json/#components_items_type_enum)。 - `-f, --force`:覆盖现有输出文件 - `-r, --recurse`:递归进入 umbrella 应用程序 - `-x, --exclude-system-dependencies`:从 SBoM 中排除系统依赖(Erlang/OTP、Elixir、Hex) 获取更多信息: - Mix 任务:`mix help sbom.cyclonedx` - 独立二进制文件:`mix_sbom --help` ## GitHub Action 此工具也可作为 GitHub Action 用于 CI/CD 工作流。 该 action 会下载并验证二进制文件的来源,然后为您的项目生成 SBoM。 ### 基本用法 ``` - name: Generate SBoM uses: erlef/mix_sbom@v0 id: sbom with: project-path: ${{ github.workspace }} schema: "1.6" format: "json" - name: Display SBoM run: cat "$SBOM_FILE" env: SBOM_FILE: ${{ steps.sbom.outputs.sbom-path }} ``` ### 输入 - `project-path`:包含 mix.exs 的目录路径(默认为仓库根目录) - `schema`:CycloneDX 架构版本(默认为 "1.6") - `format`:输出格式 - "json"、"xml" 或 "protobuf"(默认为 "json") - `reuse-beam`:使用本地 BEAM 安装而不是预编译的二进制文件(默认为 "false") - `include-system-dependencies`:在 SBoM 中包含系统依赖(Erlang/OTP、Elixir、Hex)(默认为 "true") ### 输出 - `sbom-path`:生成的 SBoM 文件的路径 该 action 会自动处理为您的运行器架构下载正确的二进制文件,并使用 GitHub 的证明系统验证其来源。 ### 使用本地 BEAM(推荐) 为了进行最准确的依赖分析,建议通过设置 `reuse-beam: true` 来使用本地 BEAM 安装。此方法: - 能在生成的 SBoM 中正确检测 Elixir 和 Erlang 版本 - 可配合您项目的特定运行时环境工作 - 提供更准确的依赖信息 要使用此方法,请首先在工作流中设置 Elixir/Erlang: ``` - name: Set up Elixir uses: erlef/setup-beam@v1 with: elixir-version: '1.17.3' otp-version: '27.1' - name: Get dependencies run: mix deps.get - name: Generate SBoM uses: erlef/mix_sbom@v0 with: reuse-beam: true ``` **注意**:为了获得最详细的依赖分析,您应该在使用此操作之前运行 `mix deps.get`,以确保所有依赖都已解析。 ## NPM 包和其他依赖 此工具仅考虑通过 Mix 管理的 Hex、GitHub 和 BitBucket 依赖。要构建部署的综合 SBoM(包括 NPM 和/或操作系统包),可能需要将多个 CycloneDX 文件合并为一个。 NPM 上的 [@cyclonedx/bom](https://www.npmjs.com/package/@cyclonedx/bom) 工具不仅能为您的 JavaScript 资产生成 SBoM,还可以通过 `-a` 选项将 `sbom.cyclonedx` Mix 任务及其他扫描器的输出合并为一个单独的 CycloneDX XML 文件。
标签:CycloneDX, DevSecOps, Elixir, Erlang Ecosystem Foundation, Escript, GPT, Hex包, Mix, SBoM, SBOM, 上游代理, 二进制发布, 依赖管理, 安全合规, 开源工具, 漏洞管理, 硬件无关, 网络代理, 跌倒检测, 软件物料清单