summaryrefslogtreecommitdiff
path: root/extension/scripts/install_from_source.py
blob: b90794463b3e94bdc50f6705124475e564777ec9 (plain)
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# Run from extension/scripts directory

import os
import subprocess


def run(cmd, suppress_errors=False):
    return subprocess.run(cmd, shell=True, capture_output=suppress_errors)


def remove_existing_vsix_files(build_directory):
    # Ensure build directory exists
    if not os.path.exists(build_directory):
        os.mkdir(build_directory)
    for filename in os.listdir(build_directory):
        if filename.endswith(".vsix"):
            file_path = os.path.join(build_directory, filename)
            os.remove(file_path)


def return_vsix(build_directory):
    vsix_files = [
        filename
        for filename in os.listdir(build_directory)
        if filename.endswith(".vsix")
    ]
    return os.path.join(build_directory, vsix_files[0])


def main():
    # Clear out old stuff
    build_directory = "../build"
    remove_existing_vsix_files(build_directory)
    run("rm ../server/continuedev-0.1.2-py3-none-any.whl", True)


    # Check for Python and Node - we won't install them, but will warn
    resp1 = run("python --version")
    resp2 = run("python3 --version")
    if resp1.stderr and resp2.stderr:
        print("Python is required for Continue but is not installed on your machine. See https://www.python.org/downloads/ to download the latest version, then try again.")
        return

    resp = run("node --version")
    if resp.stderr:
        print("Node is required for Continue but is not installed on your machine. See https://nodejs.org/en/download/ to download the latest version, then try again.")
        return

    resp = run("npm --version")
    if resp.stderr:
        print("NPM is required for Continue but is not installed on your machine. See https://nodejs.org/en/download/ to download the latest version, then try again.")
        return

    resp = run("poetry --version")
    if resp.stderr:
        print("Poetry is required for Continue but is not installed on your machine. See https://python-poetry.org/docs/#installation to download the latest version, then try again.")
        return

    editor_cmd = None
    editor_name = None
    for cmd, editor in [('code', 'VSCode'), ('codium', 'VSCodium')]:
        resp = run(f"{cmd} --version", True)
        if resp.returncode == 0:
            print(f"{editor} version {resp.stdout.decode()}")
            editor_cmd = cmd
            editor_name = editor
            break

    if not editor_cmd:
        print("No code editor command is available. Please install a code editor and try again.")
        return

    resp = run("cd ../../continuedev; poetry install; poetry run typegen")

    resp = run("cd ..; npm i; cd react-app; npm i; cd ..; npm run package")

    if resp.stderr:
        print("Error packaging the extension. Please try again.")
        print("This was the error: ", resp.stderr)
        return

    run(f"NODE_OPTIONS='--no-warnings' {editor_cmd} --install-extension {return_vsix(build_directory)}")
    print(f"Continue extension installed successfully in {editor_name}. Please restart your editor to use it.")


if __name__ == "__main__":
    main()