Update README
This commit is contained in:
parent
5a42490077
commit
d90ffad1aa
5 changed files with 46 additions and 14 deletions
36
README.md
36
README.md
|
|
@ -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
14
log-config-dev.yaml
Normal 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]
|
||||||
|
|
@ -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"]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@ 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(
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue