aboutsummaryrefslogtreecommitdiff
path: root/labbot/__main__.py
blob: 9f0e3baf4ce7ea584daaa486392a51df3434ebb7 (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
import click
from typing import List
from importlib import import_module

from labbot.config import read_config, write_config
from labbot.bot import Bot

@click.group()
def main():
    pass

@main.command(help="Create a new instance")
@click.option("--name", prompt=True, help="Name the instance will be given")
@click.option("--access_token", prompt=True, hide_input=True, help="Access Token to interact with the API")
@click.option("--secret", prompt=True, default="", help="Secret to receive webhook requests [can be empty]")
def setup(**data):
    instance_name = data.pop("name", "").replace(" ", "_").lower()

    if not read_config(instance_name):
        write_config(instance_name, data)
        click.echo(f"You can start your instance by running `lab-bot run {instance_name}`")
    else:
        click.echo(f"an instance with the name {instance_name} already exists")

@main.command(help="Configure an existing instance")
@click.argument('name')
@click.option("--access_token", required=False)
@click.option("--secret", required=False)
def config(name, **data):

    data = {k:v for k,v in data.items() if v}

    conf = read_config(name)
    if conf:
        if data:
            conf.update(data)
            write_config(name, conf)
            click.echo("configured")
        else:
            click.echo(f"nothing to change")
    else:
        click.echo(f"{name} is not an instance")
    pass


def load_addons(instance: Bot, addons: List[str]):
    for addon in addons:
        import_module(f"labbot.addons.{addon}").setup(instance)
        click.echo(f"Imported {addon}")

@main.command(help="Run an instance")
@click.option("--port", default=8080)
@click.argument('name')
def run(name, port):
    conf = read_config(name)

    if not conf:
        click.echo(f"{name} is not an instance")
        return

    instance = Bot(
            secret=conf["secret"],
            access_token=conf["access_token"]
        )

    load_addons(instance, [
            "merge-label",
            "approve-merge"
        ])

    click.echo(f"Started {name}")

    instance.run(
        port=port
    )



if __name__ == "__main__":
    main()