No datatype validation for deploymentProjectId/deploymentEnvironmentId when using Specs code

Issue #15 wontfix
Eduardo Alvarenga created an issue

When using Specs, Bamboo accepts any data type as a plugin argument. Each plugin should validate if the entered data types and contents are correct. On this particular plugin, deploymentProjectId and deploymentEnvironmentId, should only accept digits and not accept a string.

Currently, the following code will be accepted:

.triggers(new BitbucketServerTrigger()
         .description("Build"),
new AnyTrigger(new AtlassianModule("com.atlassianlab.bamboo.plugins.bamboo-after-deployment-trigger-plugin:afterDeployment"))
         .name("After deployment")
         .description("Donkey Kong")
         .configuration(new MapBuilder()
                .put("deployment.trigger.afterDeployment.deploymentProjectId", "SUPERMARIOWORLD") 
                .put("deployment.trigger.afterDeployment.deploymentEnvironmentId", "0")
                .build()))

But will generate the following exception when getting triggerDefinition (View Specs, Trigger the plugin, etc)

java.lang.RuntimeException: For input string: "SUPERMARIOWORLD". Listener: com.atlassianlab.bamboo.plugins.afterdeploymenttrigger.DeploymentResultListener event: com.atlassian.bamboo.deployments.execution.events.DeploymentFinishedEvent
        at com.atlassian.event.internal.SingleParameterMethodListenerInvoker.invoke(SingleParameterMethodListenerInvoker.java:53)
        at com.atlassian.event.internal.ComparableListenerInvoker.invoke(ComparableListenerInvoker.java:48)
        at com.atlassian.event.internal.AsynchronousAbleEventDispatcher.lambda$null$0(AsynchronousAbleEventDispatcher.java:37)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at com.atlassian.bamboo.utils.BambooRunnables$1.run(BambooRunnables.java:48)
        at com.atlassian.bamboo.security.ImpersonationHelper.runWith(ImpersonationHelper.java:26)
        at com.atlassian.bamboo.security.ImpersonationHelper.runWithSystemAuthority(ImpersonationHelper.java:17)
        at com.atlassian.bamboo.security.ImpersonationHelper$1.run(ImpersonationHelper.java:41)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NumberFormatException: For input string: "SUPERMARIOWORLD"
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
        at java.lang.Long.parseLong(Long.java:589)
        at java.lang.Long.parseLong(Long.java:631)
        at com.atlassianlab.bamboo.plugins.afterdeploymenttrigger.DeploymentResultListener.isShouldBeTriggered(DeploymentResultListener.java:180)
        at com.atlassianlab.bamboo.plugins.afterdeploymenttrigger.DeploymentResultListener.lambda$findTriggerables$0(DeploymentResultListener.java:162)
        at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:174)
        at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1384)
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
        at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
        at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:566)
        at com.atlassianlab.bamboo.plugins.afterdeploymenttrigger.DeploymentResultListener.findTriggerables(DeploymentResultListener.java:172)
        at com.atlassianlab.bamboo.plugins.afterdeploymenttrigger.DeploymentResultListener.deploymentFinishedEventHandler(DeploymentResultListener.java:97)
        at sun.reflect.GeneratedMethodAccessor5299.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at com.atlassian.event.internal.SingleParameterMethodListenerInvoker.invoke(SingleParameterMethodListenerInvoker.java:42)
        ... 9 more

Comments (1)

  1. Alexey Chystoprudov

    Bamboo Specs architecture doesn't allow to propagate raw trigger map config when use AnyTrigger. If user want to have validation they need to use plugin's Specs builder com.atlassian.bamboo.specs.api.builders.afterdeployment.AfterDeploymentTrigger

  2. Log in to comment