Поддержка YAML-конфига в ~/.config/redmine-reporter/config.yml #46

Closed
opened 2026-06-30 09:07:01 +07:00 by artem.kokos · 0 comments
Owner

Контекст

Текущий способ настройки — .env в рабочей директории. Он хорош для секретов и CI/CD, но плохо масштабируется, когда в проекте появляются:

  • шаблоны имён файлов и пути по умолчанию (#43);
  • фиксация последнего использованного периода (--commit, #44);
  • настройки SMTP и email для автоотправки (#45);
  • точность периода до времени (datetime, #47).

Всё это в .env превращается в длинный плоский список без структуры, неудобный для редактирования и версионирования.

Предложение

Ввести YAML-конфиг как основное хранилище постоянных настроек пользователя:

~/.config/redmine-reporter/config.yml

.env остаётся для секретов и временных переопределений, но перестаёт быть единственным источником правды.

Структура конфига (черновик)

redmine:
  url: https://red.eltex.loc/
  author: "Кокос А.А."
  verify_ssl: true

period:
  precision: datetime  # date | datetime, см. #47
  default_from: "2026-06-01"
  default_to: "2026-06-30"
  dynamic: true
  last_used:
    from: "2026-06-30T09:00:00"
    to: "2026-06-30T12:00:00"

output:
  dir: ~/reports
  filename: "{author}_{from}_{to}.{ext}"
  default_format: xlsx

email:
  smtp:
    host: smtp.example.com
    port: 587
    user: bot@example.com
    password: ${SMTP_PASSWORD}
    tls: true
  from: bot@example.com
  to:
    - boss@example.com
  subject: "Отчёт {author} за {period}"

Конкретные поля и секции будут уточнены при реализации связанных задач (#43, #44, #45, #47). Этот issue — фундамент, от которого они зависят.

Приоритеты наслоения

кодовые дефолты
    ↓
~/.config/redmine-reporter/config.yml
    ↓
.env в текущей директории
    ↓
CLI-флаги

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

Безопасность

  • Директория ~/.config/redmine-reporter/ создаётся с правами 0700.
  • Файл config.yml создаётся с правами 0600.
  • При чтении, если права файла позволяют читать кому-либо кроме владельца, выводится предупреждение.
  • Секреты (api_key, smtp.password) в YAML допустимы, но не рекомендуются. Предпочтительнее: .env, переменные окружения или подстановка вида ${VAR}.

Поддержка ${VAR} в YAML

Открытый вопрос: поддерживать ли подстановку переменных окружения прямо в значениях YAML, например:

redmine:
  api_key: ${REDMINE_API_KEY}

email:
  smtp:
    password: ${SMTP_PASSWORD}

Это удобно для секретов, но добавляет сложность парсинга. Нужно решить при реализации.

Миграция с .env

  • Если ~/.config/redmine-reporter/config.yml существует — использовать его.
  • Иначе, если в текущей директории есть .env — использовать его (обратная совместимость).
  • Иначе — кодовые дефолты.

При желании можно добавить команду генерации шаблона конфига, но это не обязательно в рамках этого issue.

Связанные задачи

  • #43 — имя файла и пути по умолчанию (секция output).
  • #44--commit, фиксация периода (писать в period.last_used YAML-конфига).
  • #45 — автоотправка по почте (секции email и smtp).
  • #47 — поддержка datetime в периоде (поле period.precision).

Критерии приёмки

  • CLI читает ~/.config/redmine-reporter/config.yml, если он есть.
  • Поддерживается приоритет: defaults < YAML < .env < CLI-флаги.
  • Директория и файл создаются/проверяются с правами 0700/0600.
  • При мягких правах конфига выводится предупреждение.
  • Старый .env продолжает работать без изменений.
  • Добавлены тесты на чтение YAML и приоритеты источников настроек.
## Контекст Текущий способ настройки — `.env` в рабочей директории. Он хорош для секретов и CI/CD, но плохо масштабируется, когда в проекте появляются: - шаблоны имён файлов и пути по умолчанию (#43); - фиксация последнего использованного периода (`--commit`, #44); - настройки SMTP и email для автоотправки (#45); - точность периода до времени (`datetime`, #47). Всё это в `.env` превращается в длинный плоский список без структуры, неудобный для редактирования и версионирования. ## Предложение Ввести YAML-конфиг как основное хранилище постоянных настроек пользователя: ``` ~/.config/redmine-reporter/config.yml ``` `.env` остаётся для секретов и временных переопределений, но перестаёт быть единственным источником правды. ## Структура конфига (черновик) ```yaml redmine: url: https://red.eltex.loc/ author: "Кокос А.А." verify_ssl: true period: precision: datetime # date | datetime, см. #47 default_from: "2026-06-01" default_to: "2026-06-30" dynamic: true last_used: from: "2026-06-30T09:00:00" to: "2026-06-30T12:00:00" output: dir: ~/reports filename: "{author}_{from}_{to}.{ext}" default_format: xlsx email: smtp: host: smtp.example.com port: 587 user: bot@example.com password: ${SMTP_PASSWORD} tls: true from: bot@example.com to: - boss@example.com subject: "Отчёт {author} за {period}" ``` Конкретные поля и секции будут уточнены при реализации связанных задач (#43, #44, #45, #47). Этот issue — фундамент, от которого они зависят. ## Приоритеты наслоения ``` кодовые дефолты ↓ ~/.config/redmine-reporter/config.yml ↓ .env в текущей директории ↓ CLI-флаги ``` То есть флаги командной строки всегда побеждают, `.env` может доопределять секреты, а YAML отвечает за постоянные пользовательские настройки. ## Безопасность - Директория `~/.config/redmine-reporter/` создаётся с правами `0700`. - Файл `config.yml` создаётся с правами `0600`. - При чтении, если права файла позволяют читать кому-либо кроме владельца, выводится предупреждение. - Секреты (`api_key`, `smtp.password`) в YAML допустимы, но не рекомендуются. Предпочтительнее: `.env`, переменные окружения или подстановка вида `${VAR}`. ## Поддержка `${VAR}` в YAML Открытый вопрос: поддерживать ли подстановку переменных окружения прямо в значениях YAML, например: ```yaml redmine: api_key: ${REDMINE_API_KEY} email: smtp: password: ${SMTP_PASSWORD} ``` Это удобно для секретов, но добавляет сложность парсинга. Нужно решить при реализации. ## Миграция с `.env` - Если `~/.config/redmine-reporter/config.yml` существует — использовать его. - Иначе, если в текущей директории есть `.env` — использовать его (обратная совместимость). - Иначе — кодовые дефолты. При желании можно добавить команду генерации шаблона конфига, но это не обязательно в рамках этого issue. ## Связанные задачи - #43 — имя файла и пути по умолчанию (секция `output`). - #44 — `--commit`, фиксация периода (писать в `period.last_used` YAML-конфига). - #45 — автоотправка по почте (секции `email` и `smtp`). - #47 — поддержка `datetime` в периоде (поле `period.precision`). ## Критерии приёмки - [ ] CLI читает `~/.config/redmine-reporter/config.yml`, если он есть. - [ ] Поддерживается приоритет: defaults < YAML < `.env` < CLI-флаги. - [ ] Директория и файл создаются/проверяются с правами `0700`/`0600`. - [ ] При мягких правах конфига выводится предупреждение. - [ ] Старый `.env` продолжает работать без изменений. - [ ] Добавлены тесты на чтение YAML и приоритеты источников настроек.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: artem.kokos/redmine-reporter#46