litiengine icon indicating copy to clipboard operation
litiengine copied to clipboard

Resolve issues with nightly snapshot publishing.

Open nightm4re94 opened this issue 2 years ago • 13 comments

Since https://github.com/gurkenlabs/litiengine/commit/7b314e5f2c34328623a5b2883d38826eb96354b9, we have been unable to publish nightly snapshots. The workflow has been disabled for now.

nightm4re94 avatar May 13 '22 14:05 nightm4re94

I have already commented on this before: https://github.com/gurkenlabs/litiengine/pull/446#issuecomment-1010217817

I suppose thatched way the gpg key is passed isn’t working correctly i.e there is a line feed character before the word PGP. Could you double check the repository secret for this?

weisJ avatar May 13 '22 17:05 weisJ

The secret has been updated - any idea why it still fails? The error is: Task 'PGP' is ambiguous in root project 'litiengine-sdk'. Candidates are: 'publishLitienginePublicationToMavenLocal', 'publishLitienginePublicationToNexusRepository'.

nightm4re94 avatar Jun 29 '22 22:06 nightm4re94

My guess is that PROPS_SIGNING needs to be surrounded by quotation marks.

Private PGP keys always begin with the following sequence -----BEGIN PGP PRIVATE KEY BLOCK----- gradle arguments also begin with - or --

So when /gradlew prepareVote $(echo $PROPS_RELEASE $PROPS_GIT $PROPS_NEXUS $PROPS_SIGNING) --info -x test is ran, $PROPS_SIGNING is turned into -----BEGIN PGP PRIVATE KEY BLOCK-----.

Then, -----BEGIN is taken as an argument, and ignored, leaving PGP to be interpreted as a gradle task.

Gamebuster19901 avatar Jul 03 '22 21:07 Gamebuster19901

hmm I have no idea then

https://stackoverflow.com/questions/71377300/gradle-maven-publish-task-pgp-not-found

Gamebuster19901 avatar Jul 03 '22 22:07 Gamebuster19901

I suppose the in-memory key does not expect the -----BEGIN/END PGP [...]----- lines at the start/end of the key. You can try to remove it from the repository secret.

If this also doesn't work this is what I am using and works for me: Instead of relying on the behaviour of line breaks in CLI arguments simply store the key with # instead of line breaks. Then use the following in the gradle script:

configure<SigningExtension> {
    useInMemoryPgpKeys(
        project.stringProperty("signing.inMemoryKey")?.replace("#", "\n"),
        project.stringProperty("signing.password")
    )
}

weisJ avatar Jul 04 '22 20:07 weisJ

None of the suggestions helped. I always end up with the following message:

Build litiengine-sdk FAILURE reason:                                
    Execution failed for task ':litiengine:signLitienginePublication':
        org.gradle.api.internal.tasks.properties.PropertyEvaluationException: Error while evaluating property 'signatory' of task ':litiengine:signLitienginePublication'
at org.gradle.api.internal.tasks.properties.InputParameterUtils.prepareInputParameterValue(InputParameterUtils.java:33)
at org.gradle.api.internal.tasks.execution.TaskExecution.lambda$visitRegularInputs$1(TaskExecution.java:309)
at org.gradle.internal.execution.fingerprint.impl.DefaultInputFingerprinter$InputCollectingVisitor.visitInputProperty(DefaultInputFingerprinter.java:106)
at org.gradle.api.internal.tasks.execution.TaskExecution.visitRegularInputs(TaskExecution.java:309)
at org.gradle.internal.execution.fingerprint.impl.DefaultInputFingerprinter.fingerprintInputProperties(DefaultInputFingerprinter.java:61)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.captureExecutionStateWithOutputs(CaptureStateBeforeExecutionStep.java:193)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.lambda$captureExecutionState$1(CaptureStateBeforeExecutionStep.java:141)
at org.gradle.internal.execution.steps.BuildOperationStep$1.call(BuildOperationStep.java:37)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
at org.gradle.internal.execution.steps.BuildOperationStep.operation(BuildOperationStep.java:34)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.captureExecutionState(CaptureStateBeforeExecutionStep.java:130)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.lambda$execute$0(CaptureStateBeforeExecutionStep.java:75)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:75)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:50)
at org.gradle.internal.execution.steps.SkipEmptyWorkStep.executeWithNoEmptySources(SkipEmptyWorkStep.java:254)
at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:91)
at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:56)
at org.gradle.internal.execution.steps.RemoveUntrackedExecutionStateStep.execute(RemoveUntrackedExecutionStateStep.java:32)
at org.gradle.internal.execution.steps.RemoveUntrackedExecutionStateStep.execute(RemoveUntrackedExecutionStateStep.java:21)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:43)
at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:31)
at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:40)
at org.gradle.api.internal.tasks.execution.TaskExecution$4.withWorkspace(TaskExecution.java:281)
at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:40)
at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:30)
at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:37)
at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:27)
at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:44)
at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:33)
            Caused by: org.gradle.api.InvalidUserDataException: Could not read PGP secret key
