‘rush change’: что такое bump и почему?

Я не всегда уверен, почему rush change [-v] выводит или не выводит список проекта. Иногда я также хотел бы увидеть свои коммиты, из-за которых rush запросил файл изменений. Ну, знаете, для должной осмотрительности 🙂

Под капотом

Я посмотрел на код rush, чтобы убедиться, что я понимаю, что происходит.

Включено в «измененные проекты»

Во-первых, rush change [-v] вызывает git merge-base, чтобы найти целевой коммит. Это будет ваше последнее слияние с targetBranch.

librariesrush-libsrclogicGit.ts

# getMergeBase() 
git --no-optional-locks merge-base -- HEAD ${targetBranch}
Вход в полноэкранный режим Выйти из полноэкранного режима

Затем он находит все измененные файлы, отслеживаемые Git’ом, что включает как поставленные, так и зафиксированные изменения.
librariespackage-deps-hashsrcgetRepoState.ts

# getRepoChanges()
# revision: the mergeBase from the previous step
git --no-optional-locks diff-index --no-renames --no-commit-id `
--cached -z ${revision} --
Вход в полноэкранный режим Выйти из полноэкранного режима

Да, поэтапные изменения также приводят к тому, что ваш проект попадает в список rush change.

НЕ включается в «измененные проекты»

Далее, rush change проверяет, соответствуют ли вновь добавленные файлы изменений измененным пакетам. В основном это означает, что любой проект с файлом изменений будет удален из списка «измененных проектов» и, по сути, от вас НЕ потребуется создавать файл изменений.

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

спешка, что изменилось

rush whatchanged — это пользовательская команда, которую вы можете установить с помощью генератора yeoman: yo rush-conventionalcommits.

Было бы полезно узнать, что именно заставляет rush change запрашивать файл изменений? Это поэтапные или зафиксированные изменения? И если есть коммиты с момента последнего слияния, легко просматривать их?
Если вы используете обычные коммиты, можно было бы предложить тип изменения, чтобы не тратить время на принятие решения о том, что уже «есть».

Возможно, когда-нибудь это появится в rush (см. здесь), а пока я использую пользовательскую команду rush rush whatchanged.

При запуске без параметров она отображает сводную информацию.
Вы можете увидеть, сколько коммитов и поэтапных файлов у вас есть для каждого проекта. Вы также получите предупреждение, если файл изменений уже существует, поскольку rush change будет игнорировать этот проект.

rush whatchanges —showcommits

Если для проекта существует файл изменений, rush whatchanges --showcommits предоставит вам историю коммитов, сделанных ПОСЛЕ создания последнего файла изменений.

shortlog

rush whatchanges --showcommits shortlog выполняет git shortlog и выводит вывод на терминал.

полный

Если у вас много коммитов, и читать их в консоли неудобно, используйте rush whatchanges --showcommits full. Он сохраняет историю коммитов в папку rush temp:

rush whatchanges —recommend-changetype

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

Сценарий вызывает git rev-list --count --grep с регулярным выражением для фильтрации и подсчета сообщений о коммитах.

major

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

git rev-list --count --extended-regexp --grep "(^(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)(.*?)?!:.*|^BREAKING CHANGE: )" -- "${projectFolder}"
Войдите в полноэкранный режим Выйти из полноэкранного режима

minor

Если коммиты, вызывающие серьезные изменения, не найдены, скрипт ищет коммиты с незначительными изменениями:

git rev-list --count --extended-regexp --grep "^feat((.*?))?:" -- "${projectFolder}"
Войти в полноэкранный режим Выйти из полноэкранного режима

патч

И, наконец, если нет ни крупных, ни мелких изменений, он посмотрит, есть ли коммиты, вызывающие патч-бамп:

git rev-list --count --extended-regexp --grep "^fix((.*?))?:" -- "${projectFolder}"
Войти в полноэкранный режим Выйти из полноэкранного режима

none

Если не найдено ни одного крупного/мелкого/патча изменения, рекомендуется использовать тип изменений none. Это может означать, что у вас либо не было изменений, вызывающих бамп версии, либо вы не используете обычные коммиты =) Я не делаю различий между этими двумя случаями, потому что если верно последнее, то вам не следует вызывать rush whatchanges --recommend-changetype =)

Ресурсы

Вы можете установить генератор yeoman из npm
Как всегда, код находится на github

Оцените статью
devanswers.ru
Добавить комментарий