seu-as-code / seu-as-code.plugins

The Gradle plugins for SEU-as-code.
Apache License 2.0
28 stars 10 forks source link

Build fails with "The credential storage is not initialized yet." in credentials plugin version 2.4.0.RC1 #30

Closed stefaneggerstorfer closed 7 years ago

stefaneggerstorfer commented 7 years ago

The createCredentialsStorage call is now in a project.afterEvaluate block, causing the example below to fail, since in the configuration phase the credentials storage is not yet initialize. Is this change intentional? How should the credentials now be accessed? (The same issue occurs when I want to use the credentials for a subversion task)

plugins {
    id 'de.qaware.seu.as.code.base' version '2.4.0'
    id 'de.qaware.seu.as.code.credentials' version '2.4.0.RC1'
}

ext {
    seuRoot = 'C:/'
    seuName = 'test'
}

repositories {
    mavenCentral()
    maven {
    url 'https://dl.bintray.com/seu-as-code/maven'
        credentials {
            username project.credentials['Nexus'].username
            password project.credentials['Nexus'].password
        }
    }
}

seuAsCode {
    seuHome = seuRoot
    projectName = seuName
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.14.1'
}

The command-line output:

C:\workspaces\seu>gradlew  -s
> FAILURE: Build failed with an exception.

* Where:
Build file 'C:\workspaces\seu\build.gradle' line: 16

* What went wrong:
A problem occurred evaluating root project 'seu'.
The credential storage is not initialized yet.

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

* Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating root project 'seu'.
        at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:93)
        at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl$2.run(DefaultScriptPluginFactory.java:177)
        at org.gradle.configuration.ProjectScriptTarget.addConfiguration(ProjectScriptTarget.java:77)
        at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:182)
        at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:38)
        at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:25)
        at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:34)
        at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:55)
        at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:540)
        at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:93)
        at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:42)
        at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:35)
        at org.gradle.initialization.DefaultGradleLauncher$2.run(DefaultGradleLauncher.java:124)
        at org.gradle.internal.Factories$1.create(Factories.java:22)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:53)
        at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:121)
        at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)
        at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:98)
        at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:92)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:63)
        at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:92)
        at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:83)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:99)
        at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
        at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:48)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:30)
        at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:81)
        at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:46)
        at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:52)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
        at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
        at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
        at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
        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:120)
        at org.gradle.launcher.daemon.server.health.DaemonHealthTracker.execute(DaemonHealthTracker.java:47)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
        at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
        at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:72)
        at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
        at org.gradle.launcher.daemon.server.health.HintGCAfterBuild.execute(HintGCAfterBuild.java:41)
        at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
        at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
        at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:237)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
        at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
Caused by: java.lang.IllegalStateException: The credential storage is not initialized yet.
        at de.qaware.seu.as.code.plugins.credentials.CredentialsProperty.get(CredentialsProperty.java:81)
        at build_20dy052n3rzl6e8x8v5c2qvoj$_run_closure2$_closure5$_closure6.doCall(C:\workspaces\seu - Copy\build.gradle:16)
        at org.gradle.api.internal.ClosureBackedAction.execute(ClosureBackedAction.java:67)
        at org.gradle.api.internal.artifacts.repositories.AuthenticationSupporter.credentials(AuthenticationSupporter.java:79)
        at org.gradle.api.internal.artifacts.repositories.AuthenticationSupporter.credentials(AuthenticationSupporter.java:74)
        at org.gradle.api.internal.artifacts.repositories.AbstractAuthenticationSupportedRepository.credentials(AbstractAuthenticationSupportedRepository.java:59)
        at org.gradle.api.internal.artifacts.repositories.DefaultMavenArtifactRepository_Decorated.credentials(Unknown Source)
        at build_20dy052n3rzl6e8x8v5c2qvoj$_run_closure2$_closure5.doCall(C:\workspaces\seu\build.gradle:15)
        at org.gradle.api.internal.ClosureBackedAction.execute(ClosureBackedAction.java:67)
        at org.gradle.api.internal.artifacts.DefaultArtifactRepositoryContainer.addRepository(DefaultArtifactRepositoryContainer.java:87)
        at org.gradle.api.internal.artifacts.dsl.DefaultRepositoryHandler.maven(DefaultRepositoryHandler.java:89)
        at org.gradle.api.internal.artifacts.dsl.DefaultRepositoryHandler.maven(DefaultRepositoryHandler.java:93)
        at org.gradle.internal.metaobject.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:374)
        at org.gradle.internal.metaobject.BeanDynamicObject.invokeMethod(BeanDynamicObject.java:169)
        at org.gradle.internal.metaobject.CompositeDynamicObject.invokeMethod(CompositeDynamicObject.java:96)
        at org.gradle.internal.metaobject.MixInClosurePropertiesAsMethodsDynamicObject.invokeMethod(MixInClosurePropertiesAsMethodsDynamicObject.java:30)
        at org.gradle.internal.metaobject.CompositeDynamicObject.invokeMethod(CompositeDynamicObject.java:96)
        at org.gradle.internal.metaobject.MixInClosurePropertiesAsMethodsDynamicObject.invokeMethod(MixInClosurePropertiesAsMethodsDynamicObject.java:30)
        at org.gradle.internal.metaobject.ConfigureDelegate.invokeMethod(ConfigureDelegate.java:59)
        at build_20dy052n3rzl6e8x8v5c2qvoj$_run_closure2.doCall(C:\workspaces\seu\build.gradle:13)
        at org.gradle.api.internal.ClosureBackedAction.execute(ClosureBackedAction.java:67)
        at org.gradle.util.ConfigureUtil.configureSelf(ConfigureUtil.java:137)
        at org.gradle.api.internal.artifacts.DefaultArtifactRepositoryContainer.configure(DefaultArtifactRepositoryContainer.java:66)
        at org.gradle.api.internal.artifacts.DefaultArtifactRepositoryContainer.configure(DefaultArtifactRepositoryContainer.java:33)
        at org.gradle.util.ConfigureUtil.configure(ConfigureUtil.java:104)
        at org.gradle.api.internal.project.AbstractProject.repositories(AbstractProject.java:903)
        at org.gradle.internal.metaobject.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:374)
        at org.gradle.internal.metaobject.BeanDynamicObject.invokeMethod(BeanDynamicObject.java:169)
        at org.gradle.internal.metaobject.CompositeDynamicObject.invokeMethod(CompositeDynamicObject.java:96)
        at org.gradle.internal.metaobject.MixInClosurePropertiesAsMethodsDynamicObject.invokeMethod(MixInClosurePropertiesAsMethodsDynamicObject.java:30)
        at org.gradle.internal.metaobject.AbstractDynamicObject.invokeMethod(AbstractDynamicObject.java:163)
        at org.gradle.groovy.scripts.BasicScript.methodMissing(BasicScript.java:79)
        at build_20dy052n3rzl6e8x8v5c2qvoj.run(C:\workspaces\seu\build.gradle:11)
        at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:91)
        ... 58 more