at org.gradle.security.internal.pgp.BaseInMemoryPgpSignatoryProvider.createSignatory(BaseInMemoryPgpSignatoryProvider.java:94)
at org.gradle.security.internal.pgp.BaseInMemoryPgpSignatoryProvider.getDefaultSignatory(BaseInMemoryPgpSignatoryProvider.java:63)
at org.gradle.security.internal.pgp.BaseInMemoryPgpSignatoryProvider.getDefaultSignatory(BaseInMemoryPgpSignatoryProvider.java:42)
at org.gradle.plugins.signing.SigningExtension.getSignatory(SigningExtension.java:199)
at org.gradle.plugins.signing.SigningExtension$2.call(SigningExtension.java:292)
at org.gradle.plugins.signing.SigningExtension$2.call(SigningExtension.java:289)
at org.gradle.util.internal.GUtil.uncheckedCall(GUtil.java:455)
at org.gradle.internal.extensibility.ConventionAwareHelper$2.doGetValue(ConventionAwareHelper.java:96)
at org.gradle.internal.extensibility.ConventionAwareHelper$MappedPropertyImpl.getValue(ConventionAwareHelper.java:147)
at org.gradle.internal.extensibility.ConventionAwareHelper.getConventionValue(ConventionAwareHelper.java:129)
at org.gradle.api.internal.tasks.properties.bean.AbstractNestedRuntimeBeanNode$BeanPropertyValue$1$1.create(AbstractNestedRuntimeBeanNode.java:77)
at org.gradle.internal.deprecation.DeprecationLogger.whileDisabled(DeprecationLogger.java:[244](https://github.com/gurkenlabs/litiengine/runs/7379722487?check_suite_focus=true#step:4:247))
at org.gradle.api.internal.tasks.properties.bean.AbstractNestedRuntimeBeanNode$BeanPropertyValue$1.get(AbstractNestedRuntimeBeanNode.java:73)
                at com.google.common.base.Suppliers$NonSerializableMemoizingSupplier.get(Suppliers.java:167)
at org.gradle.api.internal.tasks.properties.bean.AbstractNestedRuntimeBeanNode$BeanPropertyValue.call(AbstractNestedRuntimeBeanNode.java:133)
at org.gradle.api.internal.tasks.properties.annotations.NestedBeanAnnotationHandler.visitPropertyValue(NestedBeanAnnotationHandler.java:62)
at org.gradle.api.internal.tasks.properties.bean.AbstractNestedRuntimeBeanNode.visitProperties(AbstractNestedRuntimeBeanNode.java:56)
at org.gradle.api.internal.tasks.properties.bean.RootRuntimeBeanNode.visitNode(RootRuntimeBeanNode.java:32)
at org.gradle.api.internal.tasks.properties.DefaultPropertyWalker.visitProperties(DefaultPropertyWalker.java:41)
at org.gradle.api.internal.tasks.TaskPropertyUtils.visitProperties(TaskPropertyUtils.java:42)
at org.gradle.api.internal.tasks.properties.DefaultTaskProperties.resolve(DefaultTaskProperties.java:67)
at org.gradle.execution.plan.LocalTaskNode.resolveMutations(LocalTaskNode.java:230)
at org.gradle.execution.plan.ResolveMutationsNode.execute(ResolveMutationsNode.java:75)
at org.gradle.execution.plan.WorkNodeExecutor.execute(WorkNodeExecutor.java:27)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:327)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:314)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:307)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:293)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:417)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:339)
at org.gradle.execution.plan.DefaultPlanExecutor.process(DefaultPlanExecutor.java:96)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph.executeWithServices(DefaultTaskExecutionGraph.java:140)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph.execute(DefaultTaskExecutionGraph.java:125)
at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:39)
at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:51)
at org.gradle.execution.BuildOperationFiringBuildWorkerExecutor$ExecuteTasks.call(BuildOperationFiringBuildWorkerExecutor.java:54)
at org.gradle.execution.BuildOperationFiringBuildWorkerExecutor$ExecuteTasks.call(BuildOperationFiringBuildWorkerExecutor.java:43)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
at org.gradle.execution.BuildOperationFiringBuildWorkerExecutor.execute(BuildOperationFiringBuildWorkerExecutor.java:40)
at org.gradle.internal.build.DefaultBuildLifecycleController.lambda$executeTasks$7(DefaultBuildLifecycleController.java:161)
at org.gradle.internal.model.StateTransitionController.doTransition(StateTransitionController.java:[247](https://github.com/gurkenlabs/litiengine/runs/7379722487?check_suite_focus=true#step:4:250))
at org.gradle.internal.model.StateTransitionController.lambda$tryTransition$7(StateTransitionController.java:174)
at org.gradle.internal.work.DefaultSynchronizer.withLock(DefaultSynchronizer.java:44)
at org.gradle.internal.model.StateTransitionController.tryTransition(StateTransitionController.java:174)
at org.gradle.internal.build.DefaultBuildLifecycleController.executeTasks(DefaultBuildLifecycleController.java:161)
at org.gradle.internal.build.DefaultBuildWorkGraphController$DefaultBuildWorkGraph.runWork(DefaultBuildWorkGraphController.java:156)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:[249](https://github.com/gurkenlabs/litiengine/runs/7379722487?check_suite_focus=true#step:4:252))
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:109)
at org.gradle.composite.internal.DefaultBuildController.doRun(DefaultBuildController.java:164)
at org.gradle.composite.internal.DefaultBuildController.access$000(DefaultBuildController.java:45)
at org.gradle.composite.internal.DefaultBuildController$BuildOpRunnable.run(DefaultBuildController.java:183)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
                Caused by: java.io.IOException: secret key ring doesn't start with secret key tag: tag 0xffffffff
at org.gradle.security.internal.pgp.BaseInMemoryPgpSignatoryProvider.createSignatory(BaseInMemoryPgpSignatoryProvider.java:80)
                    ... 59 more

nightm4re94 avatar Jul 17 '22 19:07 nightm4re94

I have tested the setup locally and signing the artefacts works for me, so there must still be some issue with the gpg key you are passing. For comparison this is what my setup for the key looks like (letters aren't from my actual key and made up):

signing.inMemoryKey = AOW4GLK3[Rest of the ASII armore Key. Newline characters are literally typed as '\n']+kLV258acUmLTRf8=\n=zlqD

weisJ avatar Jul 17 '22 19:07 weisJ

not working for me unfortunately.

nightm4re94 avatar Jul 17 '22 21:07 nightm4re94

The PGP key is malformed. Did you remove ANY newlines? If so, you can't do that, they are required.

How did you export your PGP key?

was it via gpg --list-secret-keys or gpg --armor --export-secret-keys?

See https://stackoverflow.com/a/70047098 (and comments), and https://stackoverflow.com/questions/57921325/gradle-signarchives-unable-to-read-secret-key/58000485#58000485.

Gamebuster19901 avatar Jul 17 '22 23:07 Gamebuster19901

I had read and followed both suggestions before, using gpg --armor --export-secret-keys and not removing anything.

nightm4re94 avatar Jul 18 '22 17:07 nightm4re94

You should remove the -----BEGIN/END PGP [...]----- part at the start and end of the key as well as replace any newline with the literal \n

weisJ avatar Jul 18 '22 18:07 weisJ

Have tried that in several of my 23 attempts so far to no avail.

nightm4re94 avatar Jul 18 '22 19:07 nightm4re94

Have you verified locally that building the snapshot from the commandline works?

weisJ avatar Aug 10 '22 17:08 weisJ

@nightm4re94 does release.yml work?

Gamebuster19901 avatar Dec 04 '22 22:12 Gamebuster19901

Seems to be the same issue as https://github.com/sbt/sbt-ci-release/issues/16?

Gamebuster19901 avatar Dec 22 '22 02:12 Gamebuster19901

@nightm4re94 does release.yml work?

will try tomorrow!

nightm4re94 avatar Dec 22 '22 02:12 nightm4re94