Aller au contenu principal

Politique de licences

La politique de licences détermine ce que signifie la licence d’une dépendance à deux endroits :

  • Pull requests. L’analyse des licences évalue les licences des dépendances d’une pull request, et la vérification fremforge/license-scan bloque ou avertit.
  • Téléchargements. La politique de paquets évalue les licences d’un fichier de votre registre avant qu’il puisse être téléchargé.

Les deux lisent les mêmes listes. Ouvrez-la sous Sécurité › Politiques › Politique de licences. Seul un propriétaire de l’organisation peut l’enregistrer.

Les règles

ParamètrePull requestsTéléchargements
Licences autoriséesPassent toujours. Elles ne sont jamais bloquées ni signalées par le seuil.Passent.
Téléchargements : licences autorisées uniquementSans effet.Toute licence absente de la liste d’autorisation est refusée. Nécessite au moins une licence autorisée.
Licences refuséesBloquent la fusion.Refusées.
Licences en avertissementRésultat consultatif.Autorisées avec un avertissement.
Licence inconnueallow, warn ou block pour une licence absente ou qui n’est pas une expression SPDX.Idem.
Plusieurs licencesall : chaque licence déclarée par un composant doit passer. any : une seule licence qui passe suffit.Idem, pour une expression telle que MIT OR GPL-3.0-only.
Pull requests : bloquer à partir deUne licence qui ne figure sur aucune liste bloque à ce niveau ou au-dessus, et reste consultative en dessous. La valeur par défaut est restricted.Aucun seuil.

Les entrées des listes sont des identifiants SPDX, un par ligne, tels que MIT, LicenseRef-acme ou GPL-2.0-only WITH Classpath-exception-2.0. La correspondance ignore la casse. Une licence ne peut figurer que sur une seule liste. Chaque liste contient au plus 100 entrées. Dans une expression, chaque licence est vérifiée séparément : avec OR, une seule licence qui passe suffit ; avec AND, chaque licence doit passer.

Quand pull requests et téléchargements diffèrent encore

Avant l’existence de cette page, chaque périmètre avait ses propres listes, dans l’onglet Licences et sur la page Politiques de paquets. Rien n’a été migré. Si vos deux jeux concordent déjà, la page les présente comme une seule politique. S’ils diffèrent, la page le signale et pré-remplit le formulaire avec une proposition dans laquelle la règle la plus stricte l’emporte pour chaque périmètre :

  • les licences refusées des deux ;
  • les licences en avertissement des deux, sans les licences refusées ;
  • l’action la plus stricte pour les licences inconnues ;
  • all pour les licences multiples si l’un des périmètres indiquait all ;
  • pour les listes d’autorisation : les licences présentes sur les deux listes, ou la seule liste qui contient des entrées. Une licence également refusée ou en avertissement quitte la liste d’autorisation.

Une liste d’autorisation ne peut pas toujours être fusionnée sans assouplir un périmètre. Dans ces cas, la page affiche une note. Par exemple, une liste d’autorisation des téléchargements devient aussi la liste d’autorisation des pull requests, si bien que ces licences commencent à passer dans les pull requests.

Rien ne change tant que vous n’avez pas enregistré.

Voir le résultat avant d’enregistrer

Sous Ce que l’enregistrement change, la page liste :

  • chaque paramètre enregistré qui change, pour les pull requests et pour les téléchargements ;
  • chaque licence dont le résultat change, avec le résultat avant et après dans chaque périmètre. Elle vérifie les licences courantes et toutes les licences que vos pull requests ont rencontrées.

Enregistrer la politique de licences n’est proposé que pour la politique dont les changements sont affichés. Si vous modifiez le formulaire, choisissez d’abord Voir les changements. Un enregistrement qui ne changerait rien n’est pas proposé.

Hors de cette politique

  • L’analyse ou non des pull requests. Activez ou désactivez l’analyse des licences sous Sécurité › Politiques › Analyseurs.
  • Le mode du contrôle des téléchargements. Désactivé, Observation ou Appliquer reste sur Politiques de paquets.
  • Les dérogations par dépôt aux règles des pull requests. Elles se trouvent en bas de cette page, voir Dérogations par dépôt.
  • Les paramètres de licence par type dans une politique de paquets. Un type de paquet qui définit ses propres règles de licence les conserve. La page liste ces types.
  • Les exceptions pour un composant et une licence.

API

Point de terminaisonPortéeRôle
GET /orgs/{org}/licence-policypolicy:readLa politique (unified: true), ou policy: null avec la proposal où la règle la plus stricte l’emporte et ses proposal_notes. Également les champs enregistrés de chaque périmètre et package_policy_version.
POST /orgs/{org}/licence-policy/previewpolicy:readLecture seule. Les changements par périmètre et les licences dont le résultat change.
PUT /orgs/{org}/licence-policypolicy:writeEnregistre la politique dans les deux périmètres. Tous les champs sont obligatoires. Envoyez la package_policy_version que vous avez lue.
curl -X PUT "https://frem.sh/_app/api/v1/orgs/acme/licence-policy" \
  -H "Authorization: Bearer $FREMFORGE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "allow": ["MIT", "Apache-2.0", "BSD-3-Clause"],
    "deny": ["AGPL-3.0-only", "SSPL-1.0"],
    "warn": ["MPL-2.0"],
    "allow_only_downloads": false,
    "unknown": "warn",
    "multiple": "all",
    "block_severity": "restricted",
    "package_policy_version": 7
  }'

Une package_policy_version périmée est refusée avec 409 policy-version-conflict. Une licence présente sur deux listes est refusée avec 400 licence-on-two-lists. Un enregistrement est consigné dans l’audit sous security.licence_policy.updated avec chaque champ modifié. Le côté téléchargements est également consigné sous package_policy.updated.

Les anciens points de terminaison fonctionnent toujours et n’écrivent qu’un seul périmètre : PUT /orgs/{org}/code-security/licenses/settings et les champs de licence de PUT /orgs/{org}/package-policy. Si vous les utilisez, la page affiche de nouveau les deux périmètres comme différents.

Voir aussi