🍴 Meu Garfo é uma visualização em grafo dos CNPJs cuducos.tngl.io/meu-garfo
1

Configure Feed

Select the types of activity you want to include in your feed.

at main 2.6 kB View raw
1const { execSync } = require("node:child_process"); 2const { mkdtempSync, rmSync, cpSync, readdirSync } = require("node:fs"); 3const { tmpdir } = require("node:os"); 4const { join } = require("node:path"); 5 6const SITE_BRANCH = process.env.SITE_BRANCH || "site"; 7 8const run = (cmd, opts = {}) => execSync(cmd, { stdio: "inherit", ...opts }); 9 10const capture = (cmd, opts = {}) => 11 execSync(cmd, { stdio: ["ignore", "pipe", "inherit"], ...opts }) 12 .toString() 13 .trim(); 14 15if (capture("git status --porcelain")) { 16 console.error("Working tree has uncommitted changes. Commit or stash first."); 17 process.exit(1); 18} 19 20let REMOTE; 21try { 22 const upstream = capture("git rev-parse --abbrev-ref @{upstream}"); 23 REMOTE = upstream.split("/")[0]; 24} catch { 25 console.error( 26 "Current branch has no upstream. Set one with `git push -u <remote> <branch>` first.", 27 ); 28 process.exit(1); 29} 30 31run("npm run build"); 32 33const workdir = mkdtempSync(join(tmpdir(), "meu-garfo-deploy-")); 34let worktreeAdded = false; 35 36try { 37 const remoteHas = 38 capture(`git ls-remote --heads ${REMOTE} ${SITE_BRANCH}`) !== ""; 39 40 if (remoteHas) { 41 run(`git fetch ${REMOTE} ${SITE_BRANCH}`); 42 run(`git worktree add --force ${workdir} ${REMOTE}/${SITE_BRANCH}`); 43 run(`git -C ${workdir} checkout -B ${SITE_BRANCH}`); 44 } else { 45 run(`git worktree add --force --orphan -B ${SITE_BRANCH} ${workdir}`); 46 } 47 worktreeAdded = true; 48 49 for (const entry of readdirSync(workdir)) { 50 if (entry === ".git") continue; 51 rmSync(join(workdir, entry), { recursive: true, force: true }); 52 } 53 54 for (const entry of readdirSync("dist")) { 55 cpSync(join("dist", entry), join(workdir, entry), { recursive: true }); 56 } 57 58 run(`git -C ${workdir} add -A`); 59 const hasChanges = capture(`git -C ${workdir} status --porcelain`) !== ""; 60 const sourceSha = capture("git rev-parse --short HEAD"); 61 62 if (!hasChanges && remoteHas) { 63 console.log( 64 `No changes to deploy on ${SITE_BRANCH} (source at ${sourceSha}).`, 65 ); 66 } else { 67 run(`git -C ${workdir} commit -m "Deploy ${sourceSha}" --allow-empty`, { 68 env: { 69 ...process.env, 70 GIT_COMMITTER_NAME: process.env.GIT_COMMITTER_NAME || "deploy", 71 GIT_COMMITTER_EMAIL: process.env.GIT_COMMITTER_EMAIL || "deploy@local", 72 }, 73 }); 74 run(`git -C ${workdir} push ${REMOTE} ${SITE_BRANCH}`); 75 } 76} finally { 77 if (worktreeAdded) { 78 try { 79 run(`git worktree remove --force ${workdir}`); 80 } catch { 81 rmSync(workdir, { recursive: true, force: true }); 82 } 83 } else { 84 rmSync(workdir, { recursive: true, force: true }); 85 } 86}