code-connect icon indicating copy to clipboard operation
code-connect copied to clipboard

[Config] CLI Compose Android Figma Connect

Open ViktoriiaYarska opened this issue 1 year ago • 13 comments

Thanks for adding support of the Android Compose 🚀

Would you consider adding a connected app example to the documentation for easier integration? Also, It is missing the CLI part on the Compose page

Env

  • Code Connect CLI version : 1.2.2
  • Operating system: Mac OS
  • Code Connect file:
{
  "codeConnect": {
    "parser": "compose",
    "include": [
      "design/src/main/java/com/example/android/design/compose/component/**"
    ],
  }
}

CLI command

npx figma connect publish --token <token> --verbose

Error

Config file found, parsing /<project-path> using specified include globs
Running parser: ./gradlew -p . parseCodeConnect -PfilePath=tmp/figma-code-connect-parser-io.json.tmp -q

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':design:parseCodeConnect'.
> Could not initialize class com.figma.code.connect.models.FigmaString

On the same config file & untouched code, I could receive sometimes another error:

Config file found, parsing  /<project-path> using specified include globs
Running parser: ./gradlew -p . parseCodeConnect -PfilePath=tmp/figma-code-connect-parser-io.json.tmp -q
FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':design:parseCodeConnect'.
> 'kotlinx.serialization.KSerializer kotlinx.serialization.internal.EnumsKt.createAnnotatedEnumSerializer(java.lang.String, java.lang.Enum[], java.lang.String[], java.lang.annotation.Annotation[][], java.lang.annotation.Annotation[])'

I tried adding "gradleWrapperPath": ".." and removing "parser": "compose", - receiving same error

Could you please help locate the issue or add an app example with proper configuration?

ViktoriiaYarska avatar Nov 15 '24 16:11 ViktoriiaYarska

Hi @ViktoriiaYarska, sorry for the delayed response. I haven't been able to reproduce this issue on my end so far.

This is what my setup looks like:

ButtonDoc.kt

@FigmaConnect(url="https://www.figma.com/design/.../...?node-id=0-5&t=...")
class ButtonDoc {

    @FigmaProperty(FigmaType.Text, "label")
    val label = "Click me"

    @FigmaProperty(FigmaType.Boolean, "disabled", true)
    val disabled: Boolean? = null

    @FigmaProperty(FigmaType.Enum, "variant")
    val variant: ButtonVariant = Figma.mapping(
        "default" to ButtonVariant.Default,
        "large" to ButtonVariant.Large
    )

    @Composable
    fun Component() {
        Button(
            variant = variant,
            label = label,
            disabled = disabled
        )
    }
}

libs.versions.toml

[versions]
kotlin = "2.0.0"
codeConnectLib = "1.1.3"
...

[libraries]
code-connect-lib = { module = "com.figma.code.connect:code-connect-lib", version.ref = "codeConnectLib" }
...

build.gradle.kts

plugins {
    id("com.figma.code.connect") version "1.2.1"
    ...
}

dependencies {
    implementation(libs.code.connect.lib)
    ...
}

Are you able to provide a sample of a @FigmaConnect file that you're trying to connect, your Kotlin version, and Code Connect Lib version to help debug?

It also may be worth updating to the latest Code Connect CLI version 1.3.1.

rgullyfigma avatar Feb 21 '25 09:02 rgullyfigma

@rgullyfigma Hi, as per your suggestion, I've tried to updating to the latest Code Connect CLI version 1.3.1, but it seems like only v1.1.3 is available on mavenCentral(): https://mvnrepository.com/artifact/com.figma.code.connect/code-connect-lib I'm also facing the parsing errors reported by @ViktoriiaYarska , which seem to be resolved in code-connect https://github.com/figma/code-connect/releases/tag/v1.2.1 according to the release notes. I'm unable to access any other versions due to them not being available on mavenCentral. Please guide on how to upgrade to your recommended version.

ritum-kr avatar Mar 07 '25 19:03 ritum-kr

