Update README

This commit is contained in:
Stéphane Bidoul 2021-10-28 18:19:16 +02:00
parent 5a42490077
commit d90ffad1aa
No known key found for this signature in database
GPG key ID: BCAB2555446B5B92
5 changed files with 46 additions and 14 deletions

View file

@ -19,32 +19,46 @@ For running the controller:
with permissions to create and delete service, deployment, ingress, secret and with permissions to create and delete service, deployment, ingress, secret and
configmap resources. configmap resources.
## Developing
- setup environment variables (start from `.env.sample`)
- create a virtualenv, make sure to have pip>=21.3.1 and `pip install -e .`
- run with `uvicorn runboat.app:app --reload --log-config=log-config-dev.yaml`
## Author and contributors
Authored by Stéphane Bidoul (@sbidoul).
Contributions welcome.
## TODO ## TODO
Prototype: Prototype (min required to do load testing):
- plug it on a bunch of OCA and shopinvader repos to test load - plug it on a bunch of OCA and shopinvader repos to test load
- handle init failures, add failed status - handle init failures, add failed status
- basic API - configuring many repos in a .env file may be difficult, switch to a toml file ?
MVP: MVP:
- finish api - deployment and more load testing
- build/log and build/init-log api endpoints - build/log and build/init-log api endpoints
- report build status to github - report build status to github
- secure github webhooks
- k8s init container timeout - k8s init container timeout
- error handling in API - better error handling in API (return 400 on user errors)
- basic tests - basic tests
- look at other TODO in code - build and publish runboat container image
- build and publis runboat container image
- deployment
- plug it on shopinvader and acsone to test on small scale
- create builds for all supported repos on startup (goes with sticky branches)
- advanced reaper (sticky branches)
- test what happens when the watcher looses connection to k8s - test what happens when the watcher looses connection to k8s
- look at other TODO in code to see if anything important remains
- basic UI (single page with a combo box to select repo and show builds by branch/pr,
with start/stop buttons)
More: More:
- UI - shiny UI
- handle PR close (delete all builds for PR) - handle PR close (delete all builds for PR)
- handle branch delete (delete all builds for branch) - handle branch delete (delete all builds for branch)
- create builds for all supported repos on startup (goes with sticky branches)
- never undeploy last build of sticky branches
- make build images configurable (see `build_images.py`)

14
log-config-dev.yaml Normal file
View file

@ -0,0 +1,14 @@
version: 1
disable_existing_loggers: false
formatters:
rich:
datefmt: "[%X]"
handlers:
console:
class: rich.logging.RichHandler
level: NOTSET
formatter: rich
rich_tracebacks: true
root:
level: DEBUG
handlers: [console]

View file

@ -13,8 +13,9 @@ dependencies = [
"fastapi", "fastapi",
"jinja2", "jinja2",
"kubernetes_asyncio", "kubernetes_asyncio",
"uvicorn",
"requests", # TODO for github, to replace by aiohttp or httpx "requests", # TODO for github, to replace by aiohttp or httpx
"rich",
"uvicorn",
] ]
dynamic = ["version", "description"] dynamic = ["version", "description"]

View file

@ -8,6 +8,8 @@ certifi==2021.10.8
chardet==4.0.0 chardet==4.0.0
charset-normalizer==2.0.7 charset-normalizer==2.0.7
click==8.0.3 click==8.0.3
colorama==0.4.4
commonmark==0.9.1
fastapi==0.70.0 fastapi==0.70.0
h11==0.12.0 h11==0.12.0
idna==3.3 idna==3.3
@ -16,9 +18,11 @@ kubernetes-asyncio==18.20.0
MarkupSafe==2.0.1 MarkupSafe==2.0.1
multidict==5.2.0 multidict==5.2.0
pydantic==1.8.2 pydantic==1.8.2
Pygments==2.10.0
python-dateutil==2.8.2 python-dateutil==2.8.2
PyYAML==6.0 PyYAML==6.0
requests==2.26.0 requests==2.26.0
rich==10.12.0
six==1.16.0 six==1.16.0
sniffio==1.2.0 sniffio==1.2.0
starlette==0.16.0 starlette==0.16.0

View file

@ -22,8 +22,7 @@ def get_target_branch(branch_name: str) -> str:
f"Malformed branch name {branch_name} " f"Malformed branch name {branch_name} "
f"(it should start with an Odoo branch name)." f"(it should start with an Odoo branch name)."
) )
if mo: key = mo.group(1)
key = mo.group(1)
if key not in images: if key not in images:
raise BranchNotSupported( raise BranchNotSupported(
f"No build image configured for {key} (from {branch_name})." f"No build image configured for {key} (from {branch_name})."