Регрессия shallow git fetch в discourse_docker

Вы правы, в тот момент мы не знаем версию. Похоже, базовый образ использует текущую версию + ветку tests-passed, хотя в ветке будет тот коммит, который был на момент сборки образа.

Не приводит ли текущий подход к более медленным пересборкам, даже при использовании ветки tests-passed?

Просто рассмотрите следующие инструкции:

В базовом образе:

git clone --depth 1 https://github.com/discourse/discourse.git
cd discourse/
git remote set-branches --add origin tests-passed

В web.template.yml

git reset --hard
git clean -f
git remote set-branches --add origin master
git pull
...
Когда вызывается `git pull`, **извлекается весь репозиторий**, и это может занять несколько минут, так как ранее было выполнено только частичное клонирование. Вы можете попробовать выполнить только указанные выше инструкции локально и проверить. Я не утверждаю, что наличие всего репозитория в базовом образе лучше, но код в `web.template.yml` будет выполняться при каждой пересборке, даже если был добавлен только плагин или изменена настройка в `app.yml`. Обычно в моих проектах (не связанных с Discourse) я создаю новый образ для каждой новой версии, но для вас это может быть нецелесообразно (учитывая ваш текущий подход). Вы не замечали увеличения времени пересборки? (Или, возможно, это не так значительно по сравнению с общим временем пересборки в большинстве случаев?)

Обновление

Я снова протестировал описанные выше шаги, и они оказались быстрыми. Похоже, при первой попытке я выполнил другую команду, которая изменила дерево git, и в итоге при запуске git pull попыталось извлечь всё.