Dotenv-linter v3.0.0

Что нового в dotenv-linter v3.0.0?

Dotenv-linter — это полезный инструмент для проверки .env файлов на ошибки, созданный разработчиком Evrone Михаилом Грачёвым. Мы уже писали про изменения в версии v2.2.0. Прошло 2 с половиной месяца с момента прошлого релиза, и мы готовы вам представить новую версию dotenv-linter — v3.0.0!

 

Что такое .env файлы?

.env или dotenv файлы — это простые текстовые файлы, содержащие в себе переменные окружения проекта. Файлы имеют формат «ключ-значение», например: FOO=BAR

Хранение конфигурации в переменных окружения предусмотрено одним из принципов манифеста «12-факторного приложения».

Вот обзор ключевых изменений, которые попали в этот релиз dotenv-linter.

Улучшение API 👍

В предыдущей версии, у dotenv-linter было несколько флагов, которые по сути являлись отдельными командами — --fix и --show-checks:

FLAGS:
    -f, --fix            Automatically fixes warnings
    -h, --help           Prints help information
        --no-backup      Prevents .env files from being backed up when modified by -f/--fix
    -q, --quiet          Doesn't display additional information
    -r, --recursive      Recursively search and check .env files
        --show-checks    Shows list of available checks
    -v, --version        Prints version information

Это приводило к небольшой путанице, т. к. эти флаги конфликтовали и не работали друг с другом:

$ dotenv-linter --fix --show-checks

В новой версии мы исправили это и вынесли флаги --fix и --show-checks в отдельные команды fix и list:

FLAGS:
    -h, --help         Prints help information
    -q, --quiet        Doesn't display additional information
    -r, --recursive    Recursively searches and checks .env files
    -v, --version      Prints version information


SUBCOMMANDS:
    fix        Automatically fixes warnings [aliases: f]
    list       Shows list of available checks [aliases: l]

Сравнение .env файлов 🤲

Также, в новой версии мы добавили новую команду compare, которая позволяет сравнивать ключи в .env файлах:

$ dotenv-linter compare .env .env.example
Comparing .env
Comparing .env.example
.env is missing keys: BAR
.env.example is missing keys: FOO

Отображение проверяемых файлов 👀

При наличии нескольких .env файлов, не всегда было понятно, какие из них проверил dotenv-linter, а какие нет.

Это могло быть связано с нестандартным именем файла, либо с отсутствием каких-либо проблем в этих файлах.

Поэтому в новой версии мы добавили отображение проверяемых файлов:

$ dotenv-linter
Checking .env
.env:1 LeadingCharacter: Invalid leading character detected

Checking .env.example
Checking .env.test

Found 1 problem

Отключить такое поведение можно с помощью флага -quiet/-q:

$ dotenv-linter --quiet
.env:1 LeadingCharacter: Invalid leading character detected

Цветной вывод 🌈

Для улучшения удобства использования, мы добавили цветной вывод предупреждений:

color output dotenv linter

Отключить цветной вывод можно с помощью флага -no-color.

Поддержка многострочных значений 💪

В .env файлах можно хранить многострочные значения. Один из вариантов выглядит следующим образом:

# .env

MULTILINE="new\nline"

Но при проверке таких значений, dotenv-linter всегда выводил предупреждение:

$ dotenv-linter
.env:1 QuoteCharacter: The value has quote characters (', ")

Found 1 problem

Мы исправили это и теперь dotenv-linter не выводит предупреждения для многострочных значений, обернутых кавычками.

Поддержка export префикса 🔥

Некоторые библиотеки для работы с .env файлами, такие как: dotenv, godotenv и python-dotenv поддерживают export префикс:

# .env
export S3_BUCKET=YOURS3BUCKET
export SECRET_KEY=YOURSECRETKEYGOESHERE

export префикс дает возможность экспортировать переменные окружения из файла с помощью команды source:

$ source .env

При проверке таких файлов, dotenv-linter всегда выводил предупреждения:

$ dotenv-linter
.env:1 IncorrectDelimiter: The export S3_BUCKET key has incorrect delimiter
.env:1 LowercaseKey: The export S3_BUCKET key should be in uppercase
.env:2 IncorrectDelimiter: The export SECRET_KEY key has incorrect delimiter
.env:2 LowercaseKey: The export SECRET_KEY key should be in uppercase

Found 4 problems

В новой версии мы добавили поддержку export префикса и теперь dotenv-linter не выводит никаких предупреждений.

Поддержка пробелов 🙌

Ещё одним из улучшений стала поддержка пробелов в значениях, обернутых кавычками:

# .env 
WHITESPACES="a b c"

Теперь, для таких значения dotenv-linter не будет выводить предупреждения.

Улучшенная проверка 👌

Также, мы исправили проблему, при которой dotenv-linter мог выводить не все предупреждения за один раз:

$ dotenv-linter fix .env
Fixing .env
Original file was backed up to: ".env_1606422805"

.env:1 KeyWithoutValue: The test key should be with a value or have an equal sign

All warnings are fixed. Total: 1

$ dotenv-linter .env
Checking .env
.env:1 LowercaseKey: The test key should be in uppercase

Found 1 problem
Улучшение производительности 🚀

И последнее, но не по значению — мы улучшили производительность и без того быстрого dotenv-linter, что теперь максимальное время запуска уменьшилось с 9.3 мс до 4.3 мс (более чем на 50%) 🙀

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

Command	                                Mean [ms]	Min [ms]    Max [ms]	Relative
dotenv-linter/dotenv-linter .env	2.7 ± 0.4	2.0	    4.3	        1.00
wemake-services/dotenv-linter .env	162.6 ± 12.1	153.0	    201.3	60.83 ± 10.20

Это все ключевые изменения, которые вошли в новый релиз v3.0.0. Спасибо всем кто участвовал в подготовке этого релиза. Вы можете поддержать нас и поставить звезду на GitHub ⭐️

Также вы можете стать спонсором на GitHub Sponsors или OpenCollective  ❤️

В процессе работы с .env файлами могут возникать ошибки, которые вы можете не заметить с первого взгляда или пропустить при проверке кода. Они могут привести к сбоям в работе приложения. Тут и пригодится dotenv-linter — его можно использовать на любом из ваших проектов, независимо от языка программирования!
Михаил Грачев
Backend-разработчик и DevOps-инженер Evrone
Связаться с нами
Нужна команда?
Давайте обсудим ваш проект
Прикрепить файл
Максимальный размер файла: 8 МБ.
Допустимые типы файлов: jpg jpeg png txt rtf pdf doc docx ppt pptx.