Hi @ritum-kr, there are a few different dependencies when using Code Connect for Compose:

  1. The npm Code Connect CLI package (typically installed as a global package npm install --global @figma/code-connect@latest). Its current version is 1.3.1.
  2. The com.figma.code.connect dependency for Android which contains the logic for Android parsing. Its current version is 1.2.1.
  3. The code-connect-lib dependency for Android which contains the definitions for Figma's Compose annotations (@FigmaConnect etc.). Its current version if 1.1.3.

I believe that you were trying to update the code-connect-lib which does have a latest version of 1.1.3.

It was the com.figma.code.connect dependency that was updated as part of this release (https://github.com/figma/code-connect/releases/tag/v1.2.1) you mentioned from 1.1.4 to 1.2.1. You should be able to update this by specifying the new version in your build.gradle.kts:

plugins {
    id("com.figma.code.connect") version "1.2.1"
    ...
}

dependencies {
    implementation(libs.code.connect.lib)
    ...
}

and you should be able to update the Code Connect CLI npm package using something like this: npm install --global @figma/[email protected]

Hopefully that helps. Let me know if you're still running into issues.

rgullyfigma avatar Mar 10 '25 16:03 rgullyfigma

Okay, I'm using the com.figma.code.connect") version "1.2.1" and code-connect-lib version 1.1.3. After doing npm install --global @figma/[email protected] when I try the npx figma connect publish --token=<token> --verbose I specify the URL of my figma file, I select pages with the Figma components I'd like to map, it finds 2 components and then returns the message: "Error returned from parser: Parser exited with code 1. Try re-running the command with --verbose for more information." I've already specified --verbose at the end but there's no specific error.

I also tried figma connect create <figma url> --token=<token> --verbose, which returns the message: Running parser: ./gradlew -p . createCodeConnect -PfilePath=tmp/figma-code-connect-parser-io.json.tmp -q FAILURE: Build failed with an exception.

  • What went wrong: Execution failed for task ':code-connect:createCodeConnect'.

'void kotlinx.serialization.json.JsonBuilder.setAllowTrailingComma(boolean)'

Please advise.

ritum-kr avatar Mar 14 '25 17:03 ritum-kr

EDIT: I see later on you did use figma connect so my earlier advice is probably less helpful. What happens when you run figma connect publish --token=<token> --verbose?


Hi @ritum-kr - just want to rule out that it's not the wrong CLI being used. You mentioned using npx figma connect publish, do you know if you have a version of @figma/code-connect in the package.json? If there is, using npx figma connect will use that local version instead of the globally installed figma connect. To use this one, use figma connect instead of npx figma connect

You can update the local version as well using npm install @figma/code-connect@latest. I'll also check in with the team to see if there's further support we can provide here!

akbarbmirza avatar Mar 21 '25 16:03 akbarbmirza

Hey @ritum-kr, that error message makes it seem like there may be a syntax error somewhere causing the parser to fail. Do any of your @FigmaConnect implementations have any errors that you can see, or have any issues with imports?

Ideally they'd look like this with all the Figma annotations and types resolving successfully: Image

rgullyfigma avatar Mar 21 '25 16:03 rgullyfigma

@rgullyfigma I have tried your above snippet, there's no build or import errors. I'm still getting `* What went wrong: Execution failed for task ':code-connect:createCodeConnect'.

'void kotlinx.serialization.json.JsonBuilder.setAllowTrailingComma(boolean)'`

To eliminate the possibility, I tried with the following code snippet, which just includes a simple text label property, but same error:

@FigmaConnect("https://www.figma.com/design/YKQbttm2fUzrxElzrvQUCo/Citrus---Rue?node-id=531-8161&m=dev")
class LoadingDocs {
    @FigmaProperty(FigmaType.Boolean, "Show Label")
    val showLabel = true
    
    @Composable
    fun Component(modifier: Modifier = Modifier) {
        CircularLoadingIndicator(
            label = if (showLabel) "label" else null,
        )
    }
}


@Composable
fun CircularLoadingIndicator(
    modifier: Modifier = Modifier,
    label: String? = null,
) {
    Column(
        modifier = modifier.semantics(mergeDescendants = true) {}
            .clearAndSetSemantics { contentDescription = label ?: "Loading" },
        horizontalAlignment = Alignment.CenterHorizontally,
    ) {
        label?.let {
            Text(text = label)
        }
    }
}

ritum-kr avatar Mar 21 '25 18:03 ritum-kr

@akbarbmirza when I run figma connect publish --token=<token> --verbose, I simply get Config file found, parsing <config file package location> using specified include globs Error returned from parser: Parser exited with code 1. Try re-running the command with --verbose for more information.

ritum-kr avatar Mar 21 '25 18:03 ritum-kr

@ritum-kr Have you got any other @FigmaConnect files within your project?

rgullyfigma avatar Mar 24 '25 12:03 rgullyfigma

@rgullyfigma No, just this one.

ritum-kr avatar Mar 31 '25 14:03 ritum-kr

Hi @ritum-kr did you have any luck solving your publish problems?

com.figma.code.connect.models.FigmaString is defined here and depends on kotlinx.serialization.Serializable. Might be worth checking if there's some serialization dependency in your project causing some conflict with Code Connect.

rgullyfigma avatar May 09 '25 21:05 rgullyfigma

Your project is currently using kotlin-serialization = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version = "1.6.3" } Our is matching the version and also using implementation("org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.6.3") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3") I've tried removing the core-jvm dependency but receive the same error.

