From 3125b770209e8b56a7a0c0325c338c8de16d414e Mon Sep 17 00:00:00 2001 From: Juergen Kunz Date: Fri, 9 Jan 2026 18:51:22 +0000 Subject: [PATCH] update --- ecoos_daemon/ts/daemon/index.ts | 1 + ecoos_daemon/ts/daemon/process-manager.ts | 57 ++++++++++++++- ecoos_daemon/ts/version.ts | 2 +- .../includes.chroot/opt/eco/bin/eco-daemon | Bin 86997889 -> 87002180 bytes isotest/run-test.sh | 6 +- isotest/screenshot.sh | 68 ++++++++++++------ package.json | 2 +- 7 files changed, 106 insertions(+), 30 deletions(-) diff --git a/ecoos_daemon/ts/daemon/index.ts b/ecoos_daemon/ts/daemon/index.ts index 93e0498..dc4e337 100644 --- a/ecoos_daemon/ts/daemon/index.ts +++ b/ecoos_daemon/ts/daemon/index.ts @@ -149,6 +149,7 @@ export class EcoDaemon { async getDisplays(): Promise { if (this.swayStatus.state !== 'running') { + this.log(`[displays] Sway not running (state: ${this.swayStatus.state}), skipping display query`); return []; } const uid = await this.getUserUid(); diff --git a/ecoos_daemon/ts/daemon/process-manager.ts b/ecoos_daemon/ts/daemon/process-manager.ts index 729d71c..a7d3b1a 100644 --- a/ecoos_daemon/ts/daemon/process-manager.ts +++ b/ecoos_daemon/ts/daemon/process-manager.ts @@ -28,11 +28,39 @@ export class ProcessManager { private user: string; private swayProcess: Deno.ChildProcess | null = null; private browserProcess: Deno.ChildProcess | null = null; + private swaySocket: string | null = null; constructor(user: string) { this.user = user; } + /** + * Find the Sway IPC socket path in the runtime directory + * Sway creates sockets like: sway-ipc.$UID.$PID.sock + */ + async findSwaySocket(runtimeDir: string): Promise { + try { + for await (const entry of Deno.readDir(runtimeDir)) { + if (entry.name.startsWith('sway-ipc.') && entry.name.endsWith('.sock')) { + const socketPath = `${runtimeDir}/${entry.name}`; + console.log(`[sway] Found IPC socket: ${socketPath}`); + return socketPath; + } + } + } catch (error) { + console.error(`[sway] Error finding socket: ${error}`); + } + return null; + } + + getSwaySocket(): string | null { + return this.swaySocket; + } + + setSwaySocket(socket: string | null): void { + this.swaySocket = socket; + } + /** * Generate Sway configuration content for kiosk mode */ @@ -146,9 +174,19 @@ for_window [app_id="chromium-browser"] fullscreen enable * Run a swaymsg command to control Sway */ async swaymsg(config: { runtimeDir: string; waylandDisplay: string }, command: string): Promise { + // Find socket if not already found + if (!this.swaySocket) { + this.swaySocket = await this.findSwaySocket(config.runtimeDir); + } + + if (!this.swaySocket) { + console.error('[swaymsg] No Sway IPC socket found'); + return false; + } + const env: Record = { XDG_RUNTIME_DIR: config.runtimeDir, - WAYLAND_DISPLAY: config.waylandDisplay, + SWAYSOCK: this.swaySocket, }; const envString = Object.entries(env) @@ -292,6 +330,7 @@ for_window [app_id="chromium-browser"] fullscreen enable // Process may already be dead } this.swayProcess = null; + this.swaySocket = null; // Reset socket so we find new one on restart } } @@ -311,9 +350,19 @@ for_window [app_id="chromium-browser"] fullscreen enable * Get connected displays via swaymsg */ async getDisplays(config: { runtimeDir: string; waylandDisplay: string }): Promise { + // Find socket if not already found + if (!this.swaySocket) { + this.swaySocket = await this.findSwaySocket(config.runtimeDir); + } + + if (!this.swaySocket) { + console.error('[displays] No Sway IPC socket found'); + return []; + } + const env: Record = { XDG_RUNTIME_DIR: config.runtimeDir, - WAYLAND_DISPLAY: config.waylandDisplay, + SWAYSOCK: this.swaySocket, }; const envString = Object.entries(env) @@ -329,7 +378,8 @@ for_window [app_id="chromium-browser"] fullscreen enable try { const result = await cmd.output(); if (!result.success) { - console.error('[displays] Failed to get outputs'); + const stderr = new TextDecoder().decode(result.stderr); + console.error(`[displays] Failed to get outputs: ${stderr}`); return []; } @@ -427,6 +477,7 @@ for_window [app_id="chromium-browser"] fullscreen enable console.log(`[${name}] Process exited with code ${status.code}`); if (name === 'sway' && this.swayProcess === process) { this.swayProcess = null; + this.swaySocket = null; // Reset socket so we find new one on restart } else if (name === 'chromium' && this.browserProcess === process) { this.browserProcess = null; } diff --git a/ecoos_daemon/ts/version.ts b/ecoos_daemon/ts/version.ts index 0b28a75..2391cca 100644 --- a/ecoos_daemon/ts/version.ts +++ b/ecoos_daemon/ts/version.ts @@ -1 +1 @@ -export const VERSION = "0.3.9"; +export const VERSION = "0.4.2"; diff --git a/isobuild/config/includes.chroot/opt/eco/bin/eco-daemon b/isobuild/config/includes.chroot/opt/eco/bin/eco-daemon index 64d4bd1d215f5b49aea3547e2ae0b658585faa2f..dba7ed29b745bd1dcf2c5fd5b59e58d08a5255ec 100755 GIT binary patch delta 7970 zcmd^?2Xs|cv&Ws;a}cQ_O{y29MeYshh1hNqnuvga2#OL&fCwaz1TY|qx>eMly*G}% z_k!JE7qR!Q*n98woqL1z`L*}?t@qY?SvO~$duGqfe|~%KIs5Ma)vXzKoqSuy3NK#0 z^X3EJ!f)(b`b~T*-`cnFZGAi6-f!wV_|1Gr-^q9OU3^!+x$ow?`yRfh@8x^@Equ)P z@qPW4zMt>!2l#=0kk9a2`N2N!6F$=q@mW6G=lEQo=ktAmFZ4ye*bnt3ervyt-_~#E zxA#e3>dSn&ALfVq5q_i}<#+I-{f>T&-^q{l`su#H&+s#SrLXd{{A@qRSNpyETtCmx_cgxOFYpU}ov-%|evx17m-xMXqhIQm z`F;FyzpvlVukic(1N?#B`-A+!{t&;?AL#y^x{q_C^f1|(2-|TPkxBA^jdH;fc(ZA$h_OJN${#E~)f8D>~-}GBtp-?0g3qyqxVQXOC_g`y~2IM zTH$_So$!G0pzx6Ju<(fRsPLHZxbTGVr0|sRwD64Ztni%hyzqkXqVSUNvha$qUU*e_ zO?X{+LwHkoOL$v&M|f9wPk3MWK=@GjNcdRzMEF$rO!!>*LikenO88p%M)+3vPWWE< zLHJSlNmeSNsNxh;0;PqrvC>l6L}{h8R@x|Sm3B&dWmBbtvYFCR>7;a4x+q8}h>1}cM;3}q{2uo71iN~SVI$x^bF93@xDQ}UGp zrBEqSij|>CiL$k_jk2w>owB`>R7#aHrCb@N3|B@dBb8Cg4$5d{M`et%lQLErr;Jy2 zRwgJDl}XAj%4B6%Wr{LY*-hD9nWpTa?5RvwDwG+@Or=t(Qf4W$l{reavX?SfnWxNG zYLr@KfwEAkQ|grlWs$O2S)%N%G%8D#Wy(Iva%Ep-KV^lozjAB1+ ze5QP^e4%`)e5HJ?e4~7;e5ZV`{Gj}({G=-#;!uZkm?LnsaBS>o>Da{4%F)`<#?jW% z&e7hnsiT8qGe<{9Cr4*T7e`me=8kTT?v5Ugo{nCQ-i|FCF-IRqU&oe?evbZ*0gi!= zL5>W^R*u1rxFg}nbPRE1IkFu&j$B8cBi~WrD0CD#iXB58C628f+c>s$Z0FeCk#v+g z${gj6VUFRB5ss0LQH~uPqa8as#yECzjCG82jCbtpnBbV`nB>^SG1;-JV~S&{V>id{ zj%kiP9D6#ZJ1QJA95Wr2jw;72$85(ON3~-w$6Uue$9zYPqt>y&vCvWHsCP6t7C9C> zmN@oyG&+_#mO1uuEO+ed*w3-TvA^R0$AJ#-ILL9Z;}FM6$DxkH9EUq_9N{?9ag^g| z$1#p$9mhG2cbwoj(Q%UFWXCCvQyr%{PIsK)Smg*EXFASuob5QrajxS$$N7#692Yt+ za$M}V#Br(PGRNhPD;!rku5w)MxW;j<<2uJ`$MudI95*^{a@_2=#c`|SHb;|VjpKI5 z9gaI4cRB8M+~c^{ai3$Y<9^3F#{-TB9S=Dkc0A&E)bW_(amN#mCml~Yo_0Lrc-HZp z<9Wvmju#y-IbL?W;#lu^)$y9+b;lcyHyv*|-gdm>c-Qfs<9){mjt?ClIX-rL;`r3@ znd5WE7mhC-Upc;ZeB=1m@txy)#}AGl9Y491h8Su%!;HXaVQg%)G&V6>8Lf>rMq8tu z(cak9=wNJSbTm2{osBL=S7URdo6+6qVe~Y58NH1yjF{2K=xc0g^fUS!1B`*jAS1)r z${1|Kjf9bD3^B5dY$M0WHS&ynqrfOMii~1os8M2UZERy~Yiwt1ZzPRUqs%Bbh8e?+ z5ynVkl(B;`+St(;W9(#%HO3j^jh&4N#zbS1v5PU;*wvU~Of_~hb~mOOdl-8f(~Sya zhB4EqG^&hQ#%yDbQElvH%r)j2^Nkv#)>vRHH0q3cqrq5YEH;)HdmD|$Qe&C1kFng? z*VxZkVeD@lU>s<8;~?W;;}Bz|aj0>aakznTgmI*ClyS6ijB%`SoN>Hyf^nj8l5w(e zigBuOnsK^uhOx>BjWdn2jI)h%jB}0ijPs2Pj0=s6jEjv+j7yEnjLVHHj4O?+jH``n zjBAbSjMc{V#tp`e#!be}#x2IJ#%)HEvBtRFxWl;9xXZZPxW~BHxX)N?+;6Ni9xxs> z9x@&_9x)y@9y1;{o-m#?o-&>`o-v*^o->{|UNBxXUNT-bUNP1iuNtozuN!X|ZyIkI zZyWCz?;7tJ?;9T&9~vJS9~++-pBkSTpBrBoUm9N-UmM>T-x}W;-y1&|KN>&T$^Z$_ z02g2ZK|qUujRRT+Y!c8apmji-fVKhc0@?>`8qgtNvw)5PodP-sbP4Dhuz5hYfbIc3 z0(u7Y3g{iMML;Z|Pe9**Ed%-m^bZ&iFfd?HKt{k;0fU2E;=#B(lt2 z$RnpXo}E`vR1lf!qbIpp#o77s;-Z}F=s`o@q1lB6g~dg=+4)&n*;(O-YvVzDWMOVW zJUchPu;`EB^7C@D^Wu?^bf#3ef`YvK+<0M>=6B)p3bM0{^TQeU$AbYuVO~~Yet1N5 z-?ejoZgy_GI4`GggPh{L$Qs@l*@ot3XJzN)MZxll^Z%GQJFBQLwNyTezsIt}$$POCspibjA93uvzhcB6OGveR0#iJrco>xncd7M9?u@ zF**^nXkA;DOxBjghb5E4!tqs!pnI3-L0P=9G?{EHji>HQ#w5$;jA&XmHW570t7j~> zpsspxR9LJ&DtJQe%(+z!Lu2&~bx~2_cJmX#r2U3h*Hp$D=2SH!88xmfR-YagTTsz3 zCstjPwnda0s^?cl9O|lOHq_QNwu;4KTQ$4PtgDI=)NgRBkIk!|8*xnKOH?nInb~jB zsPfEyOKe^pIGU1O|vR;;|LrZzKDRT;(kO~{Ol*s@mP zLN`ac6l6xzUDr@Qxw>J_pn<<=9heatFd&wWlUY+Szbdn;rgFoWwEFOo&l5qHa82XB z(jt66ClR#l)oJYnrqQv)=I1CLD87RC1STv0-&}wRI7@n#$DLYz`8x z|12I!+x>bEM z{&$|uY5w3Ig49j~X`8|!Lt^Qb z*BmxhJuAH%E9Rx9tuZz$1uGphG7ReTYv6Ewaiese^4lC0ODd`xnscX+{HEBMwKcP< zXJ`I8K^Z9}8>)+?a{e}SntUk7B!bQR4cskN#{Bx((_%Z-{hoZs~E(x|hvAMt0TQfs;-7E#%`D&qe09;~m8 zEvZV+bgZUoNvyV}D*BJrRi#&Nm_4IXIyH4VED>BH|F?mLYmZ0-ZMyw!mhGdK+C7|d zPHH#*1C~uGmR`a&-^K$AS6!G0Mut72S!)$O871l5F1@iDDy!=1qD@tD(j#tq_i)s@ z8PdL~%aN%b`j_D!SG`QSGz~r_5loR*zb^Z*Fee%&w1maBb8bgVNu2$3Jh5srSp@>w`^~L@VRX*8kpC zE%=}HzHp}&jnZwCU!4EdMz=-y!@aYmWjN>hL{Jp_n~koyzm|l1oSO)C4>N8^1gC~m zmnDL>O+Q@_L2UPzZNBmSGlPyzo2`!8?!Vdl{!*a-RHN&eKH&XpESpj+%m1~m_xu$# z(k@JOy*-=y-joQ|wEWBPr+Z(R>U|5sZD$P$x`j*cOa#YuDw|UtuSh2IO5>xG$yIB=At5>iOnwiKM?_l07cT$?9x1cj+|;l2(%8Z@XDZ=T#zdJ(BFWHz6d59Hgbx`q)31^_6%`5{ zDno<}nUW#%kj%<>-}86xy37B6*Sg>JTfeo}e)jY1=h>@oTG8WzU!LeOEhIE7Jd&st zwWChdje1c(8brfr6pf=vG>z?}Su~Fpu|u?sR?#|kj5g6W+C}^55FMjabdH^3=jak$ zqg!;39?>&;MJBS*JNiUXq zadBJ{m&WwCEG~~Lg19oSiWzZrToc#Ebulxpj~n8~xG8RqTjJKZEpCrlk;d$p6LaH^ zm=|}(U2%8Z6Zgh_aevH@2Vy}ij79NaJQRy#Ni2jR4Yy1|!#~<-$ z{54$=K?M_BNQ7EKZJ~}(SEwh{7a9l+g+@YSp^4B`*j{KRG#6S3I|wa>RzhoGN1=_- zR%j=*7di+Xg-$|eVJBf{p^MN}=q7X*dI&v*UP4C53cZCsLXnUYiiHv(FO&*pLb*^O zR0@5Ce!?z7e_>Z)H(__7N*Evv6b1=<2zv^93406s2>S|yh5dvf!v4Ym!cbwDaG-FI zaIkQQaHw#YaJX=UaHKF?I7%2H94(9#juDO(MhV9WqlM#zF~SMLiNZ<3$--D+oG@OP zAeAgmQ$6kZZu7S;)`2(JpS39k$5g*SvZg|~#a zg?EGv!n?vo;XUDf;RE4AVUzHY@UifT@Tu^b@VW4X@TKsT@U^g6_(s?wd@Fn>d@uYU z{3!e+{4D$;Y!$W%zY4zzzYBi|e+qxebVU?ZOmQVqYALmqI!axoo>E_Fpfpq(DUFpT zN>gQfrJ2%PX`$?(v{YItt(6^>HcDHiozh#_l%16>N>`Cn+Z@W0i5rcx8feigK!Qnle#2U74gzR?bk)RHi6rDQ7F^DCa6u zmGhMIm1)Wa%7w~BN+=gAmnfGi)0NAV%atn>lq;31lo`s^$~DTh%5}<2<$C1?w z$`{I)%2&$Q%4X#oWsCBy@}2U%@`LiD@{{tj@{6)n*{1xe{HFY_{Gt4*{H4Y*x1h)V(f1mU<@^e83!5%83!AO7>62% z8HXE37)KhzjiZba#?i(|;~3*uW0Y~6G1@rZ7-O7ZoM@b6oNSCW#u?*{3C1bLsm5u> zMB{X0k}=sh!#LBJVw`21ZJcAAYfLrHGtM`r85bBA8W$O1Tx?uoTxv`=E;BASt}rmJ zG_Epc7*`wD7}pxt88eORjT?*`jhl>{ja!UcjoXadjaf!&%r@p2bB#NUdB&Z_UB=zU zJ;uGpea8L9eB%LQfw9n7WISj*WGpt87)yN)kD22Mk#k<-{|;xu)(cbYlP zofggxPD`hi)7sh5Y2&nY+Bxl=4o*j>lhfJR$=TWI;&gSoIo+KePEV(olX0?6Z>Nt_ zFHPG6^=vy0Q;+11(2+1;sf1~>zqLCzk|p3Yv*-p)SGzRqB0 zKWB)uzjJ^y)EVX+=p5u6>>T18>Kx`A?i}G9=?r&{az;2uJ0qQAoMW9)&T-CY=Xhs~ zbAofCbCPqiGu9dBjCUqDr#PoNr#Tay)167qWakX$OlOL7mUFgqj&rUv)j7{O-s;r|bgp-9aBg&Na&C5Rac*^P zb8dHLIjJ+-nd8iL?r`QgcRF`DcRTku_d54E_dD~Q2b=}YLT8clp!1Nk*jeH%bslye zaUOM+Im?~LoX4FfoE1*B^Q7~Xv(j1RtahGuo^hUao^#eX&pR(TYn>OJmz&|-T4d+egE$40L9cP2{uCvj3&w1bZ!1>VGU`#W?tI~V>3rpU z?QC|wake<$I^Q|pJ3lx-IzKr-JHI$voo&vq&Tr1|&L7U7&R;$~K@v2<59{=W}I66~!e*mF2}{ zrMY}@c~SMu0y3&ry6&%riKo9lmq`{6C@IO0$aJ3Ex$mTjlaJ4I9^bj|@LXB0IG@So zODl2(==4ITq^P{8G*ek#QdVe8>fAS1URGXNQCwVBR8pExx2(w|nZ5J*TqajsR8su! za;3%j@{&xhsI0PPQ;l3%Nv^CsQ&yI%{HI*LC|6XH9`}4E>6(;PmRFReR~71(EpkN# zKb3_9|IM!~%9rNSbc#NhaM;sAs3YEyyNgsuxYmCJP&-PhOo(>ZZGm z8ZEV|m(R#1_e(maFm>qPjOrT3d6ItpbT+A%jxBg=km@tpq=j^=UN96s2$mQ9M&!PjMzqQ6b1H71*`Se#9gzn#`f`?o0Er+Va5g;0`iS&~hfr}gJ& zlV0i2Lc%WpzhFVUS=zJ^=hpu#R9X|NeY$bs1Zhw`q!6@2-Tw?&T@$di*d9{`rQ6nJ zlhW#~uV#~pwbC~~&L-W{IvWd~lYOcNP8pcC`Xrm&Rb78WHu<75$Sw8KZ)WZQp^ zR@aOkB+Z6ZRSnAwuBsZG8CX>{u-~w%fupNeeVR=c*Gh)e@Mp}~oK33dZ0?<0Jga?4 h@5;{o>Wwa$P&6(-VRZYU+iiEZZns_Kvcj+M{tIhCqgVg{ diff --git a/isotest/run-test.sh b/isotest/run-test.sh index d3c478f..36bc04f 100755 --- a/isotest/run-test.sh +++ b/isotest/run-test.sh @@ -48,7 +48,7 @@ else echo "KVM not available, using software emulation (slower)" fi -# Start QEMU with VirtIO-GPU (VirGL OpenGL acceleration) and serial console +# Start QEMU with multiple displays (3 total) for multi-monitor testing > "$SERIAL_LOG" # Clear old log qemu-system-x86_64 \ $KVM_OPTS \ @@ -57,7 +57,9 @@ qemu-system-x86_64 \ -bios /usr/share/qemu/OVMF.fd \ -drive file="$ISO_PATH",media=cdrom \ -drive file="$DISK_PATH",format=qcow2,if=virtio \ - -device virtio-vga \ + -device virtio-gpu-pci,id=video0 \ + -device virtio-gpu-pci,id=video1 \ + -device virtio-gpu-pci,id=video2 \ -display none \ -spice port=5930,disable-ticketing=on \ -serial unix:"$SERIAL_SOCK",server,nowait \ diff --git a/isotest/screenshot.sh b/isotest/screenshot.sh index 8372e89..9cdefda 100755 --- a/isotest/screenshot.sh +++ b/isotest/screenshot.sh @@ -15,35 +15,57 @@ if [ ! -S "$MONITOR_SOCK" ]; then fi mkdir -p "$SCREENSHOT_DIR" -PPM_FILE="$SCREENSHOT_DIR/ecoos-$TIMESTAMP.ppm" -PNG_FILE="$SCREENSHOT_DIR/ecoos-$TIMESTAMP.png" -LATEST_FILE="$SCREENSHOT_DIR/latest.png" -echo "Taking screenshot..." -echo "screendump $PPM_FILE" | socat - UNIX-CONNECT:"$MONITOR_SOCK" -sleep 1 +# Screenshot all displays (video0, video1, video2) +DISPLAYS="video0 video1 video2" +SCREENSHOTS=() -# Check if PPM was created -if [ ! -f "$PPM_FILE" ]; then - echo "ERROR: Screenshot failed" - exit 1 -fi +echo "Taking screenshots of all displays..." -# Convert to PNG if imagemagick is available -if command -v convert &> /dev/null; then - convert "$PPM_FILE" "$PNG_FILE" - rm "$PPM_FILE" +for DISPLAY in $DISPLAYS; do + PPM_FILE="$SCREENSHOT_DIR/ecoos-$TIMESTAMP-$DISPLAY.ppm" + PNG_FILE="$SCREENSHOT_DIR/ecoos-$TIMESTAMP-$DISPLAY.png" - # Copy to latest.png - cp "$PNG_FILE" "$LATEST_FILE" + # Take screenshot of this display + echo "screendump $PPM_FILE $DISPLAY" | socat - UNIX-CONNECT:"$MONITOR_SOCK" 2>/dev/null + sleep 0.5 - echo "Screenshot saved: $PNG_FILE" + if [ -f "$PPM_FILE" ]; then + # Convert to PNG if imagemagick is available + if command -v convert &> /dev/null; then + convert "$PPM_FILE" "$PNG_FILE" + rm "$PPM_FILE" + SCREENSHOTS+=("$PNG_FILE") + echo " $DISPLAY: $PNG_FILE" + else + SCREENSHOTS+=("$PPM_FILE") + echo " $DISPLAY: $PPM_FILE" + fi + else + echo " $DISPLAY: (no output or not connected)" + fi +done + +# Create a combined image if we have multiple screenshots and imagemagick +if command -v convert &> /dev/null && [ ${#SCREENSHOTS[@]} -gt 1 ]; then + COMBINED_FILE="$SCREENSHOT_DIR/ecoos-$TIMESTAMP-combined.png" + LATEST_FILE="$SCREENSHOT_DIR/latest.png" + + # Combine images horizontally + convert "${SCREENSHOTS[@]}" +append "$COMBINED_FILE" + cp "$COMBINED_FILE" "$LATEST_FILE" + + echo "" + echo "Combined screenshot: $COMBINED_FILE" + echo "Also saved as: $LATEST_FILE" +elif [ ${#SCREENSHOTS[@]} -eq 1 ]; then + LATEST_FILE="$SCREENSHOT_DIR/latest.png" + cp "${SCREENSHOTS[0]}" "$LATEST_FILE" + echo "" echo "Also saved as: $LATEST_FILE" -else - echo "Screenshot saved: $PPM_FILE" - echo "(Install imagemagick to auto-convert to PNG)" fi -# Keep only last 20 screenshots (excluding latest.png) +# Keep only last 20 screenshot sets (excluding latest.png) cd "$SCREENSHOT_DIR" -ls -t ecoos-*.png 2>/dev/null | tail -n +21 | xargs -r rm -f +ls -t ecoos-*-combined.png 2>/dev/null | tail -n +21 | xargs -r rm -f +ls -t ecoos-*-video*.png 2>/dev/null | tail -n +61 | xargs -r rm -f diff --git a/package.json b/package.json index f4d8592..437b45e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@ecobridge/eco-os", - "version": "0.4.1", + "version": "0.4.2", "private": true, "scripts": { "build": "[ -z \"$CI\" ] && npm version patch --no-git-tag-version || true && node -e \"const v=require('./package.json').version; require('fs').writeFileSync('ecoos_daemon/ts/version.ts', 'export const VERSION = \\\"'+v+'\\\";\\n');\" && pnpm run daemon:bundle && cp ecoos_daemon/bundle/eco-daemon isobuild/config/includes.chroot/opt/eco/bin/ && mkdir -p .nogit/iso && docker build --no-cache -t ecoos-builder -f isobuild/Dockerfile . && docker run --privileged --name ecoos-build ecoos-builder && docker cp ecoos-build:/output/ecoos.iso .nogit/iso/ecoos.iso && docker rm ecoos-build",