windmill-labs/windmill · warning
Inline script at is still an !inline reference, skipping
Error message
Inline script at ${context.path.join(".")} is still an !inline reference, skipping What it means
traverseAndProcessInlineScripts visits inline script definitions in a raw app and its processor decides whether content needs lock-generation. If the content is still the literal `!inline <path>` string (the earlier replacement pass did not resolve it), the processor warns with the dotted path of the script, leaves the inlineScript untouched, and skips processing for that node.
Solutions
- Fix the !inline paths so files exist at the stated locations relative to the app root.
- Look for earlier 'Error reading inline path' warnings identifying exactly which files failed to load.
- Re-run generate-metadata from the correct directory once paths are valid.
- Manually paste the script content into the raw app definition if the inline workflow is not wanted.
Example fix
// before inlineScript.content: '!inline ./flow/Scritp.py' # path typo // after inlineScript.content: '!inline ./flow/Script.py' # then re-run generate-metadata
Defensive patterns
Strategy: validation
Validate before calling
// scan raw app definitions for leftover !inline refs before traversing
import { walk } from 'std/fs';
for await (const f of walk('./apps', { exts: ['.yaml', '.json'] })) {
if ((await Deno.readTextFile(f.path)).includes('!inline ')) {
console.error(`unresolved !inline in ${f.path}`);
}
} Type guard
null
Try / catch
if (typeof content === 'string' && content.startsWith('!inline ')) {
log.warn(`Inline script at ${context.path.join('.')} still !inline, skipping`);
return inlineScript;
} Prevention
- Ensure replaceInlineScripts ran successfully (no prior 'Error reading inline path' warnings).
- Keep !inline target paths correct and files committed to the repo.
- Run from the app root so relative paths resolve identically in replacement and traversal passes.
- Use CI file-existence checks for every `!inline` path in raw apps.
When it happens
Trigger: `wmill app generate-metadata` on a raw app whose inline scripts still contain `!inline` references after replaceInlineScripts ran: file missing/unreadable (readInlinePathSync warned), path outside traversal, or the reference was added between replacement and processing.
Common situations: Repo cloned without the referenced script files; case-mismatched paths failing on Linux CI; scripts nested in fields not traversed by the replacement pass; running generate-metadata from the wrong working directory.
Related errors
- Runnable content is still an !inline reference, skipping
- Cannot push flow : missing inline script file(s): . Either…
- Error reading inline path
- 0A000
- 26000
AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03).
Data as JSON: /api/errors/13f35468869524aa.
Report an issue: GitHub.
Appendix: source
Thrown at cli/src/commands/app/app_metadata.ts:649
rawDeps?: Record<string, string>,
defaultTs: "bun" | "deno" = "bun",
noStaleMessage?: boolean,
tempScriptRefs?: Record<string, string>
): Promise<{ value: any; updatedScripts: string[] }> {
const pathAssigner = newPathAssigner(defaultTs, { skipInlineScriptSuffix: getNonDottedPaths() });
const updatedScripts: string[] = [];
const processor: InlineScriptProcessor = async (inlineScript, context) => {
const language = inlineScript.language as SupportedLanguage;
const content = inlineScript.content;
if (!content || !language) {
return inlineScript;
}
// Skip if content is still an !inline reference (should have been replaced by replaceInlineScripts)
if (typeof content === "string" && content.startsWith("!inline ")) {
log.warn(
colors.yellow(
`Inline script at ${context.path.join(
"."
)} is still an !inline reference, skipping`
)
);
return inlineScript;
}
// Get the name from the parent object (following extractInlineScriptsForApps pattern)
// For normal apps, the name is stored in the component's "name" property
const scriptName = context.parentObject?.["name"] || "unnamed";
const scriptPath = `${remotePath}/${context.path.join("/")}`;
try {
let lock: string | undefined;
if (language !== "frontend") {
if (!noStaleMessage) {View on GitHub (pinned to e474e8803c)