Skip to main content

Enterprise Server 3.20 actualmente está disponible como versión candidata para lanzamiento.

Uso de la Dependency submission API

Puedes usar la API de envío de dependencias para enviar dependencias para proyectos, como las dependencias resueltas cuando se crea o compila un proyecto.

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.

EcosistemaAction
GoEnvío de dependencias de Go
GradleEnvío de dependencias de Gradle
MavenEnvío de dependencias del árbol de dependencias de Maven
MolinoEnvío de dependencias de Mill
Mix (Elixir)Envío de dependencias de Mix
ScalaEnvío de dependencias de SBT
NuGet y otrosAcció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:

  1. Generar una lista de dependencias para el proyecto.
  2. 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.
  3. 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/"