Closed marcus-held closed 7 years ago
@mld-ger Are you talking about using running a task that uses grgit
? How were you using it with this plugin before?
I didn't used the plugin yet, but I want to. Currently I'm trying to achieve my goal with the 2.x version, but I struggle with ordering problems atm. Anyway the configuration looks like this:
def os = new ByteArrayOutputStream();
exec {
executable 'git'
args 'rev-parse', '--abbrev-ref', 'HEAD'
standardOutput = os;
}
def branch = os.toString().replaceAll("[^A-Za-z0-9 ]|feature", "").trim()
project.version.with {
tagPrefix = 'v'
preRelease {
startingVersion = "${branch}.0"
bump { String version ->
int num = Integer.parseInt(version.split(/\./)[1]) + 1
return "${branch}.${num}"
}
}
}
I would like to do sth. similar in the 3.x version as well. What would work for me also is when I can somehow pass a parameter into the configuration.
I found a solution to help myself with version 3 now. I did the following:
build.gradle:
def os = new ByteArrayOutputStream();
exec {
executable 'git'
args 'rev-parse', '--abbrev-ref', 'HEAD'
standardOutput = os;
}
def branch = os.toString().replaceAll("[^A-Za-z0-9 ]|feature", "").trim()
allprojects {
//The same placeholder is used in semantic-build-versioning.gradle
def stringToReplace = "IWantToBeReplacedAndIShouldNotConflictWithABranchName"
version = rootProject.version.replace("${stringToReplace}", branch)
}
semantic-build-versioning.gradle
def stringToReplace = "IWantToBeReplacedAndIShouldNotConflictWithABranchName"
preRelease {
startingVersion = "${stringToReplace}.0"
bump = {
int num = Integer.parseInt(version.split(/\./)[1]) + 1
return "${stringToReplace}.${num}"
}
}
This solution does work, but I wouldn't consider it as bulletproof. It would be nice to have a better support of the plugin here.
Best
edit: unfortunally with this approach I can not execute the "tag" task with the newPreRelease property anymore because I exchanged the version by a string.
> $ ./gradlew tag -Prelease -PnewPreRelease --stacktrace
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':tag'.
> No such property: snapshot for class: java.lang.String
* Try:
Run with --info or --debug option to get more log output.
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':tag'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88)
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:242)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:317)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:309)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:185)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:95)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:235)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:224)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:121)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:77)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:102)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:96)
at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:612)
at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:567)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:96)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: groovy.lang.MissingPropertyException: No such property: snapshot for class: java.lang.String
at net.vivin.gradle.versioning.tasks.TagTask.tag(TagTask.groovy:63)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.doExecute(DefaultTaskClassInfoStore.java:141)
at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:134)
at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:121)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:711)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:694)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:122)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:317)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:309)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:185)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:95)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:111)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)
... 27 more
BUILD FAILED in 1s
1 actionable task: 1 executed
@mld-ger So the issue is that you are not able to get access to the branch name within the bump
closure, correct?
Oh, and you aren't able to get the branch name when setting the starting version either. Correct?
@mld-ger You can inject the branch name into the pre-release identifier in the following manner:
semantic-build-versioning.gradle:
preRelease {
startingVersion = "${'git rev-parse --abbrev-ref HEAD'.execute().text.trim()}.0"
bump = {
String[] parts = it.split(/\./)
"${parts[0]}.${Integer.parseInt(parts[1]) + 1}"
}
}
Thanks for your answer @vivin. Your solution did indeed solve my issue.
Keep up the good work :+1:
@mld-ger Glad it worked out! :)
Hi,
I'm trying to get your plugin into my project and we have the requirement to append the branch name into our version. The reason is that we develop multiple features simultaneously on different branches. We have the need to deploy them individually without conflicting versions.
Since the plugin changed to the configuration approach I can not execute e.g. grgit in semantic-build-versioning.properties file.
Did I miss something, or is this not possible at all?
Thanks for your help and the great work on this plugin.
Best