API отправки зависимостей — это метод подачи данных в граф зависимостей. Он позволяет подавать зависимости, которые не учитываются статическим анализом. Дополнительные сведения см. в разделе Как граф зависимостей распознаёт зависимости.
Отправка зависимостей во время сборки
Вы можете использовать API отправки зависимостей в рабочем процессе GitHub Actions для отправки зависимостей для проекта при создании проекта.
Использование готовых действий
Самый простой способ использования API отправки зависимостей заключается в добавлении предварительно созданного действия в репозиторий, которое собирает и преобразует список зависимостей в требуемый формат моментального снимка и отправляет список в API.
| Экосистема | Действие |
|---|---|
| Go | Отправка зависимостей Go |
| Gradle | Отправка зависимостей Gradle |
| Maven | Отправка зависимостей дерева зависимостей Maven |
| Мельница | Отправка зависимостей Милли |
| Mix (Elixir) | Отправка зависимостей смешивания |
| Scala | Отправка зависимостей Sbt |
| NuGet и другие | Действие отправки зависимостей обнаружения компонентов |
Примечание.
Для действия отправки зависимостей обнаружения компонентов другие поддерживаемые экосистемы включают Vcpkg, Conan, Conda, Crates, а также NuGet.
Например, следующий рабочий процесс отправки зависимостей Go вычисляет зависимости для целевого объекта сборки Go (файл Go с main функцией) и отправляет список в API отправки зависимостей.
name: Go Dependency Submission
on:
push:
branches:
- main
# The API requires write permission on the repository to submit dependencies
permissions:
contents: write
# Environment variables to configure Go and Go modules. Customize as necessary
env:
GOPROXY: '' # A Go Proxy server to be used
GOPRIVATE: '' # A list of modules are considered private and not requested from GOPROXY
jobs:
go-action-detection:
runs-on: ubuntu-latest
steps:
- name: 'Checkout Repository'
uses: actions/checkout@v5
- uses: actions/setup-go@v5
with:
go-version: ">=1.18.0"
- name: Run snapshot action
uses: actions/go-dependency-submission@v2
with:
# Required: Define the repo path to the go.mod file used by the
# build target
go-mod-path: go-example/go.mod
#
# Optional. Define the repo path of a build target,
# a file with a `main()` function.
# If undefined, this action will collect all dependencies
# used by all build targets for the module. This may
# include Go dependencies used by tests and tooling.
go-build-target: go-example/cmd/octocat.go
Дополнительные сведения об этих действиях см. в разделе Поддерживаемые экосистемы пакетов графа зависимостей.
Создание собственного действия
Кроме того, можно написать собственное действие для отправки зависимостей для проекта во время сборки. Рабочий процесс должен делать следующее:
- Создать список зависимостей для проекта.
- Преобразуйте список зависимостей в формат моментального снимка, принятый API отправки зависимостей. Дополнительные сведения о формате см. в параметрах текста конечной точки API "Создание моментального снимка репозитория" в Конечные точки REST API для отправки зависимостей.
- Отправьте форматированный список зависимостей в API отправки зависимостей.
поддерживает Dependency Submission Toolkit — библиотеку TypeScript, которая помогает вам создать собственное GitHub действие для отправки зависимостей в API отправки зависимостей. Дополнительные сведения о написании действия см. в разделе Повторное выполнение автоматизации.
Отправка SBOM в виде моментальных снимков
Если у вас есть внешние средства, которые создают или управляют счетами по программному обеспечению материалов (SBOMs), вы также можете отправить эти SBOM в API отправки зависимостей. Формат данных моментальных снимков очень похож на стандартные форматы SPDX и циклонеDX SBOM, и есть несколько средств, которые могут создавать или преобразовывать форматы для использования в качестве моментальных снимков.
Совет
Действие отправки зависимостей SPDX и действие привязки SBOM можно использовать для создания SBOM и отправки его в API отправки зависимостей.
Например, следующий рабочий процесс действия отправки зависимостей SPDX вычисляет зависимости для репозитория, создает экспортируемый SBOM в формате SPDX 2.2 и отправляет его в API отправки зависимостей.
# Этот рабочий процесс использует действия, которые не сертифицированы GitHub.
# Они предоставляются сторонним поставщиком, и на них распространяются
# отдельные условия обслуживания, политика конфиденциальности и поддержка
# документации.
name: SBOM upload
on:
workflow_dispatch:
push:
branches: ["main"]
jobs:
SBOM-upload:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: write
steps:
- uses: actions/checkout@v5
- name: Generate SBOM
# generation command documentation: https://github.com/microsoft/sbom-tool#sbom-generation
run: |
curl -Lo $RUNNER_TEMP/sbom-tool https://github.com/microsoft/sbom-tool/releases/latest/download/sbom-tool-linux-x64
chmod +x $RUNNER_TEMP/sbom-tool
$RUNNER_TEMP/sbom-tool generate -b . -bc . -pn $ -pv 1.0.0 -ps OwnerName -nsb https://sbom.mycompany.com -V Verbose
- uses: actions/upload-artifact@v3
with:
name: sbom
path: _manifest/spdx_2.2
- name: SBOM upload
uses: advanced-security/spdx-dependency-submission-action@5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e
with:
filePath: "_manifest/spdx_2.2/"