DevGang
Авторизоваться

Добавьте заголовки лицензий в файлы кода

Нам, разработчикам, часто необходимо убедиться, что наш код соответствует соответствующим лицензиям для защиты нашей интеллектуальной собственности.

В этой статье представлен более мощный инструмент управления положениями лицензий под названием NWA. Он помогает вам легко добавлять заголовки лицензий в файлы кода, а также проверять, обновлять и удалять существующие положения лицензии, гарантируя законность и соответствие вашего кода.

Что такое лицензионное заявление?

Заявление о лицензии (заголовок лицензии) — это раздел комментариев в верхней части файла исходного кода, в котором объявляется информация о лицензии для кода. Обычно он включает информацию об авторских правах, типе лицензии и другие соответствующие юридические заявления. Заявления о лицензии помогают защитить права автора кода, а также помогают другим разработчикам понять, как они могут использовать этот код.

Если вы когда-либо просматривали файлы кода проектов с открытым исходным кодом, вы, вероятно, заметили, что они четко обозначают свои лицензионные положения внутри файлов кода. Например:

  • kubernetes
  • spring-boot

Кроме того, некоторые проекты с открытым исходным кодом используют такие инструменты, как GitHub Actions, чтобы проверить, имеет ли ваш код правильный заголовок лицензии при отправке запроса pull:

  • hertz

Инструменты добавления заголовка лицензии

Обычно нам нужно отображать заявления о лицензии в виде комментариев в начале каждого файла кода, аналогично тому, что сделали «kubernetes» и «spring-boot» в предыдущем разделе. Однако, когда вы работаете над большим проектом, количество файлов кода может стать огромным, что делает добавление заголовков лицензий вручную утомительной и болезненной задачей.

