(base: string)
| 34 | ) + "\n"; |
| 35 | |
| 36 | const idempotency = (base: string): { stdout: string; code: number } => { |
| 37 | const script = ` |
| 38 | cd "${dir}" || exit 2 |
| 39 | BASE_VERSION="${base}" |
| 40 | CURRENT_VERSION=$(cat VERSION 2>/dev/null | tr -d '\\r\\n[:space:]' || echo "0.0.0.0") |
| 41 | [ -z "$CURRENT_VERSION" ] && CURRENT_VERSION="0.0.0.0" |
| 42 | PKG_VERSION="" |
| 43 | PKG_EXISTS=0 |
| 44 | if [ -f package.json ]; then |
| 45 | PKG_EXISTS=1 |
| 46 | if command -v node >/dev/null 2>&1; then |
| 47 | PKG_VERSION=$(node -e 'const p=require("./package.json");process.stdout.write(p.version||"")' 2>/dev/null) |
| 48 | PARSE_EXIT=$? |
| 49 | elif command -v bun >/dev/null 2>&1; then |
| 50 | PKG_VERSION=$(bun -e 'const p=require("./package.json");process.stdout.write(p.version||"")' 2>/dev/null) |
| 51 | PARSE_EXIT=$? |
| 52 | else |
| 53 | echo "ERROR: no parser"; exit 1 |
| 54 | fi |
| 55 | if [ "$PARSE_EXIT" != "0" ]; then |
| 56 | echo "ERROR: invalid JSON"; exit 1 |
| 57 | fi |
| 58 | fi |
| 59 | if [ "$CURRENT_VERSION" = "$BASE_VERSION" ]; then |
| 60 | if [ "$PKG_EXISTS" = "1" ] && [ -n "$PKG_VERSION" ] && [ "$PKG_VERSION" != "$CURRENT_VERSION" ]; then |
| 61 | echo "STATE: DRIFT_UNEXPECTED"; exit 1 |
| 62 | fi |
| 63 | echo "STATE: FRESH" |
| 64 | else |
| 65 | if [ "$PKG_EXISTS" = "1" ] && [ -n "$PKG_VERSION" ] && [ "$PKG_VERSION" != "$CURRENT_VERSION" ]; then |
| 66 | echo "STATE: DRIFT_STALE_PKG" |
| 67 | else |
| 68 | echo "STATE: ALREADY_BUMPED" |
| 69 | fi |
| 70 | fi`; |
| 71 | try { |
| 72 | const stdout = execSync(script, { shell: "/bin/bash", encoding: "utf8" }); |
| 73 | return { stdout: stdout.trim(), code: 0 }; |
| 74 | } catch (e: any) { |
| 75 | return { stdout: (e.stdout || "").toString().trim(), code: e.status ?? 1 }; |
| 76 | } |
| 77 | }; |
| 78 | |
| 79 | const bump = (newVer: string): { code: number } => { |
| 80 | const script = ` |
no outgoing calls
no test coverage detected