{"record":{"id":"c2c820cea620afcb","repo":"windmill-labs/windmill","slug":"skipping-relpath-not-a-text-file-so-it-is-not","errorCode":null,"errorMessage":"Skipping ${relPath}: not a text file, so it is not part of the dbt project the bundle carries — dbt does not read it either","messagePattern":"Skipping (.+?): not a text file, so it is not part of the dbt project the bundle carries — dbt does not read it either","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"cli/src/commands/script/script.ts","lineNumber":862,"sourceCode":"          // A dbt project's authored files are text. A binary one -- an image\n          // under `docs/`, a `.DS_Store`, a parquet seed -- would be read as\n          // mojibake and, if it carries a NUL, rejected by Postgres with an\n          // opaque `unsupported Unicode escape sequence`, which the push then\n          // reports as success. Skip it, loudly: dbt does not read it either.\n          //\n          // Asked BEFORE reading: the predicate only stats the file and reads\n          // its first 8 KB, so a multi-gigabyte seed next to the project costs\n          // that rather than being loaded whole just to be rejected.\n          const exclusion = moduleFileExclusion(fullPath);\n          if (exclusion !== undefined) {\n            // Over the limit but readable as text — a large seed CSV is the\n            // realistic case — is refused rather than skipped: dbt WOULD have\n            // read it, so shipping the project without it deploys something that\n            // compiles here and fails at run time with a missing relation.\n            if (exclusion === \"oversized\") {\n              throw oversizedModuleFileError(relPath, fs.statSync(fullPath).size);\n            }\n            log.warn(\n              `Skipping ${relPath}: not a text file, so it is not part of the dbt project the ` +\n                `bundle carries — dbt does not read it either`,\n            );\n            continue;\n          }\n          // `language` is a required field of the API type and is not used for\n          // these: the worker writes them to their relative path and dbt reads\n          // the tree.\n          modules[relPath] = {\n            content: fs.readFileSync(fullPath).toString(\"utf-8\"),\n            language: \"dbt\" as ScriptModule[\"language\"],\n          };\n        } else if (exts.some((ext) => entry.name.endsWith(ext))) {\n          const content = readTextFileSync(fullPath);\n          const language = inferContentTypeFromFilePath(entry.name, defaultTs);\n\n          // Check for an accompanying lock file (helper.lock)\n          const baseName = entry.name.replace(/\\.[^.]+$/, '');","sourceCodeStart":844,"sourceCodeEnd":880,"githubUrl":"https://github.com/windmill-labs/windmill/blob/e474e8803ce2ff5c2df09a58dab51d45f5c922ca/cli/src/commands/script/script.ts#L844-L880","documentation":"When bundling a dbt project, wmill only carries text files it can read. A non-text file in the project is skipped with a warning because dbt would not read it either; only files dbt actually consumes that are oversized are hard errors (refused, not skipped).","triggerScenarios":"A dbt project folder contains binary or non-text files (images, .DS_Store, sqlite caches, compiled artifacts) that wmill's reader classifies as non-text while traversing the module directory.","commonSituations":"macOS .DS_Store files; editor swap files; binaries committed to the dbt repo (logos, PDFs); leftover dbt artifacts like target/ or logs/ directories inside the synced path.","solutions":["Delete or gitignore the non-text files (.DS_Store, swap files, target/, logs/) from the dbt project folder","Move genuinely needed binaries out of the synced path and reference them by URL at run time","Verify the file is actually text — if dbt needs it and wmill misclassifies it, check encoding (UTF-8, no BOM issues)"],"exampleFix":"// before\nmy_dbt_project/\n  models/...\n  .DS_Store   # skipped with warning\n// after\nmy_dbt_project/\n  models/...\n# .DS_Store in .gitignore and deleted from disk","handlingStrategy":"validation","validationCode":"for (const f of files) if (fs.readFileSync(f).slice(0,512).includes(0)) console.warn('binary will be skipped: '+f);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["gitignore .DS_Store/target/logs","no binaries in dbt project","UTF-8 text only"],"tags":["cli","dbt","file-types"],"backgroundTag":"non-text-file-skipped","analyzedSha":"e474e8803ce2ff5c2df09a58dab51d45f5c922ca","analyzedAt":"2026-09-03T12:38:19.024Z","contentChangedAt":"2026-09-03T12:38:19.024Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}