- в зависимости от ENV выбирался docker-compose.{env}.yaml и dockerfile.{env} для каждого из контейнеров (если сборка из директории, а не из образа)
Это так не работает. ENV задаётся сразу для определённого сервиса в docker-compose и для определённой сборки Dockerfile.
Я бы сделал нормальный CI в gitlab, например, и билды из веток для stage и production. Тут сам docker-compose не совсем предназначен для сборок и порождает костыли.
Удобней иметь один Dockerfile, а особые параметры передавать через
--build-argdocker build --build-arg ENV=stage .