From 0efb52664e5400f93d8f31235987da8769885ca9 Mon Sep 17 00:00:00 2001 From: Arc <33088785+arcbtc@users.noreply.github.com> Date: Fri, 7 Feb 2025 09:17:55 +0000 Subject: [PATCH] =?UTF-8?q?Feat:=20Creates=20.AppImage=20a=CC=B6n=CC=B6d?= =?UTF-8?q?=CC=B6=20.d=CC=B6m=CC=B6g=CC=B6=20on=20release=20(#2920)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/packaging/linux/AppDir/AppRun | 81 ++++++++++++++++++ .github/packaging/linux/AppDir/lnbits.desktop | 6 ++ .github/packaging/linux/AppDir/lnbits.png | Bin 0 -> 12913 bytes .../usr/share/icons/128x128/apps/lnbits.png | Bin 0 -> 8303 bytes .../usr/share/icons/256x256/apps/lnbits.png | Bin 0 -> 12918 bytes .../usr/share/icons/512x512/apps/lnbits.png | Bin 0 -> 22613 bytes .github/workflows/packaging.yml | 73 ++++++++++++++++ docs/guide/installation.md | 30 +++---- lnbits.sh | 57 ------------ 9 files changed, 175 insertions(+), 72 deletions(-) create mode 100644 .github/packaging/linux/AppDir/AppRun create mode 100644 .github/packaging/linux/AppDir/lnbits.desktop create mode 100644 .github/packaging/linux/AppDir/lnbits.png create mode 100644 .github/packaging/linux/AppDir/usr/share/icons/128x128/apps/lnbits.png create mode 100644 .github/packaging/linux/AppDir/usr/share/icons/256x256/apps/lnbits.png create mode 100644 .github/packaging/linux/AppDir/usr/share/icons/512x512/apps/lnbits.png create mode 100644 .github/workflows/packaging.yml delete mode 100644 lnbits.sh diff --git a/.github/packaging/linux/AppDir/AppRun b/.github/packaging/linux/AppDir/AppRun new file mode 100644 index 00000000..b047e32a --- /dev/null +++ b/.github/packaging/linux/AppDir/AppRun @@ -0,0 +1,81 @@ +#!/bin/sh +LAUNCH_DIR="$PWD" + +# Define persistent storage for extracted LNbits +PERSISTENT_DIR="$HOME/.local/share/lnbits" + +# Remove existing LNbits directory before extraction +if [ -d "$PERSISTENT_DIR" ]; then + echo "Removing existing LNbits directory..." + rm -rf "$PERSISTENT_DIR" +fi + +# Ensure the persistent directory exists +mkdir -p "$PERSISTENT_DIR" + +# Extract LNbits from the AppImage if not already extracted +echo "Extracting LNbits to disk for better performance..." +cp -r "$APPDIR/usr/lnbits"/* "$PERSISTENT_DIR/" +chmod +x "$PERSISTENT_DIR/dist/lnbits" + +# Check if the directory exists, and create it if it doesn't +if [ ! -d "$LAUNCH_DIR/lnbits/database" ]; then + mkdir -p "$LAUNCH_DIR/lnbits/database" + echo "Created database directory at $LAUNCH_DIR/lnbits/database" +fi + +if [ ! -d "$LAUNCH_DIR/lnbits/extensions" ]; then + mkdir -p "$LAUNCH_DIR/lnbits/extensions" + echo "Created extensions directory at $LAUNCH_DIR/lnbits/extensions" +fi + +cd "$PERSISTENT_DIR" + +# Export the directory as an environment variable for the app +LNBITS_DATA_FOLDER="${LNBITS_DATA_FOLDER:-$LAUNCH_DIR/lnbits/database}" +LNBITS_EXTENSIONS_PATH="${LNBITS_EXTENSIONS_PATH:-$LAUNCH_DIR/lnbits/extensions}" +export LNBITS_DATA_FOLDER +export LNBITS_EXTENSIONS_PATH +export LNBITS_ADMIN_UI=true + +# Define the LNbits URL +URL="http://0.0.0.0:5000" + +"./dist/lnbits" "$@" & +LNBITS_PID=$! + +# Wait for LNbits to be ready before showing the popup +sleep 3 +CLOSED=false + +# Function to stop LNbits gracefully +kill_lnbits() { + LN_PIDS=$(lsof -t -i:5000 2>/dev/null) # Capture all PIDs + if [ -n "$LN_PIDS" ]; then + echo "Stopping LNbits (PIDs: $LN_PIDS)..." + kill -2 $LN_PIDS # Send SIGINT to all processes on port 5000 + CLOSED=true + fi +} + +# Show a GUI with a clickable link to open the browser +if command -v zenity >/dev/null 2>&1; then + while [ "$CLOSED" = false ]; do + zenity --info --title="LNbits" --width=400 --text="LNbits is running.\n\n$URL\n\nClick 'Close Server' to stop LNbits." --ok-label="Close Server" + kill_lnbits + sleep 1 + done +elif command -v yad >/dev/null 2>&1; then + while [ "$CLOSED" = false ]; do + yad --title="LNbits" --width=400 --text="LNbits is running.\n\n$URL\n\nClick 'Close Server' to stop LNbits." --button="Close Server":0 + kill_lnbits + sleep 1 + done +else + echo "No GUI tool found. LNbits is running at $URL" +fi + +# Ensure the script doesn't hang after closing +if ps -p $LNBITS_PID >/dev/null 2>&1; then + wait $LNBITS_PID 2>/dev/null || true +fi diff --git a/.github/packaging/linux/AppDir/lnbits.desktop b/.github/packaging/linux/AppDir/lnbits.desktop new file mode 100644 index 00000000..2946c212 --- /dev/null +++ b/.github/packaging/linux/AppDir/lnbits.desktop @@ -0,0 +1,6 @@ +[Desktop Entry] +Name=LNbits +Exec=lnbits +Icon=lnbits +Type=Application +Categories=X-Bitcoin;X-LightningNetwork;X-Finance;Network; diff --git a/.github/packaging/linux/AppDir/lnbits.png b/.github/packaging/linux/AppDir/lnbits.png new file mode 100644 index 0000000000000000000000000000000000000000..5437551b97a4e7f6843c2d23dac416cce9ec01dc GIT binary patch literal 12913 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 OIlrf?pUXO@geCw=QeF-K literal 0 HcmV?d00001 diff --git a/.github/packaging/linux/AppDir/usr/share/icons/128x128/apps/lnbits.png b/.github/packaging/linux/AppDir/usr/share/icons/128x128/apps/lnbits.png new file mode 100644 index 0000000000000000000000000000000000000000..2dc2656456f6819d94d37a4d296afa00d54923b7 GIT binary patch literal 8303 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

NhX@ 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�)L-KRR(pi*xS3Xn zGAvDvZd=h&Vsz{ad*89wxfLdH^37ShYhNU67YO`R|7yb4chzj~b@s^>G;aS8wMo6v zRB6*SiD3RErb+9W7Cb5YEg(8^#$B}%Hkk(=zb^{Ex7c*5N;ve}f9*HV%Qnt)>(O5& zd->a9PW@kT>~9Xd?%&RPBk%ui(HlH#geR6Bn=$3@9k*nkUCWla@$NnGC9hF TGk!8KFfe$!`njxgN@xNA17cC* literal 0 HcmV?d00001 diff --git a/.github/packaging/linux/AppDir/usr/share/icons/512x512/apps/lnbits.png b/.github/packaging/linux/AppDir/usr/share/icons/512x512/apps/lnbits.png new file mode 100644 index 0000000000000000000000000000000000000000..38a15238c69ad02baa90336001692c8db851af79 GIT binary patch literal 22613 zcmeAS@N?(olHy`uVBq!ia0y~yU}6Aa4mJh`hA$OYelajG9IOh7C<#g|S12gTPs_|n zRVb+}NL5I!$V_8ksJN9I;K;|U$g$^hmmQ;HY)#+ot)BH4o{Nj+T-!F;LLr%r<=E?= z4YM1A+G5OBt_=%$GEKVFmqqsPla`-PIJ;g2wf8$jCH1~(3hB?hwmk626;o|-<(=&t z);pcP7`LxykM1Vll%Ilbx;-;uJQ6SbjgFX|b6x)pb9jfm!KqDse~a&zRJ&ia^D(h7 z)G`j2Z+I*6pib@BNx4_dr&k*la~sE=*l+85K>EhgNZ!L07v?iCFt%hmI|q0=JHtG~ zz)&%#cA~Av;Q*0V|KO!cqU_vV7AY&562wId*Mw>~wFYQ!d6n?#l6}Ud2}^cZaIIry zuNPa*r+03b)ef$v2mBqoA1ryHqCCgRqZhPUSPVK8j-{qa7EhYelwW%{SpRBlPx{aAeg5#u z6x%S%{K9Kmrq_0<*C$%6U$0X<_Zr8fh$BKO9RUH(lA<>{F0PxLr0DycQ~v*k*V9id zov@n6t&cTip<~(K2lXGSw}mBUUGnBqZ+Itu{HFw~({6{&?=0>g@4IZn*mVBD)O+8; zr4PJOfBAKrm@U(6v-9O7C~?S5nAKu~iB;^)>JvhzmDRN%7Rq= zpw#00(xT*4*Rs^S5@lo~Qj+2N3rdS}z}`to)=$kz%}vcKDb_dCGeoh{-P1P!t^*VV z>6y6&U|kit1t=;@GSd)&h2k5K4A?u!4ynj3fSZe=8s>MfVsIE)x#TC8f}H2+VygtQ z-zp_PIWxry%rs6kOf@w~Nz*m5Oi9%>Ni|N@wMaHG(lt#sG)+t~Hc3l0N=7ouGq1QL zF)uk4WK>0NfnH{2ij|>>d6Ge5Qi`r=s-d~AiHT*Ru7!zts;;R?YMQB$Ns2|9aUzlt z{zaMTnR$sh$gTnzm6DlaWo~L=nP!=ss%w&HV5nR42JP0=@6Qo)}K>?g8tP+zUUMNm1OHBcL11^=Ek(igBnqsR2O|CF4nOKs7fk9fD zp{a?HZkn;NnXXByMWU`{l7)q?p=F9;qJf!lqPa1e>BaeJCFO}lsgCKXc_p?=?wPp- z;ILBA07sN2s$0r4QbDm`U}UOmV5AEVFcU*)faycLXrm7*GhjZp(Z>iAhytWS#*Rw? zA{ON0X2)ft4=(9Ir5?mUP^m*p42=s~TA`pYY6(fvF8@7?Kc)#vZb-1%5w;v&<`OG_fMv$K0= zUS+uIz-z!F!NSAV#(a2JU1<5=?T!wj1{+@AXJ_J*V5o?VuVN5*{i{|iC72m7 zSMXO{xBT8X)3jW)_gRF_wl(Y4=`G&t2-KWog8n*>t9zdeO-O;OdM-m>AAhH=6IK$^+`E>`gC*T=CqmLGz3K%CN7%d zp%PYlE;lVrnqhLIg@KTS^YblxO5)i+C>n@+Fy_y=`Fh^-y>q;lKGT!~sc(|DE_)+z z{aSrUvBxD%#a((G_O;C-O`+)neeIbi}U@6An2Of;oH>SJWD^0T>>@V?v4 zP|YlTp^|a#eGKH03_yKi4yxmw2yW?vTZ{^R8zZ1VYyZ?i-+pDX?@ zWLLa9jWdqn-;>|}jBD!Hn>)A~JZAXLFj%-|@7`KvQ-YtlRuMw zNJz*Yi|lJ_%#JE)F(^Hh_>lbe?c2q>*PXGyWVxOF;;yHDyPjW;7XHujhpS@uo;@~y z5354nwYhyh$v>25BF5R}R zY^nlB8C%)X&)@bu^m64|Ao!!Z_#OYvoNp)F+S*vVTtXOJKIu&KSi`i2U55S5`RDvw z1Yhz;J}`VB_JH^Pcl$7vMNA5lW;5Qme7>qlA>y=UIpYS|x&AvYAJ9Llvf%Ts#^;Um znJy=9jPQ<)ox4s_K$Kx(9M8YWjm8bK7xw-PimG{V|3K-!_xo2^xUf2;JZ-L%u@Lyd zH~01H?kT&jH{NID|FzHFyATw%(^HHr1#TQVVf%<*=OGzEwNhLF5b!2 z;Bx-Q$H&PxbG98j)5qq=o^_$JwzExV1Iv!1XV#UT)4h`0x`;_(;sg(sGPZNfW=lRh zS}O%!<=MmL^SSoF=21m02BBlh{}#^ld8YBeAVFDG>655&gZ0@r-%70ZdVuVovZcbt z?xyAU+6Vt%#5Bjd?2BVB5dPqO|NH$wnMF(rOHE#cGYH$B-+k}QHb$)}T^{{gng5$^ z7PdJ*d#2aYTcVvS7(4={%=6|@fl*>N9ES7Ud=56Qgcz} zqxJJX*1kob57`Nx>@S~Fyq_WOa!Qkv;AZT8KO2PzA~Iy*$xvORcyZs+ULUXaD>dnJvRX^C~e zb$@R8Z;6ngrldU6^BFhaUwT>6{YXHR;pH?JrNDP{Zr?idj!o#6zl+x-#^N(?K5W{w zss8HKtC?;NAq*)$cfEUjpW%n7f#lue`a*1sb6<1FJgmI8`s>%PQSJ^5A4D2UWWV~K zN!z@iIgaVt^#}SwtIq#Cd7!>op+aS*&$_i9F2)Q_Ml)p+)0Q(Y&%7Ys*`iZ0wfNnv z5G_;x!W9f2M~*!H$arpNKI3*q=cyeYPfQqt&%R-d)mXu#AZUY^EvDIJ0xmk_TM$j?@}B3w(ajY#*pA^{5xNO<$J%Z zbr^R|CY!^dlq)L&<0>nE8XibJV4$j`qTciJS-iQ+nbpB7LTO@z{Eq48 zw12z0?0TI0{7&M{oNrs(+Sr0+v>1Y%va++;SsV+L3pfIny0|Q9ztvFPFuC^rb=M}v zCAaq-s=Ts)`Al2BHyl&61qENW8YKunnDFXV*8Ytf3)_?~@-&FNKVaW<&i%_jhs+L- zzPr40p8oz99Mdvn~f8TEBzn=m*%oSXM|h&&^_b2vjZ1O+vX-X1tVr}%Qv%8=QQ0vIRU;rX|E_RaT= z`5L@}nnn7vZf?K)@{5dX;GGh|go)lNLidd~e>eTn?a_JTj-|QrM2`$xp|cDg`t1J} z9=LkI(97Ay>q_pt=X2xYdbT-BOk7l!fhS~q?Ck;^cnAetlb|MxPrl@@Y9G3J*8ZXlk>%QBQ z_fc5zXQ;dTal_(gXHIHxi8chhj=K8ZFrj#IgvHs7+Gkku_FQ4slVqKup zBWaxGp(9o;bt5FRqvOlT(~bf@nHd=wK_XfVuDTOFR2tM9O{cbXc=(;+YD$>i*4Ad_ zx{xVgP4j=X1NSdZ{imd~Q+Caq=$tg`-~0Y=x^#k9mvzqWgZ0u6?o0h~btyW3CadB3 zq?1p+c{v+195wmzp4WyUM3Yx=;-0M1bFxMW2O8YBhB@4Sac#>!{(tTa<=G#^1vNX2 z9^Af}Qg%9XodHzZRcpgA@P1SfV*ng}~_Vv{(S7I1qmK=z&)SZS$U6oUUmtIB}6CV|4oFn+KiS`D(LHPErM#^qq}I zqF^Fhz2L+}j~SyapKD1;OV1CJ(PFUN{BGClU5w0ZF&uNcm;H5h=_*xAn7z=sJ#5Xc zSF8RaS9qADCe_eP;i=j3s zHrAH+M`zz3R~N5kEIFxZQ&Uq@{kLz~q9G{S5GVWhzr>CJ%g&A|BK$XYEn2i_>&A^A z?}Gx!ebUJ%ArGWve|C3F$>F@Qa@n%9#N_11-CfSC2}`d|0y>jx(X* zl7JxR)Ubr|``_mWifA#!Px4SPW1YvW1xgkgTW8-izx49U=`JVM2bY!qFDZUky1*^7 zqod{4BLxn#yo`($-Bkh;_n**}>*p^!XS?!Xyo-uZmd*L-R<$Z|Hrca_N}PsDu}J$akq z@y8wPF`P0B=Q9dUJP{==VN~lulI=NBM*^=2%T@<3C3@4D=BRfnq57wJX+*l#tMJNHG99^TDNoOPnHL6 zZ!ZUBWl0pHS7hz2elr#R^^5pRQfI_B^xxN`@&jQj8+A)9P7QZISn0d2&K3 z^L9Q%+jYuQ#5T;3zsZ_%LaXOdDC-}~i5@wRe(#e%W-f8ce>$hITF8u>?;8YfwJ#M3 z4LW(uCrm&wMI!v>+B1ps4r$b_wsIS6(gf9%|--XQgMRnR7RBZ=D^S)C;p85}D8bK>ot^U`~k zYj}nC7Qb8H>9Qz_b-|6gJ#%(*%~(&zM+BGG$->sZlA~ zkTlUlg^#&zMQyOx-CsT_Jgc=k1R@V8`E8gVw6xpm@T2yR6@PwfF}Nzo_4hkz|MldM zI5sWMd6mQh1E)oE`Sdot&RF7^*wRt_Zkdacp%?3d`u;!KbBp<#{bqQ*jCL{Jy}5bX zKi=~O2mk(==w9J<+oYzAiC8dG>O!6QD;PuqY~WX-e6dsnp>SSNU>>|>Q#TkCfyMXNo?acPrAVeyX^?wyT|x26Ra z`zTGk5zeZxzxjVb$?5qmK0N(L}l9t zaS3a_8FNk+ykgKck!#VBztfIav~Cx5Dd{aech|h~)00V(;oi?$r%j*!p7G79TAxEp zir@Y}yK-Sv;*<^7E4n|weLf?ta8cg#Wy_Y`^?rJE+7Z>`oi0f#AIuD5eot@lbT}~i zo!qq~-qyfHVwX<*E3?_`sm;R}A;5C*Nn2Z6zbW$s>FHS?rW-_cf9$#XrQTC~$Lcp> zb{8J#&zF8!c`tS82dD0R3`ZV++}o(U)!*}m#IdxzS~kOg#3?J>E1Kdz&j`z(@V_)g zY2uAw)&=~NPNqyPerNU8Tgc5jBhi0Z#>e?WUlrwxH{NYn{#N~TxwF#56+w(I-U?2- z`Sn1>TX!Kh;m*yh(pnutTc)J-Z7+^IA=IjY`-j+ zG3m*U^Kwsl(=@muXF5OrSaEUNpGAMZNLm)9^qi~y_cft}b7`4T&Y`MV|MVUGKj-UR zs7kqH%RHy}dyky0)iS0FzM`U{?#!>V?oZrsDkEMFhBD6sa`VZ;zFSqo5aqBI9*LLgHtwpygyH+uz7|rBu_`7Aj z$BasAc&VV&g z=~l*Lo!yhltVG(rv~o8+*jHf_XOhh$mFV znJW!c#MLaH?_10C;pyW4p^dXkzvw5L&$CFDT&m!8Wb>XQTkovB`cGwg@;lv5mn2cq zhVyf|c&_eKOtk-Xzok_2kV0!9)3Xnp>9<6AE)}Uvigs?4U(LYqv7*NJfyrB8p|Z1E zHf_Hh7(Q`&1E0~Hyy=GRm0ZrB9`?8>85&+NJj7PTEd)!c!JbNwUlw8%59U+2~M+JO?&LykSV_*|yguIiv8+ zQBW@a=ymbH$}&yH#zPaFy4f8I5>&Vj%rHzo)!6N58oek{fO&=LI)$zf>9;;xGq+q^ zXRxHcPw>H{6r)JFUrYksN0%{i<`#E$y}dCfRC1w0*M!77x%;1o-V2ntw0<)~n%P$S zS?&jWP>rBj#@vbrJj}uKy|4y0u8xRq5~f_b*;VB%hmOIWyoK z!<4C0=dL{%uN3-P($i`BZjq%&bsjqX-pN+4Dc1Sv(W%bqjv~ zT^gawa_vKHeW6Ag!FE`Ar0 zuw~my7f<82Zw`cUE$Y~FAp6eQ!&<39TyEthB{IR6SQGB-D3tr)oa@~=OW1NoV~A#l z(nmr0;z_X%VcvheURtc%w#{sPa!K6&3bn~M*=;}iD;;}y<96oT|4A1e+q&PniEW5T z^w5mdpMCaS;3TkVqUUyI-f9yveR?FKc}bIo(D&QPHs|a`TBh7P*itO6D%80rmV3f> zrU@rg)R-o3aC(5r1; zDngZ&vm)ZS8j9Z;EO5H*yXZ*6*O^BOvP9hW7ulTlzH|QZuBZNo7BE>T+1qPcnpJ&y zu`o3?^>YY=N>)_n^YC|GWzT1GEtWrPHb2&44xbU1^Pxq1*R098dUJESzUC{*hE1C` zEjIn(Ewc6;$F_8C){Fg2OnMKjc>f9Qifr&vD=t~LKf~_X@xDvjCTZO2mR%9>{q6OG z|I^+*)tnbDA>`&RQp)I|B4oWV`oBukt(OVK+Zhe#7Qa*PGq3Dl{if`cX0VKq+iTUy zC+Bu;V(5`J*JGQrJXa;~ii@@N#@?nE>YpPHgzR>3^jIH1b=t<_TZNyGmG zhrbp_XVbxRJ0BN)Jz7*GouD*Pg69ge@|IeaESbLNcb$8ZOj`pJI~|K?*Z{kYWS zxYP3(qp4oHy3-^Z&N{B1?_rXAdRb4>k|vD}sap!x{q%<#;qwCyr2CsdR$MP$B+)Gc-=Qyye(`Avr_WN(UK*4@)=FOM4*n~oNZ`5U85hB3) zNl(6@^RADNv7XZWSC=L3yk?qkHf^=TdE2QOS?Y(M<*Yck!eQE_Gn!?JYqx0fOgx`E z-$$)_FH7cn?uOz#TZMIhRJ*2KIJ7R$nl+Gtk#YKM-97Ge4+;F-q*7bK5Wk+gVdmWR zZ&X+HrNyt3T%^GDATsWW-M2j5`hX3yG`SHdx z&*pxMK2~+ztXP){EKyd${l}pJgh!oN0pl{0$BAH)iTwzOvt= zd@7^$^SulV)f(BIt2}#>P2Ds)Y<8V|x3IBaw8i86o0->{HXM`6K2r7B*X7WHW*+vP zd$)Y6m$S{Ne^e$HBA~R_!b0A@uBP8^PE`oQt=qTDnQedhELz#7_~wjR#xHw&yGP0A zo<`06F8*?E=%$-F{eH|PyBU1uSX{Jx&KG`6DAao6)@%RHPfm;4a%H`T{LGsZv)Aw4 zcDj-=BR_vVi&^LqAy?Uy8%?~Li+vKG9F#4yKmWO{N#Nyd-|4#1*WNCkk|)k!EX~>z zyidrrJ2SC-``)G#&Hq1WT`x43^Godba`uM;hugC~3=GFLqB~b9-!wUtvMuclJWfKzEhcuGYk@)BnvtgO_#0%@nU6P6K$S}GKQO-cOQFm zN2KA~w{M0Aw7S9;t(aPNt#q=8i=O=wgLlsj-#spDRh$&Px}>C}=UgNs!!>3$t?-n8`r$QF3n03%6X%CkJU+nSNJ^kwyTt20*FMND#>i3-t zN0K)BI({w@@_pQC+;vsNrSH$(e`k5i);9^9T+iqzkaOud6GKktvj3`0Mk$sp`GS`( zZLu_L_n&d9HRNT5lgj-$GjpeQGi_MBX^Mu_sf4of`!1LN*IswC7QeAo=W1pBM5mdT zt}{Joke#yF<)Zn`9!8!30m~2Gzjf;$MzSgf-C%l970dAGXV%EfSnx+B zi|58d$hDOfn%^c2ZG+Sa4IQlTn#L6pV3;+e;lS`{yyKa;axPMpDk)j{bc z%Xiz7_x11p9+OMnwRgFKOIO45%KI+^K_#GbW0b3UpmB%RwZuhS4*GxF!*_H@i?(=t zJj2kle(hS>OOquV9v(<=RS%q8k}PrBgY_aecf=9NvYkx=ntIJ=b6otn9GG+&R0Joh zJ_z`2W*EEUTKAhxF-LfRoC%dsI+~gwz>-`Y#8BqQ&oF7l)fBc(?Y9|y|9|gc?Ej>) zfAjuV&dy7ISUkU@XRFB&#TcNJo^6)0Ky6>unt3MTH%h0xUfHR1H1g8fZ*RgFB|wvM z37eEAYn+^r%Dr7sR6EYtd0H~3x8=ce$((1ooR?HAXSmjV{Bd)56obwAXyK5js!`7_ z9@+P1kwVqCjfZ4y4p`SL&~WLBKJ$4`r?xIbiJt6=;7TFQ_6^dj4PqR>90;~KezdH+ zNkFr4TV9&*u3!eW)eIg}B#zC?>Hq$f|M(RB2p8q_+o3#Z4Tl6Y8<`Fi`MuSDFPtx& zsv5XyN|;%SEbB$zwOc+W@1C*qOt^&7(qv&#hKc_-TD~^A*c&cz_tD3WzrD*V9sRvU zID^67$vW`rl;@%+Ec=!V?0Ok`?}>WMS_K!c^D97QVORu1(#9LhPI)X^(&crnbn=Bq z_S)Nf!j|1)ov}$s)6-EPXVW33gfwX_rOru)d8Lzj0tK`usy@)#%{t$b%Xvvj?v6uD z3~N@`s2Jr+JT~}t`PTotAIyJ?n}3v^`(0c!_qG0ZP*tPHc4TV5%TWck4dTHUzWl%b z`De%Hoo!lLqHP|T(zAWklH)ZQ(!`kEwBia{npPj$rBF=Xx1kG zIOMhee>6jhQHYYF^EBO?GrY7!j$Pl;-ahkOHJ6i$jGO*;1{TK&EN4G@n&>Q;$$VFi z>rwWf>v4}mb_Y3jw75?#*84Y=sX>fk5{G4jY{XPSt|V5mOD7^@jvCBW66Bn!z+v{! zi}8a^ezL1_V1mT%&9;VX|L%{GG@6rd|CqU^RZ+-Jy7t%X^Y7}7j71qbThyX%+<4h{ z{b})@W7Z}cd*0r3D*V&`edTjyyFh`UQ)d7EESL3Ao1B_vCM>Z$N9B!L(COfJ*I#_w zFFKvUR^ZEOsUIE9xvRvSCk2_`w%nekHTBfAQrW-!Osl4JyBz%Zu3GBP{%M-?{~OM4 ztvTJ7YR4_wHf7hUb%ymPm#aInuVU~J2?;n?osJ7c16A(u zJT_Rq_5adps}~Q7ezWd>&S}f+cxcHdZ({~Wfi;cmeodUPdeNlX8=Q0RPn*igvE%%| z18@KI6^XiWil?VN-eGDK>V=GrXZe5o3Z})bY^_ttvN2x$ZBFr3Ee4^q5?oa)$Ux9fE1zN#nn`uv}@<(BzeZ}VW` zW(au8=p4eJvL-B1BKwu*^-uQyPTB9gk#}k0ewS?wGj0m-ODthhNG!GZ9q6{RX~OwG z-Tyx^ThHc+Y*h?2dvRHkVd90AOPca`#$LGf|I^BsXC4$-Pv%$?le!SG0L1p6C63!RUaHll5j*<*nc9pQN5JI=k-i{5?wy zT=uQ`b$K^~i__xbxBqiBF1N-_oTmCfDepnuKagbB1a_VfJ|VSUo#f)}6Pr3JIQLB4 zz4Nx*vCE77T&ATjNMlebQ8S*$8yW5BGVO8Uyk}Lrr7!C)P@2U!;f2LK=Pie#TmIgT zd*t!EQ|y=E%VRtZTn#O4?a9pB``wnhiXuNgmO z4oZf+cxb0|*YE_h?i9U;g*&VpinK&rj+{wWY`?h@G(aoxa-I=?$@(cR&a6*sX3xEN z>;J_|9>U9Ss-8*Mc1Yl5BIAXcnJtG{gw`x-)m2{FTefafbY+`3#Hv7t1JiPjDBQg& zB^kLXCV6`?f4>&b#ChE-89X#hE+2cCS8wuHp0};gc>go8y4BHkuD=YJ7i2Rmd6IkB zttYLNRgkmK{VnIZt-D29J>=6FT)h5e6sT`o787eG)ck+*o)exv%Bx%JTz(y4HtKTp zx|uX>qv-4mEeoc5X=?Yk2WwuQ={<4Zsj3B1x=V9)C*?f47Am0l-SD&JxpR)!D?6UJ zxUo8T-7Az?qrR{8PSUi38FRbN%d{#kl4O|ZC%x+=m*SCW8>TFN!=w8}c~ZM1LoBm` zYBopnj598*fs)G^DpGp$^3;=R8N2Xrd@YhUbM|) z9@hb*rwU6~%rW|w8eS3@@qAy&lh3&dJ`{-2P+sym#tBFXr2CZq;H4D!P@iysvFi_1)x%xw3b{ zZZ$YK9H{-%=>0aVEnumG3)dOT?KhZbUDz91d6iPl#%SZy z7Wd9Q6uo!xoI;R_F~hl?N8=(RZzi2(=y>w}MZNpBzBm05(;AB3rtdi*eM{1%YX!rZ z`S$xS&bF;C6Vqkane=nAhlq|)(i88n6&s~|C^W@(4#6NTEi#7Kz zn8fv#L+R-AyZT}c->0;DyepZI=)c`r<@%2Lx#csmE_0ORZuHnVi?L>#-bYM5!-eC?UY$yTGJoU_X&R-NyTJk(hx$6ew)(PLwF@j2b!YZw^TYB4D7+$cNS zxG^Q=-us|wAM48m*Jmx1pBQxE)tu~~NsJk6x)*dWg&W%VJ)d!6&wW0ln1lL1to2`b zwks`NsLIiFJ{{EHG7@E&xG%ch)MHo1onPq^+doOa+vaZirF%*M;|H7dKQ}W4gojUO z3_9hyB;Wn;?~T^YN*mtoPrQ@IU(kAY)xr2BTh90`4Z3-ri=koW-c>O!Rr#T9#S?BD z3%&muIPXDG-c_x7rKQg|Z~WJ7zjwWc_{4kGGxjQdxMF|Y+vmB=Z%Ij`TQ8KBeiMFk zC!KXcPUZhVm#SyUQa3OA9_0Sn^1~->^ZvOjGV3P_h%mh8{%_ct$13u2YV#evHOH3( z>_6@waiFnm5?lSmOIMT9ctH)fX{>f3c1pJ8BJ6Fy{^~AnO@5mrw%J8GdPzwwOUnKr zhNO)V+g{gqdGLn>oIAEg`quaBKHTazD)*d;zI8)s>D$9k#Ts_)+NJYATYlm^%Vv3_ zmV*mx@^iNo&b)i(@}33S|6IM|e_f7d*dM~MYsI7PFAluUH%`CxkeI(zRN#Ylbw_n& z$m&0xEr(~v|Cz2Y%3xd_`?I5@pKGacw7T4#x zNT{7;VtV(0QSPZH?_Z^dW_Q2;U8=3i5c_Y<9+!Pu2Ui4uQY8Ne3-MdMGtT|!Y`OdR zwEcp}d+p6P?_VfoP>P?V`XD+_e3fL>r}s}i=RJ1WZBVk^uD!O@6zvVUp@^IjI?^Hr=brzDG9jD3pWJ@wSZ0~#`K+n=6HgSLv%T{eG&=u`L0;2N@W!R7&o0)t>7*A} z`hUvLb(#1glfmv~A!EV0Qijb_=DXbGlsUAjN8{x6f5q>f82;XEw#dWetkLE^Iq`;H zzkaPLey93WJuu8w^?qS>P}lZ+45rNa;3Xd6i?^h*;+GM*E@^t zL2UK>TFZH2cVFuZrJk<2|NmC2_nxV8J_qbUBM!gToJ?C2AJklL%Ud%)*z`yD2`~MB zAB#S^x*SsTK9Kirc8KAEl(=H%Vv8ewiFVyv7+salohb@ph;!g)o755MCC$Fs|Ky$D z`#V(U2sHgU#U%pF4$g)j!*YrB-o=2VMVG7J!Yhw*ra`5r*rXtJ|mya^FK@YXCLn5U^uta{@gs<-HXq& zE;t?g!lc3FNX4U^hh{ph^2K=%?dncHR^9EhvE#{{nK$p={n>n1mm&Y+PoKnz1?K4w zY|4W;ZN8o_wC^umdUsi`no|6gJEm#Rmx1Qi_!}!vg&xXdG0iz)CGxptdg7m{=@v)z z4!$mH7oXTMBRx(2*&2qLFBjbab-BLDC289!@o_a)15Z{6sUQkhmg&)obuYr=sB#@qwir@{}dm>Kr1 zba$X%WZ=GiYSW6Q%st2?mYv*rqHB*$!Gi;N>u+Cv%k<%1^?S(=+E29;O=gve>JvN!M9`)$$y8czdzi8v#CCc@JFZ=Ajf6@Q4 zgMr2I1IvWKYeHWd~mx=ChO?hfG@44;F?@SjiT-d-+;Zx}? zp>jt<&1l_N@R>b^ns45b!MM)FzfW$M{z+SmY5m zG1<&c{kF-hFE4lnU%qpf{PJp{!d@+gb30!i2zsiwG{+|S#N*l)p|F+WYuO^8ImRULI0`VQmq3s4qf9(EePB*FLg`7l(`3O#4;auc=+4A{r&Gx zlPCj&@$6-HmWJr2Xu9uyFLpHh&MD<$7$&3Lr!-Sz7U67>(~$K-8) z@bW~wOV#sJ`~Ez&lVw^OwDRQ(&c>jmWjC+X#YcUYw>kf@%r5e-ueQ?O&y(K&e*fhu z_md>PFXgxRg0$FzPCm;!TvyAx{)5`_8X^na!WqsmZdUGW&M9oa?_l2`^WqDMz0NadD1P_IK68b!;+wt zOAqkg(hFL1Y?IXQ-FLa-ub%uAyn9-Eg_E?SOHtv0T3@ZHS$eaWE<9EH(x9N}#3pm_ zA8UM$y2691-LvCAvnT!C^I}3r%b_6S-KOF3I_dMhHb&$Kept1wUu5=Clg*oNZ+qbV z*6!TpJ11;!F(^&aUSBzH`eyaEr)wClT)mpw*uAB8$qkt!>wJ=Wo9fP|S9UIbD`T|F zEX<|odDE|7zvk4gcv2E~>HFX14coW$E{U*^ao^pn@gztz->CWT8C9igPJidG<`6{x7Bv58LJS7}s6>HYv&C*ZpQ$ zjU!+FC(W|Bs+Xwt6{PHxWx21jv-7$4n@(Tf>-jxP%;DGM#F}Pb3BS^Rt1aKgB$|KL z(bujJJh}Co0>`_v$HmWiGk&Q3pZlOP*Ziga>5S*?GCk9u|9-zYW#^^5r*{8VTyRy9 zcmIEW>E)N@-pd$DEE&I?Fn%dty@7Y~ogaJZ_z&+m_wGqqUHAu6HWw8kqqMT1efuiz zaW%|5%XIJBx5-Wak4#9-FI%FsUi-hL+#~%vXKJ}(Ts}QryKdu_EnE&(bMx5GUH&%N zNqhO6yLb62W&iv?$?dbXd&`CXjwhFQzAV|b_z4$-gO1p5;SbBUEfl%re`h04TEagq z%lCy7<~q4H&ev5?n)u00N9?z^-G0Y7Zim>|*avfV``!-ZQf)hKep4ww{(thb;w^Js zm$KCho?IXO`qitZNxBTNdCYcKwoP%maVK}e_R|02n`St_J$@!}UX$3wnqM07-2X-P zfD&QZgXJPchGm^9{Qbt3X8PA3>!)!Zzu{leZ^f#s^fTqj&pY*s=?n&&+Z$bPt()YZ zJt>80tL6V)Yqu13-aT=;>fF?hC-oXG-TCLYAvX>nwzI{ z#a#Od4}+|%>~zL`+crMAJ%f0-1|$hw?y`SKdqB@OQXH%7cU=2U;VNxWfQwe)${*GwLKM>;lgzJB^7TQ`Z* z{r1csX971U1!=I&i4G4B|FHad)!$EfXXTirw%lF1-tQqtTj1sA>o-qHl}WQtYZLn= zIPuV@)2B|=-Iu?=BOaV`82Q-ercAvjeaPWk@$QS)PcGpznv*!)aPD`JRUINh3^JD0 z-`-q1A;Q4${7&(KlHB^2YkBWl^(1Yz`}c)4CcXTVguixxpyrmB2a5lGJ^OntD8Bg~ zXk1{vy7c+9i^opNc&_2!UEpva_M1ZZhtqbovVs%iPB69q-gp0Ey#9iC`>#nGZ%7}I z-y-kfpL^IX=Rj2LFDd^|I+u4$bmR$GpcItRUor3cdVYzQ*Fn8D@rrrnZE1{4(zjYB z_?Inc>WZuH6|ZcTziFcTL0jps;^R5LJ!@-g_s6kcfB$*j*RNmY8NxH_C%lVt;%47v zTmAQY{MPLjhy0fJ^0jIz{e5^UM9Xyb{&<(bIX`-iCS7Oh-szxl-FN-JcT8f1n|v4d@ry3$ z_;TJ|LT0wtQn3{bHI2pZ1TXa7`1JK!l8v&OQ11OhAXyrTDZNkr!ir z#F?-vO!eA2>*m2(tP@11xyXp`2(B{CE>N5PS?ax(i{Q)ii~ql0cKPMCq)JEE($B?_ zkvC@_Xujp2Qh98H)@y@>$Lrs7?QT8(<~>({%dhtg$9A%xK6UDz*0Sp%At1NvF)Ule z&6H~C{&Dwa=l*Md`8jsnm3tsn*SZ{3`~25osxztn_GVEPN8H6)tzY~8a~3T7CjN7g zmzL$h+WGI+{mz&0zqx;BhqR=}QYMj!|GrEP(K20sBQ7LRPOP+~>OYO?aT zrDyQx{jF{_pLwd4%g^Q4?Jv`&O}pLwu~jscafWfa-?cM+3{hL(dkE{kd0V!uCt~}* zKhbBNIQ$mWy;bY7q<$+y`?=ZX>ovl6>)sMxyzl*f#ygAux|=2DmL;6d`+HMFzNlrc z--6kmE=&I3ef_)cqTSbRE7tcEotw*3v!GVvR$uY`!==er|F!BoOPPJlMoh~@@MZqy zxv!7bp4MWBbuV5SqFu1*+u|3m6i#2u*>lPMx{GmeuGIQharJ_leatr|2dxYVTyGio z<-6O@egD-Tl)d%4SYpC%&^1w8lT%V})9cD<)4!J33u>~JFAG|^U*vbUPUq~!bBmud zectNt>aF@z=GC|4)Nbdv^Xqrax7Rcf)MVp6^G1E?2Pf}Ep#0F^c(`HBx3w>39I2Sp z6Z!DJc~A6?{_HpB@?w=0lqRJ|KG;xV^|zDDfp6>f?f-dytp2t>dRACUJY|?{5x*6K$%KUR+qHYV0@lN@B3lOqsm2e1_z$^ILDT2>rQu_ngD3X}fRl zJMmg3Z}~=_@4vb|3O$&mf9;Dm+O9bD3e(G#Az2HH->JM!e<&ufVfJseP@af)|K}gn z`L z`u%V5(r=5rKLua0EY~s!{~co?dz!H)ZR=B!=A|;Z=^Lk{wW=r`P3n7IxqSK~ZvB%? z6TFsAV`67|d+YllRp)88Hy>)d|M!kO)>&qEdFILqE=wY|FtT5{eqBG5QA6SW_xa3v zm;Z_DB}dF%dq*w)SN_^9g)8qKG2YX${Ptg$B^5DGfB&oZ`g(Nwm(GyqcTx{<-(o-f zIL2?moKNTf*(yBXlY3w%cX{tWr68Ywk1OxFF8#yiwF?vtX2!SqBNo+e{KA{eF?%O3 z1GAO*ubsE+&WkR~wsT#wLZ|TD+xYnS_)E(ddjAW0Rbpj(+_HSpx8s-6B!X|u3XI?J z37rS2WxBcZ-qdH27wALZko%IubU zJ&RXBP*Z68uYL9L68AhZ@|KxxHg1%>W$u01{AN$!8m z>zpX9sb0*-GwgMBA4{B#^I14ktZ#d9#F}g?*Ci)r+}yY_WR;@Nd(D#9D}U|#U;RMs z?YgCpCHR!Qr#*fv6ZbflRY~dSvt=b#e-m!p3(*h{$zz3r9Ve!r zHQvm7>E)L>8hax3wW3X@dYvsj_qJi4jE0g@{8f$|`Kbr(gIE`=X4&(0&TqR5>uO_N zTy||?cK@;Ozu%O5B|2HrJ2!4DOe-xdwcfD#Tcw~NB7

Y<;^N}8+LWV7_VUY;y^8`EfB0xkt>V4Wc~0G-v%}*ATYbXz605(f76mXy z-19k5d~WCa3^fNAm6+!JGiBfW{%0?G^m$U(gVR#d(&^W(Trpwzy`Wpg)x|3|A?^6` z%P;S1afvp(o6>MSJ1a|!Y4>WDj*clh#+xT!e)(lBXvdGb>Vu=NUcFMYTF-r9rI6sn zOOr~^&3*d&Unxk^T=l`vSFc`4Z0PlB=Y zb8c=<&;Ah3_+q!e-OrX|$Bxy9gojVRSZU>;>fo~E1Y7-sO(j;f=N7p}-3Vn>IR5D4 z598e2+^Gkyy_f~EX(DS~T3Wh(HpyY6s>BeN~}OdFF6!XTgbe$p<9&y^mk3VZt0>(A(R4o?q6gWL~jfH*05yNZf-t zzwPgTUmq%>#lX5f<>aL4Sy@>@2l5+q=S`_mZvHN;-DVUckEar3fs zwyZqCQc6meTRCnV{r-2lsB7K}5eL4dmtTg@EtY0525q7_cgARQuj!9$wgoR#C!cgo z`&OR7y;M=@lDht^n|?1#c6kP7uq}A8G-zd-@oXj=hv&7cl$0(N*Rzyecragn7q5Z; zG@Zyxfx*F_B@8%jcy)Gkd^vGGY2yu0i4z*Qf?>*>W5Xj=yCn~$!%|Ds4jCuFs+bpgwVLv8jrrnpdDtR#%v?clF zWt+>c4Xjgq)UF$Cu4ho5+SYMm`WfbBKlc5fwn&2~mL^^gC zXk@DwZ3ysQep#N~af9gx@1=@LhhiNCavuKvC*v9zVa0j@wD)l10n-BxOBIy_FEh<~ z_xqo3myqdOzQ(FF0|<4E~(((9qJ&pdENu(wUAi@iRqh@d|S86mM*< zxxYSK{qt>8M6+%;PPka~PPfOgw3z3vN_XU+ zotC^SqL)of5fu6}(e96yj*5Eahd1Oj< zKewFTBxxVDKsWn+?Y@77d8NlrvQ7DR@Ai3Z%Z07~?e>K0E zS+5f2OD&IOC`~9RDA=)h@niLdiMgUVL0U>d$;TSn8+bEk@oDj`WjLYI{rE>(f_T+} z2_0AZ79WVc_xrwP*RO?&2dp0N{a>p$J(?{iTuLd3S&n(y>u2jl8D`$P+F*JhOkur= zOG=llqV$*QD3BXWPCWlSH|<;U12dD$ib~Vtk6M1O;Yf^~wM<>a{qH4rhEhGxNx`|f zx!Da{8}9We6 zRIP1ZWGz)xn*Jhm)A?WXLq&RB=S!L|Sh#TEzi;2Z9dBSwIWL?MrlnNWc#hGY=~~tM z_#l}m#tBxF&p*E}>~!PdoZWHu`GS?Rzs^U{Y9K27~hy|o~p&9#9RFMzx4*iu0{JryN@pL zaA9@$cR$Oam?Lp(@jK214Q#BguO>38Ce(5~+`cp@(`RA_SHm9N*w|RzoiXqD9vsXP z6qxucfN3AE&C|W|p)!k@6vTHcT}Vm$&Tv0KP+(=|%9*wLU5nOwPU_L-3uK(&dGYSu zyHid-eP_D4x=~M6Dag2w@%HiK$K`FRzGOs#+!rHOD6@UyT(utp2L9`nCuSz59Iw8g zpJsi@L^cF;`ap0f%RR;#sU7ksv;`+>7PH*odGqPs{1A}MmlrKxzIP(Jw0k?to%8r-~h7bA=*d922ulnyXeJzF{`$rb?AY_Q z_rB$J)*BO5PBMay6bQOrRaF(GJ@u4Zg6%9}fl6cc#^cT${nNab8h1H|Ff0)aXSHLh zSsul5Yf8tNgu@5y5;lMTR|(R2>BBU=SgGFr{_;t0Wp1#PENbUJc_x6dt--xP_kid7 zTGx#oTn%R|TAdb}wiF28oO3{GuijEe$qmv!>^?Mok30Qm5tD+EV&CJ{4d9Q4`RblQ;E?%rEj2;1K>kBu$)yEXrnB5&uDM=)f4PMVtHTqe5PPK^Y(LaK za3<)@5}$BOsA2N~x#xG7)3)8OwqFzhI;Y`N80$0Z=j%*2^QOp)zS!b8(=YXbWPjYLFwVdQ+?*S2aY$~Zn)jJdPoHEY%^ zJD+W9Ke#P$U!Olyg>4VhAJ&RZJ9qvJ|NHmvt!?UB3`$#x~&aSTg|L^az3Kv#~C44&Z`)s6SW#2NbD?Yc@ ze6y)Tciit!YUY27&+SZakWDLF5Tm!8nVC7&RauKci8tYBm#D9@va&gYIkUXd?Ia8L zlV?2EPtLts&37YOZ~AvW9-baeF_5Db-#1$HI$>fO$E$Y6=M9$~1b?V*IBjYEV2-r5Shv&z;fwVd zO3$aCe;$1{$8H114}}8u0^18Awf|q(n*24dR<1s9F7ZL;Ce^=JEWbxhQnAX92Zemm zkwP2s2)3Bmy?IRc*h{qMY8G-;F#Zt!u&DUmhMBUT?#&N1QPN^i3SPH*b#|QI^xc9H zoH5>I27%@mTG@E@uUHhYXoRk}TcF?a;d#)?5~q(HD;PSita;_*$ali>`6GctTALgX zho-QL#s=<9Gv2&SP3k7gKg)zIRePDh&4SPG6iiZ)IwKs&C@_(8bNcx{F};`@iD_@o?c`f<_l#PZ z>XuM$C-nl=3vqvc@4Py-_1dfN#jBnsirxI6balPD+!7N$pEvdT;rsax6nvFh`EOd? zwqJh*ZdU$SzUsPU!VSyvWxw*94_x^8_&9redwX+Tm(tdk@f$uy9Bulx@D%94R!>(y Jmvv4FO#o^LmR|q> literal 0 HcmV?d00001 diff --git a/.github/workflows/packaging.yml b/.github/workflows/packaging.yml new file mode 100644 index 00000000..0fa8dee9 --- /dev/null +++ b/.github/workflows/packaging.yml @@ -0,0 +1,73 @@ +name: Build LNbits AppImage DMG + +on: + release: + types: [published] + +jobs: + + build-linux-package: + runs-on: ubuntu-latest + steps: + # Step 1: Checkout the repository + - name: Checkout code + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + # Step 2: Install Dependencies + - name: Install Dependencies + run: | + curl -sSL https://install.python-poetry.org | python3 - + echo "$HOME/.local/bin" >> $GITHUB_PATH + sudo apt-get update + sudo apt-get install -y libfuse2 + shell: bash + + # Step 3: Clone LNbits Repository + - name: Clone LNbits + run: | + mv .github/packaging packaging + mkdir -p packaging/linux/AppDir/usr + git clone https://github.com/lnbits/lnbits.git packaging/linux/AppDir/usr/lnbits + shell: bash + + # Step 4: Make the AppImage Asset + - name: Make Asset + run: | + cd packaging/linux/AppDir/usr/lnbits + git checkout main + poetry install --main + poetry run pip install pyinstaller + + # Build the LNbits binary + poetry run pyinstaller --onefile --name lnbits --collect-all lnbits --collect-all sqlalchemy --collect-all aiosqlite --hidden-import=passlib.handlers.bcrypt $(poetry run which lnbits) + cd ../../../../.. + chmod +x packaging/linux/AppDir/AppRun + chmod +x packaging/linux/AppDir/lnbits.desktop + chmod +x packaging/linux/AppDir/usr/lnbits/dist/lnbits + + find packaging/linux/AppDir/usr/lnbits -mindepth 1 -maxdepth 1 \ + ! -name 'dist' \ + ! -name 'lnbits' \ + -exec rm -rf {} + + + wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage + chmod +x appimagetool-x86_64.AppImage + TAG_NAME=${{ github.event.release.tag_name }} + APPIMAGE_NAME="LNbits-${TAG_NAME}.AppImage" + ./appimagetool-x86_64.AppImage --updateinformation "gh-releases-zsync|lnbits|lnbits|latest|*.AppImage.zsync" packaging/linux/AppDir "$APPIMAGE_NAME" + chmod +x "$APPIMAGE_NAME" + echo "APPIMAGE_NAME=$APPIMAGE_NAME" >> $GITHUB_ENV + shell: bash + + # Step 5: Upload Linux Release Asset + - name: Upload Linux Release Asset + uses: actions/upload-release-asset@v1 + with: + upload_url: ${{ github.event.release.upload_url }} + asset_path: ${{ env.APPIMAGE_NAME }} + asset_name: ${{ env.APPIMAGE_NAME }} + asset_content_type: application/octet-stream + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/docs/guide/installation.md b/docs/guide/installation.md index db763bd6..d1f0f874 100644 --- a/docs/guide/installation.md +++ b/docs/guide/installation.md @@ -6,11 +6,23 @@ nav_order: 2 # Basic installation -The following sections explain how to install LNbits using varions package managers: `poetry`, `nix`, `Docker` and `Fly.io`. - Note that by default LNbits uses SQLite as its database, which is simple and effective but you can configure it to use PostgreSQL instead which is also described in a section below. -## Option 1 (recommended): Poetry +## Option 1: AppImage (LInux) + +### AppImage (Linux) + +Go to [releases](https://github.com/lnbits/lnbits/releases) and pull latest AppImage, or: + +```sh +wget $(curl -s https://api.github.com/repos/lnbits/lnbits/releases/latest | jq -r '.assets[] | select(.name | endswith(".AppImage")) | .browser_download_url') -O LNbits-latest.AppImage +chmod +x LNbits-latest.AppImage +./LNbits-latest.AppImage --host 0.0.0.0 +``` + +LNbits will create a folder for db and extension files in the folder the AppImage runs from. + +## Option 2: Poetry (recommended for developers) It is recommended to use the latest version of Poetry. Make sure you have Python version `3.12` installed. @@ -71,18 +83,6 @@ poetry install --only main # Start LNbits with `poetry run lnbits` ``` -## Option 2: Install script (on Debian/Ubuntu) - -```sh -wget https://raw.githubusercontent.com/lnbits/lnbits/main/lnbits.sh && -chmod +x lnbits.sh && -./lnbits.sh -``` - -Now visit `0.0.0.0:5000` to make a super-user account. - -`export PATH="/home/$USER/.local/bin:$PATH"` then `./lnbits.sh` can be used to run, but for more control `cd lnbits` and use `poetry run lnbits` (see previous option). - ## Option 3: Nix ```sh diff --git a/lnbits.sh b/lnbits.sh deleted file mode 100644 index 38518fba..00000000 --- a/lnbits.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/bash - -# Check install has not already run -if [ ! -d lnbits/data ]; then - - # Update package list and install prerequisites non-interactively - sudo apt update -y - sudo apt install -y software-properties-common - - # Add the deadsnakes PPA repository non-interactively - sudo add-apt-repository -y ppa:deadsnakes/ppa - - # Install Python 3.9 and distutils non-interactively - sudo apt install -y python3.9 python3.9-distutils - - # Install Poetry - curl -sSL https://install.python-poetry.org | python3.9 - - - # Add Poetry to PATH for the current session - export PATH="/home/$USER/.local/bin:$PATH" - - if [ ! -d lnbits/wallets ]; then - # Clone the LNbits repository - git clone https://github.com/lnbits/lnbits.git - if [ $? -ne 0 ]; then - echo "Failed to clone the repository ... FAIL" - exit 1 - fi - # Ensure we are in the lnbits directory - cd lnbits || { echo "Failed to cd into lnbits ... FAIL"; exit 1; } - fi - - git checkout main - # Make data folder - mkdir data - - # Copy the .env.example to .env - cp .env.example .env - -elif [ ! -d lnbits/wallets ]; then - # cd into lnbits - cd lnbits || { echo "Failed to cd into lnbits ... FAIL"; exit 1; } -fi - -# Set path for running after install -export PATH="/home/$USER/.local/bin:$PATH" - -# Install the dependencies using Poetry -poetry env use python3.9 -poetry install --only main - -# Set environment variables for LNbits -export LNBITS_ADMIN_UI=true -export HOST=0.0.0.0 - -# Run LNbits -poetry run lnbits \ No newline at end of file