{"record":{"id":"a8c15c23a3c533d9","repo":"projectlombok/lombok","slug":"file-with-bucket-endpoint-credentials-is-not-ava","errorCode":null,"errorMessage":"File with bucket endpoint + credentials is not available. Make file <path>; it should contain something like: \n123456789abcdef0123456789abcdef0  # this is the access key\n123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0  # this is the secret\nhttps://12345.r2.cloudflarestorage.com   # this is the endpoint\nlombok-data   # this is the bucket name","messagePattern":"File with bucket endpoint \\+ credentials is not available\\. Make file <path>; it should contain something like: \n123456789abcdef0123456789abcdef0  # this is the access key\n123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0  # this is the secret\nhttps://12345\\.r2\\.cloudflarestorage\\.com   # this is the endpoint\nlombok-data   # this is the bucket name","errorType":"console","errorClass":"AppException","httpStatus":null,"severity":"error","filePath":"src/support/lombok/publish/PublishToBucket.java","lineNumber":150,"sourceCode":"\t\t\tList<String> lines = Files.readAllLines(path);\n\t\t\tString accessKey = null, secretKey = null, endPoint = null, bucketName = null;\n\t\t\tfor (String line : lines) {\n\t\t\t\tint idx = line.indexOf('#');\n\t\t\t\tif (idx != -1) line = line.substring(0, idx);\n\t\t\t\tline = line.trim();\n\t\t\t\tif (line.isEmpty()) continue;\n\t\t\t\tif (accessKey == null) { accessKey = line; continue; }\n\t\t\t\tif (secretKey == null) { secretKey = line; continue; }\n\t\t\t\tif (endPoint == null) { endPoint = line; continue; }\n\t\t\t\tif (bucketName == null) { bucketName = line; continue; }\n\t\t\t\tthrow new AppException(\"Too many lines in \" + path.toAbsolutePath() + \" - only 4 expected: \" + LINE_DESCRIPTIONS);\n\t\t\t}\n\t\t\tif (bucketName == null) throw new AppException(\"Expected 3 lines in \" + path.toAbsolutePath() + \": \" + LINE_DESCRIPTIONS);\n\t\t\tcreds = AwsBasicCredentials.create(accessKey, secretKey);\n\t\t\tendpoint = URI.create(endPoint);\n\t\t\tthis.bucketName = bucketName;\n\t\t} catch (NoSuchFileException e) {\n\t\t\tthrow new AppException(\"File with bucket endpoint + credentials is not available. Make file \" + path.toAbsolutePath() + \"; it should contain something like: \\n\" +\n\t\t\t\t\"123456789abcdef0123456789abcdef0  # this is the access key\\n\" +\n\t\t\t\t\"123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0  # this is the secret\\n\" +\n\t\t\t\t\"https://12345.r2.cloudflarestorage.com   # this is the endpoint\\n\" +\n\t\t\t\t\"lombok-data   # this is the bucket name\");\n\t\t} catch (IOException e) {\n\t\t\tthrow new AppException(\"I/O issue reading creds file \" + path.toAbsolutePath() + \": \" + e.getClass() + \": \" + e.getMessage());\n\t\t}\n\t}\n}\n","sourceCodeStart":132,"sourceCodeEnd":160,"githubUrl":"https://github.com/projectlombok/lombok/blob/6d6a3e9fec0a9555702561fbeb8eac836575116e/src/support/lombok/publish/PublishToBucket.java#L132-L160","documentation":"readCreds opens the credentials file via Files/Reader and lets NoSuchFileException (an IOException subclass) propagate to a dedicated catch that converts it into this AppException with a full how-to template. It fires when the configured creds file does not exist at all.","triggerScenarios":"Running the publish flow (go -> readCreds) with the creds-file path unset or pointing to a non-existent location — file never created, wrong path passed, file deleted, or path typo / wrong working directory.","commonSituations":"Fresh checkout or CI machine where the per-developer creds file was never provisioned; path relative to a different cwd; credentials file stored outside the repo and not recreated after a clean build.","solutions":["Create the file at the path shown in <path> with exactly 4 lines: accessKey, secretKey, endpoint URL, bucket name (template is embedded in the message).","Example: '123456789abcdef0123456789abcdef0', the 64-char secret, 'https://12345.r2.cloudflarestorage.com', 'lombok-data'.","Verify the path you configured / passed actually points to the file (use an absolute path to rule out cwd differences).","On CI, provision the file from a secret store before running the publish step."],"exampleFix":"// create the file at the reported path:\n// before: (file missing -> NoSuchFileException)\n// after (content of creds file):\n123456789abcdef0123456789abcdef0\n123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0\nhttps://12345.r2.cloudflarestorage.com\nlombok-data","handlingStrategy":"validation","validationCode":"java.nio.file.Path p = java.nio.file.Paths.get(credsPath);\nif (!java.nio.file.Files.isRegularFile(p)) throw new IllegalStateException(\"Creds file missing: \" + p.toAbsolutePath());","typeGuard":null,"tryCatchPattern":"// AppException is unchecked-style wrapper; guard the run\ntry {\n    publish();\n} catch (AppException e) {\n    if (e.getMessage() != null && e.getMessage().startsWith(\"File with bucket endpoint + credentials is not available\")) {\n        createCredsFileFromTemplate(); // then retry\n    } else throw e;\n}","preventionTips":["Create the creds file before running the publish step; use an absolute path.","Provision the file in CI from a secret store before the job runs.","Verify existence with Files.isRegularFile as a preflight check.","Keep one canonical path documented in the release scripts."],"tags":["file-not-found","configuration","java"],"backgroundTag":"file-not-found","analyzedSha":"6d6a3e9fec0a9555702561fbeb8eac836575116e","analyzedAt":"2026-09-07T23:18:01.841Z","contentChangedAt":"2026-09-07T23:18:01.841Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}