From 782baa8f54bca659fdae60391147adbcad93d2bb Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Wed, 23 Sep 2020 11:19:49 +0200 Subject: [PATCH] Windows Release: Script creation of MSIX package Script create_msix_package.py will download the ZIP file from the given URL. It will create the MSIX package with the version number and publisher ID given. Strongly recommended are the path to a valid PFX file, and the password to use that PFX file. These are needed for signing the resulting MSIX package. The signing step is optional though, but the resulting MSIX package cannot be installed outside of the Microsoft Store Example set VERSION=2.83.2.0 set URL=https://download.blender.org/release/Blender2.83/blender-2.83.2-windows64.zip set PUBID=CN=PUBIDHERE set PFX=X:\path\to\cert.pfx set PFXPW=pwhere python create_msix_package.py --version %VERSION% --url %URL% --publisher %PUBID% --pfx %PFX% --password %PFXPW% Requirements: * Python default from the Microsoft Store should do (3.8) * requests can be installed with `pip install requests` Note that for an LTS release that gets uploaded to its own LTS application release in the store you need to specify the `--lts` switch on the command-line to the script. Upon completion there will be a file with the name blender-2.83.2.0-windows64.msix. In case PFX file and its password were given on the command line MSIX package will also be signed for the Microsoft Store. Related Wiki page: https://wiki.blender.org/wiki/Process/Release_On_Windows_Store Reviewed By: jbakker Maniphest Tasks: T77348, T79356 Differential Revision: https://developer.blender.org/D8310 --- release/scripts/addons | 2 +- .../windows/msix/AppxManifest.xml.template | 60 ++++++++ .../windows/msix/Assets/Square150x150Logo.png | Bin 0 -> 8864 bytes .../windows/msix/Assets/Square310x310Logo.png | Bin 0 -> 24649 bytes .../windows/msix/Assets/Square44x44Logo.png | Bin 0 -> 2098 bytes .../windows/msix/Assets/Square71x71Logo.png | Bin 0 -> 4297 bytes release/windows/msix/Assets/StoreLogo.png | Bin 0 -> 5265 bytes .../windows/msix/Assets/Wide310x150Logo.png | Bin 0 -> 10385 bytes release/windows/msix/README.md | 81 +++++++++++ release/windows/msix/create_msix_package.py | 135 ++++++++++++++++++ 10 files changed, 277 insertions(+), 1 deletion(-) create mode 100644 release/windows/msix/AppxManifest.xml.template create mode 100644 release/windows/msix/Assets/Square150x150Logo.png create mode 100644 release/windows/msix/Assets/Square310x310Logo.png create mode 100644 release/windows/msix/Assets/Square44x44Logo.png create mode 100644 release/windows/msix/Assets/Square71x71Logo.png create mode 100644 release/windows/msix/Assets/StoreLogo.png create mode 100644 release/windows/msix/Assets/Wide310x150Logo.png create mode 100644 release/windows/msix/README.md create mode 100644 release/windows/msix/create_msix_package.py diff --git a/release/scripts/addons b/release/scripts/addons index 1be0b3210d8..feca8c52897 160000 --- a/release/scripts/addons +++ b/release/scripts/addons @@ -1 +1 @@ -Subproject commit 1be0b3210d8a3a30e99a853b50703a7ca7e8ac1e +Subproject commit feca8c5289794a70bdd375be76fc4bc59d83c96b diff --git a/release/windows/msix/AppxManifest.xml.template b/release/windows/msix/AppxManifest.xml.template new file mode 100644 index 00000000000..9289a67efef --- /dev/null +++ b/release/windows/msix/AppxManifest.xml.template @@ -0,0 +1,60 @@ + + + + + Blender[LTSORNOT] + Blender Foundation + Blender [VERSION] is the Free and Open Source 3D creation suite + Assets\StoreLogo.png + + + + + + + + + + + + + + + + + + + + + + + + + + .blend + + + open + + + + + + + + + + + + diff --git a/release/windows/msix/Assets/Square150x150Logo.png b/release/windows/msix/Assets/Square150x150Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7dbbde793ba922142f6b66948d1ac7c65756d972 GIT binary patch literal 8864 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

