()
| 19 | import { generate } from "./orchestrator"; |
| 20 | |
| 21 | export async function runSetup(): Promise<void> { |
| 22 | process.stderr.write("make-pdf setup — verifying install\n\n"); |
| 23 | |
| 24 | // 1. Resolve browse binary |
| 25 | process.stderr.write(" [1/5] Checking browse binary..."); |
| 26 | try { |
| 27 | const bin = browseClient.resolveBrowseBin(); |
| 28 | process.stderr.write(` OK (${bin})\n`); |
| 29 | } catch (err: any) { |
| 30 | process.stderr.write(" FAIL\n"); |
| 31 | process.stderr.write(`\n${err.message}\n`); |
| 32 | process.exit(4); |
| 33 | } |
| 34 | |
| 35 | // 2. Chromium smoke (navigate a dedicated tab to about:blank) |
| 36 | process.stderr.write(" [2/5] Launching Chromium..."); |
| 37 | let chromiumTab: number | null = null; |
| 38 | try { |
| 39 | chromiumTab = browseClient.newtab("about:blank"); |
| 40 | process.stderr.write(` OK (tab ${chromiumTab})\n`); |
| 41 | } catch (err: any) { |
| 42 | process.stderr.write(" FAIL\n"); |
| 43 | process.stderr.write(`\nChromium failed to launch: ${err.message}\n`); |
| 44 | process.stderr.write("\nTo fix: run gstack setup from the gstack repo:\n"); |
| 45 | process.stderr.write(" cd ~/.claude/skills/gstack && ./setup\n"); |
| 46 | process.exit(4); |
| 47 | } finally { |
| 48 | if (chromiumTab !== null) { |
| 49 | try { browseClient.closetab(chromiumTab); } catch { /* ignore */ } |
| 50 | } |
| 51 | } |
| 52 | |
| 53 | // 3. pdftotext (optional — CI gate only) |
| 54 | process.stderr.write(" [3/5] Checking pdftotext (optional)..."); |
| 55 | try { |
| 56 | const info = resolvePdftotext(); |
| 57 | process.stderr.write(` OK (${info.flavor}, ${info.version.split(" ").slice(-1)[0] || "version unknown"})\n`); |
| 58 | } catch (err) { |
| 59 | process.stderr.write(" SKIP\n"); |
| 60 | if (err instanceof PdftotextUnavailableError) { |
| 61 | process.stderr.write( |
| 62 | " pdftotext not installed. This is optional — only the CI\n" + |
| 63 | " copy-paste gate needs it. To enable:\n" + |
| 64 | " macOS: brew install poppler\n" + |
| 65 | " Ubuntu: sudo apt-get install poppler-utils\n", |
| 66 | ); |
| 67 | } |
| 68 | } |
| 69 | |
| 70 | // 4. Render smoke-test PDF |
| 71 | process.stderr.write(" [4/5] Generating smoke-test PDF...\n"); |
| 72 | const fixture = [ |
| 73 | "# Hello from make-pdf", |
| 74 | "", |
| 75 | "This is a two-paragraph smoke test. If you can read this sentence in the PDF that just opened, the pipeline works end-to-end.", |
| 76 | "", |
| 77 | "The second paragraph contains curly quotes (\"hello\"), an em dash -- like this, and an ellipsis... all of which should render correctly.", |
| 78 | "", |
no test coverage detected