Skip to main content

Utilisation de l’API de soumission de dépendances

Vous pouvez utiliser la API de soumission de dépendances méthode permettant d’envoyer des dépendances pour des projets, telles que les dépendances résolues lorsqu’un projet est généré ou compilé.

Le API de soumission de dépendances est une méthode permettant de soumettre des données au graphe de dépendance. Il vous permet d’envoyer des dépendances qui ne sont pas capturées par l’analyse statique. Pour plus d’informations, consultez « Comment le graphique de dépendances reconnaît les dépendances ».

Envoi de dépendances au moment de la génération

Vous pouvez utiliser le API de soumission de dépendances dans un workflow GitHub Actions pour soumettre les dépendances de votre projet lors de sa génération.

Utilisation d’actions prédéfinies

La façon la plus simple d’utiliser l’API API de soumission de dépendances consiste à ajouter une action prédéfinie à votre référentiel pour collecter et convertir la liste des dépendances au format d’instantané requis, puis soumettre la liste à l’API.

ÉcosystèmeAction
GoSoumission de dépendance Go
GradleSoumission de dépendances Gradle
MavenSoumission de dépendances Maven Dependency Tree
FraiseuseSoumission de dépendances Mill
Mix (Elixir)Soumission de dépendance Mix
ScalaSoumission de dépendances Sbt
NuGet et autresAction de soumission de dépendances pour la détection de composant

Remarque

Pour l’action de soumission de dépendance pour la détection de composants, les autres écosystèmes pris en charge incluent Vcpkg, Conan, Conda, Crates, ainsi que NuGet.

Par exemple, le workflow Soumission de dépendance Go suivant calcule les dépendances d’une cible de génération Go (fichier Go avec une fonction main) et soumet la liste à l’API API de soumission de dépendances.

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@v6

      - 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

Pour plus d’informations sur ces actions, consultez Écosystèmes de packages pris en charge par le graphe des dépendances.

Création de votre propre action

Vous pouvez également écrire votre propre action pour envoyer des dépendances pour votre projet au moment de la génération. Votre workflow doit :

  1. Générer une liste de dépendances pour votre projet.
  2. Traduisez la liste des dépendances dans le format de snapshot accepté par le API de soumission de dépendances. Pour plus d’informations sur le format, consultez les paramètres du corps pour le point de terminaison d’API « Créer une capture instantanée de référentiel » dans Points de terminaison d’API REST pour la soumission de dépendances.
  3. Envoyez la liste mise en forme des dépendances à l’objet API de soumission de dépendances.

GitHub gère la Dependency Submission Toolkit, une bibliothèque TypeScript pour vous aider à créer votre propre action de GitHub pour envoyer des dépendances au API de soumission de dépendances. Pour plus d’informations sur l’écriture d’une action, consultez Réutilisation des automatisations.

Envoi de SBOM en tant qu’instantanés

Si vous avez des outils externes qui créent ou gèrent des factures de logiciels (SBOMs), vous pouvez également soumettre ces SBOMs à l’application API de soumission de dépendances. Le format des données instantanées est très similaire aux formats SBOM standard SPDX et CycloneDX, et plusieurs outils permettent de générer ou de convertir des formats compatibles avec les instantanés.

Conseil

L’action de soumission de dépendances SPDX et l’action Anchore SBOM peuvent être utilisées pour générer un SBOM et l’envoyer à l’instance API de soumission de dépendances.

Par exemple, le workflow de soumission des dépendances SPDX suivant calcule les dépendances d’un dépôt, génère un SBOM exportable au format SPDX 2.2 et le soumet à API de soumission de dépendances.

# Ce workflow utilise des actions qui ne sont pas certifiées par GitHub.
# Elles sont fournies par un tiers et régies par
# des conditions d’utilisation du service, une politique de confidentialité et un support distincts.
# documentation en ligne.
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@v6
    - 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@v4
      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/"