I have a multi-project gradle repo with separate projects for handing database migrations (schema
) and code generation (codegen
). The schema
project has a :migrate
task for applying migrations to a database, and the codegen
project has a :generate
task, which depends on a migrated database, to generate some java code. For the sake of example, lets say a third project exists which depends on codegen:generate
, named app
.
In CI, the gradle build makes use of a remote build cache. This works well in most cases. Changes within schema
cause a run that looks like this:
./gradlew app:build
> schema:migrate
> codegen:generate
> app:build
SUCCESS
Changes to only app
also works well:
./gradlew app:build
> schema:migrate UP-TO-DATE
> codegen:generate UP-TO-DATE
> app:build
SUCCESS
The problem exists when there are changes within the codegen
project, but no changes to schema
:
./gradlew app:build
> schema:migrate UP-TO-DATE
> codegen:generate
(Error here because a migrated database does not exist in CI,
because `:migrate` did no work)
FAILURE
How can I ensure that codegen:migrate
is always re-run when there are changes to either schema
or codegen
?
CodePudding user response:
If migrate
should run when there are codegen
changes, then those are inputs.
I would merge the schema
and codegen
projects into one, then configure the inputs such that the files that trigger generate
to run are also declared as inputs
of migrate
.