Since it's the same version it shouldn't cause a conflict. What do you recommend based on this?

ritum-kr avatar May 20 '25 14:05 ritum-kr

Hey @ritum-kr, sorry you're still having issues.

I haven't been able to replicate your issue on my end. I have created a working sample project which can hopefully help you debug on your side to see if there is an issue with your project or environment. It also contains libs.versions.toml which could be helpful for checking versions of dependencies etc.

I have also added the --stacktrace output when running the --verbose command in the latest code-connect npm package (1.3.3), which I am working on getting published shortly.

rgullyfigma avatar May 21 '25 14:05 rgullyfigma

Hey @rgullyfigma , I've run into our issue with the latest code connect v 1.3.3 and now the detailed --verbose command gives me this error:

Trace: Error: Parser exited with code 1 at ChildProcess.<anonymous> (/Users/xyz/.nvm/versions/node/v20.12.0/lib/node_modules/@figma/code-connect/dist/connect/parser_executables.js:112:32) at ChildProcess.emit (node:events:518:28) at maybeClose (node:internal/child_process:1105:16) at ChildProcess._handle.onexit (node:internal/child_process:305:5) at getCodeConnectObjects (/Users/xyz/.nvm/versions/node/v20.12.0/lib/node_modules/@figma/code-connect/dist/commands/connect.js:182:25) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async getUnconnectedComponentsAndConnectedComponentMappings (/Users/xyz/.nvm/versions/node/v20.12.0/lib/node_modules/@figma/code-connect/dist/connect/wizard/run_wizard.js:536:32) at async runWizard (/Users/xyz/.nvm/versions/node/v20.12.0/lib/node_modules/@figma/code-connect/dist/connect/wizard/run_wizard.js:785:68) Error calling parser: Error: Parser exited with code 1.

Does this offer you any insights? Would using a different node version make a difference?

ritum-kr avatar Jun 03 '25 18:06 ritum-kr

And I also tried the "connect create" directly, which gives me the detailed error:

`* What went wrong: Execution failed for task ':code-connect:createCodeConnect'.

'void kotlinx.serialization.json.JsonBuilder.setAllowTrailingComma(boolean)'

  • Try:

Run with --info or --debug option to get more log output. Run with --scan to get full insights. Get more help at https://help.gradle.org.

  • Exception is: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':code-connect:createCodeConnect'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:130) at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:282) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:128) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:116) at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46) at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:74) at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195) 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.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52) at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:42) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:331) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:318) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.lambda$execute$0(DefaultTaskExecutionGraph.java:314) at org.gradle.internal.operations.CurrentBuildOperationRef.with(CurrentBuildOperationRef.java:80) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:314) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:303) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:463) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:380) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47) Caused by: java.lang.NoSuchMethodError: 'void kotlinx.serialization.json.JsonBuilder.setAllowTrailingComma(boolean)' at com.figma.code.connect.FigmaCodeConnectPlugin.apply$lambda$15$lambda$13$lambda$12(FigmaCodeConnectPlugin.kt:160) at kotlinx.serialization.json.JsonKt.Json(Json.kt:187) at kotlinx.serialization.json.JsonKt.Json$default(Json.kt:185) at com.figma.code.connect.FigmaCodeConnectPlugin.apply$lambda$15$lambda$13(FigmaCodeConnectPlugin.kt:157) at com.figma.code.connect.FigmaCodeConnectPlugin.apply$lambda$15$lambda$14(FigmaCodeConnectPlugin.kt:152) at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:831) at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:804) at org.gradle.api.internal.tasks.execution.TaskExecution$3.run(TaskExecution.java:244) at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29) at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26) 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.run(DefaultBuildOperationRunner.java:47) at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68) at org.gradle.api.internal.tasks.execution.TaskExecution.executeAction(TaskExecution.java:229) at org.gradle.api.internal.tasks.execution.TaskExecution.executeActions(TaskExecution.java:212) at org.gradle.api.internal.tasks.execution.TaskExecution.executeWithPreviousOutputFiles(TaskExecution.java:195) at org.gradle.api.internal.tasks.execution.TaskExecution.execute(TaskExecution.java:162) at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:105) at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:44) at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:59) at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:56) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195) 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.ExecuteStep.execute(ExecuteStep.java:56) at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:44) at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:41) at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:74) at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:55) at org.gradle.internal.execution.steps.PreCreateOutputParentsStep.execute(PreCreateOutputParentsStep.java:50) at org.gradle.internal.execution.steps.PreCreateOutputParentsStep.execute(PreCreateOutputParentsStep.java:28) at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:67) at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:37) at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:61) at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:26) at org.gradle.internal.execution.steps.CaptureOutputsAfterExecutionStep.execute(CaptureOutputsAfterExecutionStep.java:67) at org.gradle.internal.execution.steps.CaptureOutputsAfterExecutionStep.execute(CaptureOutputsAfterExecutionStep.java:45) at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:40) at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:29) at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:189) at org.gradle.internal.execution.steps.BuildCacheStep.lambda$execute$1(BuildCacheStep.java:75) at org.gradle.internal.Either$Right.fold(Either.java:175) at org.gradle.internal.execution.caching.CachingState.fold(CachingState.java:62) at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:73) at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:48) at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:46) at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:35) at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:76) at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$2(SkipUpToDateStep.java:54) at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:54) at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:36) at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37) at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27) at org.gradle.internal.execution.steps.ResolveIncrementalCachingStateStep.executeDelegate(ResolveIncrementalCachingStateStep.java:49) at org.gradle.internal.execution.steps.ResolveIncrementalCachingStateStep.executeDelegate(ResolveIncrementalCachingStateStep.java:27) at org.gradle.internal.execution.steps.AbstractResolveCachingStateStep.execute(AbstractResolveCachingStateStep.java:71) at org.gradle.internal.execution.steps.AbstractResolveCachingStateStep.execute(AbstractResolveCachingStateStep.java:39) at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:65) at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:36) at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:106) at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:55) at org.gradle.internal.execution.steps.AbstractCaptureStateBeforeExecutionStep.execute(AbstractCaptureStateBeforeExecutionStep.java:64) at org.gradle.internal.execution.steps.AbstractCaptureStateBeforeExecutionStep.execute(AbstractCaptureStateBeforeExecutionStep.java:43) at org.gradle.internal.execution.steps.AbstractSkipEmptyWorkStep.executeWithNonEmptySources(AbstractSkipEmptyWorkStep.java:125) at org.gradle.internal.execution.steps.AbstractSkipEmptyWorkStep.execute(AbstractSkipEmptyWorkStep.java:56) at org.gradle.internal.execution.steps.AbstractSkipEmptyWorkStep.execute(AbstractSkipEmptyWorkStep.java:36) at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38) at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:36) at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:23) at org.gradle.internal.execution.steps.HandleStaleOutputsStep.execute(HandleStaleOutputsStep.java:75) at org.gradle.internal.execution.steps.HandleStaleOutputsStep.execute(HandleStaleOutputsStep.java:41) at org.gradle.internal.execution.steps.AssignMutableWorkspaceStep.lambda$execute$0(AssignMutableWorkspaceStep.java:35) at org.gradle.api.internal.tasks.execution.TaskExecution$4.withWorkspace(TaskExecution.java:289) at org.gradle.internal.execution.steps.AssignMutableWorkspaceStep.execute(AssignMutableWorkspaceStep.java:31) at org.gradle.internal.execution.steps.AssignMutableWorkspaceStep.execute(AssignMutableWorkspaceStep.java:22) at org.gradle.internal.execution.steps.ChoosePipelineStep.execute(ChoosePipelineStep.java:40) at org.gradle.internal.execution.steps.ChoosePipelineStep.execute(ChoosePipelineStep.java:23) at org.gradle.internal.execution.steps.ExecuteWorkBuildOperationFiringStep.lambda$execute$2(ExecuteWorkBuildOperationFiringStep.java:67) at org.gradle.internal.execution.steps.ExecuteWorkBuildOperationFiringStep.execute(ExecuteWorkBuildOperationFiringStep.java:67) at org.gradle.internal.execution.steps.ExecuteWorkBuildOperationFiringStep.execute(ExecuteWorkBuildOperationFiringStep.java:39) at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:46) at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:34) at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:48) at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:35) at org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:61) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:127) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:116) at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46) at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:74) at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195) 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.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52) at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:42) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:331) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:318) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.lambda$execute$0(DefaultTaskExecutionGraph.java:314) at org.gradle.internal.operations.CurrentBuildOperationRef.with(CurrentBuildOperationRef.java:80) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:314) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:303) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:463) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:380) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)

`

