From d058f17c155c31bcfd8ba1a4b78df6f009fad1b0 Mon Sep 17 00:00:00 2001 From: befr Date: Tue, 2 Aug 2022 10:28:13 +0200 Subject: [PATCH] add logic to build blenderbim-nightly chocolatey package --- choco/blenderbim/blenderbim.nuspec | 34 ++++++++ choco/blenderbim/blenderbim.png | Bin 0 -> 5056 bytes choco/blenderbim/check_repo_infos.py | 78 ++++++++++++++++++ choco/blenderbim/fill_dynamic_parameters.py | 49 +++++++++++ .../tools/chocolateybeforemodify.ps1 | 11 +++ choco/blenderbim/tools/chocolateyinstall.ps1 | 29 +++++++ .../blenderbim/tools/chocolateyuninstall.ps1 | 22 +++++ .../tools/disable_blenderbim_addon.py | 8 ++ .../tools/enable_blenderbim_addon.py | 8 ++ 9 files changed, 239 insertions(+) create mode 100644 choco/blenderbim/blenderbim.nuspec create mode 100644 choco/blenderbim/blenderbim.png create mode 100644 choco/blenderbim/check_repo_infos.py create mode 100644 choco/blenderbim/fill_dynamic_parameters.py create mode 100644 choco/blenderbim/tools/chocolateybeforemodify.ps1 create mode 100644 choco/blenderbim/tools/chocolateyinstall.ps1 create mode 100644 choco/blenderbim/tools/chocolateyuninstall.ps1 create mode 100644 choco/blenderbim/tools/disable_blenderbim_addon.py create mode 100644 choco/blenderbim/tools/enable_blenderbim_addon.py diff --git a/choco/blenderbim/blenderbim.nuspec b/choco/blenderbim/blenderbim.nuspec new file mode 100644 index 0000000000..16c878bc12 --- /dev/null +++ b/choco/blenderbim/blenderbim.nuspec @@ -0,0 +1,34 @@ + + + + + blenderbim-nightly + blenderbim_build_version + https://github.com/IfcOpenShell/IfcOpenShell + fbpyr + + BlenderBIM install nightly + Dion Moult and many more, see: https://github.com/IfcOpenShell/IfcOpenShell/graphs/contributors + https://github.com/IfcOpenShell/IfcOpenShell + https://rawcdn.githack.com/fbpyr/IfcOpenShell/9662598ad4a7e4b6cd8980e430d07263835d0eda/choco/blenderbim/blenderbim.png + + https://github.com/IfcOpenShell/IfcOpenShell/blob/v0.7.0/COPYING + true + https://github.com/IfcOpenShell/IfcOpenShell + https://blenderbim.org/docs/ + + https://github.com/IfcOpenShell/IfcOpenShell/issues + blender bim blenderbim python opensource foss + opensource bim + opensource bim addon for blender + + + + + + + + + + + diff --git a/choco/blenderbim/blenderbim.png b/choco/blenderbim/blenderbim.png new file mode 100644 index 0000000000000000000000000000000000000000..3df402d81759048e743c9d4c4d81afb61d7fd318 GIT binary patch literal 5056 zcmV;x6F=;UP)AsdSU?b%nf;v~pivaq1A9+nzt6*;dDhHctoPkt+uvH7 z!ScW+j2zxy1I|Oixc&sbA2`+rMBNxTR|2^LumxZZz@hOw)d1=N)H1LN0$%}eS3vxE z2Cjq$e_BcW$=!#JoB==O(wL*GIyE)5P8NX3i175ZzTx69 zj$>>p7$yU7HqoixAYeO)zA3NK?I|oQ)W`y82gU~Zx^tk{IIvd;=wW7e)@1^=l8*l* zJ-gtzEC4+art%%hh|MLU36>D20LW&Htw=q1c$cXKk*2h`EG*b(3K4sc0Z+g(@iP$? zrDx^sFcl$~gaE>W{lWoSOaw1<3>*Pbd|Fn1dWRN3SitZBP$-fCOh88jVIQy1MeR`^ zIo6>BFwx7)USqFV48~>vP@-c)!-&1_sAUVc<>ub9cmaf}{KhbzHUM}SGVVqZ1HF-& znZMs61)x%?Y;E|Og$yhP04MX^j8g#qX;rO_+F4jwV=)2<3-lcV4qt)bDRV3cM@h#& zXNdZNS9@2*ZM3~Ut|p1jG>4^{x1 z;@;QI>4meU`wmJ}H;}{yM0k2ySGhWT4zQ^*kD}1@LoH|fyjrcUHF*K3R4PYX{?>N@ z#>vEqiUX_;Q&RKtDos`ZAtAm!tTgxuz%ZFF3G4tvp-!V1zb7Z>ipdEeOy$=PJnaSW zs7#flY1=8{*tj(H;S!S(KzLwaH{$BEKo}rXWQb}36>|z2`IEZfPot-S;l94k#Ol*z z@(t<>9^rW|eTwRd&PEkLgr}!9Z1An@^NoTbwY<&u;o;#nMiD>)z*V_AeL=ujnG2&~ z6kl`o>xhVmHrI37{6*U!-xLPCCUao)pzv|c%}U#%a~Jj*EC>t@@_C+teJQ?cW9Z!3 z1vYkeW<|n{>(_9rrpB04AR_#CdRE?c$psJ==sN@qxd80NnmxyHnEL$RG3lA9aB=Bk zmUrUmqCc>4!^bGhKWwZiRPf-R+>=>wUNRS;QmJf}(53=#6LaQ~bK>yyvoFBT%4gD#s>MigRxMVQp*wn zBTNn-?f*!t0#Fir9hPw{i!6dBmx6|WwM7AVd3jk8qrZ0)vN(1W$e-i^e2Y~<_{pDwD-0(5}`0a#f z*U;&7Sh=_%kqR0WBCJjj9eby~AQ5_Yb+QftkoG_eKp>0X%NH^(97!qb;4ydzSfd3P zI&3&rf4BjD0fC}k>$V64TY^Rrj0_$nVJyH;d!P$YsZ_QgOtN(HXU$sxh2s7;2rDZq z%uh@*2@$*<6$2|PX&%22VM>Ijr}cdTutA*)rh5XXXymu#^OYtd0vDGq7%)(p;}jUs zxw4y6(0u}EJbSmpl5YqRZ2jW@!Slk}_3RxSqziuezaH>$cPS&hqmwVC2zt5o#*$TQ z1kHnZ9;b^=Nmvy6i)#*OIC7l;cbR-?M9{rQPb8(RgG(1zLF4zOr=q;aEjv@}vCUm6i~aqWtvly&IdLs)iw^7v7Fyk@llR!Hf8M*sx!w z&utM1Y5Zsk=T4oGl)M(b+_^Ds-#pF@1~OjK1?8fKx0d;ow;Xb{0*OELR%7c3G? zes0!5{8Ct;mk5No16x}=EMD9TON>XtylDJO4-vHH4wP0_n7=3q9)pJn`pxpPE0{lf1}e(S4ZUQY#*g;z z!*N6dJKCL}lcmPu__@$%G^nquLtk|)iDw&7t#S92qOPJE(Zv!9=v zjU@|WA87WQLw#Kx7PcUQ9p7!k=Nmu4voF1ZX)g*p(3|IZtX#4X1&4D?X*pdv5X|OG zmJxx$qWOFwB6v_tkhW_()~`#!87}>_DYz^S^l1bhM=>H zi^0fmDuSn`K8J6<+>D@6A(#;z3&w;sPJi;z2T0qs-Bg#=hBFrdCT~uI(z1{pmDagc8FiR9M(2AqF#U4 za391aCPAqb_LjSCUww`(n>V3XZ`01QIRN$MAb=~E|3prfT9~^SJQVX1mWcL5&~xxm zELgfiaHHnVAHK!L4Ikl|=U&A6O<#)MUM3>y%tinJux4cv&Xt@IG}bR55bw^OE7(^z z2loL3k+>omwzk5~Fx;EE8~^wq851Tyg;(F0E?JMEm;$Ia7XegNRw8cp3|zS^?3nz} z36lh;Y7auc{*PeE>NRk15caS%J5!AhRwZHd*f30wjJ_kj_B549jB1X7U4teVtxzy^)l%7S7I{1dY$jIfUhj@fa~O2(#ub0BaH`>eEkP zFfdebL{ttl!}+r%cyCS=Zru{rI`zNrL}E;s@b^=9?baPjlh+Dv;{5l|N05{dhapc4 z!<+?+n#~eS&JqwS=fJ`21ONcPpFDx2gg8Oz9%BqMqhm45+qc!RE?r!)e9cGb(eoie z^Ei3@C=%mh(C^_#k&v{i)j-j-ECFA^fv0mYQyj_5#hMjMLDc#?6_r+2h+n)Mk3H_u z>=JKcKGYhwF-9pKkVw^bktKgc3DFlX$xDt+mD}fm!V^6B!W901Y z?67!c3VQdszXihH!2wHFuR*{5!VW|&J%0`hVj@v}vkE}Nvjef)%M4HiDB*O(pMjZU z$M@Ut?UpYDjdkwS8A&PY(5-uqJD=Iu+9Gk;YQasMmoAn*u!*y^r-;qD17nGRXY34T z1^xsq02?=agnend1qXSHR;0ke(FxYp)<{TNg+W7~6!hJ)E0-}Z>YZkrIK}KSlspFH zwZ|2w&Rx9zXkWJ|05--T&fCww#htJkjRxO*xmnO}<>zMO(Z?PaRDSL3(gmJFhQilB zP2ye1I3FjE9~Cs-bMR2XO`KJgm57`5uHYt4ecQ_n9vBji0wAuT9>5A< zA-LUhC$wZN1U1#wh>wXx$?0Of=h7At3>`LH`V4>}uOSWuK#a0sL8z*%#Qf-)D7$i5 zG(oksiL)&tm=zl@>ejXg*MJ&0Z`>VhWl;hE8h6}8&lFrTZZ7^<6hF7!O`Q6QpnH#= zf-{mfXMl`y?+9RTcJ@U8e^{Cb&Yvwo!rZp)w$4vIF90RuhoUeZdzslcuz0E&8jM_UApf}bJ&~%yKHZkTbqT;jmMnsAw|s$}KYWWv+#dt4<57I-_crYw zGB@%8{CTBXd!UIR{(@Sq))HtlIsocwYjNV}ulVi6F;U5X^sxb0ymF0T^3R_wLEP*a zh9DmV`n0gHP}8gc8a`3{Uqh@Qqb=koC9i{%v$J6G=SEJ)wW}3|m>wy4e&YjN!o5gW z=N7?2YXTjZd;qj-_n{-FTNOY+rxr<^8xr6bCK=r?67IecP1$SmoBcbv9&d| zRIe%h1! zN=_FeX2zSwA|GIE;jaC;rR^2~061#dLI6cl%=5zea~4UyaRR@OuFJxyO1POdCoJ2TWR;>*ZdiU!s000OL@b+X1E)ReMWSA1l8HXoR z)p-~6`I6qZT6%WDaWHxb@*`tY0s-tbeaY7=251rw{N~=*%?W_Ny!IvlhUICQc^|js zt8I3+KACxQs7ZgB45N_$weP{a__lt%%>qaS`0{G)O90Yk7L11d%)ZMji2&br{j?L4 z0s@>gO6>t6c*%Si6h~?~yHRSj`eyqKhzOXd^6IJ~QkT04AxQ&nyA6F|4+Xa!Ug);s!`@B{$VNXtu zXs;F*wd9tOkzY~E*^QM0Lx}>uI)sQxew*t6Euo~Or2a|A&fnBKSi7U){j@ULkMCPblhl_oB+kwGfY**8f!aXo7_sz_E>$8#)jT9G97S1BV}F%As-x@mZm;jBK3t7hWKxa zN=hr;9(Mm+Njd@$B)fzbOg^x#tXlhQR&Ieo-s50!BEkbl1QW-91cIl`_dPgDjHWlY zgU75bz&+OB+=a7l{oOxNkoGDA0$`*gYE1|=084VJxcSnKf?o`NaJNxS@z{WXzbQEF zaxlEq5t(OKbx2(+0~D*u_fKd0DKCutV>xJso`+MsR>BYqkYrZAwhiB9zzBm799 zt+fjK47FNq^84P*t{@ZP>1lnVt79<7Qy3Tv1K?rg6+F%eX*|c$oXe^*?>>alEHV*u zkE+J2ynE_&Tma)(0Em3h@B~t-qqc8=a1&FNK3Dh4z zKO*#DKz9JHjequNI2_~lVSZHrv;b-VQ~;;|!({;H8Q2+~u`>#eo&0Hk&RI)atN#E! WSV5!pM$9t+0000Blender (\d+\.\d+\.\d+)" + url = "https://community.chocolatey.org/packages/blender" + resp = request_repo_info(url) + html_txt = str(resp.read()) + found = re.findall(re_blender_version_min_maj_pat, html_txt) + if found: + print(found[0], end="") + + +elif sys.argv[1] == "--latest_blender_release_min_maj?": + re_blender_version_min_maj = r"Latest Version.+Blender (\d+\.\d+)\..+" + url = "https://community.chocolatey.org/packages/blender" + resp = request_repo_info(url) + html_txt = str(resp.read()) + found = re.findall(re_blender_version_min_maj, html_txt) + if found: + print(found[0], end="") + +elif sys.argv[1] == "--latest_blender_python_version_maj_min?": + # get latest blender version first + re_blender_version_min_maj_pat = r"Latest Version.+Blender (\d+\.\d+\.\d+)" + url = "https://community.chocolatey.org/packages/blender" + resp = request_repo_info(url) + html_txt = str(resp.read()) + found = re.findall(re_blender_version_min_maj_pat, html_txt) + if found: + latest_blender_version_tag = f"v{found[0]}" + re_blender_python_version_maj_min = r"SET\(PYTHON_VERSION (\d+.\d+) " + url = f"https://raw.githubusercontent.com/blender/blender/{latest_blender_version_tag}/build_files/cmake/Modules/FindPythonLibsUnix.cmake" + resp = request_repo_info(url) + html_txt = str(resp.read()) + found = re.findall(re_blender_python_version_maj_min, html_txt) + if found: + print(found[0], end="") + + +elif sys.argv[1] == "--pyver?": + # get latest blender version first + re_blender_version_min_maj_pat = r"Latest Version.+Blender (\d+\.\d+\.\d+)" + url = "https://community.chocolatey.org/packages/blender" + resp = request_repo_info(url) + html_txt = str(resp.read()) + found = re.findall(re_blender_version_min_maj_pat, html_txt) + if found: + latest_blender_version_tag = f"v{found[0]}" + re_blender_python_version_maj_min = r"SET\(PYTHON_VERSION (\d+.\d+) " + url = f"https://raw.githubusercontent.com/blender/blender/{latest_blender_version_tag}/build_files/cmake/Modules/FindPythonLibsUnix.cmake" + resp = request_repo_info(url) + html_txt = str(resp.read()) + found = re.findall(re_blender_python_version_maj_min, html_txt) + if found: + print(f"py{found[0].replace('.', '')}", end="") + diff --git a/choco/blenderbim/fill_dynamic_parameters.py b/choco/blenderbim/fill_dynamic_parameters.py new file mode 100644 index 0000000000..738a779b91 --- /dev/null +++ b/choco/blenderbim/fill_dynamic_parameters.py @@ -0,0 +1,49 @@ +import os +from pathlib import Path + + +print("[INFO] inserting dynamic chocolatey package parameters") +HERE_DIR = Path(__file__).parent.absolute() +# print(f"[INFO] HERE_DIR: {HERE_DIR}") + +topics = { + "spec": { + "path": HERE_DIR / "blenderbim.nuspec", + "env_vars": { + "latest_blender_version_maj_min_pat", + "blenderbim_build_version", + }, + }, + "install": { + "path": HERE_DIR / "tools" / "chocolateyinstall.ps1", + "env_vars": { + "url_blenderbim_py310_win_zip", + "sha256sum_blenderbim_py310_win_zip", + "latest_blender_version_maj_min", + }, + }, + "uninstall": { + "path": HERE_DIR / "tools" / "chocolateyuninstall.ps1", + "env_vars": { + "latest_blender_version_maj_min", + }, + }, +} + +for topic, info in topics.items(): + print(f"[INFO] {topic}:") + for env_var_name in info["env_vars"]: + print(f"[INFO] {env_var_name} exists?: {os.environ[env_var_name]}") + + with open(info["path"], encoding="utf-8") as txt: + content = txt.read() + + for env_var_name in info["env_vars"]: + # print(f"[INFO] replace: {env_var_name}") + content = content.replace(env_var_name, os.environ[env_var_name]) + + with open(info["path"], "w", encoding="utf-8") as txt: + txt.write(content) + print(f"[INFO] written: {info['path']}") + +print("[INFO] inserting dynamic chocolatey package parameters successful") diff --git a/choco/blenderbim/tools/chocolateybeforemodify.ps1 b/choco/blenderbim/tools/chocolateybeforemodify.ps1 new file mode 100644 index 0000000000..4aa0f65d59 --- /dev/null +++ b/choco/blenderbim/tools/chocolateybeforemodify.ps1 @@ -0,0 +1,11 @@ +$processName = "blender" +$blenderIsRunning = Get-Process -Name $processName -ErrorAction SilentlyContinue + +if($blenderIsRunning -eq $null) { + echo "Blender is not running ready for next action." +} +else { + Write-Warning "$processName is still running - installer cannot safely proceed to next action." + Write-Warning "Please retry after closing all running blender applications." + exit 1 +} diff --git a/choco/blenderbim/tools/chocolateyinstall.ps1 b/choco/blenderbim/tools/chocolateyinstall.ps1 new file mode 100644 index 0000000000..d79c87b1bb --- /dev/null +++ b/choco/blenderbim/tools/chocolateyinstall.ps1 @@ -0,0 +1,29 @@ +$ErrorActionPreference = 'Stop' + +$url64 = 'url_blenderbim_py310_win_zip' +$checksum64 = 'sha256sum_blenderbim_py310_win_zip' +$checksumType64 = 'sha256' + +$appDataUserDir = [System.Environment]::GetEnvironmentVariable('appdata') +$unzipTargetDir = "$appDataUserDir\Blender Foundation\Blender\latest_blender_version_maj_min\scripts\addons" + +$chocoBaseDir = [System.Environment]::GetEnvironmentVariable('ChocolateyInstall') +$addonEnable = "$chocoBaseDir\lib\blenderbim\tools\enable_blenderbim_addon.py" + +$programFilesDir = [System.Environment]::GetEnvironmentVariable('ProgramFiles') +$blenderExePath = "$env:ProgramFiles\Blender Foundation\Blender latest_blender_version_maj_min\blender.exe" + +$processName = "blender" +$blenderIsRunning = Get-Process -Name $processName -ErrorAction SilentlyContinue + + +if($blenderIsRunning -eq $null) { + echo "attempting to install blenderbim." + Install-ChocolateyZipPackage -PackageName $env:ChocolateyPackageName -Url64 $url64 -Checksum64 $checksum64 -checksumType $checksumType64 -UnzipLocation $unzipTargetDir + Start-Process -FilePath $blenderExePath -ArgumentList "-b", "-y", "--python", "$addonEnable" +} +else { + Write-Warning "$processName is still running - blenderbim cannot be safely installed." + Write-Warning "Please retry after closing all running blender applications." + exit 1 +} diff --git a/choco/blenderbim/tools/chocolateyuninstall.ps1 b/choco/blenderbim/tools/chocolateyuninstall.ps1 new file mode 100644 index 0000000000..7c319b2829 --- /dev/null +++ b/choco/blenderbim/tools/chocolateyuninstall.ps1 @@ -0,0 +1,22 @@ +$appDataUserDir = [System.Environment]::GetEnvironmentVariable('appdata') +$unzippedDir = "$appDataUserDir\Blender Foundation\Blender\latest_blender_version_maj_min\scripts\addons\blenderbim" + +$chocoBaseDir = [System.Environment]::GetEnvironmentVariable('ChocolateyInstall') +$addonDisable = "$chocoBaseDir\lib\blenderbim\tools\disable_blenderbim_addon.py" + +$programFilesDir = [System.Environment]::GetEnvironmentVariable('ProgramFiles') +$blenderExePath = "$env:ProgramFiles\Blender Foundation\Blender latest_blender_version_maj_min\blender.exe" + +$processName = "blender" +$blenderIsRunning = Get-Process -Name $processName -ErrorAction SilentlyContinue + +if($blenderIsRunning -eq $null) { + echo "attempting to uninstall blenderbim." + Start-Process -FilePath $blenderExePath -ArgumentList "-b", "-y", "--python", "$addonDisable" + Remove-Item -LiteralPath $unzippedDir -Force -Recurse +} +else { + Write-Warning "$processName is still running - blenderbim cannot be safely uninstalled." + Write-Warning "Please retry after closing all running blender applications." + exit 1 +} diff --git a/choco/blenderbim/tools/disable_blenderbim_addon.py b/choco/blenderbim/tools/disable_blenderbim_addon.py new file mode 100644 index 0000000000..c7355eb7d9 --- /dev/null +++ b/choco/blenderbim/tools/disable_blenderbim_addon.py @@ -0,0 +1,8 @@ +import bpy + + +bpy.ops.preferences.addon_disable(module='blenderbim') +bpy.ops.wm.save_userpref() + +print("disabled blenderbim addon successfully.") + diff --git a/choco/blenderbim/tools/enable_blenderbim_addon.py b/choco/blenderbim/tools/enable_blenderbim_addon.py new file mode 100644 index 0000000000..eae588e5f8 --- /dev/null +++ b/choco/blenderbim/tools/enable_blenderbim_addon.py @@ -0,0 +1,8 @@ +import bpy + + +bpy.ops.preferences.addon_enable(module='blenderbim') +bpy.ops.wm.save_userpref() + +print("enabled blenderbim addon successfully.") +