rodm / gradle-teamcity-plugin Goto Github PK
View Code? Open in Web Editor NEWGradle plugin for developing TeamCity plugins
License: Apache License 2.0
Gradle plugin for developing TeamCity plugins
License: Apache License 2.0
I currently make my build now multi-target-version-able, to support the reloadable flag for 2018.2 but stay compatible wiht 2018.1.
I tried to do
configure([project(':server'), project(':serverPre2018.2')]) {
jar.enabled = false
dependencies {
agent project(path: ':agent', configuration: 'plugin')
server project(':commonServer')
}
}
but that missed the transitive dependencies of commonServer
(the JAR from sibling project common
).
I had to change it to
configure([project(':server'), project(':serverPre2018.2')]) {
jar.enabled = false
dependencies {
agent project(path: ':agent', configuration: 'plugin')
runtimeOnly project(':commonServer')
}
}
to get the transitive dependencies packed.
When declaring dependencies on other plugins in an agent or server descriptor (optimally both in the build or in a referenced file) it would be nice if those plugins would also be added automatically to the compileOnly configuration, so that you can use the respective classes.
When combining maven-publish
and com.gradle.plugin-publish
, you need to be careful about the plugin publication setup.
If you use configuration like pluginBundle.mavenCoordinates
, the plugin publication will build its own POM file instead of reusing the output of maven-publish
.
One of the main downside of that is the support for advanced dependency declaration and their compatibility with Maven POMs is not built in the com.gradle.plugin-publish
plugin.
In the case of this plugin, it causes the junit-bom
dependency to appear as a regular dependency instead of a BOM import in the produced POM file.
As indicated in #57, this can cause issue for users of the plugin. So while the fix in that PR will resolve the issue, a similar issue could pop up again.
I would recommend getting rid of the pluginBundle.mavenCoordinates
section this it matches the defaults anyway.
When the server plugin is applied to multple sub-projects, any project that only outputs server-side jars and not a plugin zip will create tasks for a default environment. This will lead to tasks for a default environment that may be confusing.
I hate having to restart TeamCity continuously, it is a waste of time and the latest 2018.2 EAP can already do dynamic reloading of plugins, so I tried to use it.
I've set baseDownloadUrl = 'https://download.jetbrains.com/teamcity/eap/'
and version = '60663'
, but then below exception happens as you search for a dot in the version to determine the datadir and that fails.
Setting the data dir manually works as workaround.
org.gradle.api.ProjectConfigurationException: A problem occurred configuring root project 'foo'.
at org.gradle.configuration.project.LifecycleProjectEvaluator.wrapException(LifecycleProjectEvaluator.java:79)
at org.gradle.configuration.project.LifecycleProjectEvaluator.addConfigurationFailure(LifecycleProjectEvaluator.java:73)
at org.gradle.configuration.project.LifecycleProjectEvaluator.access$400(LifecycleProjectEvaluator.java:54)
at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate.run(LifecycleProjectEvaluator.java:200)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.run(LifecycleProjectEvaluator.java:110)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:68)
at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:687)
at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:140)
at org.gradle.execution.TaskPathProjectEvaluator.configure(TaskPathProjectEvaluator.java:35)
at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:60)
at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:41)
at org.gradle.initialization.DefaultGradleLauncher$ConfigureBuild.run(DefaultGradleLauncher.java:274)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.initialization.DefaultGradleLauncher.configureBuild(DefaultGradleLauncher.java:182)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:141)
at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:124)
at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:77)
at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:74)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:154)
at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:38)
at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:96)
at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:74)
at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.run(RunAsBuildOperationBuildActionRunner.java:50)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:45)
at org.gradle.tooling.internal.provider.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:51)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:47)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:44)
at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:79)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:44)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:30)
at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:39)
at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:25)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:80)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:53)
at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:62)
at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:34)
at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:36)
at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:25)
at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:43)
at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:29)
at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:59)
at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:31)
at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:59)
at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:44)
at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:46)
at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:30)
at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:67)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
at org.gradle.util.Swapper.swap(Swapper.java:38)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:62)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:81)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:295)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: java.lang.IndexOutOfBoundsException: index is out of range 0..-1 (index = 0)
at com.github.rodm.teamcity.TeamCityServerPlugin$ConfigureEnvironmentTasksAction$_defaultMissingProperties_closure2.doCall(TeamCityServerPlugin.groovy:289)
at com.github.rodm.teamcity.TeamCityServerPlugin$ConfigureEnvironmentTasksAction.defaultMissingProperties(TeamCityServerPlugin.groovy:286)
at com.github.rodm.teamcity.TeamCityServerPlugin$ConfigureEnvironmentTasksAction$_execute_closure1.doCall(TeamCityServerPlugin.groovy:228)
at com.github.rodm.teamcity.TeamCityServerPlugin$ConfigureEnvironmentTasksAction.execute(TeamCityServerPlugin.groovy:227)
at com.github.rodm.teamcity.TeamCityServerPlugin$ConfigureEnvironmentTasksAction.execute(TeamCityServerPlugin.groovy)
at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction$1$1.run(DefaultListenerBuildOperationDecorator.java:155)
at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.reapply(DefaultUserCodeApplicationContext.java:58)
at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction$1.run(DefaultListenerBuildOperationDecorator.java:152)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction.execute(DefaultListenerBuildOperationDecorator.java:149)
at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:91)
at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:80)
at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:42)
at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:230)
at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:149)
at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:58)
at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:324)
at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:234)
at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:140)
at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:37)
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
at com.sun.proxy.$Proxy30.afterEvaluate(Unknown Source)
at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate$1.execute(LifecycleProjectEvaluator.java:187)
at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate$1.execute(LifecycleProjectEvaluator.java:184)
at org.gradle.api.internal.project.DefaultProject.stepEvaluationListener(DefaultProject.java:1418)
at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate.run(LifecycleProjectEvaluator.java:193)
... 91 more
If you try to publish a new plugin, you get a very cryptic 404 problem that is not really obvious what the cause is:
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':server:publishPlugin'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.accept(ExecuteActionsTaskExecuter.java:151)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.accept(ExecuteActionsTaskExecuter.java:148)
at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:191)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:141)
at org.gradle.api.internal.tasks.execution.ResolveBeforeExecutionStateTaskExecuter.execute(ResolveBeforeExecutionStateTaskExecuter.java:75)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:62)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:108)
at org.gradle.api.internal.tasks.execution.ResolveBeforeExecutionOutputsTaskExecuter.execute(ResolveBeforeExecutionOutputsTaskExecuter.java:67)
at org.gradle.api.internal.tasks.execution.StartSnapshotTaskInputsBuildOperationTaskExecuter.execute(StartSnapshotTaskInputsBuildOperationTaskExecuter.java:62)
at org.gradle.api.internal.tasks.execution.ResolveAfterPreviousExecutionStateTaskExecuter.execute(ResolveAfterPreviousExecutionStateTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:94)
at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:95)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:73)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:49)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:49)
at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:43)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:355)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:343)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:336)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:322)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:134)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:129)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:202)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:193)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:129)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: org.gradle.api.GradleException: Failed to upload plugin
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at com.github.rodm.teamcity.tasks.PublishTask.publishPlugin(PublishTask.groovy:126)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:103)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:48)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:41)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:28)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:702)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:669)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$5.run(ExecuteActionsTaskExecuter.java:404)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:393)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:376)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$200(ExecuteActionsTaskExecuter.java:80)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:213)
at org.gradle.internal.execution.steps.ExecuteStep.lambda$execute$1(ExecuteStep.java:33)
at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:33)
at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:26)
at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:58)
at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:35)
at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:48)
at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:33)
at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:39)
at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:73)
at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:54)
at org.gradle.internal.execution.steps.CatchExceptionStep.execute(CatchExceptionStep.java:35)
at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:51)
at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:45)
at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:31)
at org.gradle.internal.execution.steps.CacheStep.executeWithoutCache(CacheStep.java:201)
at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:70)
at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:45)
at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:49)
at org.gradle.internal.execution.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:43)
at org.gradle.internal.execution.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:32)
at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:38)
at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:24)
at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:96)
at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:89)
at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:54)
at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:38)
at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:77)
at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:37)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:36)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:26)
at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:90)
at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:48)
at org.gradle.internal.execution.impl.DefaultWorkExecutor.execute(DefaultWorkExecutor.java:33)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:120)
... 36 more
Caused by: org.jetbrains.intellij.pluginRepository.exceptions.UploadFailedException:
<!doctype html>
<html lang="en">
<head>
<title>Error 404: Page Not Found</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="shortcut icon" href="https://resources.jetbrains.com/storage/ui/favicons/favicon.ico" type="image/x-icon" sizes="16x16 32x32"/>
<link rel="apple-touch-icon" sizes="57x57" href="https://resources.jetbrains.com/storage/ui/favicons/apple-touch-icon-57x57.png"/>
<link rel="apple-touch-icon" sizes="60x60" href="https://resources.jetbrains.com/storage/ui/favicons/apple-touch-icon-60x60.png"/>
<link rel="apple-touch-icon" sizes="72x72" href="https://resources.jetbrains.com/storage/ui/favicons/apple-touch-icon-72x72.png"/>
<link rel="apple-touch-icon" sizes="76x76" href="https://resources.jetbrains.com/storage/ui/favicons/apple-touch-icon-76x76.png"/>
<link rel="apple-touch-icon" sizes="114x114" href="https://resources.jetbrains.com/storage/ui/favicons/apple-touch-icon-114x114.png"/>
<link rel="apple-touch-icon" sizes="120x120" href="https://resources.jetbrains.com/storage/ui/favicons/apple-touch-icon-120x120.png"/>
<link rel="apple-touch-icon" sizes="144x144" href="https://resources.jetbrains.com/storage/ui/favicons/apple-touch-icon-144x144.png"/>
<link rel="apple-touch-icon" sizes="152x152" href="https://resources.jetbrains.com/storage/ui/favicons/apple-touch-icon-152x152.png"/>
<link rel="apple-touch-icon" sizes="180x180" href="https://resources.jetbrains.com/storage/ui/favicons/apple-touch-icon-180x180.png"/>
<link rel="mask-icon" href="https://resources.jetbrains.com/storage/ui/favicons/apple-mask-icon.svg" color="black"/>
<meta name="msapplication-TileColor" content="#000000"/>
<meta name="msapplication-TileImage" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-144x144.png"/>
<meta name="msapplication-square70x70logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-70x70.png"/>
<meta name="msapplication-square150x150logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-150x150.png"/>
<meta name="msapplication-wide310x150logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-310x150.png"/>
<meta name="msapplication-square310x310logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-310x310.png"/>
<!-- Social Media tag Starts -->
<!-- Place this data between the <head> tags of your website -->
<!-- Open Graph data -->
<meta property="og:title" content="Error 404: Page Not Found"/>
<meta property="og:type" content="website"/>
<meta property="og:url" content="https://plugins.jetbrains.com/plugin/uploadPlugin"/>
<meta property="og:image" content="https://plugins.jetbrains.com/assets/icons/jetbrains.png"/>
<meta property="og:description" content="Welcome to the JetBrains plugin repository"/>
<meta property="og:site_name" content="JetBrains Plugin Repository"/>
<!-- End Open Graph -->
<!-- Start Twitter Summary Card -->
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content="@JBPlatform">
<meta name="twitter:image" content="https://plugins.jetbrains.com/assets/icons/jetbrains.png">
<!-- End Twitter Summary Card -->
<meta name="readOnlyModeStatus" content="off">
<link rel="stylesheet" href="/_assets/common.css?ver=6205" type="text/css">
<script src="/_assets/common.js?ver=6205"></script>
<link rel="stylesheet" href="/_assets/error.css" type="text/css">
<script src="/_assets/error.js"></script>
</head>
<body id="unknown" class="">
<!-- Google Tag Manager -->
<noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-5P98" height="0" width="0"
style="display:none;visibility:hidden"></iframe></noscript>
<script>(function (w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({
'gtm.start': new Date().getTime(), event: 'gtm.js'
});
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : '';
j.async = true;
j.src =
'//www.googletagmanager.com/gtm.js?id=' + i + dl;
f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'dataLayer', 'GTM-5P98');</script>
<!-- End Google Tag Manager -->
<div class="wt-layout">
<div class="wt-layout__header">
<header class="header js-header-popover-group">
<div class="wt-container">
<div class="wt-row wt-row_size_m wt-row_align-items_stretch wt-row_nowrap wt-row_justify_between">
<div class="wt-col-2 header-logo-wrapper">
<a class="header-logo jetbrains-logo _logo-jetbrains" href="/"></a>
</div>
<nav class="wt-col-inline header-link-list header-link-list-main _align-center hidden-md">
<a data-popover-group-button-id="nav-intellij"
class="js-header-popover-hover header-link-item-main">
<span>IDEs</span>
</a>
<a data-popover-group-button-id="nav-dotnet"
class="js-header-popover-hover header-link-item-main">
<span>.NET</span>
</a>
<a data-popover-group-button-id="nav-teamware"
class="js-header-popover-hover header-link-item-main">
<span>Team Tools</span>
</a>
<a data-popover-group-button-id="nav-dev-guide"
class="js-header-popover-hover header-link-item-main">
<span>Dev Guide</span>
</a>
</nav>
<nav class="wt-col-3 header-link-list header-link-list-main _align-right hidden-md">
<div class="">
<a href="/login?request_credentials=required" class="header-link-item-main _simple _icon-wrapper " data-test="signin-button">
<span class="header-link-item__icon _icon-left icon icon-account-white"></span>
Sign In
</a>
</div>
<button class="js-header-popover-click header-link-item-main reset-button"
data-popover-group-button-id="header-search">
<span class="header-link-item__icon icon icon-search-white"></span>
</button>
</nav>
</div>
</div>
</header>
<button class="js-header-popover-click header__hamburger hamburger _white _type-close reset-button hidden visible-md"
data-popover-group-button-id="header-mobile-nav">
<span class="hamburger__icon"></span>
</button>
<div class="header-placeholder"></div>
<div class="header-popover-content-wrapper" data-popover-group-content-id="header-mobile-nav">
<div class="header-popover-content header-search-container no-margin-left no-margin-right"
data-popover-group-content-id="header-search">
<div class="wt-container">
<form action="/search?pr=&id=searchHeader" method="get" class="header-search-container__form" >
<input type="hidden" name="correctionAllowed" value="true">
<input type="hidden" name="pr" value="">
<input id="searchInputHeader" class="ja-header-search-input header-search-container__input"
type="search"
name="search"
value=""
autocomplete="off"
placeholder="Search 4415 plugins" />
<button type="submit" class="header-search-container__button button">
<span class="icon icon-search-gray hidden visible-md"></span>
Search
</button>
<button class="js-close-mobile-nav-button close-mobile-nav-button reset-button hidden visible-md"><span class="icon icon-close"></span></button>
</form>
</div>
</div>
<div class="header-popover-content" data-popover-group-content-id="nav-intellij">
<div class="wt-container">
<div class="wt-row wt-row_size_m wt-row_nowrap">
<div class="wt-col-3 hidden-md">
<a href="/plugin/add#intellij"
class="header-container-description">
<div class="header-container-description__logo">
<span class="icon icon-upload"></span>
</div>
<div class="header-container-description__title">Upload your plugin</div>
<div class="header-container-description__text">Your plugin for one of our IDEs might be of great use to millions of users.</div>
<div class="header-container-description__link">Upload</div>
</a>
</div>
<div class="wt-col-inline wt-col-md-12 wt-offset-left-md-0">
<span class="header-second-title">IDEs</span>
<ul class="header-second-links-list _ides">
<li class="header-second-links-list__item">
<div class="header-link-item-second ''">
<span class="header-link-item-second__logo">
<span class="jetbrains-logo _logo-intellij-idea _full-block"></span>
</span>
IntelliJ IDEA
</div>
<ul class="header-second-links-list">
<li class="header-second-links-list__item">
<a href="/idea" class="header-link-item-second _font-weight-light ">
Ultimate
</a>
</li>
<li class="header-second-links-list__item">
<a href="/idea_ce" class="header-link-item-second _font-weight-light ">
Community
</a>
</li>
<li class="header-second-links-list__item">
<a href="/idea_edu" class="header-link-item-second _font-weight-light ">
Educational
</a>
</li>
</ul>
</li>
<li class="header-second-links-list__item">
<div class="header-link-item-second ''">
<span class="header-link-item-second__logo">
<span class="jetbrains-logo _logo-pycharm _full-block"></span>
</span>
PyCharm
</div>
<ul class="header-second-links-list">
<li class="header-second-links-list__item">
<a href="/pycharm" class="header-link-item-second _font-weight-light ">
Professional
</a>
</li>
<li class="header-second-links-list__item">
<a href="/pycharm_ce" class="header-link-item-second _font-weight-light ">
Community
</a>
</li>
<li class="header-second-links-list__item">
<a href="/pycharm_edu" class="header-link-item-second _font-weight-light ">
Educational
</a>
</li>
</ul>
</li>
<li class="header-second-links-list__item">
<a href="/phpstorm" class="header-link-item-second ">
<span class="header-link-item-second__logo">
<span class="jetbrains-logo _logo-phpstorm _full-block"></span>
</span>
PhpStorm
</a>
</li>
<li class="header-second-links-list__item">
<a href="/webstorm" class="header-link-item-second ">
<span class="header-link-item-second__logo">
<span class="jetbrains-logo _logo-webstorm _full-block"></span>
</span>
WebStorm
</a>
</li>
<li class="header-second-links-list__item">
<a href="/ruby" class="header-link-item-second ">
<span class="header-link-item-second__logo">
<span class="jetbrains-logo _logo-rubymine _full-block"></span>
</span>
RubyMine
</a>
</li>
<li class="header-second-links-list__item">
<a href="/objc" class="header-link-item-second ">
<span class="header-link-item-second__logo">
<span class="jetbrains-logo _logo-appcode _full-block"></span>
</span>
AppCode
</a>
</li>
<li class="header-second-links-list__item">
<a href="/clion" class="header-link-item-second ">
<span class="header-link-item-second__logo">
<span class="jetbrains-logo _logo-clion _full-block"></span>
</span>
CLion
</a>
</li>
<li class="header-second-links-list__item">
<a href="/go" class="header-link-item-second ">
<span class="header-link-item-second__logo">
<span class="jetbrains-logo _logo-gogland _full-block"></span>
</span>
GoLand
</a>
</li>
<li class="header-second-links-list__item">
<a href="/dbe" class="header-link-item-second ">
<span class="header-link-item-second__logo">
<span class="jetbrains-logo _logo-datagrip _full-block"></span>
</span>
DataGrip
</a>
</li>
<li class="header-second-links-list__item">
<a href="/rider" class="header-link-item-second ">
<span class="header-link-item-second__logo">
<span class="jetbrains-logo _logo-rider _full-block"></span>
</span>
Rider
</a>
</li>
<li class="header-second-links-list__item">
<a href="/mps" class="header-link-item-second ">
<span class="header-link-item-second__logo">
<span class="jetbrains-logo _logo-mps _full-block"></span>
</span>
MPS
</a>
</li>
<li class="header-second-links-list__item">
<a href="/androidstudio" class="header-link-item-second ">
<span class="header-link-item-second__logo">
<span class="jetbrains-logo _logo-androidstudio _full-block"></span>
</span>
Android Studio
</a>
</li>
</ul>
</div>
<div class="wt-col-inline wt-offset-left-2 hidden-md">
<ul>
<li class="header-second-links-list__item" id="rc-intellij-contest-link"></li>
</ul>
</div>
</div>
</div>
</div>
<div class="header-popover-content" data-popover-group-content-id="nav-dotnet">
<div class="wt-container">
<div class="wt-row wt-row_size_m wt-row_nowrap">
<div class="wt-col-3 hidden-lg">
<a href="/plugin/add#dotnet"
class="header-container-description">
<div class="header-container-description__logo">
<span class="icon icon-upload"></span>
</div>
<div class="header-container-description__title">Upload your plugin</div>
<div class="header-container-description__text">
Your plugin for one of our .NET tools might be of great use to millions of users.
</div>
<div class="header-container-description__link">Upload</div>
</a>
</div>
<div class="wt-col-inline wt-offset-left-lg-2 wt-col-md-12 wt-offset-left-md-0">
<span class="header-second-title">Team Tools</span>
<ul class="header-second-links-list _team-tools">
<li class="header-second-links-list__item">
<a href="/resharper" class="header-link-item-second ">
<span class="header-link-item-second__logo">
<span class="jetbrains-logo _logo-resharper _full-block"></span>
</span>
ReSharper
</a>
</li>
<li class="header-second-links-list__item">
<a href="/rider" class="header-link-item-second ">
<span class="header-link-item-second__logo">
<span class="jetbrains-logo _logo-rider _full-block"></span>
</span>
Rider
</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="header-popover-content" data-popover-group-content-id="nav-teamware">
<div class="wt-container">
<div class="wt-row wt-row_size_m wt-row_nowrap">
<div class="wt-col-3 hidden-md">
<a href="/plugin/add#teamcity"
class="header-container-description">
<div class="header-container-description__logo">
<span class="icon icon-upload"></span>
</div>
<div class="header-container-description__title">Upload your plugin</div>
<div class="header-container-description__text">Your plugin for one of our team tools might be of great use to millions of users.</div>
<div class="header-container-description__link">Upload</div>
</a>
</div>
<div class="wt-col-inline wt-offset-left-1 wt-col-md-12 wt-offset-left-md-0">
<span class="header-second-title">Team Tools</span>
<ul class="header-second-links-list _team-tools">
<li class="header-second-links-list__item">
<a href="/teamcity" class="header-link-item-second ">
<span class="header-link-item-second__logo">
<span class="jetbrains-logo _logo-teamcity _full-block"></span>
</span>
TeamCity
</a>
</li>
<li class="header-second-links-list__item">
<a href="/hub" class="header-link-item-second ">
<span class="header-link-item-second__logo">
<span class="jetbrains-logo _logo-hub _full-block"></span>
</span>
Hub
</a>
</li>
<li class="header-second-links-list__item">
<a href="/youtrack" class="header-link-item-second ">
<span class="header-link-item-second__logo">
<span class="jetbrains-logo _logo-youtrack _full-block"></span>
</span>
YouTrack
</a>
</li>
<li class="header-second-links-list__item">
<a href="/upsource" class="header-link-item-second ">
<span class="header-link-item-second__logo">
<span class="jetbrains-logo _logo-upsource _full-block"></span>
</span>
Upsource
</a>
</li>
</ul>
</div>
<div class="wt-col-inline hidden-md">
<ul>
<li class="header-second-links-list__item" id="rc-teamcity-contest-link"></li>
</ul>
</div>
</div>
</div>
</div>
<div class="header-popover-content" data-popover-group-content-id="nav-dev-guide">
<div class="wt-container">
<div class="wt-row wt-row_size_m wt-row_nowrap">
<div class="wt-col-inline wt-offset-left-6 wt-col-md-12 wt-offset-left-md-0">
<span class="header-second-title">Dev Guide</span>
<ul class="header-second-links-list _dev-guide">
<li class="header-second-links-list__item">
<a class="header-link-item-second"
href="//www.jetbrains.org/intellij/sdk/docs/">
IntelliJ Platform SDK
</a>
</li>
<li class="header-second-links-list__item">
<a class="header-link-item-second" href="//plugins.jetbrains.com/docs/teamcity/">TeamCity plugins</a>
</li>
<li class="header-second-links-list__item">
<a class="header-link-item-second"
href="//www.jetbrains.com/help/hub/building-custom-widgets.html">
Hub custom widgets
</a>
</li>
<li class="header-second-links-list__item">
<a class="header-link-item-second"
href="//www.jetbrains.com/help/resharper/sdk/">
R# plugins
</a>
</li>
<li class="header-second-links-list__item">
<a class="header-link-item-second"
href="/marketplace">
Marketplace EAP
</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="wt-container">
<div class="header-popover-content _profile float-right float-none-md"
data-popover-group-content-id="nav-user">
<a href="/login?request_credentials=required" class="header-second-title ">
Sign In
</a>
</div>
</div>
</div>
</div>
<div class="wt-layout__content">
<div class="wt-container">
<div class="page-error__content">
<div class="wt-row wt-row_size_m wt-row_justify_center wt-row-sm_justify_start">
<div class="wt-col-3 wt-col-lg-4 wt-col-md-5 ">
<div class="page-error-logo _error-404">
<div class="page-error-logo__beam"></div>
</div>
</div>
<div class="wt-col-5 wt-col-md-7 wt-col-sm-12 article-content">
<h1 class="page-error__h1 _big">uh-oh!</h1>
<div class="page-error__sub-title sub-title">You surely know what this means.</div>
<div class="page-error__text">
We can't find the page you're looking for. Try starting from <a href="/">home</a>.
</div>
</div>
</div>
</div>
</div>
</div>
<footer class="wt-layout__footer">
<div class="wt-container">
<div class="footer wt-text-3">
<div class="footer__column footer__column_left">
<a href="https://www.jetbrains.com" class="footer__logo">
<div class="jetbrains-logo _logo-jetbrains-square"></div>
</a>
<div class="footer__info">
<p>Copyright © 2000û<span class="js-footer-current-year"></span> JetBrains s.r.o.</p>
<p>Developed with drive and <a class="wt-link" href="https://www.jetbrains.com/idea">IntelliJ IDEA</a></p>
<p class="footer__build-number">Build #6205</p>
</div>
</div>
<div class="footer__column footer__column_right">
<ul class="footer__list footer__list_align_right">
<li><a class="wt-link" href="mailto:[email protected]">Feedback</a></li>
<li><a class="wt-link" href="https://twitter.com/JBPlatform">Twitter</a></li>
<li><a class="wt-link" href="https://blog.jetbrains.com/platform">Blog</a></li>
<li><a class="wt-link" href="/marketplace">Marketplace</a></li>
</ul>
<ul class="footer__list footer__list_align_right">
<li><a class="wt-link wt-link_color_inherit" href="/legal/terms-of-use">Terms of Use</a></li>
<li><a class="wt-link wt-link_color_inherit" href="/legal">Legal, Privacy & Security</a></li>
</ul>
</div>
</div>
</div>
</footer>
</div>
<div class="js-notifications-container"></div>
<div class="js-overlay overlay"></div>
</body>
</html>
at org.jetbrains.intellij.pluginRepository.PluginRepositoryInstance.uploadPluginInternal(pluginRepositoryRest.kt:123)
at org.jetbrains.intellij.pluginRepository.PluginRepositoryInstance.uploadPluginInternal$default(pluginRepositoryRest.kt:108)
at org.jetbrains.intellij.pluginRepository.PluginRepositoryInstance.uploadPlugin(pluginRepositoryRest.kt:105)
at org.jetbrains.intellij.pluginRepository.PluginRepositoryInstance$uploadPlugin.call(Unknown Source)
at com.github.rodm.teamcity.tasks.PublishTask.publishPlugin(PublishTask.groovy:122)
... 91 more
I think the problem is the one reported at JetBrains/plugin-repository-rest-client#11 and at least improved with a meaningful error message at https://github.com/JetBrains/plugin-repository-rest-client/pull/26/files, so you should probably upgrade to the latest version of that lib to benefit from the better error message.
Provide progress logging for the download task, this will require a fix to Gradle issue, GRADLE-2787
Add support to define TeamCity agent, server and common components using the software model.
model {
teamcity {
version = '9.1.6'
}
components {
common(TeamCityCommonLibrarySpec) { }
agent(TeamCityAgentLibrarySpec) { }
server(TeamCityServerLibrarySpec) { }
}
}
The above will compile each source set with the either the common-api, agent-api or server-api using the version defined in the teamcity block.
The agent and server plugin components will each be defined by a component spec.
model {
components {
agent(TeamCityAgentPluginSpec) {
descriptor { ... }
files { ... }
}
server(TeamCityServerLibrarySpec) {
descriptor { ... }
}
}
}
Hello!
First of all, great work :)
I found another example of gradle build script and there is possibility to download Teamcity distributive into plugin development folder, here it is: https://github.com/greggigon/TeamCity-Crowd-Plugin/blob/master/build.gradle
Would it be possible to implement same functionality in your plugin?
Perfectly, it would be great if it would be possible to launch Teamcity with installed plugin right from gradle.
Upgrading to Gradle 2.14 fails to build due to the use of an internal Gradle class to provide progress logging to the Download task. Running a download task on a project updated to use will also fail.
To provide progress logging for the download task requires a fix to the Gradle issue, GRADLE-2787
Add a publish task similar to the publish task available in the gradle-intellij-plugin project to upload the plugin to the TeamCity plugin repository
Depends on the response to the issue Can this library be used to upload TeamCity plugins
Configuring the descriptor, tokens and files outside the agent and server configuration blocks is deprecated and should be removed. The environments support in the server configuration block should also be removed. This is a post 1.0 release task.
If you use the undeploy
task while the server is running, there should be an unload request done for >= 2018.2, otherwise the UI will show it as deleted and provides the option to restart or unload.
As outlined in the documentation, TeamCity Hub does not support publishing plugins with username and password anymore.
Maybe it's a good idea to remove all logic using username and password and leave only the token-based publishing.
Hi,
What do you think about adding Docker support? This would solve different problems:
Here is my attempt, I think it almost worked, but needs more systematic approach :)
package com.github.rodm.teamcity.tasks
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.TaskAction
class DockerCreateServer extends DefaultTask {
@Input
String containerName
@Input
File dataDir
@Input
String serverOptions
DockerCreateServer() {
description = 'Create new Docker container with TeamCity Server'
}
@TaskAction
void start() {
validDirectory('dataDir', getDataDir())
project.ant.exec(executable: "/usr/local/bin/docker", failonerror: true, logError: true, spawn: false) {
arg value: 'create'
arg value: '--name'
arg value: getContainerName()
arg value: '-e'
arg value: String.format('TEAMCITY_SERVER_MEM_OPTS="%s"', getServerOptions())
arg value: '-v'
arg value: String.format('%s:/data/teamcity_server/datadir', getDataDir().path)
arg value: '-p'
arg value: '8111:8111'
arg value: '-p'
arg value: '5005:5005'
arg value: 'jetbrains/teamcity-server'
}
}
}
Probably some parameters have to be configurable (e.g. container name, ports, docker location).
You can take a look at official Docker support for Teamcity:
https://hub.docker.com/r/jetbrains/teamcity-server/
https://hub.docker.com/r/jetbrains/teamcity-agent/
Thank you.
For now it's looks like hanged, but actually it downloads file.
It would be nice to at least print what file is downloading right now (as gradle does for dependencies)
Currently each part of the a plugin has to be build using a separate Gradle sub-project. Adding a sourceSet property could allow a single project build all the components, a common/shared library, agent-side plugin and server-side plugin.
An example configuration
sourceSets {
common
agent
server
}
teamcity {
common {
sourceSet = sourceSets.common
}
agent {
sourceSet = sourceSets.agent
}
server {
sourceSet = sourceSets.server
descriptor {
...
}
}
}
Unit tests for each component will most likely require a separate source set.
Builds run on TeamCity fail to resolve dependencies
Cannot resolve external dependency org.jetbrains.teamcity:server-api:8.1.5 because no repositories are defined.
The plugin enables default repositories based on a property set in the plugin extension. The way this property is accessed clashes with the properties setup by the TeamCity Gradle Runner plugin causing the default repositories to not be setup.
If you have a running TeamCity server where the plugin is not installed currently and then execute the deploy task, you get two times <response>Plugin not found</response>
as output. I assume this is from disabling and enabling the plugin. While the message could maybe also be a bit more clear, the problem is, that the plugin is not active after this. I guess in case of this reponse you should have some retry logic that tries to activate the plugin once a second for a minute as long as this response comes or something like that so that the TC server has a chance to recognize the new plugin that should be enabled.
Gradle supports by default an archivesBaseName
but you ignore it and always set it to the root project name.
Please consider the archivesBaseName
. Actually it might be enough to not set the baseName
explicitly in TeamCityServerPlugin:84
, afair all Zip
-tasks should get the archivesBaseName
or as default the project name by default already. If one want the root projects name, he could still configure it.
If you still want to use the root project name as default instead of the project name, you might still consider using the archivesBaseName
first if it is set.
The Gradle test task is extension aware and could be enhanced to allow a TeamCity instance to be configured. The server and/or agent can be started before running the tests and stopped after the tests.
An example integration test task configuration
task integrationTest(type: Test) {
group = 'verification'
testClassesDir = sourceSets.integrtaionTest.output.classesDir
classpath = sourceSets.integrataionTest.runtimeClasspath
teamcity {
environment = 'teamcity10'
}
}
The environment property will reference a TeamCity installation defined in the environments section.
Currently the start server and start agent tasks don't wait until the server and agent are started and ready before continuing, this will be required before running the tests.
Tests may not be repeatable or reliable if using the same TeamCity configuration that the environments use.
If you want to use newer things in newer TeamCity version that are incompatible with older TeamCity versions but still stay compatible with the old version, you need to release multiple versions with different min- / max-builds.
For example currently if you set the allow-runtime-reload
and try to deploy your plugin to 2018.1, the validation of the plugin descriptor fails. For 2018.1.4 Jetbrains will probably backport compatibility for that, but if you e. g. want to be compatible with older versions, or with other breaking changes in the future, you need to release multiple variants.
Would be nice if this were somehow nicely supported by this plugin, e. g. by having multiple source sets for different versions and then building multiple distributions and release them all or something similar.
You unconditionally do things lke descriptor = extensions.create('descriptor', ServerPluginDescriptor, project)
, but there might already be an extension with that name and the build will fail.
An example of what I mean is:
configure([project(':server'), project(':serverPre2018.2')]) {
teamcity {
server {
descriptor {
// stuff for both versions
}
}
}
}
project(':server') {
teamcity {
server {
descriptor {
allowRuntimeReload true
}
}
}
}
This fails with said exception.
I have variables in my build that defineds versions and other string attributes.
Changing those variables does not make Gradle to re-build the server-side plugin
Looks like TeamCity descriptor is missing from cache key somewhere
Setting vendorName = 'Björn Kautler'
results in:
./gradlew startTeamcityServer -s
> Task :serverPlugin FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':serverPlugin'.
> com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Ung³ltiges Byte 2 von 4-Byte-UTF-8-Sequenz.
* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':serverPlugin'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:110)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77)
at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
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.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
at org.gradle.execution.taskgraph.LocalTaskInfoExecutor.execute(LocalTaskInfoExecutor.java:42)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:277)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:262)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:135)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:200)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.executeWithWork(DefaultTaskPlanExecutor.java:191)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.run(DefaultTaskPlanExecutor.java:130)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:74)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph.execute(DefaultTaskExecutionGraph.java:143)
at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:40)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:40)
at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:24)
at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:46)
at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:49)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:40)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:33)
at org.gradle.initialization.DefaultGradleLauncher$ExecuteTasks.run(DefaultGradleLauncher.java:355)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.initialization.DefaultGradleLauncher.runTasks(DefaultGradleLauncher.java:219)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149)
at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:124)
at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:77)
at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:74)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:154)
at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:38)
at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:96)
at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:74)
at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.run(RunAsBuildOperationBuildActionRunner.java:50)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:45)
at org.gradle.tooling.internal.provider.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:51)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:47)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:44)
at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:79)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:44)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:30)
at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:39)
at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:25)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:80)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:53)
at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:62)
at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:34)
at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:36)
at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:25)
at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:43)
at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:29)
at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:59)
at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:31)
at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:59)
at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:44)
at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:46)
at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:30)
at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:67)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
at org.gradle.util.Swapper.swap(Swapper.java:38)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:62)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:81)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:122)
at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:295)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: org.gradle.api.UncheckedIOException: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Ung³ltiges Byte 2 von 4-Byte-UTF-8-Sequenz.
at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:57)
at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:40)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:161)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99)
... 111 more
Caused by: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Ung³ltiges Byte 2 von 4-Byte-UTF-8-Sequenz.
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(UTF8Reader.java:701)
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(UTF8Reader.java:473)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1895)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipChar(XMLEntityScanner.java:1551)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2821)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:602)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:505)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:841)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:770)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:643)
at com.github.rodm.teamcity.TeamCityServerPlugin$PluginDescriptorContentsValidationAction.execute(TeamCityServerPlugin.groovy:185)
at com.github.rodm.teamcity.TeamCityServerPlugin$PluginDescriptorContentsValidationAction.execute(TeamCityServerPlugin.groovy)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:801)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:768)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:131)
... 118 more
* Get more help at https://help.gradle.org
BUILD FAILED in 2s
3 actionable tasks: 2 executed, 1 up-to-date
The TeamCityPluginExtension.version
is inherited eagerly from the root project.
This means if you have
apply plugin: 'com.github.rodm.teamcity-environments'
project(':common') { apply plugin: 'com.github.rodm.teamcity-common' }
project(':agent') { apply plugin: 'com.github.rodm.teamcity-agent' }
configure([project(':server'), project(':serverPre2018.2')]) { apply plugin: 'com.github.rodm.teamcity-server' }
teamcity.version '2018.1.2'
the subprojects will have version 9.0
, but if you have
apply plugin: 'com.github.rodm.teamcity-environments'
teamcity.version '2018.1.2'
project(':common') { apply plugin: 'com.github.rodm.teamcity-common' }
project(':agent') { apply plugin: 'com.github.rodm.teamcity-agent' }
configure([project(':server'), project(':serverPre2018.2')]) { apply plugin: 'com.github.rodm.teamcity-server' }
the subprojects will have version 2018.1.2
.
Would be nice if the inheriting is done lazily, so that both work like the latter.
I'm building a plugin that is compatible with a set of TeamCity versions. It turned out, the gson
library was included in the version I was building against. To workaround it I specified the same dependency for agent
and compile
configurations. As the result, I noticed a duplicated entry in the generated .zip
file of agent plugin.
In the sources in TeamCityAgentPlugin.groovy
I spot the following:
into("lib") {
project.plugins.withType(JavaPlugin) {
def jar = project.tasks[JavaPlugin.JAR_TASK_NAME]
from(jar)
from(project.configurations.runtime - project.configurations.provided)
}
from(project.configurations.agent)
}
It looks like those several from
declarations does not check for duplicates (at least with Gradle 4.7)
Similar code is for the server-side plugin.
The following extension properties have been replaced by the support for multiple environments and equivalent properties within the server configuration block.
homeDir
dataDir
javaHome
serverOptions
downloadBaseUrl
downloadUrl
downloadDir
downloadFile
The start/stop/deploy/undeploy tasks that use these properties can also be removed.
When deveoping plugins for the nighlty TeamCity, it's impossible to set teamcity version to any version that ends with '-SNAPSHOT', e.g. '2020.1-SNAPSHOT'.
This is a valid TeamCity version, yet it can't be set
The compile
configuration as well as the runtime
configuration (and testCompile
, testRuntime
, ...) are deprecated since Gradle 3.4.
Instead to declare dependencies implementation
and runtimeOnly
(testImplementation
, testRuntimeOnly
, ...) should be used instead.
You should probably also change this in your own build scripts, but what I mean is that you force your consumers to either use the deprecated configuration or to declare any dependencies twice, in implementation
and in server
or agent
, the first for compiling, the second for packaging.
You use configurations.runtime
at https://github.com/rodm/gradle-teamcity-plugin/blob/master/src/main/groovy/com/github/rodm/teamcity/TeamCityServerPlugin.groovy#L85 and https://github.com/rodm/gradle-teamcity-plugin/blob/master/src/main/groovy/com/github/rodm/teamcity/TeamCityAgentPlugin.groovy#L81, but instead you should use configurations.runtimeClasspath
which includes runtime
(and thus compile),
implementation(and thus also
compile) and
runtimeOnly`.
You can see the detailed information at https://docs.gradle.org/current/userguide/java_plugin.html#tab:configurations in the text and the figure.
According to https://youtrack.jetbrains.com/issue/TW-57776#focus=streamItem-27-3173033-0-0 Jetbrains "decided to make all plugins reloadable in developer mode so the allow-runtime-reload attribute is not required now for development (gradle sdk should be updated though).", so the unload / copy / load cycle should always be done if you have a 2018.2+ server in development mode, independent from the reloadable-flag.
Configuring the username and password in the publish configuration block are ignored so the publish task fails with the following exception
Caused by: java.lang.RuntimeException: Failed to upload plugin
... 61 more
Caused by: java.lang.RuntimeException: Username must be set for uploading
at org.jetbrains.intellij.pluginRepository.PluginRepositoryInstance.ensureCredentialsAreSet(pluginRepositoryRest.kt:111)
at org.jetbrains.intellij.pluginRepository.PluginRepositoryInstance.uploadPlugin(pluginRepositoryRest.kt:92)
at org.jetbrains.intellij.pluginRepository.PluginRepositoryInstance$uploadPlugin.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:141)
at com.github.rodm.teamcity.tasks.PublishTask.publishPlugin(PublishTask.groovy:111)
... 51 more
If any build is running gradle task and I try to stop/cancel build. It takes forever .
Setting baseHomeDir causes the start and stop tasks to fail reporting that 'homeDir' does not exist.
A workaround is to set the homeDir for each environment.
The plugin currently defaults the homeDir property for an environment by prefixing the baseHomeDir path with the Gradle project root.
I am getting below error when using gradle teamcity plugin.
Could not resolve com.github.rodm:gradle-teamcity-plugin:1.0. > Could not get resource 'https://plugins.gradle.org/m2/com/github/rodm/gradle-teamcity-plugin/1.0/gradle-teamcity-plugin-1.0.pom'
When I looked at https://plugins.gradle.org/m2/com/github/rodm in browser, I get 'The requested path was not found.' error.
My build configuration is below:
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "com.github.rodm:gradle-teamcity-plugin:1.0"
}
}
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'com.github.rodm.teamcity-server' //Server-side plugin essentials
apply plugin: 'com.github.rodm.teamcity-common' //To get teamcity openAPI jars
teamcity {
// Use TeamCity 10.0 API
version = '10.0'
server {
// Locate the plugin descriptor in the root directory of the project
descriptor = file('teamcity-plugin.xml')
tokens = [VERSION: project.version, VENDOR_NAME: 'test.com']
}
}
Looks like the plugin is not published in jcenter repository.
A number of plugin projects have changed the Maven repository URL to http://download.jetbrains.com/teamcity-repository/
In Hub you can create tokens that have access only to the plugin repository and you don't need to store username / password on disk or enter it for publishing.
Would be nice if the plugin would support the usage of such a token instead of username / password.
It seems the library you use for uploading already supports both, so it should be a fairly easy implementation.
Since switching to using https for the JetBrains Maven repository resolving the artifacts sometimes fails
:common:compileJava
:common:processResources UP-TO-DATE
:common:classes
:common:jar
:compileJava
FAILURE: Build failed with an exception.
* What went wrong:
Could not resolve all dependencies for configuration ':compile'.
> Could not resolve org.jetbrains.teamcity:server-api:8.1.5.
Required by:
:test-plugin:unspecified
> Could not resolve org.jetbrains.teamcity:server-api:8.1.5.
> Could not get resource 'https://download.jetbrains.com/teamcity-repository/org/jetbrains/teamcity/server-api/8.1.5/server-api-8.1.5.pom'.
> Could not HEAD 'https://download.jetbrains.com/teamcity-repository/org/jetbrains/teamcity/server-api/8.1.5/server-api-8.1.5.pom'.
> hostname in certificate didn't match: <download.jetbrains.com> != <www.jetbrains.com> OR <www.jetbrains.com> OR <jetbrains.com>
To work around this problem the default repositories added by the plugin can be disabled and replaced.
repositories {
mavenCentral()
maven {
url = 'http://download.jetbrains.com/teamcity-repository'
}
}
teamcity {
defaultRepositories = false
}
I've seen that you handle these inconsistent between server and agent part.
For server part you warn and exclude the dependencies from the descriptor.
For agent part you warn but include the dependencies in the descriptor.
Is this difference intended?
Tokens to be replaced in a descriptor file can be defined when using an inline descriptor but are ignored.
teamcity {
server {
descriptor {
name = 'test plugin'
}
tokens VERSION: '1.2.3', BUILD_NUMBER: '123'
}
}
An alternative to avoid a confusing build script would be to define the tokens and descriptor file path inside the descriptor block.
teamcity {
server {
descriptor {
file = file('teamcity-plugin.xml')
tokens VERSION: '1.2.3', BUILD_NUMBER: '123'
}
}
}
Mixing descriptor file path and tokens with inline descriptor properties should cause a build failure.
Running the download task when the output directory maybe shared with other plugin projects will result in multiple downloads. If the TeamCity distribution has been downloaded using the task from one project other projects should not download the file again.
Within a Kotlin build script you currently have to do
teamcity {
version = "2018.2"
environments {
environments.register("teamcity") {
version = "2018.2.4"
}
}
}
Which is because TeamCityEnvironments
does not implement NamedDomainObjectContainer
but has a field called environments
that does it and that is delegated to within methodMissing
. This though only works nicely when used from Groovy.
The idiomatic way used in core Gradle of doing Groovy code like
teamcity {
version = "2018.2"
environments {
teamcity {
version = "2018.2.4"
}
}
}
in Kotlin is
teamcity {
version = "2018.2"
environments {
create("teamcity") {
version = "2018.2.4"
}
}
}
or
teamcity {
version = "2018.2"
environments {
register("teamcity") {
version = "2018.2.4"
}
}
}
(The latter for using configuration avoidance once it is rolled out to all domain containers, not only tasks.)
But for this to work, TeamCityEnvironments
needs to implement NamedDomainObjectContainer
itself.
Add properties the allow the agent and server plugin archives to be named without having to reconfigure the agentPlugin and serverPlugin tasks
The properties should be similar to those supported by the jar and zip tasks, allowing the archive base name and version to be specified.
When releasing my plugin, I want to fill in the update notes.
As far as I can see the plugin does not yet provide that.
I split my plugin into two versions, one with the reloadable flag, one without.
As both variants contain the same content and thus version-wise could be considered equal, I followed the semantic versioning scheme and created one with version 0.1.0+a
and the other with version 0.1.0+b
.
This resulted in the message :deployToTeamcity: Enabling plugin 'my-plugin-0.1.0+b.zip' failed: Plugin not found
from the plugin , the message [2018-12-08 04:46:58,282] WARN - jetbrains.buildServer.SERVER - Error while unpacking plugin from '...\data\2018.2\plugins\my-plugin-0.1.0 b.zip' (modified: 1970-01-01 01:00:00.000, size: 0 B): jetbrains.buildServer.web.plugins.files.ServerPluginUnpacker$UnpackException: Failed to read plugin archive '...\data\2018.2\plugins\my-plugin-0.1.0 b.zip' (modified: 1970-01-01 01:00:00.000, size: 0 B) (enable debug to see stacktrace)
and no change in the UI.
As you can see, TC thinks there is a space between 0.1.0
and b
which happens to be encoded as +
in HTTP URL-encoding. So it seems to me you do not properly URL-encode the parameters. You most probably want to use the class java.net.URLEncoder
.
Tasks that start both, the server and the agent would be nice.
To override the following plugin properties downloadsDir, baseDownloadUrl, baseHomeDir and baseDataDir requires code to lookup a Gradle project property and then apply the setting in the plugin configuration block.
For example
ext {
downloadsDir = findProperty('downloads.dir') ?: "$rootDir/downloads"
}
teamcity {
server {
downloadsDir = project.downloadsDir
}
}
An alternative is to allow defining Gradle properties to override the default values of the above properties and avoid having to use the code above for each property.
In my gradle scipt I try to specify downloadDir property but as far as I see gradle-teamcity-plugin anyway downloads TeamCity to the default location:
teamcity {
agent {
descriptor = project(':proj').file('teamcity-plugin.xml')
}
server {
descriptor = file("$rootDir/teamcity-plugin.xml")
}
homeDir = file("...")
dataDir = file("...")
javaHome = file("...")
version = "..."
downloadDir = file("...")
}
Support for publishing plugins to https://plugins.jetbrains.com using a username and password for authentication is no longer supported, only token-based authentication is supported, blog post about the change.
First of all: great, awesome plugin! It's so much easier to develop with help of it. Thank you, man! Why it's still not a default and recommended way? 👍
And now my problem: each time I'm going to create new plugin, I have to create the structure for it, copy build.gradle from previous project, do not forget descriptors... Arhh..
I don't know whether it's a good idea and responsibility of your plugin, but it would be quite nice to provide maven archetypes for creating plugin skeleton with initial structure. Something similar to Jetbrain's, but initialized with your plugin inside.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.