GoogleContainerTools / GoogleContainerTools/skaffold
When using gradle builder unit tests are not executed.
- Dominant language
- Go
- Stars
- 15.9k
- Forks
- 1.7k
- Avg merge
- 3d 9h
- Merged PRs (30d)
- 10
Description
### Expected behavior
When using gradle as a builder skaffold should issue `gradle test jibDockerBuild` instead of just `gradle jibDockerBuild` to run unit tests before building container unless `--skip-tests` flag is passed.
### Actual behavior
skaffold issues `gradle jibDockerBuild` command and that doesn't run tests.
There's a partial workaround to add `jibDockerBuild.dependsOn test` to `build.gradle`, however in a multiproject setup, this will only run tests on the project that applies jib plugin. If such project depends on another project from the multiproject build, then the tests of that dependent project will not be run. Hence, there seems not to be a way of running all unit tests in multiproject setup which seems to be one of core features of a CI/CD pipeline.
### Information
- Skaffold version: 1.35.2
- Operating system: Linux
- Installed via: skaffold.dev
- Contents of skaffold.yaml:
```yaml
apiVersion: skaffold/v2beta10
kind: Config
metadata:
name: back-end
build:
artifacts:
- image: serviceA
jib:
project: serviceA
type: gradle
- image: serviceB
jib:
project: serviceB
type: gradle
```
### Steps to reproduce the behavior
having a multipoject gradle setup issue `skaffold build`, `skaffold run`, `skaffold debug` or `skaffold dev` command.
```
$ skaffold dev
[...]
> Task :serviceA:_skaffoldFailIfJibOutOfDate
> Task :serviceB:_skaffoldFailIfJibOutOfDate
> Task :dependent-project:generateMainEffectiveLombokConfig1
> Task :dependent-project:compileJava UP-TO-DATE
> Task :dependent-project:processResources NO-SOURCE
> Task :dependent-project:classes UP-TO-DATE
> Task :dependent-project:jar UP-TO-DATE
> Task :serviceB:generateMainEffectiveLombokConfig1
> Task :serviceB:compileJava UP-TO-DATE
> Task :serviceB:processResources UP-TO-DATE
> Task :serviceB:classes UP-TO-DATE
> Task :serviceB:jibDockerBuild
```
The above output show part of skaffold log for building image for `serviceB`. No test task are run.
If you add `jibDockerBuild.dependsOn test` in serviceB `build.gradle` then this is the relevant output:
```
$ skaffold dev
[...]
> Task :serviceA:_skaffoldFailIfJibOutOfDate
> Task :serviceB:_skaffoldFailIfJibOutOfDate
> Task :dependent-project:generateMainEffectiveLombokConfig1
> Task :dependent-project:compileJava UP-TO-DATE
> Task :dependent-project:processResources NO-SOURCE
> Task :dependent-project:classes UP-TO-DATE
> Task :dependent-project:jar UP-TO-DATE
> Task :serviceB:generateMainEffectiveLombokConfig1
> Task :serviceB:compileJava UP-TO-DATE
> Task :serviceB:processResources UP-TO-DATE
> Task :serviceB:classes UP-TO-DATE
> Task :serviceB:generateTestEffectiveLombokConfig1
> Task :serviceB:compileTestJava
> Task :serviceB:processTestResources NO-SOURCE
> Task :serviceB:testClasses
> Task :serviceB:test
> Task :serviceB:jibDockerBuild
```
you can see that now tests for `serviceB` are run, but not for `dependent-project` that `serviceB` declares as its dependency in its `build.gradle`.
Contributor guide
Assessment
This issue has not been assessed yet.