BUILD FAILED
Total time: 0.798 secs
lreimer commented 7 years ago

I can see the problem. I will try to find a workaround and implement the plugin configuration differently.

lreimer commented 7 years ago

Please try again with the latest plugin version 2.4.0.RC2

plugins {
    id 'de.qaware.seu.as.code.credentials' version '2.4.0.RC2'
}

Also in your build.gradle file I saw that you use credentials to access the Bintray repository. No credentials should be required to access this repo.

stefaneggerstorfer commented 7 years ago

Thanks for the quick fix, but now it fails with a NoClassDefFoundError in JNA:

Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.sun.jna.platform.win32.WinCrypt$DATA_BLOB
        at com.sun.jna.platform.win32.Crypt32Util.cryptUnprotectData(Crypt32Util.java:121)
        at com.sun.jna.platform.win32.Crypt32Util.cryptUnprotectData(Crypt32Util.java:103)
        at com.sun.jna.platform.win32.Crypt32Util.cryptUnprotectData(Crypt32Util.java:90)
        at de.qaware.seu.as.code.plugins.credentials.win.DPAPIEncryptor.decrypt(DPAPIEncryptor.java:34)
        at de.qaware.seu.as.code.plugins.credentials.win.PropertyCredentialsStorage.findCredentials(PropertyCredentialsStorage.java:118)
        at de.qaware.seu.as.code.plugins.credentials.DisplayCredentialsTask.onAction(DisplayCredentialsTask.java:43)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:228)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:221)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:210)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:621)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:604)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
        ... 68 more

This is related to https://github.com/java-native-access/jna/issues/668 on Windows 10, JNA 4.2.0 (instead of 4.2.2) works, tested with following workaround:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath "net.java.dev.jna:jna:4.2.0"
        classpath "net.java.dev.jna:jna-platform:4.2.0"
        classpath("de.qaware.seu.as.code:seuac-credentials-plugin:2.4.0.RC2") {
            exclude group: "net.java.dev.jna"
        }
        classpath "de.qaware.seu.as.code:seuac-svn-plugin:2.1.1"
    }
}

apply plugin: "de.qaware.seu.as.code.credentials"
apply plugin: "de.qaware.seu.as.code.svn"
lreimer commented 7 years ago

Thanks for this finding. I will check on my Win10 machine tonight, I have been on Mac most of the time recently. I don't see any problem downgrading the JNA dependencies to 4.2.0. So I will check an prepare a RC3.

lreimer commented 7 years ago

I am still on the train, so I can't check on my Win10 machine. Still, I have downgraded to JNA 4.2.0 and published RC3 to Bintray and Gradle plugin repo. Please give it a try.

plugins {
    id 'de.qaware.seu.as.code.credentials' version '2.4.0.RC3'
}
stefaneggerstorfer commented 7 years ago

Works now, thanks :+1: