OILS / soil / README.md View on Github | oilshell.org

179 lines, 129 significant
1Soil
2====
3
4Continuous testing on many platforms.
5
6## Server Setup
7
8 soil/web-init.sh deploy # deploy static assets and tools
9
10## Data
11
12 https://test.oils-for-unix.org/ # not Soil, Coil could be a better name
13
14 static-api/ # used by the maybe-merge task
15 github/
16 1234/ GITHUB_RUN_ID (or NUMBER)
17 dev-minimal # file with status 0
18 cpp-small
19
20 github-jobs/
21 index.html # pretty list of runs, links to commits/ and foo.wwz/index
22 raw.html # flat
23 1234/ # GITHUB_RUN_NUMBER
24 dev-minimal.wwz/
25 index.html # worker runs format-wwz-index for TSV -> HTML
26 dev-minimal.{tsv,json}
27 cpp-small.wwz/
28 index.html
29 cpp-small.{tsv,json}
30 commits/
31
32 srht-jobs/
33 index.html
34 raw.html
35 345/ # JOB_ID
36 dev-minimal.wwz/
37 index.html
38 dev-minimal.{tsv,json}
39 344/
40 cpp-small.wwz/
41 index.html
42 cpp-small.{tsv,json}
43 commits/ # index grouped by commit?
44 09ab09ab.html # links to ../345/dev-minimal.wwz/
45 1010abab.html
46
47## Code
48
49Running a job starts at either:
50
51- `.github/workflows/all-builds.yml` for Github Actions
52- `.builds/worker{1,2,3,4}.yml` for sourcehut
53
54The YAML files either:
55
56- Directly invoke `soil/worker.sh` for a raw VM job.
57- Invoke wrappers `soil/github-actions.sh` / `soil/sourcehut.sh`, which in turn
58 uses `soil/host-shim.sh` to run a job in a container.
59 - They wrappers also publish via SSH with `soil/web-worker.sh`
60
61`soil/host-shim.sh` pulls and start an OCI container each node, and then runs
62`soil/worker.sh` inside the container.
63
64`soil/worker.sh` runs the job, and publishes 3 files to `travis-ci.oilshell.org`:
65
661. JSON metadata about the commit and build environment
671. TSV metadata for each "toil" step
681. A `.wwz` file (servable zip file) of logs
69
70`soil/web.sh` is a wrapper around `soil/web.py`, and it runs on the SERVER
71(`travis-ci.oilshell.org`). It reads and joins metadata from every job to
72construct `index.html` and `$RUN_NUMBER/index.html`.
73
74The server-side components are deployed by `soil/web-init.sh`.
75
76## Terminology
77
78Three level hierarchy of executables:
79
80- Run - A group of jobs run per commit, usually on different machines.
81 Github has `GITHUB_RUN_{NUMBER,ID}`, but sourcehut lacks this concept.
82- Job - A group of tasks run on the same machine, in the same container, or on a raw VM.
83- Task - A shell command that's run within the Oil repo. Tasks are currently
84 run sequentially.
85
86TODO:
87
88- Tasks need explicit dependencies
89- Dynamically schedule tasks, and remove the idea of a job. It should just be
90 a flat list of tasks run per commit, on various machines, with
91 dynamically-scheduled and resolved dependencies.
92
93## Events
94
95- End Job.
96 - First upload wwz, tsv, and JSON last
97 - web.py can rewrites the following files in one pass, based on list-json
98 state
99 - github-jobs/tmp-$$.{index,raw}.html - shell script does mv
100 - github-jobs/commits/tmp-$$.$HASH.html - shell script does mv
101 - this is based on github-jobs/$RUN/*.tsv -- similar to format-wwz-index
102 - or srht-jobs/*/*.tsv and filtered by commit
103 - github-jobs/tmp-$$.remove.txt - shell script does rm
104 - status-api/github-jobs/$RUN/$job -- PUT this
105
106- Start job. TODO: This doesn't exist.
107 - github-jobs/index.html should show Started / Pass / Fail
108
109## Web Interface / Security
110
111This one is a pure uploader, which you can borrow from picdir.
112
113 POST https://test.oils-for-unix.org/results
114 ?jobName=dev-minimal
115 &workerHost=github
116
117It does multi-part file upload of wwz, TSV, JSON, and saves the files. Start
118with basic auth over HTTPS? See picdir.
119
120
121 POST https://test.oils-for-unix.org/event
122
123 ?eventName=start
124 &workerHost=github
125 &runId=1234
126 &jobName=dev-minimal
127
128 ?eventName=start
129 &workerHost=sourcehut
130 &jobId=345
131 &jobName=dev-minimal
132
133 # whether to update the status-api
134 ?eventName=done
135 &workerHost=github
136 &runId=1234
137 &jobName=dev-minimal
138 &status=124
139 &updateStatusApi=1
140
141This PHP script can just run a shell script synchronously? Events start and
142done are meant to be quick.
143
144Other events:
145
146- begin pulling container
147- done pulling container
148- done with task, although we want to get rid of this abstraction
149
150
151## Notes
152
153### Idea For Tuple Space?
154
155Listening to `oilshell/oil`:
156
157- `dev-minimal`
158 - Can a contributor quickly get started with the Oil repo?
159 - They just want to run bin/osh without installing much
160- `ovm-tarball`
161- `cpp`
162- `other-tests`
163
164Listening to `oilshell/tarballs`:
165
166- Travis
167 - OS X (bin-darwin)
168- Sourcehut
169 - Alpine (bin-alpine)
170 - OpenBSD (bin-openbsd)
171 - Alternate architectures like ARM
172
173All of these build both oil.ovm and oil-native. Need maintainers. We build
174them as a "start".
175
176It would nice to implement this as SQL.
177
178
179