6NgwX02^-nuqD?dq0Rg9uSH)Jd5<)9@84tJ3%us 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 Sl=l3WC?X@FC|)gU9Q=PsvJv6{ literal 0 HcmV?d00001 diff --git a/release/windows/msix/Assets/Square310x310Logo.png b/release/windows/msix/Assets/Square310x310Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2190415e35bd7e1c6abf00437399a82dce695d4c GIT binary patch literal 24649 zcmd3OgLfp)7w-fU+fFvx*mgGB*tRy##l+#FyNNc&h85E3C2WLN*wU{-#5Rj zED78K@9hW-S~4_rhC3s!dBt)pWLivXZkdⅆ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 literal 0 HcmV?d00001 diff --git a/release/windows/msix/Assets/Square44x44Logo.png b/release/windows/msix/Assets/Square44x44Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7b9ca070558a38a475933f6dbf0331224bf870b3 GIT binary patch literal 2098 zcmV-22+jA2P)WFU8GbZ8()Nlj2>E@cM*00)*yL_t(o!|hmWP?Xmh ze$F}j?R|v>B0>m=7ZNLqQL0WP+o%Xl)WF zj%mPHs)>chc!{RbBwiY-L5WmBYDkfQ!*bp0cR8m fwMU_~_k;GOwq_w0A}{hseV z&-=XZIlzz&*^u>VnMrI={poH3M)Fd&G3EY|Y_3let`E*ChyGo!IS3%cU^pLawD08_ zr)Q^0C$5c!fV%6fa{sUQddn3K?MD66LB>n(O=P*As(tpPQ1zUJc=>;Gnh(VC_C{V(}@Z5rBxe(h0y^x!Ss8OdKuj4XjW+us!^me|)0yTdXcD zgWIb>uVbKufDi&5qmXnA`%aw4s=@$m>`V6oI(mQU3`c0Hw;uAgHVS-;*^e}|PU z?yCSu2^nB9qptE#)$sJj-Ox+DvyKp;^k^lHSAHAVQN)I_EZ$0Tt|eZ7fLYlR^J6P# z=xcQp_I^4`m?q}| z%fcm}M-f-THA2Ge2$V>Z9*p+SI3Wa569XE}T@H{Q&M5(YoTRgaM3@WEqFiIvA09Sd zwi%EaE2mv%YHQ5h1 zC7J?&RKC*k$^&WA7rm{2)fK)uZIg5E17lfh*oR*_2JUY0uf+b%Ps3(5_6n8@f%jg> z$8ftfuw!kx6v9A_1D{m$MnB-XHm71>u^{Fw`x#t_z;Z;RT zNR0I+xQ=cNQi0F@{0tV%nh2-I2d}KaC#&dm`;as|8h_ug6f-A{3RJw(6%f9TkY_t( zaSDI}Ko9_A!-K|&Pi9IL;eaX{T0f{%@>YN3Jz_Nw+3CBgE}#9}{L;ALY+VQ^Wf!6! z-vwj(f?z+YhRWLS;gwa4Oo%~Z+_0egzVjcWZO1}@N+B37H1prie9N@~0M`K!lN0HT za9}-(xHNr>bC$}<_W+bGuoz|_;-PolfBNrQ+ZsY31xML}_P;I$7O601Xx=miT60aW99A6{(fr!oXfIt67Ayc918*h?rsKm zHG?~w0Lprmc`l&LFLI}xYvPSg-&MIG0AP{`Jc?jlQ6^paqKSSsg|TL$dnMcOlX>aV zfe6o8BJR0_0Dt{UdB(;gzH%UN#Ki!htAdJd7mwue9tC{wd9^O>4t6Fjj^^~%6a_Of zBCy(lYBleLgT5m=8eHKA>mbE2Z@g~YoAXV_DS_!m9B~2VcZa?Az4MiFR^yOE(qk~t zN(@?66L0>yfxnxPz|3(Lk~xr_c2$$M`KLQQIr}eYwL(C>=|@#23Dl#2{$iT`p8Uzu z6G>4d*PMznvcE5>f3pJR|V5V1i5pw4g-7or#&*Rdvf2ZbDAL= cvfIM`4>@xIy-HC?T>t<807*qoM6N<$f}LpJ-~a#s literal 0 HcmV?d00001 diff --git a/release/windows/msix/Assets/Square71x71Logo.png b/release/windows/msix/Assets/Square71x71Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..75bd9bb264ac72683f4ba43bfc76472a0f8198a3 GIT binary patch literal 4297 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 literal 0 HcmV?d00001 diff --git a/release/windows/msix/Assets/StoreLogo.png b/release/windows/msix/Assets/StoreLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..e8a671b7e0fcc6a1e63fd7642b7620cd6458a854 GIT binary patch literal 5265 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 Xh0DbDkS--t00000NkvXXu0mjf{Tba} literal 0 HcmV?d00001 diff --git a/release/windows/msix/Assets/Wide310x150Logo.png b/release/windows/msix/Assets/Wide310x150Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..59f5736393ae5abe07aa32e9484d1ee40208d90e GIT binary patch literal 10385 zcmbVS1yfv2l$}8b0>LG?dvJFjEI7d-xI4iHcY+6ZwM;w#t#$y5<64S4(S$nPji zg0-MH%jvoS0Pk@AyMTbqY(iKgvb+2z8RQ*gGBgg#?vX863xL!{Q^#G($-%+G(fz+~ zfRw9+iMxe4g{O_XH3eAyld3tZ1u_6Y0g#uL(DYh4$?^0un9q3YIup2qRveAjWkLqf zR|6RbuW=)wICT#e^(e&ZCP}pRqmJ0TS@w1IUkE(Xz60KehK6E;3i{ohlir=Ke`ooV zI?r>H>gFFXCYKu4UB^THXYWOLQh3H}a;!t}Zf(+ULjxFYLim3_(8^l97QXO-!I*wQS{4)& zNXKQJW41$Fr*$ETehM2Cf&@2sz6bBdb~2#d<_w65oL>@ni7T8++-GVgtCxcfOfp}a zh7;ec8hBl{iciwUMX>Iq!IcXl36!%T)gW5WL78J+-4=bgQ=v}<%E6t_u!)Gbjhse2Vzr$E|7Y}rs$J{lbmboYc)i!Ued5JSl16vkT(I& zPsL><9ULLDu2}3JqzU1AZz%{giA%&<``;c=2L5J=!p{eP@!gC7%_J~P+|5=*4-#(| zPpy9DF28MHfKc)JgSc3D_wI}H75auTD10Y(I|nor`aN0XWkQ;$deG9jO&m*H_I|n6 zzAb-pG!$!bDeXb4Vs*h{&rp`B&a+5Oi5Q^DlNbOe3E2Xq*(LFnTdco7Txq|u-t%Zs z5Cp~pa3XxvKET!zt$N8a=6jLbv-_iJ=kRwzkxC_hyZOaF&pfq{KY2EB5V&$IFri{} zaV9$UO1DS2SZGvr;jc2F)bN8kT0Vr-HMf>Gk`fcRb0GVpv=a;8o}V)@angwOCje%W zg0!k1EA#>R56=R z;;62M|4%Z=@^4#-`00Ux%js9H%I^eCtv}naR}$w|i}Ihc;rnWq(qp1O0lF1e*Ge;r zEZn@~(#_;Uxi|o^Ala%sOCzyW;XbRW@aE%od`60fy$c7l=-3ZPBeaHIllJbODoj{y z;N3`hV8}PF%K?NfzH(QiFn%Ya66=RPA5Q`#GVI=(B|AatB> zGFrohM@pna3CYG943k}^nOHh?E8Z%HeWhQ5G&Jyu`^@3d#c}dCDy}l`JdWnMWJgqU z^XUASSVD^=Fn{&trw7a$*wxY2ns|3CJ^=T7{u{*26h1#PznM&vwEEQ9PNh0gP>h03 zK1jS&eYQp>$x?fGwk$1bFs-=-xn1*m@V_2*uJ8a_kaaZm#euEWe7nN3Zmv|4lDv0@ zV1kPJ@^30{C?XDeThsLVGIm&WUql!Tz~Li=Ob+}hsWFe+NS;z($>z28qlxn5OOgwM z{)UU!aI;LbdVN>3{jk(oC?PZBdW?R~&tp-`p(I-;L(=�UyD~C99eFv>bi*Pt3PK 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 G!T$qKuGGE& literal 0 HcmV?d00001 diff --git a/release/windows/msix/README.md b/release/windows/msix/README.md new file mode 100644 index 00000000000..8967a655e3d --- /dev/null +++ b/release/windows/msix/README.md @@ -0,0 +1,81 @@ +create_msix_package +=================== + +This tool is used to create MSIX packages from a given ZiP archive. The MSIX +package is distributed mainly through the Microsoft Store. It can also be +installed when downloaded from blender.org. For that to work the MSIX package +needs to be signed. + +Requirements +============ + +* MakeAppX - this tool is distributed with Windows 10 SDK +* SignTool - this tool is also distributed with Windows 10 SDK +* Python 3 (3.7 or later tested) - to run the create_msix_package.py script +* requests module - can be installed with `pip install requests` +* PFX file (optional, but strongly recommended) - for signing the resulting MSIX + package. **NOTE:** If the MSIX package is not signed when uploaded to the Microsoft + store the validation and certification process can take up to three full + business day. + +Usage +===== + +On the command-line: +```batch +set VERSION=2.83.4.0 +set URL=https://download.blender.org/release/Blender2.83/blender-2.83.4-windows64.zip +set PUBID=CN=PUBIDHERE +set PFX=X:\path\to\cert.pfx +set PFXPW=pwhere + +python create_msix_package.py --version %VERSION% --url %URL% --publisher %PUBID% --pfx %PFX% --password %PFXPW% +``` + +Result will be a MSIX package with the name `blender-2.83.4-windows64.msix`. +With the above usage it will be signed. If the signing options are left out the +package will not be signed. + +Optional arguments +================== + +In support of testing and developing the manifest and scripts there are a few +optional arguments: + +* `--skipdl` : If a `blender.zip` is available already next to the tool use this + to skip actual downloading of the archive designated by `--url`. The latter + option is still required +* `--overwrite` : When script fails the final clean-up may be incomplete leaving + the `Content` folder with its structure. Specify this argument to automatically + clean up this folder before starting to seed the `Content` folder +* `--leavezip` : When specified leave the `blender.zip` file while cleaning up + all other intermediate files, including the `Content` folder. This is useful + to not have to re-download the same archive from `--url` on each usage + + +What it does +============ + +The tool creates in the directory it lives a subfolder called `Content`. This is +where all necessary files are placed. + +The `Assets` folder is copied to the `Content` folder. + +From the application manifest template a version with necessary parts replaced as +their actual values as specified on the command-line is realized. This manifest controls the packaging of Blender into the MSIX format. + +Next the tool downloads the designated ZIP archive locally as blender.zip. From +this archive the files are extracted into the `Content\Blender` folder, but skip +the leading part of paths in the ZIP. We want to write the files to the +content_blender_folder where blender.exe ends up as +`Content\Blender\blender.exe`, and not +`Content\Blender\blender-2.83.4-windows64\blender.exe` + +Once the extraction is completed the MakeAppX tool is executed with the `Content` +folder as input. The result will be the MSIX package with the name in the form +`blender-X.YY.Z-windows64.msix`. + +If the PFX file and its password are given on the command-line this MSIX package +will be signed. + +All intermediate files and directories will be removed. diff --git a/release/windows/msix/create_msix_package.py b/release/windows/msix/create_msix_package.py new file mode 100644 index 00000000000..69b0a2ef901 --- /dev/null +++ b/release/windows/msix/create_msix_package.py @@ -0,0 +1,135 @@ +#!/usr/bin/env python3 + +import argparse +import os +import pathlib +import requests +import shutil +import subprocess +import zipfile + +parser = argparse.ArgumentParser() +parser.add_argument("--version", required=True, help="Version string in the form of 2.83.3.0") +parser.add_argument("--url", required=True, help="Location of the release ZIP archive to download") +parser.add_argument("--publisher", required=True, help="A string in the form of 'CN=PUBLISHER'") +parser.add_argument("--pfx", required=False, help="Absolute path to the PFX file used for signing the resulting MSIX package") +parser.add_argument("--password", required=False, default="blender", help="Password for the PFX file") +parser.add_argument("--lts", required=False, help="If set this MSIX is for an LTS release", action='store_const', const=1) +parser.add_argument("--skipdl", required=False, help="If set skip downloading of the specified URL as blender.zip. The tool assumes blender.zip exists", action='store_const', const=1) +parser.add_argument("--leavezip", required=False, help="If set don't clean up the downloaded blender.zip", action='store_const', const=1) +parser.add_argument("--overwrite", required=False, help="If set remove Content folder if it already exists", action='store_const', const=1) +args = parser.parse_args() + +def execute_command(cmd : list, name : str, errcode : int): + """ + Execute given command in cmd. Output is captured. If an error + occurs name is used to print ERROR message, along with stderr and + stdout of the process if either was captured. + """ + cmd_process = subprocess.run(cmd, capture_output=True, encoding="UTF-8") + if cmd_process.returncode != 0: + print(f"ERROR: {name} failed.") + if cmd_process.stdout: print(cmd_process.stdout) + if cmd_process.stderr: print(cmd_process.stderr) + exit(errcode) + +LTSORNOT = "" +PACKAGETYPE = "" +if args.lts: + versionparts = args.version.split(".") + LTSORNOT = f" {versionparts[0]}.{versionparts[1]} LTS" + PACKAGETYPE = f"{versionparts[0]}.{versionparts[1]}LTS" + +blender_package_msix = pathlib.Path(".", f"blender-{args.version}-windows64.msix").absolute() +content_folder = pathlib.Path(".", "Content") +content_blender_folder = pathlib.Path(content_folder, "Blender").absolute() +content_assets_folder = pathlib.Path(content_folder, "Assets") +assets_original_folder = pathlib.Path(".", "Assets") + +local_blender_zip = pathlib.Path(".", "blender.zip") + +if args.pfx: + pfx_path = pathlib.Path(args.pfx) + if not pfx_path.exists(): + print("ERROR: PFX file not found. Please ensure you give the correct path to the PFX file on the command-line.") + exit(1) + print(f"Creating MSIX package with signing using PFX file at {pfx_path}") +else: + pfx_path = None + print("Creating MSIX package without signing.") + +msix_command = ["makeappx", + "pack", + "/h", "SHA256", + "/d", f"{content_folder.absolute()}", + "/p", f"{blender_package_msix}" + ] +if pfx_path: + sign_command = ["signtool", + "sign", + "/fd", "sha256", + "/a", "/f", f"{pfx_path.absolute()}", + "/p", f"{args.password}", + f"{blender_package_msix}" + ] + +if args.overwrite: + if content_folder.joinpath("Assets").exists(): + shutil.rmtree(content_folder) +content_folder.mkdir(exist_ok=True) +shutil.copytree(assets_original_folder, content_assets_folder) + +manifest_text = pathlib.Path("AppxManifest.xml.template").read_text() +manifest_text = manifest_text.replace("[VERSION]", args.version) +manifest_text = manifest_text.replace("[PUBLISHER]", args.publisher) +manifest_text = manifest_text.replace("[LTSORNOT]", LTSORNOT) +manifest_text = manifest_text.replace("[PACKAGETYPE]", PACKAGETYPE) +pathlib.Path(content_folder, "AppxManifest.xml").write_text(manifest_text) + +if not args.skipdl: + print(f"Downloading blender archive {args.url} to {local_blender_zip}...") + + with open(local_blender_zip, "wb") as download_zip: + response = requests.get(args.url) + download_zip.write(response.content) + + print("... download complete.") +else: + print("Skipping download") + +print(f"Extracting files from ZIP to {content_blender_folder}...") + +# Extract the files from the ZIP archive, but skip the leading part of paths +# in the ZIP. We want to write the files to the content_blender_folder where +# blender.exe ends up as ./Content/Blender/blender.exe, and not +# ./Content/Blender/blender-2.83.3-windows64/blender.exe +with zipfile.ZipFile(local_blender_zip, "r") as blender_zip: + for entry in blender_zip.infolist(): + if entry.is_dir(): continue + entry_location = pathlib.Path(entry.filename) + target_location = content_blender_folder.joinpath(*entry_location.parts[1:]) + pathlib.Path(target_location.parent).mkdir(parents=True, exist_ok=True) + extracted_entry = blender_zip.read(entry) + target_location.write_bytes(extracted_entry) + +print("... extraction complete.") + + + +print(f"Creating MSIX package using command: {' '.join(msix_command)}") + +# Remove MSIX file if it already exists. Otherwise the MakeAppX tool +# will hang. +if blender_package_msix.exists(): + os.remove(blender_package_msix) +execute_command(msix_command, "MakeAppX", 2) + +if args.pfx: + print(f"Signing MSIX package using command: {' '.join(sign_command)}") + execute_command(sign_command, "SignTool", 3) + +if not args.leavezip: + os.remove(local_blender_zip) +shutil.rmtree(content_folder) + +print("Done.")