Spec-Zone.ru › Homebrew

Класс: SBOM Закрытый

Наследует:
Object
  • Object
  • SBOM
показать все
Включает:
Utils::Output::Mixin
Определён в:
sbom.rb

Обзор

Этот класс является частью закрытого 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 для новой установки формулы.

Параметры:

  • formula (Formula)
  • tab (Tab)

Возвращает:

  • (T.attached_class)


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. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • formula (Formula)

Возвращает:

  • (Boolean)


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. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • deps (Array<Hash{String => T.untyped}>)

Возвращает:

  • (Array<Hash{String => T.anything}>)


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. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Hash{String => T.anything})


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. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • formula (Formula)

Возвращает:

  • (Pathname)


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. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • bottling (Boolean) (по умолчанию: false)

Возвращает:

  • (Array<String>)


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"
    error_message = "Need json_schemer to validate SBOM, run `brew install-bundler-gems --add-groups=bottle`!"
    odie error_message 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. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • bottling (Boolean) (по умолчанию: false)

Возвращает:

  • (Boolean)


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. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Этот метод возвращает неопределённое значение.

Параметры:

  • validate (Boolean) (по умолчанию: true)
  • bottling (Boolean) (по умолчанию: false)


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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API