File size: 1,276 Bytes
c466013
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import io, os, shutil, subprocess, urllib.request, zipfile
from pathlib import Path

REPO_ZIP = "https://codeload.github.com/egor19saz/csharp-notebook/zip/refs/heads/main"
HOME = Path.home()
DOTNET_DIR = HOME / ".dotnet"
DOTNET = DOTNET_DIR / "dotnet"
SRC = HOME / "notebook-src"
APP = HOME / "notebook-app"


def run(*args, **kw):
    print("+", " ".join(map(str, args)), flush=True)
    subprocess.run([str(a) for a in args], check=True, **kw)


if not DOTNET.exists():
    urllib.request.urlretrieve("https://dot.net/v1/dotnet-install.sh", "/tmp/dotnet-install.sh")
    run("bash", "/tmp/dotnet-install.sh", "--channel", "8.0", "--install-dir", DOTNET_DIR)

env = dict(os.environ,
           DOTNET_ROOT=str(DOTNET_DIR),
           PATH=f"{DOTNET_DIR}:{os.environ.get('PATH', '')}",
           DOTNET_CLI_TELEMETRY_OPTOUT="1",
           DOTNET_NOLOGO="1",
           DOTNET_SKIP_FIRST_TIME_EXPERIENCE="1")

shutil.rmtree(SRC, ignore_errors=True)
zipfile.ZipFile(io.BytesIO(urllib.request.urlopen(REPO_ZIP).read())).extractall(SRC)
project = next(SRC.iterdir()) / "CSharpNotebook.csproj"
run(DOTNET, "publish", project, "-c", "Release", "-o", APP, env=env)

env["Urls"] = "http://0.0.0.0:7860"
os.chdir(APP)
os.execve(str(DOTNET), [str(DOTNET), "CSharpNotebook.dll"], env)