Skip to main content

Utilisation de l’API de soumission de dépendances

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

La méthode API de soumission de dépendances permet de soumettre des données au graphe de dépendances. 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 l’API API de soumission de dépendances dans un workflow GitHub Actions pour envoyer des dépendances pour votre projet lorsqu’il est généré.

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

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. Convertir la liste des dépendances au format d’instantané accepté par l’API 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. Soumettre la liste des dépendances au format approprié à l’API API de soumission de dépendances.

GitHub gère le Kit de ressources de soumission de dépendances, une bibliothèque TypeScript pour vous aider à créer votre propre action GitHub pour envoyer des dépendances à l’API 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 disposez d’outils externes qui créent ou gèrent des nomenclatures logicielles (SBOM), vous pouvez également soumettre ces SBOM à 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

Les actions SPDX Dependency Submission Action et Anchore SBOM Action peuvent être utilisées à la fois pour générer une SBOM et pour la soumettre à API de soumission de dépendances.

Par exemple, le workflow de l'action SPDX Dependency Submission Action suivant calcule les dépendances d’un dépôt, génère une nomenclature SBOM exportable au format SPDX 2.2 et l’envoie à l’API 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@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@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/"