-
Notifications
You must be signed in to change notification settings - Fork 11
Description
Mozno out of scope pre projekt (a mozno existuje aj ina moznost, o ktorej neviem), ale nebolo by na zvazenie spravit binary release pre cli?
Riesim paybysquare v php projekte, chcel by som sa vyhnut tomu aby som tam mal nejaky js runtime. Pozrel som ine riesenia priamo pre php, ale nie je to ziadne terno (vacsinou vyzaduju nejaku inu binarku napr. xz utils). Dalsi problem pre mna je, ze su pravdepodobne malo pouzivane a teda "neotestovane" (s tymto projektom mam skusenost na js projekte a uplne vyhovuje)
Cez bun by sa dali vytvorit standalone binarky (sice maju linknute nejake kniznice, ale tie su povacsine standard (aspon ked som si porovnal ine projekty)). Vid. https://bun.com/docs/bundler/executables Toto by mohlo otvorit cestu do inych ekosystemov.
V php svete mame napr. https://github.com/Kocal/BiomeJsBundle ktory sluzi len na stiahnutie binarky od biome (je to sice rust, ale ma podobne dynamicky linknute libs), nasledne viem tuto binarku volat z php ako subprocess. Pre bysquare by sa dalo urobit nieco podobne, stiahnutie binarky z releasov a vytvorit nejake php api na obsluhu. Samozrejme nie je to bullet proof, system potrebuje mat dostupne napr.
ldd dist/bysquare-bun-x64-linux
linux-vdso.so.1 (0x00007ff5d0703000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff5d0517000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff5d0705000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ff5d0512000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff5d050d000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ff5d042d000)
ale ked to porovnam s biome
> ldd biome-linux-x64
ldd: warning: you do not have execution permission for `./biome-linux-x64'
linux-vdso.so.1 (0x00007f15d8966000)
libgcc_s.so.1 => /nix/store/f6famnry0piih1d3hh6y73fxx05jxsa8-xgcc-14.3.0-libgcc/lib/libgcc_s.so.1 (0x00007f15d8930000)
libpthread.so.0 => /nix/store/8p33is69mjdw3bi1wmi8v2zpsxir8nwd-glibc-2.40-66/lib/libpthread.so.0 (0x00007f15d892b000)
libm.so.6 => /nix/store/8p33is69mjdw3bi1wmi8v2zpsxir8nwd-glibc-2.40-66/lib/libm.so.6 (0x00007f15d8843000)
libdl.so.2 => /nix/store/8p33is69mjdw3bi1wmi8v2zpsxir8nwd-glibc-2.40-66/lib/libdl.so.2 (0x00007f15d883e000)
libc.so.6 => /nix/store/8p33is69mjdw3bi1wmi8v2zpsxir8nwd-glibc-2.40-66/lib/libc.so.6 (0x00007f15d5a00000)
/lib64/ld-linux-x86-64.so.2 => /nix/store/8p33is69mjdw3bi1wmi8v2zpsxir8nwd-glibc-2.40-66/lib64/ld-linux-x86-64.so.2 (0x00007f15d8968000)
alebo tailwind cli (vyuzivam aj na produckii na build assetov, existuje podobny bundle ako pre biome (ten spusta subprocess v php))
> ldd tailwindcss-linux-x64
ldd: warning: you do not have execution permission for `./tailwindcss-linux-x64'
linux-vdso.so.1 (0x00007f1201a87000)
libc.so.6 => /nix/store/8p33is69mjdw3bi1wmi8v2zpsxir8nwd-glibc-2.40-66/lib/libc.so.6 (0x00007f1201800000)
/lib64/ld-linux-x86-64.so.2 => /nix/store/8p33is69mjdw3bi1wmi8v2zpsxir8nwd-glibc-2.40-66/lib64/ld-linux-x86-64.so.2 (0x00007f1201a89000)
libpthread.so.0 => /nix/store/8p33is69mjdw3bi1wmi8v2zpsxir8nwd-glibc-2.40-66/lib/libpthread.so.0 (0x00007f1201a7a000)
libdl.so.2 => /nix/store/8p33is69mjdw3bi1wmi8v2zpsxir8nwd-glibc-2.40-66/lib/libdl.so.2 (0x00007f1201a75000)
libm.so.6 => /nix/store/8p33is69mjdw3bi1wmi8v2zpsxir8nwd-glibc-2.40-66/lib/libm.so.6 (0x00007f1201718000)
tak sme viacmenej na tom istom a viem si v pohode predstavit aj vyuzitie v produkcnom prostredi v php projekte, resp. kdekolvek (bez js runtime, stacia tieto libs)
Taky mensi PoC
#!/usr/bin/env bash
# init.sh
set -e
mkdir -p bysquare-bin
cd bysquare-bin
bun add bysquare
targets=(
"bun-darwin-arm64"
"bun-darwin-x64"
"bun-linux-arm64"
"bun-linux-arm64-musl"
"bun-linux-x64"
"bun-linux-x64-musl"
# "bun-windows-arm64" # not supported
"bun-windows-x64"
"bun-windows-x64-baseline"
"bun-windows-x64-modern"
"bun-x64-linux"
"bun-x64-linux-arm64"
"bun-x64-linux-baseline"
"bun-x64-linux-modern"
)
for target in "${targets[@]}"; do
output="dist/bysquare-${target}"
[[ $target == *windows ]] && output="${output}.exe"
echo -e "\nbuilding target $target"
bun build \
--compile --minify --sourcemap --bytecode \
--target "$target" node_modules/bysquare/lib/cli.js --outfile "$output"
echo "ldd $output"
ldd "$output" 2>/dev/null || echo "$output: not a dynamic executable, skipped"
donedocker run --rm -it \
-v "$PWD":/app \
-w /app \
oven/bun \
bash -c "chmod +x ./init.sh && ./init.sh"Vyslednu binarku viem spustit v inom containeri, v ktorom nie je ani bun, ani ziadny js runtime. Samozrejme toto vsetko si viem spravit "per project", ale mozno to pomoze aj niekomu inemu.