# sbom-tool **Repository Path**: itwennet/sbom-tool ## Basic Information - **Project Name**: sbom-tool - **Description**: SBOM-TOOL 是通过源码仓库、代码指纹、构建环境、制品信息、制品内容、依赖组件等多种维度信息,为软件项目生成软件物料清单(SBOM)的一款CLI工具。 - **Primary Language**: Go - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 60 - **Created**: 2024-05-27 - **Last Updated**: 2024-05-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SBOM-TOOL English | [简体中文](./README_zh.md) SBOM-TOOL is a ctl tool that generates software bill of materials (SBOM) for software projects through source code warehouse, code fingerprint, construction environment, artifact information, artifact content, dependency construction and other dimensional information. ## Feature ### Information collection - Collect source code engineering information, including warehouse address, version information, etc. - Collect and generate code fingerprints - Collecting engineering construction depends on environmental information - Collect the dependent components built by the project - Collect the final artifact package information - Collect artifact content information, including file name type, check code, etc. ### SBOM document - Assemble SBOM documents - Standard format conversion,support domestic XSPDX, SPDX and other specifications, support JSON, TagValue and other formats - Canonical format check,support domestic XSPDX, SPDX and other specifications, support JSON, TagValue and other formats ## Code fingerprint generation ability | language | Is it supported| |---------------|---------------------| | `C/C++` | yes | | `Java` | yes | | `C#` | yes | | `Dart` | yes | | `Golang` | yes | | `Javascript` | yes | | `Objective-C` | yes | | `Php` | yes | | `Python` | yes | | `Ruby` | yes | | `Rust` | yes | | `Swift` | yes | | `Lua` | yes | ## Dependent packet scanning capability Configuration file parsing and binary package parsing related to the following programming languages are now supported, and more programming languages will be supported step by step. | Package Type | Package Manager | Parsing file | support dependency graph | |-------------|--------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------| | `maven` | [Maven](https://maven.apache.org) | | yes | | `maven` | [Gradle](https://gradle.org) | | yes | | `conan` | [Conan](https://conan.io) | | yes | | `npm` | [NPM](https://www.npmjs.com) | | no | | `npm` | [Yarn](https://yarnpkg.com) | | yes | | `npm` | [PNPM](https://pnpm.io/) | | yes | | `golang` | [Go Module](https://go.dev/ref/mod) | | yes | | `golang` | [Glide](https://github.com/Masterminds/glide) | | no | | `golang` | [GoDep](https://github.com/tools/godep) | | no | | `golang` | [Dep](https://github.com/golang/dep) | | no | | `golang` | [GVT](https://github.com/FiloSottile/gvt) | | no | | `pypi` | [PIP](https://pip.pypa.io) | | yes | | `pypi` | [Poetry](https://python-poetry.org) | | yes | | `conda` | [Conda](https://conda.io) | | no | | `composer` | [Composer](https://getcomposer.org) | | no | | `cargo` | [Cargo](https://doc.rust-lang.org/cargo) | | yes | | `carthage` | [Carthage](https://github.com/Carthage/Carthage) | | no | | `swift` | [SwiftPM](https://www.swift.org/package-manager) | | no | | `cocoapods` | [Cocoapods](https://cocoapods.org) | | yes | | `gem` | [Gem](https://rubygems.org) | | yes | | `nuget` | [NuGet](https://www.nuget.org) | | yes | | `pub` | [Pub](https://pub.dev) | | yes | | `rpm` | [RPM](https://rpm-packaging-guide.github.io) | | no | | `deb` | [DEB](https://deb.debian.org/debian) | | no | | `lua` | [LuaRocks](https://luarocks.org) | | no | | `bower` | [Bower](https://bower.io) | | no | ## Architecture ![SBOM-TOOL architecture](./docs/img/arch.png) ## Installation 1. Download source code compilation(`go 1.18` or above is required) ```shell git clone git@gitee.com:JD-opensource/sbom-tool.git cd sbom-tool make ``` Generate program binaries for various system architectures by default - Linux X86_64:sbom-tool-linux-amd64 - Linux arm64:sbom-tool-linux-arm64 - Windows X86_64:sbom-tool-windows-amd64.exe - Windows arm64:sbom-tool-windows-arm64.exe - MacOS amd64: sbom-tool-darwin-amd64 - MacOS arm64: sbom-tool-darwin-arm64 Or install via go install ```shell go install gitee.com/JD-opensource/sbom-tool/cmd/sbom-tool@latest ``` Or install via downloading the binary: [SBOM-TOOL Releases](https://gitee.com/JD-opensource/sbom-tool/releases) ## Subcommands | subcommand | function | |---------------|--------------------| | `help` | Help about any command | | `artifact` | collect artifact information | | `assembly` | assembly sbom document from document segments | | `completion` | Generate the autocompletion script for the specified shell | | `convert` | convert sbom document format | | `env` | build environment info| | `fingerprint` | generate code fingerprint | | `generate` | generate sbom document | | `package` | collect package dependencies | | `source` | collect source code information | | `validate` | validate sbom document format | | `info` | get tool introduction information | | `modify` | modify sbom document properties| ## Parameter description |Parameters | Short parameter | describe | Use exampl | | --------- |------|-----------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------| | `--log-level ` | | log level (`debug`、`info`、`warn`、`error`) | `--log-level info` | | `--log-path ` | | log output path (default "$home/sbom-tool/sbom-tool.log") | `--log-path /tmp/sbom.log` | | `--quiet ` | `-q` | no console output | `--quiet`
`-q` | | `--ignore-dirs` | | dirs to ignore, skip all dot dirs, split by comma. sample: node_modules,logs | `--ignore-dirs log,logs` | | `--language` | `-l` | programming language (Currently supported:`java`,`cpp`)(Default “*”) | `--language java`
`-l cpp` | | `--parallelism` | `-m` | number of parallelism(Default `8`) | `--parallelism 4`
`-m 9` | | `--output` | `-o` | output file,The result file is produced in the current directory by default. | `--output /tmp/sbom.json` | | `--src` | `-s` | project source directory(use project root if empty) (default ".") | `--src /tmp/sbomtool/src/` | | `--path` | `-p` | Specify the project project home directory; the assemble subcommand is used to specify the temporary document path for each phase | `--path /tmp/sbomtool/` | | `--dist ` | `-d` | distribution directory (default ".") | `--dist /tmp/sbomtool/bin/` | | `--format` | `-f` | Specify SBOM document format(Currently supported:`xspdx-json`、`spdx-json`、`spdx-tagvalue` )(Default `spdx-json`) | `--format xspdx-json`
`-f spdx-json` | | `--input` | `-i` | Specify the SBOM document as input | `--input /tmp/sbom.jsom` | ## SBOM Document specification and format | specification | format | SBOM document format | status | |:--------------|:-----------|:-----------------|:----| | `XSPDX` | `JSON` | `xspdx-json` | Supported | | `SPDX` | `JSON` | `spdx-json` | Supported | | `SPDX` | `TagValue` | `spdx-tagvalue` | Supported | ## User guide Generate code fingerprints only based on the source code path ```shell sbom-tool fingerprint -m 4 -s ${src_path} -o fingerprint.json --ignore-dirs .git ``` Generate an SBOM document and specify the format ```shell sbom-tool generate -m 4 -p ${project_path} -s ${src_path} -d ${dist_path} -o sbom.spdx.json -f spdx-json --ignore-dirs .git -n ${name} -v ${version} -u ${supplier} -b ${namespace} ``` Get tool introduction information ```shell sbom-tool info ``` See [document](docs/en-US/user-guide.md) for details. ## Development guide See for details [Development guide documentation](docs/en-US/development-guide.md) ## Problem feedback & contact us If you encounter problems in use, you are welcome to submit ISSUE to us. ## How to Contribute SBOM-TOOL is a open source software component analysis tool, look forward to your contribution. ## License This project is licensed under **MulanPSL2** - see the [LICENSE](LICENSE) file for details.