API de envío de dependencias es un método para enviar datos al gráfico de dependencias. Permite enviar dependencias que no se capturan mediante el análisis estático. Para más información, consulta Cómo reconoce el gráfico de dependencias las dependencias.
Envío de dependencias en tiempo de compilación
Puedes usar la API de envío de dependencias en un flujo de trabajo de GitHub Actions para enviar dependencias para tu proyecto cuando se compila.
Uso de acciones hechas previamente
La manera más sencilla de usar la API de envío de dependencias es agregar una acción hecha previamente al repositorio que recopilará y convertirá la lista de dependencias al formato de instantánea requerido y enviará la lista a la API.
| Ecosistema | Action |
|---|---|
| Go | Envío de dependencias de Go |
| Gradle | Envío de dependencias de Gradle |
| Maven | Envío de dependencias del árbol de dependencias de Maven |
| Molino | Envío de dependencias de Mill |
| Mix (Elixir) | Envío de dependencias de Mix |
| Scala | Envío de dependencias de SBT |
| NuGet y otros | Acción de envío de dependencia de detección de componentes |
Nota:
Para la acción de envío de dependencias de detección de componentes, otros ecosistemas admitidos incluyen Vcpkg, Conan, Conda, Crates y también NuGet.
Por ejemplo, el flujo de trabajo de Envío de dependencias de Go siguiente calcula las dependencias de un destino de compilación de Go (un archivo de Go con una función main) y envía la lista a la API de envío de dependencias.
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
Para obtener más información sobre estas acciones, consulta Ecosistemas de paquetes que soportan el gráfico de dependencias.
Creación de una acción propia
De manera alternativa, puedes escribir tu propia acción para enviar dependencias para el proyecto en tiempo de compilación. El flujo de trabajo debe:
- Generar una lista de dependencias para el proyecto.
- Traducir la lista de dependencias al formato de instantánea que la API de envío de dependencias acepta. Para obtener más información sobre el formato, consulte los parámetros de cuerpo para el punto de conexión de API "Crear una instantánea de repositorio" en Puntos de conexión de la API de REST para el envío de dependencias.
- Enviar la lista de dependencias con formato a la API de envío de dependencias.
mantiene el Dependency Submission Toolkit, una biblioteca de TypeScript que le ayudará a crear su propia acción de GitHub para enviar dependencias a API de envío de dependencias. Para más información sobre cómo escribir una acción, consulta Reutilización de automatizaciones.
Envío de SBOM como instantáneas
Si tienes herramientas externas que crean o administran listas de materiales de software (SBOM), también puedes enviar esas SBOM a API de envío de dependencias. El formato de datos de instantáneas es muy similar a los formatos de SBOM estándar SPDX y CycloneDX, y hay varias herramientas que pueden generar o traducir formatos para su uso como instantáneas.
Sugerencia
La acción de envío de dependencias SPDX y la acción SBOM de Anchore se pueden usar para generar la SBOM y enviarla a API de envío de dependencias.
Por ejemplo, el siguiente flujo de trabajo de Acción de envío de dependencia de SPDX calcula las dependencias para un repositorio, genera un SBOM exportable en formato SPDX 2.2 y lo envía a la API de envío de dependencias.
# Este flujo de trabajo usa acciones que no GitHub no certifica.
# Estas las proporcionan entidades terceras y las gobiernan
# condiciones de servicio, políticas de privacidad y documentación de soporte
# en línea.
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/"