Класс: SBOM Закрытый
Обзор
Этот класс является частью закрытого API. Этот класс можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого класса, поскольку он может быть удалён или изменён без предупреждения.
Вместо прямого вызова new используйте один из методов класса, например SBOM.create.
Определено в пространстве имён
Классы: Source
Сводка констант свернуть
- FILENAME =
Эта константа является частью закрытого API. Эту константу можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этой константы, поскольку она может быть удалена или изменена без предупреждения.
"sbom.spdx.json"- SCHEMA_FILE =
Эта константа является частью закрытого API. Эту константу можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этой константы, поскольку она может быть удалена или изменена без предупреждения.
T.let((HOMEBREW_LIBRARY_PATH/"data/schemas/sbom.json").freeze, Pathname)
Сводка методов класса свернуть
- .create(formula, tab) ⇒ T.attached_class закрытый
Создаёт экземпляр SBOM для новой установки формулы.
- .exist?(formula) ⇒ Boolean закрытый
- .runtime_deps_hash(deps) ⇒ Array<Hash{String => T.anything}> закрытый
- .schema ⇒ Hash{String => T.anything} закрытый
- .spdxfile(formula) ⇒ Pathname закрытый
Сводка методов экземпляра свернуть
- #schema_validation_errors(bottling: false) ⇒ Array<String> закрытый
- #valid?(bottling: false) ⇒ Boolean закрытый
- #write(validate: true, bottling: false) ⇒ void закрытый
Методы, включённые из Utils::Output::Mixin
#issue_reporting_message, #odebug, #odeprecated, #odie, #odisabled, #ofail, #oh1, #oh1_title, #ohai, #ohai_title, #onoe, #opoo, #opoo_outside_github_actions, #opoo_without_github_actions_annotation, #pretty_deprecated, #pretty_disabled, #pretty_duration, #pretty_install_status, #pretty_installed, #pretty_uninstalled, #pretty_upgradable, #pretty_warning
Подробное описание методов класса
.create(formula, tab) ⇒ T.attached_class
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Создаёт экземпляр SBOM для новой установки формулы.
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | # File 'sbom.rb', line 30 def self.create(formula, tab) active_spec = if formula.stable? T.must(formula.stable) else T.must(formula.head) end active_spec_sym = formula.active_spec_sym new( name: formula.name, homebrew_version: HOMEBREW_VERSION, spdxfile: SBOM.spdxfile(formula), time: tab.time || Time.now, source_modified_time: tab.source_modified_time.to_i, compiler: tab.compiler, stdlib: tab.stdlib, runtime_dependencies: SBOM.runtime_deps_hash(T.cast(Array(tab.runtime_dependencies), T::Array[T::Hash[String, T.untyped]])), license: SPDX.license_expression_to_string(formula.license), built_on: DevelopmentTools.build_system_info, source: Source.new( path: formula.specified_path.to_s, tap_name: formula.tap&.name, # We can only get `tap_git_head` if the tap is installed locally tap_git_head: (formula.tap!.git_head if formula.tap&.installed?), spec: active_spec_sym, patches: active_spec.patches, bottle: formula.bottle_hash, version: active_spec.version, url: active_spec.url, checksum: active_spec.checksum, ), ) end |
.exist?(formula) ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
87 88 89 | # File 'sbom.rb', line 87 def self.exist?(formula) spdxfile(formula).exist? end |
.runtime_deps_hash(deps) ⇒ Array<Hash{String => T.anything}>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
71 72 73 74 75 76 77 78 79 80 81 82 83 84 | # File 'sbom.rb', line 71 def self.runtime_deps_hash(deps) deps.map do |dep| full_name = dep.fetch("full_name") dep_formula = Formula[full_name] { "full_name" => full_name, "pkg_version" => dep.fetch("pkg_version"), "name" => dep_formula.name, "license" => SPDX.license_expression_to_string(dep_formula.license), "bottle" => dep_formula.bottle_hash, "formula_pkg_version" => dep_formula.pkg_version.to_s, } end end |
.schema ⇒ Hash{String => T.anything}
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
92 93 94 | # File 'sbom.rb', line 92 def self.schema @schema ||= T.let(JSON.parse(SCHEMA_FILE.read, freeze: true), T.nilable(T::Hash[String, T.untyped])) end |
.spdxfile(formula) ⇒ Pathname
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
66 67 68 | # File 'sbom.rb', line 66 def self.spdxfile(formula) formula.prefix/FILENAME end |
Подробное описание методов экземпляра
#schema_validation_errors(bottling: false) ⇒ Array<String>
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
97 98 99 100 101 102 103 104 105 106 107 108 | # File 'sbom.rb', line 97 def schema_validation_errors(bottling: false) unless Homebrew.require? "json_schemer" = "Need json_schemer to validate SBOM, run `brew install-bundler-gems --add-groups=bottle`!" odie if ENV["HOMEBREW_ENFORCE_SBOM"] return [] end schemer = JSONSchemer.schema(SBOM.schema) data = to_spdx_sbom(bottling:) schemer.validate(data).map { |error| error["error"] } end |
#valid?(bottling: false) ⇒ Boolean
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
111 112 113 114 115 116 117 118 119 120 121 | # File 'sbom.rb', line 111 def valid?(bottling: false) validation_errors = schema_validation_errors(bottling:) return true if validation_errors.empty? opoo "SBOM validation errors:" validation_errors.each { |error| $stderr.puts error } odie "Failed to validate SBOM against JSON schema!" if ENV["HOMEBREW_ENFORCE_SBOM"] false end |
#write(validate: true, bottling: false) ⇒ void
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
124 125 126 127 128 129 130 131 132 133 134 135 | # File 'sbom.rb', line 124 def write(validate: true, bottling: false) # If this is a new installation, the cache of installed formulae # will no longer be valid. Formula.clear_cache unless spdxfile.exist? if validate && !valid?(bottling:) opoo "SBOM is not valid, not writing to disk!" return end spdxfile.atomic_write(JSON.pretty_generate(to_spdx_sbom(bottling:))) end |
© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/SBOM.html