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-scanbloque 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ètre | Pull requests | Téléchargements |
|---|---|---|
| Licences autorisées | Passent toujours. Elles ne sont jamais bloquées ni signalées par le seuil. | Passent. |
| Téléchargements : licences autorisées uniquement | Sans effet. | Toute licence absente de la liste d’autorisation est refusée. Nécessite au moins une licence autorisée. |
| Licences refusées | Bloquent la fusion. | Refusées. |
| Licences en avertissement | Résultat consultatif. | Autorisées avec un avertissement. |
| Licence inconnue | allow, warn ou block pour une licence absente ou qui n’est pas une expression SPDX. | Idem. |
| Plusieurs licences | all : 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 de | Une 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 ;
allpour les licences multiples si l’un des périmètres indiquaitall;- 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 terminaison | Portée | Rôle |
|---|---|---|
GET /orgs/{org}/licence-policy | policy:read | La 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/preview | policy:read | Lecture seule. Les changements par périmètre et les licences dont le résultat change. |
PUT /orgs/{org}/licence-policy | policy:write | Enregistre 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.