Aller au contenu

Licence

Gérez automatiquement les fichiers LICENSE et les en-têtes de code source dans votre espace de travail.

Ce générateur enregistre un générateur de synchronisation qui s’exécute dans le cadre de vos cibles lint pour garantir que vos fichiers sources respectent le contenu et le format de licence souhaités, tout en assurant que les fichiers LICENSE de vos projets sont corrects et que les informations de licence sont incluses dans les fichiers de projet concernés (package.json, pyproject.toml).

Utilisation

Exécuter le générateur

  1. Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
  2. Ouvrez la console Nx dans VSCode
  3. Cliquez sur Generate (UI) dans la section "Common Nx Commands"
  4. Recherchez @aws/nx-plugin - license
  5. Remplissez les paramètres requis
    • Cliquez sur Generate

    Options

    Paramètre Type Par défaut Description
    license string Apache-2.0 SPDX License Identifier for your chosen license
    copyrightHolder string Amazon.com, Inc. or its affiliates The copyright holder, included in the LICENSE file and source file headers by default.

    Résultat du générateur

    Le générateur créera ou mettra à jour les fichiers suivants :

    • nx.json La cible lint est configurée pour exécuter le générateur de synchronisation de licence
    • aws-nx-plugin.config.mts Configuration pour le générateur de synchronisation de licence

    Une configuration par défaut pour le contenu et le format des en-têtes de licence est ajoutée à aws-nx-plugin.config.mts pour écrire des en-têtes appropriés pour plusieurs types de fichiers. Vous pouvez personnaliser cette configuration ; consultez la section de configuration ci-dessous.

    Workflow

    Lorsque vous construisez vos projets (et qu’une cible lint s’exécute), le générateur de synchronisation de licence vérifiera que la licence de votre projet correspond à votre configuration (voir comportement de synchronisation). Si des incohérences sont détectées, vous recevrez un message tel que :

    Fenêtre de terminal
    NX The workspace is out of sync
    [@aws/nx-plugin:license#sync]: Project LICENSE files are out of sync:
    - LICENSE
    - packages/<my-project>LICENSE
    Project package.json files are out of sync:
    - package.json
    Project pyproject.toml files are out of sync:
    - pyproject.toml
    - packages/<my-python-project>/pyproject.toml
    License headers are out of sync in the following source files:
    - packages/<my-project>/src/index.ts
    - packages/<my-python-project>/main.py
    This will result in an error in CI.
    ? Would you like to sync the identified changes to get your workspace up to date?
    Yes, sync the changes and run the tasks
    No, run the tasks without syncing the changes

    Sélectionnez Yes pour synchroniser les modifications.

    Comportement de synchronisation des licences

    Le générateur de synchronisation effectue trois tâches principales :

    1. Synchroniser les en-têtes de licence des fichiers sources

    Le générateur vérifie que tous les fichiers source contiennent l’en-tête de licence approprié. L’en-tête est écrit comme premier commentaire de bloc ou série de commentaires linéaires (après un shebang/hashbang éventuel).

    Vous pouvez modifier la configuration à tout moment pour changer les fichiers inclus/exclus, ou le contenu/format des en-têtes. Voir la section de configuration.

    2. Synchroniser les fichiers LICENSE

    Le générateur vérifie que le fichier racine LICENSE et ceux des sous-projets correspondent à votre licence configurée.

    Vous pouvez exclure des projets dans la configuration. Voir la section de configuration.

    3. Synchroniser les informations de licence dans les fichiers de projet

    Le générateur met à jour les champs license des fichiers package.json et pyproject.toml selon votre configuration.

    Vous pouvez exclure des projets dans la configuration. Voir la section de configuration.

    Configuration

    La configuration est définie dans le fichier aws-nx-plugin.config.mts à la racine de votre espace de travail.

    La licence peut être mise à jour via la propriété spdx :

    aws-nx-plugin.config.mts
    export default {
    license: {
    spdx: 'MIT',
    },
    } satisfies AwsNxPluginConfig;

    Les fichiers LICENSE, package.json et pyproject.toml seront mis à jour selon la licence configurée.

    Vous pouvez aussi configurer le détenteur du copyright et l’année :

    aws-nx-plugin.config.mts
    export default {
    license: {
    spdx: 'MIT',
    copyrightHolder: 'Amazon.com, Inc. or its affiliates',
    copyrightYear: 2025,
    },
    } satisfies AwsNxPluginConfig;

    En-têtes de licence

    Contenu

    Le contenu des en-têtes peut être configuré de deux façons :

    1. Contenu inline :
    aws-nx-plugin.config.mts
    export default {
    license: {
    header: {
    content: {
    lines: [
    'Copyright: My Company, Incorporated.',
    'Licensed under the MIT License',
    'All rights reserved',
    ];
    }
    // ... format configuration
    }
    }
    } satisfies AwsNxPluginConfig;
    1. Chargement depuis un fichier :
    aws-nx-plugin.config.mts
    export default {
    license: {
    header: {
    content: {
    filePath: 'license-header.txt'; // relatif à la racine
    }
    // ... format configuration
    }
    }
    } satisfies AwsNxPluginConfig;

    Format

    Définissez le format des en-têtes par type de fichier avec des glob patterns :

    aws-nx-plugin.config.mts
    export default {
    license: {
    header: {
    content: {
    lines: ['Copyright notice here'],
    },
    format: {
    // Commentaires linéaires
    '**/*.ts': {
    lineStart: '// ',
    },
    // Commentaires de bloc
    '**/*.css': {
    blockStart: '/*',
    blockEnd: '*/',
    },
    // Commentaires de bloc avec préfixes
    '**/*.java': {
    blockStart: '/*',
    lineStart: ' * ',
    blockEnd: ' */',
    },
    // Commentaires avec en-tête/pied
    '**/*.py': {
    blockStart: '# ------------',
    lineStart: '# ',
    blockEnd: '# ------------',
    },
    },
    },
    },
    } satisfies AwsNxPluginConfig;

    Options de format :

    • blockStart : Texte avant le contenu de licence
    • lineStart : Préfixe de ligne
    • lineEnd : Suffixe de ligne
    • blockEnd : Texte après le contenu de licence

    Syntaxe de commentaire personnalisée

    Définissez une syntaxe pour les types de fichiers non pris en charge :

    aws-nx-plugin.config.mts
    export default {
    license: {
    header: {
    content: {
    lines: ['My license header'],
    },
    format: {
    '**/*.xyz': {
    lineStart: '## ',
    },
    },
    commentSyntax: {
    xyz: {
    line: '##', // Syntaxe de commentaire linéaire
    },
    abc: {
    block: {
    start: '<!--',
    end: '-->',
    },
    },
    },
    },
    },
    } satisfies AwsNxPluginConfig;

    Exclusion de fichiers

    Excluez des fichiers avec des glob patterns :

    aws-nx-plugin.config.mts
    export default {
    license: {
    header: {
    content: {
    lines: ['My license header'],
    },
    format: {
    '**/*.ts': {
    lineStart: '// ',
    },
    },
    exclude: ['**/generated/**', '**/dist/**', 'some-specific-file.ts'],
    },
    },
    } satisfies AwsNxPluginConfig;

    Exclusion de fichiers de projet

    Excluez des projets ou fichiers de la synchronisation :

    aws-nx-plugin.config.mts
    export default {
    license: {
    files: {
    exclude: [
    // Exclure LICENSE, package.json et pyproject.toml
    'packages/excluded-project',
    // Exclure LICENSE mais pas package.json/pyproject.toml
    'apps/internal/LICENSE',
    ];
    }
    }
    } satisfies AwsNxPluginConfig;

    Désactiver la synchronisation

    Pour désactiver le générateur :

    1. Supprimez la section license de aws-nx-plugin.config.mts (ou supprimez le fichier)
    2. Retirez @aws/nx-plugin:license#sync de targetDefaults.lint.syncGenerators

    Pour réactiver, exécutez à nouveau le générateur license.