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, ainsi que la validité des fichiers LICENSE de vos projets et l’inclusion des informations de licence 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 des licences
    • aws-nx-plugin.config.mts Configuration du générateur de synchronisation des licences

    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 générer 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 des licences vérifiera que les licences correspondent à 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 effectue trois tâches principales :

    1. Synchronisation des en-têtes de licence

    Le générateur vérifie que tous les fichiers sources 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 le cas échéant).

    La configuration permet de modifier les fichiers concernés et le format des en-têtes. Voir section de configuration.

    2. Synchronisation des fichiers LICENSE

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

    L’exclusion de projets est possible via la configuration. Voir section de configuration.

    3. Synchronisation des 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 la licence configurée.

    L’exclusion de projets est possible via la configuration. Voir section de configuration.

    Configuration

    La configuration se trouve dans aws-nx-plugin.config.mts à la racine.

    La licence peut être modifiée 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 en conséquence.

    Le détenteur du copyright et l’année peuvent aussi être configurés :

    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 peut être défini 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

    Le format des en-têtes peut être spécifié par type de fichier :

    aws-nx-plugin.config.mts
    export default {
    license: {
    header: {
    content: {
    lines: ['Copyright notice here'],
    },
    format: {
    '**/*.ts': {
    lineStart: '// ',
    },
    '**/*.css': {
    blockStart: '/*',
    blockEnd: '*/',
    },
    '**/*.java': {
    blockStart: '/*',
    lineStart: ' * ',
    blockEnd: ' */',
    },
    '**/*.py': {
    blockStart: '# ------------',
    lineStart: '# ',
    blockEnd: '# ------------',
    },
    },
    },
    },
    } satisfies AwsNxPluginConfig;

    Options supportées :

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

    Syntaxe de commentaire personnalisée

    Pour les formats non supportés :

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

    Exclusion de fichiers

    Fichiers exclus par défaut selon .gitignore. Exclusion supplémentaire possible :

    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

    Exclusion de projets/fichiers via motifs glob :

    aws-nx-plugin.config.mts
    export default {
    license: {
    files: {
    exclude: [
    'packages/excluded-project',
    'apps/internal/LICENSE',
    ];
    }
    }
    } satisfies AwsNxPluginConfig;

    Désactivation de la synchronisation

    Pour désactiver le générateur :

    1. Supprimez la section license de aws-nx-plugin.config.mts
    2. Retirez @aws/nx-plugin:license#sync de targetDefaults.lint.syncGenerators

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