palantir / gradle-revapi

Gradle plugin that uses Revapi to check whether you have introduced API/ABI breaks in your Java public API
Apache License 2.0
30 stars 16 forks source link

build fails inside gitlab ci #302

Open pdeva opened 4 years ago

pdeva commented 4 years ago

What happened?

Seeing this error when running gradlew check inside gitlab ci. seems the way revapi uses git requires has some issues. works fine locally or in circleci.


  | Caused by: java.lang.RuntimeException: Failed running command: |  
-- | -- | --
  | Command:[] |  
  | Exit code: 128 |  
  | Stdout: |  
  | Stderr:fatal: No names found, cannot describe anything. |  
  |   |  

  |   | at com.palantir.gradle.revapi.GitVersionUtils$GitResult.stdoutOrThrowIfNonZero(GitVersionUtils.java:115) |  
-- | -- | -- | --
  |   | at com.palantir.gradle.revapi.GitVersionUtils.previousGitTagFromRef(GitVersionUtils.java:57) |  
  |   | at com.palantir.gradle.revapi.GitVersionUtils.access$000(GitVersionUtils.java:32) |  
  |   | at com.palantir.gradle.revapi.GitVersionUtils$PreviousGitTags.tryAdvance(GitVersionUtils.java:135) |  
  |   | at com.palantir.gradle.revapi.RevapiExtension.lambda$new$1(RevapiExtension.java:47) |  
  |   | at org.gradle.api.internal.provider.DefaultProvider.calculateOwnValue(DefaultProvider.java:66) |  
  |   | at org.gradle.api.internal.provider.AbstractMinimalProvider.calculateValue(AbstractMinimalProvider.java:103) |  
  |   | at org.gradle.api.internal.provider.Collectors$ElementsFromCollectionProvider.collectEntries(Collectors.java:216) |  
  |   | at org.gradle.api.internal.provider.AbstractCollectionProperty$CollectingSupplier.calculateValue(AbstractCollectionProperty.java:337) |  
  |   | at org.gradle.api.internal.provider.AbstractCollectionProperty.calculateValueFrom(AbstractCollectionProperty.java:184) |  
  |   | at org.gradle.api.internal.provider.AbstractCollectionProperty.calculateValueFrom(AbstractCollectionProperty.java:37) |  
  |   | at org.gradle.api.internal.provider.AbstractProperty.doCalculateValue(AbstractProperty.java:133) |  
  |   | at org.gradle.api.internal.provider.AbstractProperty.calculateOwnValue(AbstractProperty.java:127) |  
  |   | at org.gradle.api.internal.provider.AbstractMinimalProvider.get(AbstractMinimalProvider.java:84) |  
  |   | at com.palantir.gradle.revapi.ResolveOldApi.resolveOldApiAcrossAllOldVersions(ResolveOldApi.java:55) |  
  |   | at com.palantir.gradle.revapi.ResolveOldApi.lambda$oldApiProvider$0(ResolveOldApi.java:48) |  
  |   | at com.palantir.gradle.revapi.GradleUtils$MemoizingSupplier.get(GradleUtils.java:49) |  
  |   | at org.gradle.api.internal.provider.DefaultProvider.calculateOwnValue(DefaultProvider.java:66) |  
  |   | at org.gradle.api.internal.provider.AbstractMinimalProvider.calculateValue(AbstractMinimalProvider.java:103) |  
  |   | at org.gradle.api.internal.provider.TransformBackedProvider.calculateOwnValue(TransformBackedProvider.java:64) |  
  |   | at org.gradle.api.internal.provider.AbstractMinimalProvider.calculatePresence(AbstractMinimalProvider.java:79) |  
  |   | at org.gradle.api.internal.provider.MappingProvider.calculatePresence(MappingProvider.java:50) |  
  |   | at org.gradle.api.internal.provider.AbstractProperty.calculatePresence(AbstractProperty.java:58) |  
  |   | at org.gradle.api.internal.provider.AbstractMinimalProvider.isPresent(AbstractMinimalProvider.java:74) |  
  |   | at org.gradle.api.internal.tasks.properties.bean.AbstractNestedRuntimeBeanNode$BeanPropertyValue.call(AbstractNestedRuntimeBeanNode.java:137) |  
  |   | at org.gradle.util.GUtil.uncheckedCall(GUtil.java:442) |  
  |   | at org.gradle.util.DeferredUtil.unpackNestableDeferred(DeferredUtil.java:64) |  
  |   | at org.gradle.api.internal.file.collections.UnpackingVisitor.add(UnpackingVisitor.java:84) |  
  |   | at org.gradle.api.internal.file.DefaultFileCollectionFactory$ResolvingFileCollection.visitChildren(DefaultFileCollectionFactory.java:310) |  
  |   | at org.gradle.api.internal.file.CompositeFileCollection.visitDependencies(CompositeFileCollection.java:108) |  
  |   | at org.gradle.api.internal.tasks.CachingTaskDependencyResolveContext$TaskGraphImpl.getNodeValues(CachingTaskDependencyResolveContext.java:112) |  
  |   | at org.gradle.internal.graph.CachingDirectedGraphWalker$GraphWithEmptyEdges.getNodeValues(CachingDirectedGraphWalker.java:213) |  
  |   | at org.gradle.internal.graph.CachingDirectedGraphWalker.doSearch(CachingDirectedGraphWalker.java:121) |  
  |   | at org.gradle.internal.graph.CachingDirectedGraphWalker.findValues(CachingDirectedGraphWalker.java:73) |  
  |   | at org.gradle.api.internal.tasks.CachingTaskDependencyResolveContext.getDependencies(CachingTaskDependencyResolveContext.java:67) |  
  |   | at org.gradle.execution.plan.TaskDependencyResolver.resolveDependenciesFor(TaskDependencyResolver.java:46) |  
  |   | at org.gradle.execution.plan.LocalTaskNode.getDependencies(LocalTaskNode.java:160) |  
  |   | at org.gradle.execution.plan.LocalTaskNode.resolveDependencies(LocalTaskNode.java:128) |  
  |   | at org.gradle.execution.plan.DefaultExecutionPlan.doAddNodes(DefaultExecutionPlan.java:163) |  
  |   | at org.gradle.execution.plan.DefaultExecutionPlan.addEntryTasks(DefaultExecutionPlan.java:133) |  
  |   | at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph.addEntryTasks(DefaultTaskExecutionGraph.java:147) |  
  |   | at org.gradle.execution.TaskNameResolvingBuildConfigurationAction.configure(TaskNameResolvingBuildConfigurationAction.java:49) |  
  |   | at org.gradle.execution.DefaultBuildConfigurationActionExecuter.configure(DefaultBuildConfigurationActionExecuter.java:58) |  
  |   | at org.gradle.execution.DefaultBuildConfigurationActionExecuter.access$200(DefaultBuildConfigurationActionExecuter.java:26) |  
  |   | at org.gradle.execution.DefaultBuildConfigurationActionExecuter$2.proceed(DefaultBuildConfigurationActionExecuter.java:66) |  
  |   | at org.gradle.execution.DefaultTasksBuildExecutionAction.configure(DefaultTasksBuildExecutionAction.java:45) |  
  |   | at org.gradle.execution.DefaultBuildConfigurationActionExecuter.configure(DefaultBuildConfigurationActionExecuter.java:58) |  
  |   | at org.gradle.execution.DefaultBuildConfigurationActionExecuter.access$200(DefaultBuildConfigurationActionExecuter.java:26) |  
  |   | at org.gradle.execution.DefaultBuildConfigurationActionExecuter$2.proceed(DefaultBuildConfigurationActionExecuter.java:66) |  
  |   | at org.gradle.execution.ExcludedTaskFilteringBuildConfigurationAction.configure(ExcludedTaskFilteringBuildConfigurationAction.java:48) |  
  |   | at org.gradle.execution.DefaultBuildConfigurationActionExecuter.configure(DefaultBuildConfigurationActionExecuter.java:58) |  
  |   | at org.gradle.execution.DefaultBuildConfigurationActionExecuter.access$200(DefaultBuildConfigurationActionExecuter.java:26) |  
  |   | at org.gradle.execution.DefaultBuildConfigurationActionExecuter$1.run(DefaultBuildConfigurationActionExecuter.java:44)

What did you want to happen?

build without errors.

gradle 6.6.1
"com.palantir.revapi" version "1.4.3"
iamdanfox commented 4 years ago

I think can happen if your git clone was a shallow checkout.

In order to be useful, gradle-revapi needs some way to understand what the previous released version of your code was. At palantir we just cut git tags on develop (and our CircleCI workflows do a full clone), so we can easily find the most recently released thing by running git describe --tags --abbrev=0 HEAD^ see link.

If you use the same style of cutting git tags on develop and want to make this work, you might be able to tweak your GitLab config so that it does a deeper checkout. Alternatively, if there's some other way you want to determine the previously released version, it's probably possible to wire that up to revapi?

pdeva commented 4 years ago

i can confirm that git checkout is set to max depth

iamdanfox commented 4 years ago

Ok so if running git describe --tags --abbrev=0 HEAD^ doesn't work, how would you like gradle-revapi to figure out what the previously released version of your codebase was? (Also links would be great if this is an open-source codebase!)