blob: 61d93bd3bea328042709d9db4f332111c63bbb08 (
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
|
# CGCI
very simplistic and naive CI written in C using CGI
## How it works
### Routing
paths are split into 4 segments:
- project
- action
- index
- extra
they define what shuold be done with which project and how to do it.
examples:
- `/proj` lists builds for `proj`
- `/proj/builds/2` lists information for build `2` of `proj`
- `/proj/builds/2/raw_log` returns the raw logs for build `2` of `proj`
### Building
Upon a build being triggered the process forks off into a builder which keeps track of the running target process and writes it to disk on completion.
### States
Build states are stored in the persistant system cache (`/var/cache/cgci`), read by the running process and written by the builder.
State ID's are simply counted up and not unique.
## How to run
CGCI needs a web server that is able to serve CGI scripts.
During development [nginx](https://nginx.org/) with [fcgiwrap](https://github.com/gnosek/fcgiwrap) was used, other CGI servers may work but your mileage may vary.
Python's webserver claims to be capable of running CGI script but is not compliant with the CGI spec, DO NOT USE.
|