Вот тут-то и пригодятся инструменты добавления заголовка лицензии. Одним из часто используемых инструментов является проект addlicense организации Google. addlicense позволяет добавлять условия лицензии к указанным файлам с помощью командной строки. Однако «addlicense» имеет ограниченную функциональность; он только добавляет в файлы заголовки лицензий. Некоторые проблемы, поднятые в отношении «addlicense», включают в себя:

  • Запрос на поддержку строковых комментариев (//) вместо только блочных комментариев (/**/) #130
  • Запрос на добавление функции обновления условий лицензии #58
  • Запрос настраиваемой логики проверки выписок о лицензии #56

К сожалению, проблема #58 не поддерживается из-за опасений по поводу усложнения «addlicense», проблема #130 помечена как неподдерживаемая, а проблема #56 в настоящее время ожидает рассмотрения.

При разработке NWA эти проблемы были учтены и предложены решения. Он также поддерживает больше операций, связанных с положениями лицензии, например удаление.

Установка

Установка через Go (если у вас установлен Go)

go install github.com/B1NARY-GR0UP/nwa@latest

Выполните следующую команду, чтобы проверить успешную установку:

nwa --version

Установка через Docker (если у вас не установлен Go)

  • Установка

Получите образ Docker NWA напрямую:

docker pull ghcr.io/b1nary-gr0up/nwa:main

Альтернативно вы можете собрать образ из исходного кода, например:

docker build -t ghcr.io/b1nary-gr0up/nwa:main .
  • Проверка установки
docker run -it ghcr.io/b1nary-gr0up/nwa:main --version
  • Подключите каталог, с которым вы хотите, чтобы NWA работал, в /src
docker run -it -v ${PWD}:/src ghcr.io/b1nary-gr0up/nwa:main add -c "RHINE LAB.LLC." -y 2077 .

Применение

Чтобы помочь вам начать работу с функциями NWA, разработчики предоставили nwa-примеры, которые помогут вам научиться использовать NWA на практике. Вы можете клонировать этот проект и следовать руководству или просто обратиться к этому руководству и использовать nwa-примеры для получения дополнительных примеров использования.

NWA — это инструмент командной строки, созданный на базе Cobra. Вот обзор команд NWA:

Usage:         
  nwa [command]

Common Mode Commands:
  add         add license headers to files
  check       check license headers of files
  remove      remove license headers of files
  update      update license headers of files

Config Mode Commands:
  config      edit the files according to the configuration file

Additional Commands:
  help        Help about any command

Flags:
  -h, --help      help for nwa
  -v, --version   version for nwa

Use "nwa [command] --help" for more information about a command.

Список команд:

  • Add: добавление заголовков лицензий в файлы.
  • Remove: удалить заголовки лицензий из файлов.
  • Update: обновление заголовков лицензий в файлах.
  • Check: проверьте заголовки лицензий в файлах.
  • Config: редактируйте заголовки лицензий в файлах с помощью файла конфигурации.

Add — добавление заголовков лицензий в файлы

Применение

nwa add [flags] path...

Используйте команду add после nwa, чтобы добавить заголовки лицензий. [flags] позволяет указать дополнительные флаги, а path... позволяет указать один или несколько путей к файлам, к которым нужно добавить заголовки лицензий.

Пример

nwa add -l apache -c "RHINE LAB.LLC." -y 2077 ./server ./utils/bufferpool

В приведенном выше примере команда добавляет следующее ко всем файлам в относительных путях ./server и ./utils/bufferpool:

  • Тип лицензии: Apache 2.0
  • Правообладатель: RHINE LAB.LLC
  • Год авторских прав: 2077

NWA генерирует соответствующий оператор лицензии для каждого файла в зависимости от его типа, например, файлы .py используют # комментарии, а файлы .go используют // комментарии. Если ваш тип файла не поддерживается NWA, вы можете:

  • Укажите файл шаблона, используя флаг -t (--tmpl)
  • Внесите свой вклад в NWA, создав задачу или запрос pull

NWA также предоставит журнал выходных данных, указывающие файлы, которые уже имеют заголовки лицензии или не разрешены для редактирования (например, некоторые сгенерированные файлы кода).

Флаги

Команда add поддерживает следующие флаги:

Таблица 1

Короткий флаг Длинный флаг По умолчанию Описание
-c --copyright COPYRIGHT HOLDER Правообладатель
-l --license apache Тип лицензии
-m --mute false(неопределенные) Беззвучный режим
-s --skip [] Пропущенные пути к файлам
-t --tmpl "" Путь к файлу шаблона
-y --year time.Now().Year() (текущий год) Год авторских прав
-h --help Нет Помощь

Большинство флагов говорят сами за себя. Известные флаги -s (-skip) и -t (-tmpl):

  • Значением по умолчанию -s является пустой массив, поэтому вы можете использовать ноль или более флагов -s, чтобы указать пути к файлам, которые нужно пропустить. Этот путь поддерживает синтаксис двойной звезды, что делает его очень гибким. Например:
nwa add -s **.py -s /example/**/*.txt -c Lorain .
  • -t позволяет указать путь к файлу шаблона. NWA считывает содержимое этого файла шаблона и добавляет его в файлы, которым требуются заголовки лицензий.
Примечание. Если вы укажете шаблон, NWA не будет генерировать заголовки лицензий на основе типов файлов и будет игнорировать конфигурации -c, -l и -y.

Вот пример файла шаблона (example-tmpl.txt):

// Copyright 2077 RHINE LAB.LLC.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

Дополнительные примеры использования см. в разделе nwa-examples.

Remove — удалить заголовки лицензий из файлов

Применение

nwa remove [flags] path...

Используйте команду remove после nwa, чтобы удалить заголовки лицензий. [flags] позволяют указать дополнительные флаги, а path... позволяет указать один или несколько путей к файлам, из которых нужно удалить заголовки лицензий.

Пример

nwa remove -l mit -c "RHINE LAB.LLC." -s **.py pkg

В приведенном выше примере команда удаляет следующее из всех файлов, отличных от Python, в относительном пути pkg:

  • Тип лицензии: MIT
  • Правообладатель: RHINE LAB.LLC
  • Год авторских прав: 2023

NWA предоставляет выходные данные журнала, указывающие файлы без заголовков лицензий или файлы, которые нельзя редактировать.

Флаги

Описано в таблице 1

Update — обновление заголовков лицензий в файлах

Применение

nwa update [flags] path...

Используйте команду update после nwa, чтобы обновить заголовки лицензий. [flags] позволяют указать дополнительные флаги, а path... позволяет указать один или несколько путей к файлам для обновления заголовков лицензий.

Пример

nwa update -l apache -c "BINARY Members" .

В приведенном выше примере команда обновляет заголовки лицензий во всех файлах по текущему пути следующим образом:

  • Тип лицензии: Apache 2.0
  • Правообладатель: BINARY Members
  • Год авторских прав: 2023

Предыдущее заявление об авторских правах заменяется независимо от его содержания.

Примечание. Обновление — это, по сути, комбинация операций удаления и добавления.

Команда update распознает содержимое перед первой пустой строкой в ​​файле как заголовок лицензии (за исключением строк shebang). NWA генерирует новое заявление о лицензии на основе указанных флагов и заменяет существующее.

Если содержимое перед первой пустой строкой в вашем файле включает в себя что-то иное, чем заявление о лицензии, рекомендуется использовать операции remove и add отдельно для достижения того же эффекта. Этот подход вместе с флагом файла шаблона может привести к лучшим результатам удаления в операции remove.

Флаги

Описано в таблице 1

Check — проверка заголовков лицензий в файлах

Применение

nwa check [flags] path...

Используйте команду check  после nwa, чтобы обновить заголовки лицензий. [flags] позволяют указать дополнительные флаги, а path... позволяет указать один или несколько путей к файлам для обновления заголовков лицензий.  

Пример

nwa check --tmpl tmpl.txt ./client

В приведенном выше примере команда проверяет, соответствуют ли заголовки лицензий во всех файлах в папке ./client содержимому, указанному в файле шаблона tmpl.txt.

После проверки NWA предоставляет выходные данные журнала, указывающие результат проверки. Вот пример вывода:

time="2023-08-25T23:01:49+08:00" level=info msg="skip file" path=README.md
time="2023-08-25T23:01:49+08:00" level=info msg="file has a matched header" path="dirA\\fileA.go"                
time="2023-08-25T23:01:49+08:00" level=info msg="file does not have a matched header" path="dirB\\dirC\\fileC.go"
time="2023-08-25T23:01:49+08:00" level=info msg="file has a matched header" path="dirB\\fileB.go"                
time="2023-08-25T23:01:49+08:00" level=info msg="file does not have a matched header" path=main.go 

Флаги

Описано в таблице 1

Примечание. Не используйте флаг -m с командой check, так как это не позволит NWA выводить результаты проверки.

Config — редактирование заголовков лицензий через файл конфигурации

Применение

nwa config [flags] path

Используйте команду config после nwa, чтобы редактировать заголовки лицензий на основе файла конфигурации. [flags] позволяет указать необязательные флаги, а path требуется для указания пути к файлу конфигурации.

Пример

nwa config config.yaml

В приведенном выше примере команда считывает файл конфигурации config.yaml и редактирует заголовки лицензий в указанных файлах в соответствии с его содержимым. Структура файла конфигурации представлена ​​ниже.

Флаги

Поскольку вся конфигурация находится в файле конфигурации, имеется только один флаг справки.

Короткий флаг Длинный флаг По умолчанию Описание
-h --help Нет Помощь

Конфигурационный файл

Вот пример полного файла конфигурации (config.yaml):

nwa:
  cmd: "add"                        # Default: "add". Options: "add", "check", "remove", "update"
  holder: "RHINE LAB.LLC."          # Default: "<COPYRIGHT HOLDER>"
  year: "2077"                      # Default: Current Year
  license: "apache"                 # Default: "apache"
  mute: false                       # Default: false (unspecified)
  path: ["server", "client", "pkg"] # Default: []
  skip: ["**.py"]                   # Default: []
  tmpl: "nwa.txt"                   # Default: ""

Если вы не укажете определенные поля в файле конфигурации, NWA будет использовать значения по умолчанию. Например, если вы не укажете тип лицензии, по умолчанию будет использоваться Apache 2.0.

Примечание. Если вы установите поле tmpl, NWA будет игнорировать поля holder, year и license.

Заключение

Вышеупомянутый контент знакомит с NWA — мощным инструментом управления заголовками лицензий.

Если вы заметили какие-либо ошибки или у вас есть вопросы, оставьте комментарий или отправьте сообщение.

Cсылки

Источник:

#Open source #GitHub
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу