{"record":{"id":"12a757044018cca3","repo":"floci-io/floci","slug":"invalidactiondeclarationexception","errorCode":"InvalidActionDeclarationException","errorMessage":"Provider ${provider} is not available in Floci CodePipeline","messagePattern":"Provider (.+?) is not available in Floci CodePipeline","errorType":"exception","errorClass":"AwsException","httpStatus":400,"severity":"error","filePath":"src/main/java/io/github/hectorvent/floci/services/codepipeline/CodePipelineService.java","lineNumber":788,"sourceCode":"                                 JsonNode action, ActionExecution state) throws InterruptedException {\n        String category = state.getCategory();\n        String owner = state.getOwner();\n        String provider = state.getProvider();\n        if (\"Approval\".equals(category) && \"Manual\".equals(provider)) {\n            waitForApproval(execution, state);\n            return;\n        }\n        if (!\"AWS\".equals(owner)) {\n            waitForCustomJob(pipeline, execution, action, state);\n            return;\n        }\n        switch (provider) {\n            case \"S3\" -> executeS3(execution, action, state);\n            case \"CodeBuild\" -> executeCodeBuild(execution, action, state);\n            case \"CodeDeploy\" -> executeCodeDeploy(execution, action, state);\n            case \"Lambda\" -> executeLambda(execution, action, state);\n            case \"CodePipeline\" -> executeNestedPipeline(execution, action, state);\n            default -> throw new AwsException(\"InvalidActionDeclarationException\",\n                    \"Provider \" + provider + \" is not available in Floci CodePipeline\", 400);\n        }\n    }\n\n    private void executeS3(CodePipelineExecution execution, JsonNode action, ActionExecution state) {\n        JsonNode config = action.path(\"configuration\");\n        if (\"Source\".equals(state.getCategory())) {\n            String bucket = config.path(\"S3Bucket\").asText(config.path(\"BucketName\").asText(null));\n            String key = config.path(\"S3ObjectKey\").asText(config.path(\"ObjectKey\").asText(null));\n            S3Object object = s3Service.getObject(bucket, key);\n            for (JsonNode artifact : action.path(\"outputArtifacts\")) {\n                runtimeArtifacts.put(artifactKey(execution, artifact.path(\"name\").asText()), object.getData());\n            }\n            Map<String, Object> revision = new LinkedHashMap<>();\n            revision.put(\"name\", state.getActionName());\n            revision.put(\"revisionId\", object.getVersionId() != null ? object.getVersionId() : object.getETag());\n            revision.put(\"revisionChangeIdentifier\", object.getETag());\n            revision.put(\"revisionSummary\", bucket + \"/\" + key);","sourceCodeStart":770,"sourceCodeEnd":806,"githubUrl":"https://github.com/floci-io/floci/blob/62ff490619e7bd3554597c28c704081b4c15add5/src/main/java/io/github/hectorvent/floci/services/codepipeline/CodePipelineService.java#L770-L806","documentation":"Error \"Provider ${provider} is not available in Floci CodePipeline\" thrown in floci-io/floci.","triggerScenarios":"Thrown at src/main/java/io/github/hectorvent/floci/services/codepipeline/CodePipelineService.java:788 when the library encounters an invalid state.","commonSituations":"Occurs when a pipeline stage references an action provider not implemented by Floci. Use a supported provider such as CodeBuild or S3.","solutions":["Use a provider supported by Floci CodePipeline, e.g. CodeBuild."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"62ff490619e7bd3554597c28c704081b4c15add5","analyzedAt":"2026-08-14T14:25:23.764Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}