mirror of
https://github.com/smmarty/friflex_flutter_starter.git
synced 2025-12-21 17:10:45 +00:00
feat(rfc): добавить рекомендации по управлению сгенерированными файлами и файлом pubspec.lock (#18)
Co-authored-by: PetrovY <y.petrov@friflex.com>
This commit is contained in:
30
tools/rfc/RFC-managing_generated_files.md
Normal file
30
tools/rfc/RFC-managing_generated_files.md
Normal file
@@ -0,0 +1,30 @@
|
||||
### Управление сгенерированными файлами
|
||||
|
||||
На проекте встречаются файлы, автоматически создаваемые инструментами генерации кода
|
||||
(например, файлы с расширениями *.g.dart, *.freezed.dart,
|
||||
а также файлы, связанные с protobuf и другими генераторами кода).
|
||||
Необходимость контролировать такие файлы в репозитории вызывает ряд обсуждений.
|
||||
См [issue](https://github.com/smmarty/flutter_team/issues/22).
|
||||
|
||||
### Проблемы включения сгенерированных файлов в репозиторий
|
||||
|
||||
1. Частые изменения. Сгенерированные файлы могут автоматически обновляться даже при отсутствии изменений в исходном коде, что приводит к ненужным изменениям в репозитории.
|
||||
2. Конфликты при слиянии веток. Различия в таких файлах могут вызывать конфликты, которые не связаны с реальными изменениями, усложняя процесс работы над кодом.
|
||||
3. Усложнение кода при проверке. Изменения в автоматически сгенерированных файлах попадают в PR, затрудняя код-ревью.
|
||||
4. Недостоверность содержимого main. Нет гарантии, что в основной ветке всегда будут корректные версии сгенерированных файлов.
|
||||
|
||||
### Проблемы при добавлении сгенерированных файлов в .gitignore
|
||||
|
||||
1. Необходимость предварительной генерации. При добавлении таких файлов в .gitignore для проверки кода в пайплайне необходимо добавлять этап генерации при каждом изменении в PR.
|
||||
Это критично на крупных проектах, так как генерация файлов может занимать несколько минут.
|
||||
2. Неудобства для разработчиков. Разработчикам потребуется вручную генерировать файлы на локальной машине при каждом чекауте.
|
||||
3. Неактуальный код в main. Основная ветка без предварительно сгенерированных файлов станет неработоспособной, а сборка потребует добавления этапа генерации, что увеличит время и нагрузку на серверы.
|
||||
|
||||
### Рекомендации:
|
||||
|
||||
1. Оставлять сгенерированные файлы в репозитории.
|
||||
Это позволит сохранить работоспособность основного кода без необходимости постоянной генерации файлов на всех этапах.
|
||||
При этом рекомендуется:
|
||||
- Периодически актуализировать файлы в основных ветках;
|
||||
- Контролировать конфликты при слиянии веток и исключать ненужные изменения в этих файлах.
|
||||
2. Обучение команды. Важно информировать команду о причинах хранения сгенерированных файлов в репозитории и о правилах работы с ними.
|
||||
25
tools/rfc/RFC-managing_pubspec_lock.md
Normal file
25
tools/rfc/RFC-managing_pubspec_lock.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# Управление файлом pubspec.lock
|
||||
|
||||
На проекте возникает необходимость определить стратегию работы с файлом pubspec.lock.
|
||||
Данный файл может либо храниться в репозитории, либо быть добавлен в .gitignore.
|
||||
Оба варианта имеют свои преимущества и недостатки, которые следует учесть.
|
||||
См [issue](https://github.com/smmarty/flutter_team/issues/20)
|
||||
|
||||
#### Аргументы за хранение pubspec.lock
|
||||
|
||||
1. Повторяемость сборки. Файл фиксирует конкретные версии зависимостей, обеспечивая единообразие версий для всех разработчиков и сред сборки.
|
||||
2. Избежание неожиданных изменений. Новые версии зависимостей могут внести изменения, способные нарушить сборку или логику приложения. Наличие pubspec.lock позволяет контролировать изменения и избегать неожиданных обновлений.
|
||||
3. Стабильность CI/CD. Зафиксированные версии зависимостей способствуют стабильным сборкам и тестам в CI-процессах.
|
||||
4. Рекомендации Dart. Dart рекомендует хранить pubspec.lock в репозитории для приложений, чтобы обеспечить стабильность окружения. (См. документацию.)
|
||||
|
||||
#### Аргументы против хранения pubspec.lock
|
||||
|
||||
1. Частые изменения. pubspec.lock обновляется при каждом изменении зависимостей, что увеличивает количество коммитов и PR, связанных только с обновлением зависимостей.
|
||||
|
||||
### Рекомендации:
|
||||
|
||||
1. ХРАНИТЬ pubspec.lock для ПРИЛОЖЕНИЙ.
|
||||
2. НЕ ХРАНИТЬ pubspec.lock ДЛЯ ПАКЕТОВ.
|
||||
3. Решение для переключаемых зависимостей (GMS/HMS).
|
||||
При изменении зависимостей, таких как GMS/HMS, может возникать несовместимость версий. Flutter пока не поддерживает флаворы на уровне зависимостей pubspec (см. [Flutter issue #46979](https://github.com/flutter/flutter/issues/46979)),
|
||||
поэтому рекомендуем хранить по дефолту GMS pubspec.lock как базовый.
|
||||
Reference in New Issue
Block a user