ritum-kr avatar Jun 03 '25 18:06 ritum-kr

Thanks for the output. I see someone reported a similar issue on the Jetbrains support forum. May be worth looking at to see if there's something similar in your project configuration. What gradle wrapper version do you have?

Also, did you manage to get the sample project working?

rgullyfigma avatar Jun 09 '25 08:06 rgullyfigma

Gradle wrapper v is 8.7. The sample project, when run on my work computer is showing the same error since it has to do the same setup and configuration to go through Kroger servers. I will try the linked issue resolution and report back.

ritum-kr avatar Jun 09 '25 14:06 ritum-kr

As per your recommendation in the shared link, I've changed the alias(libs.plugins.jetbrainsKotlinAndroid) to id("org.jetbrains.kotlin.android") but get the same error.

ritum-kr avatar Jun 12 '25 15:06 ritum-kr

@ritum-kr do you have id("com.figma.code.connect") version "1.2.1" defined in multiple build.gradle.kts files? I have noticed while trying to reproduce that I get kotlinx.serialization errors when I have Code Connect in more than one module.

rgullyfigma avatar Jul 10 '25 10:07 rgullyfigma

Nope, just the one. I actually created a separate module for the code connect stuff and all the code connect related things are in the gradle for only that one module.

ritum-kr avatar Jul 15 '25 14:07 ritum-kr

@rgullyfigma Thanks a lot for creating working sample project! It helped me to locate an issue and finally connect.

The issue was - dependency conflict with ktlint. Fix in project build.gradle.kts

buildscript {
    configurations.all {
        resolutionStrategy {
            force(libs.kotlinx.serialization.json)
        }
    }


    dependencies {
       ...
       classpath(libs.ktlint)
    }
}

@ritum-kr hope this'll help for you as well

ViktoriiaYarska avatar Jul 31 '25 08:07 ViktoriiaYarska

@ViktoriiaYarska that is great news! 🎉

rgullyfigma avatar Jul 31 '25 09:07 rgullyfigma