Skip to content

Commit ff6b2e6

Browse files
authored
fix(app): make npm cli bin executable via shebang (#91)
1 parent a673a0f commit ff6b2e6

File tree

2 files changed

+29
-7
lines changed

2 files changed

+29
-7
lines changed

packages/app/src/docker-git/main.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#!/usr/bin/env node
2+
13
import { NodeContext, NodeRuntime } from "@effect/platform-node"
24
import { Effect } from "effect"
35

scripts/e2e/local-package-cli.sh

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ ROOT="$(mktemp -d "$ROOT_BASE/local-package-cli.XXXXXX")"
1010
KEEP="${KEEP:-0}"
1111

1212
PACK_LOG="$ROOT/npm-pack.log"
13-
HELP_LOG="$ROOT/docker-git-help.log"
13+
HELP_LOG_PNPM="$ROOT/docker-git-help-pnpm.log"
14+
HELP_LOG_NPM="$ROOT/docker-git-help-npm.log"
1415
TAR_LIST="$ROOT/tar-list.txt"
1516
PACKED_TARBALL=""
1617

@@ -26,9 +27,13 @@ on_error() {
2627
echo "--- npm pack log ---" >&2
2728
cat "$PACK_LOG" >&2 || true
2829
fi
29-
if [[ -f "$HELP_LOG" ]]; then
30-
echo "--- docker-git --help log ---" >&2
31-
cat "$HELP_LOG" >&2 || true
30+
if [[ -f "$HELP_LOG_PNPM" ]]; then
31+
echo "--- pnpm docker-git --help log ---" >&2
32+
cat "$HELP_LOG_PNPM" >&2 || true
33+
fi
34+
if [[ -f "$HELP_LOG_NPM" ]]; then
35+
echo "--- npm exec docker-git --help log ---" >&2
36+
cat "$HELP_LOG_NPM" >&2 || true
3237
fi
3338
}
3439

@@ -68,16 +73,31 @@ done <"$TAR_LIST"
6873
grep -Fxq "package/dist/src/docker-git/main.js" "$TAR_LIST" \
6974
|| fail "packed tarball does not include dist/src/docker-git/main.js"
7075

76+
main_entry_tmp="$ROOT/main-entry.js"
77+
tar -xOf "$PACKED_TARBALL" package/dist/src/docker-git/main.js >"$main_entry_tmp"
78+
main_first_line="$(head -n 1 "$main_entry_tmp" | tr -d '\r')"
79+
[[ "$main_first_line" == "#!/usr/bin/env node" ]] \
80+
|| fail "packed CLI entrypoint missing shebang: expected '#!/usr/bin/env node', got '$main_first_line'"
81+
7182
dep_keys="$(tar -xOf "$PACKED_TARBALL" package/package.json | node -e 'let s="";process.stdin.on("data",(c)=>{s+=c});process.stdin.on("end",()=>{const pkg=JSON.parse(s);const deps=Object.keys(pkg.dependencies ?? {});if (deps.includes("@effect-template/lib")) {console.error("@effect-template/lib must not be a runtime dependency in packed package");process.exit(1)}process.stdout.write(deps.join(","));});')"
7283
[[ "$dep_keys" == *"effect"* ]] || fail "packed dependency set looks invalid: $dep_keys"
7384

7485
mkdir -p "$ROOT/project"
7586
cd "$ROOT/project"
7687
npm init -y >/dev/null
7788
pnpm add "$PACKED_TARBALL" --silent --lockfile=false
78-
pnpm docker-git --help >"$HELP_LOG" 2>&1
89+
pnpm docker-git --help >"$HELP_LOG_PNPM" 2>&1
7990

80-
grep -Fq -- "docker-git clone <url> [options]" "$HELP_LOG" \
91+
grep -Fq -- "docker-git clone <url> [options]" "$HELP_LOG_PNPM" \
8192
|| fail "expected docker-git help output from local packed package"
8293

83-
echo "e2e/local-package-cli: local tarball install + pnpm docker-git --help OK" >&2
94+
mkdir -p "$ROOT/project-npm"
95+
cd "$ROOT/project-npm"
96+
npm init -y >/dev/null
97+
npm install "$PACKED_TARBALL" --silent --no-audit --fund=false
98+
npm exec -- docker-git --help >"$HELP_LOG_NPM" 2>&1
99+
100+
grep -Fq -- "docker-git clone <url> [options]" "$HELP_LOG_NPM" \
101+
|| fail "expected docker-git help output via npm exec from local packed package"
102+
103+
echo "e2e/local-package-cli: local tarball install + pnpm/npm CLI execution OK" >&2

0 commit comments

Comments
 (0)