Skip to content
This repository has been archived by the owner on Oct 5, 2018. It is now read-only.

Releasing multi-module project #58

Closed
jnehlmeier opened this issue Jul 12, 2014 · 6 comments
Closed

Releasing multi-module project #58

jnehlmeier opened this issue Jul 12, 2014 · 6 comments

Comments

@jnehlmeier
Copy link

Hi,

can you give me an example on how to release a multi-module project with your grgit-release plugin?

If I apply the plugin to all my subprojects it tries to create the same version for each subproject which obviously fails in git.
If I apply the plugin to the root project only then
1.) releaseTask needs to reference subproject tasks which is annoying if you have quite some subprojects, e.g. releaseTask = [ ':proj1:clean', 'proj2:clean', 'proj1:build', 'proj2:build' ]
2.) the prepare task fails because no version has been inferred.

localhost:common-parent Jens$ ./gradlew -Prelease.scope=major -Prelease.stage=final release
The Compile.setJavaCompiler(Compiler<JavaCompileSpec>) method has been deprecated and is scheduled to be removed in Gradle 2.0.
:prepare FAILED
:validateSinceTags SKIPPED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':prepare'.
> Version has not been inferred.

The build file of the root project is basically like:

apply plugin: 'grgit-release'

release {
  grgit = Grgit.open(project.file('.'))
  releaseTasks = [':common:clean', ':common-gwt:clean', ':common:build', ':common-gwt:build' ]
}

subprojects {
  apply plugin: 'java'
  apply plugin: 'signing'
  apply plugin: 'maven'
  ..... configuration for all subprojects ....
}

I think I am missing something obvious.

Thanks in advance.

@ajoberstar
Copy link
Owner

Not sure you're missing anything. I don't think plugin is set up well to handle multi-projects.

Sounds like two separate issues so far:

  1. Hard to setup release tasks on a multi-project. The best option might be to do things like this. Syntax might be a little off... releaseTasks = allprojects.collect { proj -> ['clean', 'build'].collect { name -> proj.tasks.getByName(name) }.flatten()
  2. The prepare task failing to infer. Can you provide a stack trace for that?

@ajoberstar ajoberstar added this to the 0.10.0 milestone Jul 14, 2014
@jnehlmeier
Copy link
Author

Here is the full output:

21:19:39: Executing external task 'release'...
The Compile.setJavaCompiler(Compiler<JavaCompileSpec>) method has been deprecated and is scheduled to be removed in Gradle 2.0.
:prepare FAILED
:validateSinceTags SKIPPED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':prepare'.
> Version has not been inferred.

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':prepare'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:289)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:86)
    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61)
    at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:67)
    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:54)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:166)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:113)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:81)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:64)
    at org.gradle.tooling.internal.provider.BuildModelAction.run(BuildModelAction.java:76)
    at org.gradle.tooling.internal.provider.BuildModelAction.run(BuildModelAction.java:31)
    at org.gradle.tooling.internal.provider.ConfiguringBuildAction.run(ConfiguringBuildAction.java:150)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:35)
    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:45)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:42)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:24)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.StartStopIfBuildAndStop.execute(StartStopIfBuildAndStop.java:33)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.ReturnResult.execute(ReturnResult.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:71)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:69)
    at org.gradle.util.Swapper.swap(Swapper.java:38)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:69)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:60)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:45)
    at org.gradle.launcher.daemon.server.DaemonStateCoordinator.runCommand(DaemonStateCoordinator.java:186)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy.doBuild(StartBuildOrRespondWithBusy.java:49)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.HandleStop.execute(HandleStop.java:36)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.DaemonHygieneAction.execute(DaemonHygieneAction.java:39)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.CatchAndForwardDaemonFailure.execute(CatchAndForwardDaemonFailure.java:32)
    at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at org.gradle.launcher.daemon.server.exec.DefaultDaemonCommandExecuter.executeCommand(DefaultDaemonCommandExecuter.java:51)
    at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.handleCommand(DefaultIncomingConnectionHandler.java:155)
    at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.receiveAndHandleCommand(DefaultIncomingConnectionHandler.java:128)
    at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.run(DefaultIncomingConnectionHandler.java:116)
    at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:64)
Caused by: java.lang.IllegalStateException: Version has not been inferred.
    at org.ajoberstar.gradle.git.semver.InferredVersion.getReleasable(InferredVersion.groovy:226)
    at org.ajoberstar.gradle.git.release.GrgitReleasePlugin$_addPrepareTask_closure2_closure11.doCall(GrgitReleasePlugin.groovy:102)
    at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:502)
    at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:483)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
    ... 67 more


BUILD FAILED

Total time: 2.527 secs
Version has not been inferred.
21:19:41: External task execution finished 'release'.

@ajoberstar
Copy link
Owner

Looks like a separate issue. Added it as #60.

@jnehlmeier
Copy link
Author

Ok cool, I subscribed #60

Regarding the releaseTask definition I am currently doing

 releaseTasks = ['clean', 'build'].collect { task ->
    subprojects.collect { project ->
      ":" + project.name + ":" + task
    }.flatten()
  }.flatten()

Obviously not optimal. There might also be additional tasks you only want to execute once for the root project and after all submodules are build. For example your publishGhPages task should upload an aggregated JavaDoc from all submodules and not the JavaDoc from each submodule on its own.

@ajoberstar
Copy link
Owner

OK. Would it help if I added a shouldRunAfter ordering to everything in the list? That way they would typically be in the order they are listed.

@ajoberstar
Copy link
Owner

I'm going to close this for now. If you would like some changes to address the issues you've had with multi-project please reopen and let me know what your thoughts are.

@ajoberstar ajoberstar removed this from the 0.10.0 milestone Sep 6, 2014
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

2 participants