Click to show base components
25 |
26 | - [node:13.2-buster-slim](https://hub.docker.com/_/node/)
27 | - [Google Chrome 79 Beta](https://www.ubuntuupdates.org/package/google_chrome/stable/main/base/google-chrome-beta)
28 | - [Puppeteer v2.00](https://github.com/GoogleChrome/puppeteer/releases/tag/v2.0.0)
29 |
30 |
31 |
32 | The program is written in NodeJS with Typescript, in the [src](src) directory.
33 |
34 | ## Description
35 |
36 | Runs a NodeJS server accepting HTTP requests with two URL parameters:
37 |
38 | - `url` which is the URL to prerender into HTML
39 | - `wait` which is the **optional** load event to wait for before stopping the prerendering. It can be:
40 | - `load` (wait for the `load` event)
41 | - `domcontentloaded` (wait for the `DOMContentLoaded` event)
42 | - `networkidle0` (**default**, wait until there is no network connections for at least 500 ms)
43 | - `networkidle2` (wait until there are less than 3 network connections for at least 500 ms)
44 |
45 | For example:
46 |
47 | ```
48 | http://localhost:8000/?url=https://github.com/qdm12/htmlspitter
49 | ```
50 |
51 | - The server scales up Chromium instances if needed
52 | - It limits the number of opened pages per instance to prevent one page crashing all the other pages
53 | - It has a 1 hour cache for loaded HTML
54 | - It has a queue system for requests once the maximum number of pages/chromium instances is reached
55 | - **Not compatible** with other architectures than amd64 as Chrome-Beta is only built for `amd64` for now and is required.
56 |
57 | ## Usage
58 |
59 | 1. Run the container
60 |
61 | ```sh
62 | docker run -it --rm --init -p 8000:8000 qmcgaw/htmlspitter
63 | ```
64 |
65 | You can also use [docker-compose.yml](https://github.com/qdm12/htmlspitter/blob/master/docker-compose.yml).
66 |
67 | ## Environment variables
68 |
69 | | Name | Default | Possible values | Description |
70 | | --- | --- | --- | --- |
71 | | `MAX_PAGES` | `10` | `-1` or integer larger than `0` | Max number of pages per Chromium instance at any time, `-1` for no max |
72 | | `MAX_HITS` | `300` | `-1` or integer larger than `0` | Max number of pages opened per Chromium instance during its lifetime (before relaunch), `-1` for no max |
73 | | `MAX_AGE_UNUSED` | `60` | `-1` or integer larger than `0` | Max age in seconds of inactivity before the browser is closed, `-1` for no max |
74 | | `MAX_BROWSERS` | `10` | `-1` or integer larger than `0` | Max number of Chromium instances at any time, `-1` for no max |
75 | | `MAX_CACHE_SIZE` | `10` | `-1` or integer larger than `0` | Max number of MB stored in the cache, `-1` for no max |
76 | | `MAX_QUEUE_SIZE` | `100` | `-1` or integer larger than `0` | Max size of queue of pages per Chromium instance, `-1` for no max |
77 | | `LOG` | `normal` | `normal` or `json` | Format to use to print logs |
78 | | `TIMEOUT` | `15000` | `-1` or integer larger than `0` | Timeout in ms to load a page, `-1` for no timeout |
79 |
80 | ## Troubleshooting
81 |
82 | ### Chrome fails to launch
83 |
84 | If you obtain the error:
85 |
86 | ```json
87 | {"error":"Error: Failed to launch chrome!\nFailed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted\n\n\nTROUBLESHOOTING: https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md\n"}
88 | ```
89 |
90 | Then you might need to use **seccomp** with the [chrome.json](https://github.com/qdm12/htmlspitter/blob/master/chrome.json) file of this repository:
91 |
92 | ```sh
93 | wget https://raw.githubusercontent.com/qdm12/htmlspitter/master/chrome.json
94 | docker run -it --rm --init --security-opt seccomp=$(pwd)/chrome.json -p 8000:8000 qmcgaw/htmlspitter
95 | ```
96 |
97 | ## Details
98 |
99 | ### Program
100 |
101 | - A built-in local memory cache holds HTML content obtained the last hour and is limited in the size of characters it contains.
102 | - A built-in pool of Chromium instances creates and removes Chromium instances according to the server load.
103 | - Each Chromium instance has a limited number of pages so that if one page crashes Chromium, not all page loads are lost.
104 | - As Chromium caches content, each instance is destroyed and re-created once it reaches a certain number of page loads.
105 |
106 | ### Docker
107 |
108 | - [chrome.json](https://github.com/qdm12/htmlspitter/blob/master/chrome.json) may be required depending on your host OS.
109 | - The `--init` flag is added to prevent eventual zombie Chromium processes to exist when the container stops the main NodeJS program.
110 | - A built in healthcheck is implemented by running `node build/healthcheck.js` against a running instance.
111 |
112 | ### Performance considerations
113 |
114 | - Chromium is written in C++ and multi threaded so it scales well with more CPU cores
115 | - The NodeJS program should not be the bottleneck because all the work is done by Chromium
116 | - The bottleneck will be CPU and especially RAM used by Chromium instance(s)
117 | - You can **scale up** by having multiple machines running the program, behind a load balancer
118 |
119 | ## Development
120 |
121 | - Either use the Docker container development image with Visual Studio Code and the remote development extension
122 | - Or install Node and NPM on your machine
123 |
124 | ```sh
125 | # Install all dependencies
126 | npm i
127 | # Transcompile the Typescript code to Javascript and run build/main.js with
128 | npm run start
129 | ```
130 |
131 | Test it with, for example:
132 |
133 | ```sh
134 | wget -qO- http://localhost:8000/?url=https://github.com/qdm12/htmlspitter
135 | ```
136 |
137 | You can also:
138 |
139 | - Run tests
140 |
141 | ```sh
142 | npm t
143 | ```
144 |
145 | - Run the sever with hot reload (performs `npm run start` on each .ts change)
146 |
147 | ```sh
148 | npx nodemon
149 | ```
150 |
151 | - Build Docker
152 |
153 | ```sh
154 | docker build -t qmcgaw/htmlspitter .
155 | ```
156 |
157 | You can also specify the branch of Google Chrome from `beta` (default), `stable` and `unstable`
158 |
159 | ```sh
160 | docker build -t qmcgaw/htmlspitter --build-arg GOOGLE_CHROME_BRANCH=unstable
161 | ```
162 |
163 | - There are two environment variables you might find useful:
164 | - `PORT` to set the HTTP server listening port
165 | - `CHROME_BIN` which is the path to the Chrome binary or `Puppeteer-bundled`
166 |
167 | ### TODOs
168 |
169 | - [ ] Show Chrome version at start
170 | - [ ] Fake user agents
171 | - [ ] Prevent recursive calls to localhost
172 | - [ ] Format JSON or raw HTML
173 | - [ ] Limit Chromium instances in terms of RAM
174 | - [ ] Compression Gzip
175 | - [ ] Sync same URL with Redis (not getting twice the same URL)
176 | - [ ] Sync Cache with Postgresql or Redis depending on size
177 | - [ ] Limit data size in Postgresql according to time created
178 | - [ ] Unit testing
179 | - [ ] ReactJS GUI
180 | - [ ] Static binary in Scratch Docker image
181 |
182 | ## Credits
183 |
184 | - Credits to [jessfraz](https://github.com/jessfraz) for [chrome.json](chrome.json)
185 | - The Google Chrome team
186 | - The Puppeteer developers
187 |
188 | ## License
189 |
190 | This repository is under an [MIT license](https://github.com/qdm12/htmlspitter/master/license)
191 |
--------------------------------------------------------------------------------
/chrome.json:
--------------------------------------------------------------------------------
1 | {
2 | "defaultAction": "SCMP_ACT_ERRNO",
3 | "syscalls": [
4 | {
5 | "name": "accept",
6 | "action": "SCMP_ACT_ALLOW",
7 | "args": null
8 | },
9 | {
10 | "name": "accept4",
11 | "action": "SCMP_ACT_ALLOW",
12 | "args": null
13 | },
14 | {
15 | "name": "access",
16 | "action": "SCMP_ACT_ALLOW",
17 | "args": null
18 | },
19 | {
20 | "name": "alarm",
21 | "action": "SCMP_ACT_ALLOW",
22 | "args": null
23 | },
24 | {
25 | "name": "arch_prctl",
26 | "action": "SCMP_ACT_ALLOW",
27 | "args": null
28 | },
29 | {
30 | "name": "bind",
31 | "action": "SCMP_ACT_ALLOW",
32 | "args": null
33 | },
34 | {
35 | "name": "brk",
36 | "action": "SCMP_ACT_ALLOW",
37 | "args": null
38 | },
39 | {
40 | "name": "capget",
41 | "action": "SCMP_ACT_ALLOW",
42 | "args": null
43 | },
44 | {
45 | "name": "capset",
46 | "action": "SCMP_ACT_ALLOW",
47 | "args": null
48 | },
49 | {
50 | "name": "chdir",
51 | "action": "SCMP_ACT_ALLOW",
52 | "args": null
53 | },
54 | {
55 | "name": "chmod",
56 | "action": "SCMP_ACT_ALLOW",
57 | "args": null
58 | },
59 | {
60 | "name": "chown",
61 | "action": "SCMP_ACT_ALLOW",
62 | "args": null
63 | },
64 | {
65 | "name": "chown32",
66 | "action": "SCMP_ACT_ALLOW",
67 | "args": null
68 | },
69 | {
70 | "name": "chroot",
71 | "action": "SCMP_ACT_ALLOW",
72 | "args": null
73 | },
74 | {
75 | "name": "clock_getres",
76 | "action": "SCMP_ACT_ALLOW",
77 | "args": null
78 | },
79 | {
80 | "name": "clock_gettime",
81 | "action": "SCMP_ACT_ALLOW",
82 | "args": null
83 | },
84 | {
85 | "name": "clock_nanosleep",
86 | "action": "SCMP_ACT_ALLOW",
87 | "args": null
88 | },
89 | {
90 | "name": "clone",
91 | "action": "SCMP_ACT_ALLOW",
92 | "args": null
93 | },
94 | {
95 | "name": "close",
96 | "action": "SCMP_ACT_ALLOW",
97 | "args": null
98 | },
99 | {
100 | "name": "connect",
101 | "action": "SCMP_ACT_ALLOW",
102 | "args": null
103 | },
104 | {
105 | "name": "creat",
106 | "action": "SCMP_ACT_ALLOW",
107 | "args": null
108 | },
109 | {
110 | "name": "dup",
111 | "action": "SCMP_ACT_ALLOW",
112 | "args": null
113 | },
114 | {
115 | "name": "dup2",
116 | "action": "SCMP_ACT_ALLOW",
117 | "args": null
118 | },
119 | {
120 | "name": "dup3",
121 | "action": "SCMP_ACT_ALLOW",
122 | "args": null
123 | },
124 | {
125 | "name": "epoll_create",
126 | "action": "SCMP_ACT_ALLOW",
127 | "args": null
128 | },
129 | {
130 | "name": "epoll_create1",
131 | "action": "SCMP_ACT_ALLOW",
132 | "args": null
133 | },
134 | {
135 | "name": "epoll_ctl",
136 | "action": "SCMP_ACT_ALLOW",
137 | "args": null
138 | },
139 | {
140 | "name": "epoll_ctl_old",
141 | "action": "SCMP_ACT_ALLOW",
142 | "args": null
143 | },
144 | {
145 | "name": "epoll_pwait",
146 | "action": "SCMP_ACT_ALLOW",
147 | "args": null
148 | },
149 | {
150 | "name": "epoll_wait",
151 | "action": "SCMP_ACT_ALLOW",
152 | "args": null
153 | },
154 | {
155 | "name": "epoll_wait_old",
156 | "action": "SCMP_ACT_ALLOW",
157 | "args": null
158 | },
159 | {
160 | "name": "eventfd",
161 | "action": "SCMP_ACT_ALLOW",
162 | "args": null
163 | },
164 | {
165 | "name": "eventfd2",
166 | "action": "SCMP_ACT_ALLOW",
167 | "args": null
168 | },
169 | {
170 | "name": "execve",
171 | "action": "SCMP_ACT_ALLOW",
172 | "args": null
173 | },
174 | {
175 | "name": "execveat",
176 | "action": "SCMP_ACT_ALLOW",
177 | "args": null
178 | },
179 | {
180 | "name": "exit",
181 | "action": "SCMP_ACT_ALLOW",
182 | "args": null
183 | },
184 | {
185 | "name": "exit_group",
186 | "action": "SCMP_ACT_ALLOW",
187 | "args": null
188 | },
189 | {
190 | "name": "faccessat",
191 | "action": "SCMP_ACT_ALLOW",
192 | "args": null
193 | },
194 | {
195 | "name": "fadvise64",
196 | "action": "SCMP_ACT_ALLOW",
197 | "args": null
198 | },
199 | {
200 | "name": "fadvise64_64",
201 | "action": "SCMP_ACT_ALLOW",
202 | "args": null
203 | },
204 | {
205 | "name": "fallocate",
206 | "action": "SCMP_ACT_ALLOW",
207 | "args": null
208 | },
209 | {
210 | "name": "fanotify_init",
211 | "action": "SCMP_ACT_ALLOW",
212 | "args": null
213 | },
214 | {
215 | "name": "fanotify_mark",
216 | "action": "SCMP_ACT_ALLOW",
217 | "args": null
218 | },
219 | {
220 | "name": "fchdir",
221 | "action": "SCMP_ACT_ALLOW",
222 | "args": null
223 | },
224 | {
225 | "name": "fchmod",
226 | "action": "SCMP_ACT_ALLOW",
227 | "args": null
228 | },
229 | {
230 | "name": "fchmodat",
231 | "action": "SCMP_ACT_ALLOW",
232 | "args": null
233 | },
234 | {
235 | "name": "fchown",
236 | "action": "SCMP_ACT_ALLOW",
237 | "args": null
238 | },
239 | {
240 | "name": "fchown32",
241 | "action": "SCMP_ACT_ALLOW",
242 | "args": null
243 | },
244 | {
245 | "name": "fchownat",
246 | "action": "SCMP_ACT_ALLOW",
247 | "args": null
248 | },
249 | {
250 | "name": "fcntl",
251 | "action": "SCMP_ACT_ALLOW",
252 | "args": null
253 | },
254 | {
255 | "name": "fcntl64",
256 | "action": "SCMP_ACT_ALLOW",
257 | "args": null
258 | },
259 | {
260 | "name": "fdatasync",
261 | "action": "SCMP_ACT_ALLOW",
262 | "args": null
263 | },
264 | {
265 | "name": "fgetxattr",
266 | "action": "SCMP_ACT_ALLOW",
267 | "args": null
268 | },
269 | {
270 | "name": "flistxattr",
271 | "action": "SCMP_ACT_ALLOW",
272 | "args": null
273 | },
274 | {
275 | "name": "flock",
276 | "action": "SCMP_ACT_ALLOW",
277 | "args": null
278 | },
279 | {
280 | "name": "fork",
281 | "action": "SCMP_ACT_ALLOW",
282 | "args": null
283 | },
284 | {
285 | "name": "fremovexattr",
286 | "action": "SCMP_ACT_ALLOW",
287 | "args": null
288 | },
289 | {
290 | "name": "fsetxattr",
291 | "action": "SCMP_ACT_ALLOW",
292 | "args": null
293 | },
294 | {
295 | "name": "fstat",
296 | "action": "SCMP_ACT_ALLOW",
297 | "args": null
298 | },
299 | {
300 | "name": "fstat64",
301 | "action": "SCMP_ACT_ALLOW",
302 | "args": null
303 | },
304 | {
305 | "name": "fstatat64",
306 | "action": "SCMP_ACT_ALLOW",
307 | "args": null
308 | },
309 | {
310 | "name": "fstatfs",
311 | "action": "SCMP_ACT_ALLOW",
312 | "args": null
313 | },
314 | {
315 | "name": "fstatfs64",
316 | "action": "SCMP_ACT_ALLOW",
317 | "args": null
318 | },
319 | {
320 | "name": "fsync",
321 | "action": "SCMP_ACT_ALLOW",
322 | "args": null
323 | },
324 | {
325 | "name": "ftruncate",
326 | "action": "SCMP_ACT_ALLOW",
327 | "args": null
328 | },
329 | {
330 | "name": "ftruncate64",
331 | "action": "SCMP_ACT_ALLOW",
332 | "args": null
333 | },
334 | {
335 | "name": "futex",
336 | "action": "SCMP_ACT_ALLOW",
337 | "args": null
338 | },
339 | {
340 | "name": "futimesat",
341 | "action": "SCMP_ACT_ALLOW",
342 | "args": null
343 | },
344 | {
345 | "name": "getcpu",
346 | "action": "SCMP_ACT_ALLOW",
347 | "args": null
348 | },
349 | {
350 | "name": "getcwd",
351 | "action": "SCMP_ACT_ALLOW",
352 | "args": null
353 | },
354 | {
355 | "name": "getdents",
356 | "action": "SCMP_ACT_ALLOW",
357 | "args": null
358 | },
359 | {
360 | "name": "getdents64",
361 | "action": "SCMP_ACT_ALLOW",
362 | "args": null
363 | },
364 | {
365 | "name": "getegid",
366 | "action": "SCMP_ACT_ALLOW",
367 | "args": null
368 | },
369 | {
370 | "name": "getegid32",
371 | "action": "SCMP_ACT_ALLOW",
372 | "args": null
373 | },
374 | {
375 | "name": "geteuid",
376 | "action": "SCMP_ACT_ALLOW",
377 | "args": null
378 | },
379 | {
380 | "name": "geteuid32",
381 | "action": "SCMP_ACT_ALLOW",
382 | "args": null
383 | },
384 | {
385 | "name": "getgid",
386 | "action": "SCMP_ACT_ALLOW",
387 | "args": null
388 | },
389 | {
390 | "name": "getgid32",
391 | "action": "SCMP_ACT_ALLOW",
392 | "args": null
393 | },
394 | {
395 | "name": "getgroups",
396 | "action": "SCMP_ACT_ALLOW",
397 | "args": null
398 | },
399 | {
400 | "name": "getgroups32",
401 | "action": "SCMP_ACT_ALLOW",
402 | "args": null
403 | },
404 | {
405 | "name": "getitimer",
406 | "action": "SCMP_ACT_ALLOW",
407 | "args": null
408 | },
409 | {
410 | "name": "getpeername",
411 | "action": "SCMP_ACT_ALLOW",
412 | "args": null
413 | },
414 | {
415 | "name": "getpgid",
416 | "action": "SCMP_ACT_ALLOW",
417 | "args": null
418 | },
419 | {
420 | "name": "getpgrp",
421 | "action": "SCMP_ACT_ALLOW",
422 | "args": null
423 | },
424 | {
425 | "name": "getpid",
426 | "action": "SCMP_ACT_ALLOW",
427 | "args": null
428 | },
429 | {
430 | "name": "getppid",
431 | "action": "SCMP_ACT_ALLOW",
432 | "args": null
433 | },
434 | {
435 | "name": "getpriority",
436 | "action": "SCMP_ACT_ALLOW",
437 | "args": null
438 | },
439 | {
440 | "name": "getrandom",
441 | "action": "SCMP_ACT_ALLOW",
442 | "args": null
443 | },
444 | {
445 | "name": "getresgid",
446 | "action": "SCMP_ACT_ALLOW",
447 | "args": null
448 | },
449 | {
450 | "name": "getresgid32",
451 | "action": "SCMP_ACT_ALLOW",
452 | "args": null
453 | },
454 | {
455 | "name": "getresuid",
456 | "action": "SCMP_ACT_ALLOW",
457 | "args": null
458 | },
459 | {
460 | "name": "getresuid32",
461 | "action": "SCMP_ACT_ALLOW",
462 | "args": null
463 | },
464 | {
465 | "name": "getrlimit",
466 | "action": "SCMP_ACT_ALLOW",
467 | "args": null
468 | },
469 | {
470 | "name": "get_robust_list",
471 | "action": "SCMP_ACT_ALLOW",
472 | "args": null
473 | },
474 | {
475 | "name": "getrusage",
476 | "action": "SCMP_ACT_ALLOW",
477 | "args": null
478 | },
479 | {
480 | "name": "getsid",
481 | "action": "SCMP_ACT_ALLOW",
482 | "args": null
483 | },
484 | {
485 | "name": "getsockname",
486 | "action": "SCMP_ACT_ALLOW",
487 | "args": null
488 | },
489 | {
490 | "name": "getsockopt",
491 | "action": "SCMP_ACT_ALLOW",
492 | "args": null
493 | },
494 | {
495 | "name": "get_thread_area",
496 | "action": "SCMP_ACT_ALLOW",
497 | "args": null
498 | },
499 | {
500 | "name": "gettid",
501 | "action": "SCMP_ACT_ALLOW",
502 | "args": null
503 | },
504 | {
505 | "name": "gettimeofday",
506 | "action": "SCMP_ACT_ALLOW",
507 | "args": null
508 | },
509 | {
510 | "name": "getuid",
511 | "action": "SCMP_ACT_ALLOW",
512 | "args": null
513 | },
514 | {
515 | "name": "getuid32",
516 | "action": "SCMP_ACT_ALLOW",
517 | "args": null
518 | },
519 | {
520 | "name": "getxattr",
521 | "action": "SCMP_ACT_ALLOW",
522 | "args": null
523 | },
524 | {
525 | "name": "inotify_add_watch",
526 | "action": "SCMP_ACT_ALLOW",
527 | "args": null
528 | },
529 | {
530 | "name": "inotify_init",
531 | "action": "SCMP_ACT_ALLOW",
532 | "args": null
533 | },
534 | {
535 | "name": "inotify_init1",
536 | "action": "SCMP_ACT_ALLOW",
537 | "args": null
538 | },
539 | {
540 | "name": "inotify_rm_watch",
541 | "action": "SCMP_ACT_ALLOW",
542 | "args": null
543 | },
544 | {
545 | "name": "io_cancel",
546 | "action": "SCMP_ACT_ALLOW",
547 | "args": null
548 | },
549 | {
550 | "name": "ioctl",
551 | "action": "SCMP_ACT_ALLOW",
552 | "args": null
553 | },
554 | {
555 | "name": "io_destroy",
556 | "action": "SCMP_ACT_ALLOW",
557 | "args": null
558 | },
559 | {
560 | "name": "io_getevents",
561 | "action": "SCMP_ACT_ALLOW",
562 | "args": null
563 | },
564 | {
565 | "name": "ioprio_get",
566 | "action": "SCMP_ACT_ALLOW",
567 | "args": null
568 | },
569 | {
570 | "name": "ioprio_set",
571 | "action": "SCMP_ACT_ALLOW",
572 | "args": null
573 | },
574 | {
575 | "name": "io_setup",
576 | "action": "SCMP_ACT_ALLOW",
577 | "args": null
578 | },
579 | {
580 | "name": "io_submit",
581 | "action": "SCMP_ACT_ALLOW",
582 | "args": null
583 | },
584 | {
585 | "name": "kill",
586 | "action": "SCMP_ACT_ALLOW",
587 | "args": null
588 | },
589 | {
590 | "name": "lchown",
591 | "action": "SCMP_ACT_ALLOW",
592 | "args": null
593 | },
594 | {
595 | "name": "lchown32",
596 | "action": "SCMP_ACT_ALLOW",
597 | "args": null
598 | },
599 | {
600 | "name": "lgetxattr",
601 | "action": "SCMP_ACT_ALLOW",
602 | "args": null
603 | },
604 | {
605 | "name": "link",
606 | "action": "SCMP_ACT_ALLOW",
607 | "args": null
608 | },
609 | {
610 | "name": "linkat",
611 | "action": "SCMP_ACT_ALLOW",
612 | "args": null
613 | },
614 | {
615 | "name": "listen",
616 | "action": "SCMP_ACT_ALLOW",
617 | "args": null
618 | },
619 | {
620 | "name": "listxattr",
621 | "action": "SCMP_ACT_ALLOW",
622 | "args": null
623 | },
624 | {
625 | "name": "llistxattr",
626 | "action": "SCMP_ACT_ALLOW",
627 | "args": null
628 | },
629 | {
630 | "name": "_llseek",
631 | "action": "SCMP_ACT_ALLOW",
632 | "args": null
633 | },
634 | {
635 | "name": "lremovexattr",
636 | "action": "SCMP_ACT_ALLOW",
637 | "args": null
638 | },
639 | {
640 | "name": "lseek",
641 | "action": "SCMP_ACT_ALLOW",
642 | "args": null
643 | },
644 | {
645 | "name": "lsetxattr",
646 | "action": "SCMP_ACT_ALLOW",
647 | "args": null
648 | },
649 | {
650 | "name": "lstat",
651 | "action": "SCMP_ACT_ALLOW",
652 | "args": null
653 | },
654 | {
655 | "name": "lstat64",
656 | "action": "SCMP_ACT_ALLOW",
657 | "args": null
658 | },
659 | {
660 | "name": "madvise",
661 | "action": "SCMP_ACT_ALLOW",
662 | "args": null
663 | },
664 | {
665 | "name": "memfd_create",
666 | "action": "SCMP_ACT_ALLOW",
667 | "args": null
668 | },
669 | {
670 | "name": "mincore",
671 | "action": "SCMP_ACT_ALLOW",
672 | "args": null
673 | },
674 | {
675 | "name": "mkdir",
676 | "action": "SCMP_ACT_ALLOW",
677 | "args": null
678 | },
679 | {
680 | "name": "mkdirat",
681 | "action": "SCMP_ACT_ALLOW",
682 | "args": null
683 | },
684 | {
685 | "name": "mknod",
686 | "action": "SCMP_ACT_ALLOW",
687 | "args": null
688 | },
689 | {
690 | "name": "mknodat",
691 | "action": "SCMP_ACT_ALLOW",
692 | "args": null
693 | },
694 | {
695 | "name": "mlock",
696 | "action": "SCMP_ACT_ALLOW",
697 | "args": null
698 | },
699 | {
700 | "name": "mlockall",
701 | "action": "SCMP_ACT_ALLOW",
702 | "args": null
703 | },
704 | {
705 | "name": "mmap",
706 | "action": "SCMP_ACT_ALLOW",
707 | "args": null
708 | },
709 | {
710 | "name": "mmap2",
711 | "action": "SCMP_ACT_ALLOW",
712 | "args": null
713 | },
714 | {
715 | "name": "mprotect",
716 | "action": "SCMP_ACT_ALLOW",
717 | "args": null
718 | },
719 | {
720 | "name": "mq_getsetattr",
721 | "action": "SCMP_ACT_ALLOW",
722 | "args": null
723 | },
724 | {
725 | "name": "mq_notify",
726 | "action": "SCMP_ACT_ALLOW",
727 | "args": null
728 | },
729 | {
730 | "name": "mq_open",
731 | "action": "SCMP_ACT_ALLOW",
732 | "args": null
733 | },
734 | {
735 | "name": "mq_timedreceive",
736 | "action": "SCMP_ACT_ALLOW",
737 | "args": null
738 | },
739 | {
740 | "name": "mq_timedsend",
741 | "action": "SCMP_ACT_ALLOW",
742 | "args": null
743 | },
744 | {
745 | "name": "mq_unlink",
746 | "action": "SCMP_ACT_ALLOW",
747 | "args": null
748 | },
749 | {
750 | "name": "mremap",
751 | "action": "SCMP_ACT_ALLOW",
752 | "args": null
753 | },
754 | {
755 | "name": "msgctl",
756 | "action": "SCMP_ACT_ALLOW",
757 | "args": null
758 | },
759 | {
760 | "name": "msgget",
761 | "action": "SCMP_ACT_ALLOW",
762 | "args": null
763 | },
764 | {
765 | "name": "msgrcv",
766 | "action": "SCMP_ACT_ALLOW",
767 | "args": null
768 | },
769 | {
770 | "name": "msgsnd",
771 | "action": "SCMP_ACT_ALLOW",
772 | "args": null
773 | },
774 | {
775 | "name": "msync",
776 | "action": "SCMP_ACT_ALLOW",
777 | "args": null
778 | },
779 | {
780 | "name": "munlock",
781 | "action": "SCMP_ACT_ALLOW",
782 | "args": null
783 | },
784 | {
785 | "name": "munlockall",
786 | "action": "SCMP_ACT_ALLOW",
787 | "args": null
788 | },
789 | {
790 | "name": "munmap",
791 | "action": "SCMP_ACT_ALLOW",
792 | "args": null
793 | },
794 | {
795 | "name": "name_to_handle_at",
796 | "action": "SCMP_ACT_ALLOW",
797 | "args": null
798 | },
799 | {
800 | "name": "nanosleep",
801 | "action": "SCMP_ACT_ALLOW",
802 | "args": null
803 | },
804 | {
805 | "name": "newfstatat",
806 | "action": "SCMP_ACT_ALLOW",
807 | "args": null
808 | },
809 | {
810 | "name": "_newselect",
811 | "action": "SCMP_ACT_ALLOW",
812 | "args": null
813 | },
814 | {
815 | "name": "open",
816 | "action": "SCMP_ACT_ALLOW",
817 | "args": null
818 | },
819 | {
820 | "name": "open_by_handle_at",
821 | "action": "SCMP_ACT_ALLOW",
822 | "args": null
823 | },
824 | {
825 | "name": "openat",
826 | "action": "SCMP_ACT_ALLOW",
827 | "args": null
828 | },
829 | {
830 | "name": "pause",
831 | "action": "SCMP_ACT_ALLOW",
832 | "args": null
833 | },
834 | {
835 | "name": "pipe",
836 | "action": "SCMP_ACT_ALLOW",
837 | "args": null
838 | },
839 | {
840 | "name": "pipe2",
841 | "action": "SCMP_ACT_ALLOW",
842 | "args": null
843 | },
844 | {
845 | "name": "poll",
846 | "action": "SCMP_ACT_ALLOW",
847 | "args": null
848 | },
849 | {
850 | "name": "ppoll",
851 | "action": "SCMP_ACT_ALLOW",
852 | "args": null
853 | },
854 | {
855 | "name": "prctl",
856 | "action": "SCMP_ACT_ALLOW",
857 | "args": null
858 | },
859 | {
860 | "name": "pread64",
861 | "action": "SCMP_ACT_ALLOW",
862 | "args": null
863 | },
864 | {
865 | "name": "preadv",
866 | "action": "SCMP_ACT_ALLOW",
867 | "args": null
868 | },
869 | {
870 | "name": "prlimit64",
871 | "action": "SCMP_ACT_ALLOW",
872 | "args": null
873 | },
874 | {
875 | "name": "pselect6",
876 | "action": "SCMP_ACT_ALLOW",
877 | "args": null
878 | },
879 | {
880 | "name": "pwrite64",
881 | "action": "SCMP_ACT_ALLOW",
882 | "args": null
883 | },
884 | {
885 | "name": "pwritev",
886 | "action": "SCMP_ACT_ALLOW",
887 | "args": null
888 | },
889 | {
890 | "name": "read",
891 | "action": "SCMP_ACT_ALLOW",
892 | "args": null
893 | },
894 | {
895 | "name": "readahead",
896 | "action": "SCMP_ACT_ALLOW",
897 | "args": null
898 | },
899 | {
900 | "name": "readlink",
901 | "action": "SCMP_ACT_ALLOW",
902 | "args": null
903 | },
904 | {
905 | "name": "readlinkat",
906 | "action": "SCMP_ACT_ALLOW",
907 | "args": null
908 | },
909 | {
910 | "name": "readv",
911 | "action": "SCMP_ACT_ALLOW",
912 | "args": null
913 | },
914 | {
915 | "name": "recvfrom",
916 | "action": "SCMP_ACT_ALLOW",
917 | "args": null
918 | },
919 | {
920 | "name": "recvmmsg",
921 | "action": "SCMP_ACT_ALLOW",
922 | "args": null
923 | },
924 | {
925 | "name": "recvmsg",
926 | "action": "SCMP_ACT_ALLOW",
927 | "args": null
928 | },
929 | {
930 | "name": "remap_file_pages",
931 | "action": "SCMP_ACT_ALLOW",
932 | "args": null
933 | },
934 | {
935 | "name": "removexattr",
936 | "action": "SCMP_ACT_ALLOW",
937 | "args": null
938 | },
939 | {
940 | "name": "rename",
941 | "action": "SCMP_ACT_ALLOW",
942 | "args": null
943 | },
944 | {
945 | "name": "renameat",
946 | "action": "SCMP_ACT_ALLOW",
947 | "args": null
948 | },
949 | {
950 | "name": "renameat2",
951 | "action": "SCMP_ACT_ALLOW",
952 | "args": null
953 | },
954 | {
955 | "name": "rmdir",
956 | "action": "SCMP_ACT_ALLOW",
957 | "args": null
958 | },
959 | {
960 | "name": "rt_sigaction",
961 | "action": "SCMP_ACT_ALLOW",
962 | "args": null
963 | },
964 | {
965 | "name": "rt_sigpending",
966 | "action": "SCMP_ACT_ALLOW",
967 | "args": null
968 | },
969 | {
970 | "name": "rt_sigprocmask",
971 | "action": "SCMP_ACT_ALLOW",
972 | "args": null
973 | },
974 | {
975 | "name": "rt_sigqueueinfo",
976 | "action": "SCMP_ACT_ALLOW",
977 | "args": null
978 | },
979 | {
980 | "name": "rt_sigreturn",
981 | "action": "SCMP_ACT_ALLOW",
982 | "args": null
983 | },
984 | {
985 | "name": "rt_sigsuspend",
986 | "action": "SCMP_ACT_ALLOW",
987 | "args": null
988 | },
989 | {
990 | "name": "rt_sigtimedwait",
991 | "action": "SCMP_ACT_ALLOW",
992 | "args": null
993 | },
994 | {
995 | "name": "rt_tgsigqueueinfo",
996 | "action": "SCMP_ACT_ALLOW",
997 | "args": null
998 | },
999 | {
1000 | "name": "sched_getaffinity",
1001 | "action": "SCMP_ACT_ALLOW",
1002 | "args": null
1003 | },
1004 | {
1005 | "name": "sched_getattr",
1006 | "action": "SCMP_ACT_ALLOW",
1007 | "args": null
1008 | },
1009 | {
1010 | "name": "sched_getparam",
1011 | "action": "SCMP_ACT_ALLOW",
1012 | "args": null
1013 | },
1014 | {
1015 | "name": "sched_get_priority_max",
1016 | "action": "SCMP_ACT_ALLOW",
1017 | "args": null
1018 | },
1019 | {
1020 | "name": "sched_get_priority_min",
1021 | "action": "SCMP_ACT_ALLOW",
1022 | "args": null
1023 | },
1024 | {
1025 | "name": "sched_getscheduler",
1026 | "action": "SCMP_ACT_ALLOW",
1027 | "args": null
1028 | },
1029 | {
1030 | "name": "sched_rr_get_interval",
1031 | "action": "SCMP_ACT_ALLOW",
1032 | "args": null
1033 | },
1034 | {
1035 | "name": "sched_setaffinity",
1036 | "action": "SCMP_ACT_ALLOW",
1037 | "args": null
1038 | },
1039 | {
1040 | "name": "sched_setattr",
1041 | "action": "SCMP_ACT_ALLOW",
1042 | "args": null
1043 | },
1044 | {
1045 | "name": "sched_setparam",
1046 | "action": "SCMP_ACT_ALLOW",
1047 | "args": null
1048 | },
1049 | {
1050 | "name": "sched_setscheduler",
1051 | "action": "SCMP_ACT_ALLOW",
1052 | "args": null
1053 | },
1054 | {
1055 | "name": "sched_yield",
1056 | "action": "SCMP_ACT_ALLOW",
1057 | "args": null
1058 | },
1059 | {
1060 | "name": "seccomp",
1061 | "action": "SCMP_ACT_ALLOW",
1062 | "args": null
1063 | },
1064 | {
1065 | "name": "select",
1066 | "action": "SCMP_ACT_ALLOW",
1067 | "args": null
1068 | },
1069 | {
1070 | "name": "semctl",
1071 | "action": "SCMP_ACT_ALLOW",
1072 | "args": null
1073 | },
1074 | {
1075 | "name": "semget",
1076 | "action": "SCMP_ACT_ALLOW",
1077 | "args": null
1078 | },
1079 | {
1080 | "name": "semop",
1081 | "action": "SCMP_ACT_ALLOW",
1082 | "args": null
1083 | },
1084 | {
1085 | "name": "semtimedop",
1086 | "action": "SCMP_ACT_ALLOW",
1087 | "args": null
1088 | },
1089 | {
1090 | "name": "sendfile",
1091 | "action": "SCMP_ACT_ALLOW",
1092 | "args": null
1093 | },
1094 | {
1095 | "name": "sendfile64",
1096 | "action": "SCMP_ACT_ALLOW",
1097 | "args": null
1098 | },
1099 | {
1100 | "name": "sendmmsg",
1101 | "action": "SCMP_ACT_ALLOW",
1102 | "args": null
1103 | },
1104 | {
1105 | "name": "sendmsg",
1106 | "action": "SCMP_ACT_ALLOW",
1107 | "args": null
1108 | },
1109 | {
1110 | "name": "sendto",
1111 | "action": "SCMP_ACT_ALLOW",
1112 | "args": null
1113 | },
1114 | {
1115 | "name": "setdomainname",
1116 | "action": "SCMP_ACT_ALLOW",
1117 | "args": null
1118 | },
1119 | {
1120 | "name": "setfsgid",
1121 | "action": "SCMP_ACT_ALLOW",
1122 | "args": null
1123 | },
1124 | {
1125 | "name": "setfsgid32",
1126 | "action": "SCMP_ACT_ALLOW",
1127 | "args": null
1128 | },
1129 | {
1130 | "name": "setfsuid",
1131 | "action": "SCMP_ACT_ALLOW",
1132 | "args": null
1133 | },
1134 | {
1135 | "name": "setfsuid32",
1136 | "action": "SCMP_ACT_ALLOW",
1137 | "args": null
1138 | },
1139 | {
1140 | "name": "setgid",
1141 | "action": "SCMP_ACT_ALLOW",
1142 | "args": null
1143 | },
1144 | {
1145 | "name": "setgid32",
1146 | "action": "SCMP_ACT_ALLOW",
1147 | "args": null
1148 | },
1149 | {
1150 | "name": "setgroups",
1151 | "action": "SCMP_ACT_ALLOW",
1152 | "args": null
1153 | },
1154 | {
1155 | "name": "setgroups32",
1156 | "action": "SCMP_ACT_ALLOW",
1157 | "args": null
1158 | },
1159 | {
1160 | "name": "sethostname",
1161 | "action": "SCMP_ACT_ALLOW",
1162 | "args": null
1163 | },
1164 | {
1165 | "name": "setitimer",
1166 | "action": "SCMP_ACT_ALLOW",
1167 | "args": null
1168 | },
1169 | {
1170 | "name": "setns",
1171 | "action": "SCMP_ACT_ALLOW",
1172 | "args": null
1173 | },
1174 | {
1175 | "name": "setpgid",
1176 | "action": "SCMP_ACT_ALLOW",
1177 | "args": null
1178 | },
1179 | {
1180 | "name": "setpriority",
1181 | "action": "SCMP_ACT_ALLOW",
1182 | "args": null
1183 | },
1184 | {
1185 | "name": "setregid",
1186 | "action": "SCMP_ACT_ALLOW",
1187 | "args": null
1188 | },
1189 | {
1190 | "name": "setregid32",
1191 | "action": "SCMP_ACT_ALLOW",
1192 | "args": null
1193 | },
1194 | {
1195 | "name": "setresgid",
1196 | "action": "SCMP_ACT_ALLOW",
1197 | "args": null
1198 | },
1199 | {
1200 | "name": "setresgid32",
1201 | "action": "SCMP_ACT_ALLOW",
1202 | "args": null
1203 | },
1204 | {
1205 | "name": "setresuid",
1206 | "action": "SCMP_ACT_ALLOW",
1207 | "args": null
1208 | },
1209 | {
1210 | "name": "setresuid32",
1211 | "action": "SCMP_ACT_ALLOW",
1212 | "args": null
1213 | },
1214 | {
1215 | "name": "setreuid",
1216 | "action": "SCMP_ACT_ALLOW",
1217 | "args": null
1218 | },
1219 | {
1220 | "name": "setreuid32",
1221 | "action": "SCMP_ACT_ALLOW",
1222 | "args": null
1223 | },
1224 | {
1225 | "name": "setrlimit",
1226 | "action": "SCMP_ACT_ALLOW",
1227 | "args": null
1228 | },
1229 | {
1230 | "name": "set_robust_list",
1231 | "action": "SCMP_ACT_ALLOW",
1232 | "args": null
1233 | },
1234 | {
1235 | "name": "setsid",
1236 | "action": "SCMP_ACT_ALLOW",
1237 | "args": null
1238 | },
1239 | {
1240 | "name": "setsockopt",
1241 | "action": "SCMP_ACT_ALLOW",
1242 | "args": null
1243 | },
1244 | {
1245 | "name": "set_thread_area",
1246 | "action": "SCMP_ACT_ALLOW",
1247 | "args": null
1248 | },
1249 | {
1250 | "name": "set_tid_address",
1251 | "action": "SCMP_ACT_ALLOW",
1252 | "args": null
1253 | },
1254 | {
1255 | "name": "setuid",
1256 | "action": "SCMP_ACT_ALLOW",
1257 | "args": null
1258 | },
1259 | {
1260 | "name": "setuid32",
1261 | "action": "SCMP_ACT_ALLOW",
1262 | "args": null
1263 | },
1264 | {
1265 | "name": "setxattr",
1266 | "action": "SCMP_ACT_ALLOW",
1267 | "args": null
1268 | },
1269 | {
1270 | "name": "shmat",
1271 | "action": "SCMP_ACT_ALLOW",
1272 | "args": null
1273 | },
1274 | {
1275 | "name": "shmctl",
1276 | "action": "SCMP_ACT_ALLOW",
1277 | "args": null
1278 | },
1279 | {
1280 | "name": "shmdt",
1281 | "action": "SCMP_ACT_ALLOW",
1282 | "args": null
1283 | },
1284 | {
1285 | "name": "shmget",
1286 | "action": "SCMP_ACT_ALLOW",
1287 | "args": null
1288 | },
1289 | {
1290 | "name": "shutdown",
1291 | "action": "SCMP_ACT_ALLOW",
1292 | "args": null
1293 | },
1294 | {
1295 | "name": "sigaltstack",
1296 | "action": "SCMP_ACT_ALLOW",
1297 | "args": null
1298 | },
1299 | {
1300 | "name": "signalfd",
1301 | "action": "SCMP_ACT_ALLOW",
1302 | "args": null
1303 | },
1304 | {
1305 | "name": "signalfd4",
1306 | "action": "SCMP_ACT_ALLOW",
1307 | "args": null
1308 | },
1309 | {
1310 | "name": "socket",
1311 | "action": "SCMP_ACT_ALLOW",
1312 | "args": null
1313 | },
1314 | {
1315 | "name": "socketpair",
1316 | "action": "SCMP_ACT_ALLOW",
1317 | "args": null
1318 | },
1319 | {
1320 | "name": "splice",
1321 | "action": "SCMP_ACT_ALLOW",
1322 | "args": null
1323 | },
1324 | {
1325 | "name": "stat",
1326 | "action": "SCMP_ACT_ALLOW",
1327 | "args": null
1328 | },
1329 | {
1330 | "name": "stat64",
1331 | "action": "SCMP_ACT_ALLOW",
1332 | "args": null
1333 | },
1334 | {
1335 | "name": "statfs",
1336 | "action": "SCMP_ACT_ALLOW",
1337 | "args": null
1338 | },
1339 | {
1340 | "name": "statfs64",
1341 | "action": "SCMP_ACT_ALLOW",
1342 | "args": null
1343 | },
1344 | {
1345 | "name": "symlink",
1346 | "action": "SCMP_ACT_ALLOW",
1347 | "args": null
1348 | },
1349 | {
1350 | "name": "symlinkat",
1351 | "action": "SCMP_ACT_ALLOW",
1352 | "args": null
1353 | },
1354 | {
1355 | "name": "sync",
1356 | "action": "SCMP_ACT_ALLOW",
1357 | "args": null
1358 | },
1359 | {
1360 | "name": "sync_file_range",
1361 | "action": "SCMP_ACT_ALLOW",
1362 | "args": null
1363 | },
1364 | {
1365 | "name": "syncfs",
1366 | "action": "SCMP_ACT_ALLOW",
1367 | "args": null
1368 | },
1369 | {
1370 | "name": "sysinfo",
1371 | "action": "SCMP_ACT_ALLOW",
1372 | "args": null
1373 | },
1374 | {
1375 | "name": "syslog",
1376 | "action": "SCMP_ACT_ALLOW",
1377 | "args": null
1378 | },
1379 | {
1380 | "name": "tee",
1381 | "action": "SCMP_ACT_ALLOW",
1382 | "args": null
1383 | },
1384 | {
1385 | "name": "tgkill",
1386 | "action": "SCMP_ACT_ALLOW",
1387 | "args": null
1388 | },
1389 | {
1390 | "name": "time",
1391 | "action": "SCMP_ACT_ALLOW",
1392 | "args": null
1393 | },
1394 | {
1395 | "name": "timer_create",
1396 | "action": "SCMP_ACT_ALLOW",
1397 | "args": null
1398 | },
1399 | {
1400 | "name": "timer_delete",
1401 | "action": "SCMP_ACT_ALLOW",
1402 | "args": null
1403 | },
1404 | {
1405 | "name": "timerfd_create",
1406 | "action": "SCMP_ACT_ALLOW",
1407 | "args": null
1408 | },
1409 | {
1410 | "name": "timerfd_gettime",
1411 | "action": "SCMP_ACT_ALLOW",
1412 | "args": null
1413 | },
1414 | {
1415 | "name": "timerfd_settime",
1416 | "action": "SCMP_ACT_ALLOW",
1417 | "args": null
1418 | },
1419 | {
1420 | "name": "timer_getoverrun",
1421 | "action": "SCMP_ACT_ALLOW",
1422 | "args": null
1423 | },
1424 | {
1425 | "name": "timer_gettime",
1426 | "action": "SCMP_ACT_ALLOW",
1427 | "args": null
1428 | },
1429 | {
1430 | "name": "timer_settime",
1431 | "action": "SCMP_ACT_ALLOW",
1432 | "args": null
1433 | },
1434 | {
1435 | "name": "times",
1436 | "action": "SCMP_ACT_ALLOW",
1437 | "args": null
1438 | },
1439 | {
1440 | "name": "tkill",
1441 | "action": "SCMP_ACT_ALLOW",
1442 | "args": null
1443 | },
1444 | {
1445 | "name": "truncate",
1446 | "action": "SCMP_ACT_ALLOW",
1447 | "args": null
1448 | },
1449 | {
1450 | "name": "truncate64",
1451 | "action": "SCMP_ACT_ALLOW",
1452 | "args": null
1453 | },
1454 | {
1455 | "name": "ugetrlimit",
1456 | "action": "SCMP_ACT_ALLOW",
1457 | "args": null
1458 | },
1459 | {
1460 | "name": "umask",
1461 | "action": "SCMP_ACT_ALLOW",
1462 | "args": null
1463 | },
1464 | {
1465 | "name": "uname",
1466 | "action": "SCMP_ACT_ALLOW",
1467 | "args": null
1468 | },
1469 | {
1470 | "name": "unlink",
1471 | "action": "SCMP_ACT_ALLOW",
1472 | "args": null
1473 | },
1474 | {
1475 | "name": "unlinkat",
1476 | "action": "SCMP_ACT_ALLOW",
1477 | "args": null
1478 | },
1479 | {
1480 | "name": "unshare",
1481 | "action": "SCMP_ACT_ALLOW",
1482 | "args": null
1483 | },
1484 | {
1485 | "name": "utime",
1486 | "action": "SCMP_ACT_ALLOW",
1487 | "args": null
1488 | },
1489 | {
1490 | "name": "utimensat",
1491 | "action": "SCMP_ACT_ALLOW",
1492 | "args": null
1493 | },
1494 | {
1495 | "name": "utimes",
1496 | "action": "SCMP_ACT_ALLOW",
1497 | "args": null
1498 | },
1499 | {
1500 | "name": "vfork",
1501 | "action": "SCMP_ACT_ALLOW",
1502 | "args": null
1503 | },
1504 | {
1505 | "name": "vhangup",
1506 | "action": "SCMP_ACT_ALLOW",
1507 | "args": null
1508 | },
1509 | {
1510 | "name": "vmsplice",
1511 | "action": "SCMP_ACT_ALLOW",
1512 | "args": null
1513 | },
1514 | {
1515 | "name": "wait4",
1516 | "action": "SCMP_ACT_ALLOW",
1517 | "args": null
1518 | },
1519 | {
1520 | "name": "waitid",
1521 | "action": "SCMP_ACT_ALLOW",
1522 | "args": null
1523 | },
1524 | {
1525 | "name": "write",
1526 | "action": "SCMP_ACT_ALLOW",
1527 | "args": null
1528 | },
1529 | {
1530 | "name": "writev",
1531 | "action": "SCMP_ACT_ALLOW",
1532 | "args": null
1533 | }
1534 | ]
1535 | }
1536 |
--------------------------------------------------------------------------------
/ci.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | ARCHS=linux/amd64
4 |
5 | echo -e "\n\nPull request: $TRAVIS_PULL_REQUEST\nRelease tag: $TRAVIS_TAG\nBranch: $TRAVIS_BRANCH\n\nTarget arch: $ARCHS\n\n"
6 |
7 | if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
8 | echo -e "\n\nBuilding pull request without pushing to Docker Hub\n\n"
9 | docker buildx build \
10 | --progress plain \
11 | --platform="$ARCHS" \
12 | .
13 | exit $?
14 | fi
15 |
16 | echo $DOCKER_PASSWORD | docker login -u qmcgaw --password-stdin 2>&1
17 |
18 | TAG="$TRAVIS_TAG"
19 | if [ -z "$TAG" ]; then
20 | TAG=latest
21 | if [ "$TRAVIS_BRANCH" != "master" ]; then
22 | TAG="$TRAVIS_BRANCH"
23 | fi
24 | fi
25 |
26 | echo -e "\n\nBuilding Docker images for \"$DOCKER_REPO:$TAG\"\n\n"
27 | docker buildx build \
28 | --progress plain \
29 | --platform="$ARCHS" \
30 | --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \
31 | --build-arg VCS_REF=`git rev-parse --short HEAD` \
32 | --build-arg VERSION=$TAG \
33 | -t $DOCKER_REPO:$TAG \
34 | --push \
35 | .
--------------------------------------------------------------------------------
/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '3.7'
2 | services:
3 | htmlspitter:
4 | build: https://github.com/qdm12/htmlspitter.git
5 | image: qmcgaw/htmlspitter
6 | container_name: htmlspitter
7 | network_mode: bridge
8 | init: true
9 | # security_opt:
10 | # - seccomp=./chrome.json
11 | ports:
12 | - 8000:8000/tcp
13 | environment:
14 | - MAX_PAGES=
15 | - MAX_HITS=
16 | - MAX_AGE_UNUSED=
17 | - MAX_BROWSERS=
18 | - MAX_CACHE_SIZE=
19 | - MAX_QUEUE_SIZE=
20 | - LOG=
21 | - TIMEOUT=
22 | restart: always
--------------------------------------------------------------------------------
/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | "roots": [
3 | "