From dc8c3114d90bb4e3315345e3d1785582da8f88e9 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Wed, 5 Mar 2025 09:17:03 +0100 Subject: [PATCH] nit improvements for CLI --- cli/script.ts | 105 +++++++++++++++++++++++++++++++------------------- cli/sync.ts | 69 ++++++++++++++++++--------------- 2 files changed, 104 insertions(+), 70 deletions(-) diff --git a/cli/script.ts b/cli/script.ts index 37ae635380..2d6295b50f 100644 --- a/cli/script.ts +++ b/cli/script.ts @@ -119,7 +119,7 @@ export async function findResourceFile(path: string) { if (validCandidates.length > 1) { throw new Error( "Found two resource files for the same resource" + - validCandidates.join(", ") + validCandidates.join(", ") ); } if (validCandidates.length < 1) { @@ -214,7 +214,9 @@ export async function handleFile( const endTime = performance.now(); bundleContent = out.outputFiles[0].text; log.info( - `Finished bundling ${path}: ${(bundleContent.length / 1024).toFixed(0)}kB (${(endTime - startTime).toFixed(0)}ms)` + `Finished bundling ${path}: ${(bundleContent.length / 1024).toFixed( + 0 + )}kB (${(endTime - startTime).toFixed(0)}ms)` ); } if (Array.isArray(codebase.assets) && codebase.assets.length > 0) { @@ -236,25 +238,30 @@ export async function handleFile( tarball.append(file); } const endTime = performance.now(); - log.info(`Finished creating tarball for ${path}: ${(tarball.size / 1024).toFixed(0)}kB (${(endTime - startTime).toFixed(0)}ms)`); + log.info( + `Finished creating tarball for ${path}: ${( + tarball.size / 1024 + ).toFixed(0)}kB (${(endTime - startTime).toFixed(0)}ms)` + ); bundleContent = tarball; } } - let typed = - opts?.skipScriptsMetadata ? undefined : - (await parseMetadataFile( - remotePath, - opts - ? { - ...opts, - path, - workspaceRemote: workspace, - schemaOnly: codebase ? true : undefined, - } - : undefined, - globalDeps, - codebases - ) + let typed = opts?.skipScriptsMetadata + ? undefined + : ( + await parseMetadataFile( + remotePath, + opts + ? { + ...opts, + path, + workspaceRemote: workspace, + schemaOnly: codebase ? true : undefined, + } + : undefined, + globalDeps, + codebases + ) )?.payload; const workspaceId = workspace.workspaceId; @@ -341,19 +348,19 @@ export async function handleFile( deepEqual(typed.schema, remote.schema) && typed.tag == remote.tag && (typed.ws_error_handler_muted ?? false) == - remote.ws_error_handler_muted && + remote.ws_error_handler_muted && typed.dedicated_worker == remote.dedicated_worker && typed.cache_ttl == remote.cache_ttl && typed.concurrency_time_window_s == - remote.concurrency_time_window_s && + remote.concurrency_time_window_s && typed.concurrent_limit == remote.concurrent_limit && Boolean(typed.restart_unless_cancelled) == - Boolean(remote.restart_unless_cancelled) && + Boolean(remote.restart_unless_cancelled) && Boolean(typed.visible_to_runner_only) == - Boolean(remote.visible_to_runner_only) && + Boolean(remote.visible_to_runner_only) && Boolean(typed.no_main_func) == Boolean(remote.no_main_func) && Boolean(typed.has_preprocessor) == - Boolean(remote.has_preprocessor) && + Boolean(remote.has_preprocessor) && typed.priority == Boolean(remote.priority) && typed.timeout == remote.timeout && //@ts-ignore @@ -366,23 +373,39 @@ export async function handleFile( } } - log.info(`Updating script ${remotePath} ...`); const body = { ...requestBodyCommon, parent_hash: remote.hash, }; - const execTime = await createScript(bundleContent, workspaceId, body, workspace); - log.info(colors.yellow.bold(`Updated script ${remotePath} (${execTime.toFixed(0)}ms)`)); + const execTime = await createScript( + bundleContent, + workspaceId, + body, + workspace + ); + log.info( + colors.yellow.bold( + `Updated script ${remotePath} (${execTime.toFixed(0)}ms)` + ) + ); } else { log.info(`Creating new script ${remotePath} ...`); const body = { ...requestBodyCommon, parent_hash: undefined, }; - const execTime = await createScript(bundleContent, workspaceId, body, workspace); - log.info(colors.yellow.bold(`Created new script ${remotePath} (${execTime.toFixed(0)}ms)`)); - + const execTime = await createScript( + bundleContent, + workspaceId, + body, + workspace + ); + log.info( + colors.yellow.bold( + `Created new script ${remotePath} (${execTime.toFixed(0)}ms)` + ) + ); } return true; } @@ -428,7 +451,8 @@ async function createScript( }); } catch (e: any) { throw Error( - `Script creation for ${body.path} with parent ${body.parent_hash + `Script creation for ${body.path} with parent ${ + body.parent_hash } was not successful: ${e.body ?? e.message} ` ); } @@ -454,7 +478,8 @@ async function createScript( }); if (req.status != 201) { throw Error( - `Script snapshot creation was not successful: ${req.status} - ${req.statusText + `Script snapshot creation was not successful: ${req.status} - ${ + req.statusText } - ${await req.text()} ` ); } @@ -466,8 +491,8 @@ export async function findContentFile(filePath: string) { const candidates = filePath.endsWith("script.json") ? exts.map((x) => filePath.replace(".script.json", x)) : filePath.endsWith("script.lock") - ? exts.map((x) => filePath.replace(".script.lock", x)) - : exts.map((x) => filePath.replace(".script.yaml", x)); + ? exts.map((x) => filePath.replace(".script.lock", x)) + : exts.map((x) => filePath.replace(".script.yaml", x)); const validCandidates = ( await Promise.all( @@ -486,7 +511,7 @@ export async function findContentFile(filePath: string) { if (validCandidates.length > 1) { throw new Error( "No content path given and more than one candidate found: " + - validCandidates.join(", ") + validCandidates.join(", ") ); } if (validCandidates.length < 1) { @@ -841,13 +866,13 @@ export async function findGlobalDeps(): Promise { const composers: { [key: string]: string } = {}; const els = await FSFSElement(Deno.cwd(), []); for await (const entry of readDirRecursiveWithIgnore((p, isDir) => { - p = "/" + p; + p = SEP + p; return ( !isDir && !( - p.endsWith("/package.json") || - p.endsWith("requirements.txt") || - p.endsWith("composer.json") + p.endsWith(SEP + "package.json") || + p.endsWith(SEP + "requirements.txt") || + p.endsWith(SEP + "composer.json") ) ); }, els)) { @@ -871,7 +896,9 @@ async function generateMetadata( } & SyncOptions, scriptPath: string | undefined ) { - log.info("This command only works for workspace scripts, for flows inline scripts use `wmill flow generate - locks`"); + log.info( + "This command only works for workspace scripts, for flows inline scripts use `wmill flow generate - locks`" + ); if (scriptPath == "") { scriptPath = undefined; } diff --git a/cli/sync.ts b/cli/sync.ts index 72d12d9480..55f5852960 100644 --- a/cli/sync.ts +++ b/cli/sync.ts @@ -356,12 +356,12 @@ function ZipFSElement( ) ? "flow" : p.endsWith("app.json") - ? "app" - : p.endsWith("script.json") - ? "script" - : p.endsWith("resource.json") - ? "resource" - : "other"; + ? "app" + : p.endsWith("script.json") + ? "script" + : p.endsWith("resource.json") + ? "resource" + : "other"; const isJson = p.endsWith(".json"); @@ -391,7 +391,7 @@ function ZipFSElement( yield { isDirectory: false, path: path.join(finalPath, s.path), - async *getChildren() { }, + async *getChildren() {}, // deno-lint-ignore require-await async getContentText() { return s.content; @@ -402,7 +402,7 @@ function ZipFSElement( yield { isDirectory: false, path: path.join(finalPath, "flow.yaml"), - async *getChildren() { }, + async *getChildren() {}, // deno-lint-ignore require-await async getContentText() { return yamlStringify(flow, yamlOptions); @@ -418,7 +418,7 @@ function ZipFSElement( yield { isDirectory: false, path: path.join(finalPath, s.path), - async *getChildren() { }, + async *getChildren() {}, // deno-lint-ignore require-await async getContentText() { return s.content; @@ -429,7 +429,7 @@ function ZipFSElement( yield { isDirectory: false, path: path.join(finalPath, "app.yaml"), - async *getChildren() { }, + async *getChildren() {}, // deno-lint-ignore require-await async getContentText() { return yamlStringify(app, yamlOptions); @@ -494,7 +494,7 @@ function ZipFSElement( r.push({ isDirectory: false, path: removeSuffix(finalPath, ".json") + ".lock", - async *getChildren() { }, + async *getChildren() {}, // deno-lint-ignore require-await async getContentText() { return lock; @@ -517,7 +517,7 @@ function ZipFSElement( removeSuffix(finalPath, ".resource.json") + ".resource.file." + formatExtension, - async *getChildren() { }, + async *getChildren() {}, // deno-lint-ignore require-await async getContentText() { return fileContent; @@ -578,24 +578,27 @@ export async function* readDirRecursiveWithIgnore( // getContentBytes(): Promise; getContentText(): Promise; }[] = [ - { - path: root.path, - ignored: ignore(root.path, root.isDirectory), - isDirectory: root.isDirectory, - c: root.getChildren, - // getContentBytes(): Promise { - // throw undefined; - // }, - getContentText(): Promise { - throw undefined; - }, + { + path: root.path, + ignored: ignore(root.path, root.isDirectory), + isDirectory: root.isDirectory, + c: root.getChildren, + // getContentBytes(): Promise { + // throw undefined; + // }, + getContentText(): Promise { + throw undefined; }, - ]; + }, + ]; while (stack.length > 0) { const e = stack.pop()!; yield e; for await (const e2 of e.c()) { + if (e2.path.startsWith(".git" + SEP)) { + continue; + } stack.push({ path: e2.path, ignored: e.ignored || ignore(e2.path, e2.isDirectory), @@ -722,9 +725,9 @@ async function compareDynFSElement( ): Promise { const [m1, m2] = els2 ? await Promise.all([ - elementsToMap(els1, ignore, json, skips), - elementsToMap(els2, ignore, json, skips), - ]) + elementsToMap(els1, ignore, json, skips), + elementsToMap(els2, ignore, json, skips), + ]) : [await elementsToMap(els1, ignore, json, skips), {}]; const changes: Change[] = []; @@ -1275,8 +1278,8 @@ function prettyChanges(changes: Change[]) { log.info( colors.yellow( `~ ${getTypeStrFromPath(change.path)} ` + - change.path + - (change.codebase ? ` (codebase changed)` : "") + change.path + + (change.codebase ? ` (codebase changed)` : "") ) ); if (change.before != change.after) { @@ -1378,6 +1381,8 @@ export async function push(opts: GlobalOptions & SyncOptions) { const globalDeps = await findGlobalDeps(); + console.log("globalDeps", globalDeps); + const tracker: ChangeTracker = await buildTracker(changes); const staleScripts: string[] = []; @@ -1481,7 +1486,8 @@ export async function push(opts: GlobalOptions & SyncOptions) { } const groupedChangesArray = Array.from(groupedChanges.entries()); log.info( - `found changes for ${groupedChangesArray.length + `found changes for ${ + groupedChangesArray.length } items with a total of ${groupedChangesArray.reduce( (acc, [_, changes]) => acc + changes.length, 0 @@ -1794,7 +1800,8 @@ export async function push(opts: GlobalOptions & SyncOptions) { } log.info( colors.bold.green.underline( - `\nDone! All ${changes.length} changes pushed to the remote workspace ${workspace.workspaceId + `\nDone! All ${changes.length} changes pushed to the remote workspace ${ + workspace.workspaceId } named ${workspace.name} (${(performance.now() - start).toFixed(0)}ms)` ) );