Compare commits

...

150 commits
bof2 ... master

Author SHA1 Message Date
b525f75055 Merge branch 'master' of code.apps.glenux.net:glenux/docmachine-containers
All checks were successful
continuous-integration/drone/push Build is passing
2024-06-11 22:29:31 +02:00
daf532a83a feat: enable navigation footer 2024-06-11 22:28:00 +02:00
8c56abd321 Update README.md
All checks were successful
continuous-integration/drone/push Build is passing
2024-06-02 07:11:52 +00:00
3d70d70f2f fix: change caddy port 2024-05-12 21:27:24 +02:00
d69b02e78c fix: change caddy port
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
2024-05-12 21:27:03 +02:00
dcc20d6b3f feat: add support for margins & draft class
All checks were successful
continuous-integration/drone/push Build is passing
2024-05-12 21:25:10 +02:00
d123b3cd65 chore: bump marp versions 2024-04-17 17:05:16 +02:00
0e364f496d feat: add support for rsync (needed by image subdirs)
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-16 23:58:51 +01:00
26a71920b0 fix: ignore caddy for now 2024-02-16 23:58:29 +01:00
f0463071cc chore: update marp dependencies
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-16 23:58:12 +01:00
bc3f0f911f fix: ignore _* files and dirs & manage image subfolders 2024-02-16 23:57:43 +01:00
8c259145ef fix: enable code highlight in marp 2024-02-16 23:56:36 +01:00
1fe182d9fe chore: ignore autoslide 2024-02-01 14:15:34 +01:00
bee16a9593 Bump debian and python versions 2024-02-01 14:12:24 +01:00
b50a639d9d chore: Remove script/docmachine* scripts now we have real tools 2023-04-06 20:22:22 +02:00
53a626474c make: Fix bad ref and help text for PPTX
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-06 20:20:15 +02:00
9fd96ed628 make: Auto-build autoslide 2023-04-06 20:15:54 +02:00
434c3d72e0 doc: Update README
All checks were successful
continuous-integration/drone/push Build is passing
2023-01-16 12:36:18 +01:00
faad02b41c fix: docker build must ignore drone file
All checks were successful
continuous-integration/drone/push Build is passing
2023-01-16 12:25:43 +01:00
e3ef99661a ci: remove useless build step
All checks were successful
continuous-integration/drone/push Build is passing
2023-01-16 12:18:02 +01:00
19e166d879 ci: fix image name
All checks were successful
continuous-integration/drone/push Build is passing
2023-01-16 12:00:40 +01:00
262ed88922 ci: fix dockerfile path
Some checks reported errors
continuous-integration/drone/push Build was killed
2023-01-16 11:59:23 +01:00
760d118240 brand: rename project
Some checks failed
continuous-integration/drone/push Build is failing
2023-01-16 11:56:01 +01:00
3deea69d24 config: enable codehilite 2023-01-16 11:46:45 +01:00
adaa7c0f25 fix: Force version number for node image 2023-01-12 08:47:45 +01:00
c5b12cb0a8 fix: Make sure autoslide is run before watch 2023-01-12 08:47:21 +01:00
f638a9d5a3 Add extra JS & CSS 2022-11-18 16:13:28 +01:00
aee774329f feat: Kill previous container for the same project if it exists 2022-11-02 20:55:53 +01:00
6b315b2f44 doc: Improve readability of script 2022-11-02 20:53:20 +01:00
b601b7b865 fix: PDF build for docs must output to docs.pdf 2022-08-29 17:10:03 +02:00
f6b8e5d1f6 doc: Update doc structure 2022-08-18 11:14:02 +02:00
d6844f9a31 chore(dirs): Remove useless directories 2022-08-18 10:56:51 +02:00
9df6e9911f fix: Use Marp configuration files 2022-08-18 10:55:58 +02:00
854fbd7502 chore(dirs): Remove useless directories 2022-08-18 10:55:38 +02:00
c94391d782 Merge branch 'master' of github.com:glenux/teaching-boilerplate 2022-06-20 12:18:56 +02:00
4f983647f1 Update package-lock.json 2022-06-20 12:14:52 +02:00
e80ce4e9ae doc: Update README 2022-06-20 12:14:42 +02:00
bdff1bff17 feat: Add support for pptx output 2022-06-20 12:13:22 +02:00
e91c8b2c5c clean: Normalize makefile target definition 2022-06-20 12:13:08 +02:00
51655a2018 feat: Replace codehilite with hightlight from material theme 2022-06-20 12:10:43 +02:00
e16b6403d6 feat: Add support for rows/colums in marp 2022-06-20 12:04:43 +02:00
b56d7c4d20 feature: Add auto-generated deck 'autoslide' 2022-06-20 12:04:10 +02:00
68b8128aaa Update theme 2022-04-29 16:49:47 +02:00
9b9d1a291c fix: Use 'Source' instead of 'Github' for repository link 2022-04-26 23:15:50 +02:00
f1cb3b484d
Merge pull request #28 from glenux/dependabot/npm_and_yarn/follow-redirects-1.14.8
build(deps): bump follow-redirects from 1.14.7 to 1.14.8
2022-04-26 11:27:11 +02:00
c8c3bb90d7
Merge pull request #27 from glenux/dependabot/npm_and_yarn/node-sass-7.0.0
build(deps): bump node-sass from 6.0.1 to 7.0.0
2022-04-26 11:27:00 +02:00
1fca4d68a0
Merge pull request #29 from glenux/dependabot/pip/pillow-9.0.1
build(deps): bump pillow from 9.0.0 to 9.0.1
2022-04-26 11:26:45 +02:00
aca590ed4a fix: Make sure entrypoint works without user-provided configuration 2022-04-26 11:24:59 +02:00
ccade28d49 doc: Add missing entry for build-docs-pdf in 'make help' 2022-04-26 11:22:38 +02:00
dependabot[bot]
a02c03e960
build(deps): bump pillow from 9.0.0 to 9.0.1
Bumps [pillow](https://github.com/python-pillow/Pillow) from 9.0.0 to 9.0.1.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/9.0.0...9.0.1)

---
updated-dependencies:
- dependency-name: pillow
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-12 01:09:45 +00:00
dependabot[bot]
7d3811cb3c
build(deps): bump follow-redirects from 1.14.7 to 1.14.8
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.7 to 1.14.8.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.7...v1.14.8)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-15 10:30:47 +00:00
dependabot[bot]
4f0fccc3b9
build(deps): bump node-sass from 6.0.1 to 7.0.0
Bumps [node-sass](https://github.com/sass/node-sass) from 6.0.1 to 7.0.0.
- [Release notes](https://github.com/sass/node-sass/releases)
- [Changelog](https://github.com/sass/node-sass/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sass/node-sass/compare/v6.0.1...v7.0.0)

---
updated-dependencies:
- dependency-name: node-sass
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-10 22:02:50 +00:00
745961e860 Merge branch 'master' of github.com:glenux/teaching-boilerplate 2022-01-30 17:15:46 +01:00
b5b278f0b6 fix(Dockerfile): follow redirections in curl 2022-01-30 17:15:32 +01:00
468783f50e fix: add case for missing mkdocs-patch.yml file 2022-01-30 17:14:57 +01:00
b67e4c735e fix: missing context in makefile recipe for docker-build 2022-01-30 17:14:02 +01:00
ba42db1d4d
Merge pull request #26 from Gnuside/master
Update README.md
2022-01-30 16:07:34 +01:00
3d45567cdf
Merge pull request #22 from glenux/dependabot/npm_and_yarn/markdown-it-12.3.2
build(deps): bump markdown-it from 12.2.0 to 12.3.2
2022-01-30 16:06:57 +01:00
47f29a8819
Merge pull request #23 from glenux/dependabot/pip/pillow-9.0.0
build(deps): bump pillow from 8.4.0 to 9.0.0
2022-01-30 16:06:44 +01:00
b0775fb85f
Merge pull request #24 from glenux/dependabot/npm_and_yarn/follow-redirects-1.14.7
build(deps): bump follow-redirects from 1.14.1 to 1.14.7
2022-01-30 16:06:27 +01:00
cf6e92b138
Merge pull request #25 from glenux/dependabot/npm_and_yarn/nanoid-3.2.0
build(deps): bump nanoid from 3.1.30 to 3.2.0
2022-01-30 16:06:07 +01:00
4ae969421b clean: Remove asdf version lock 2022-01-30 15:56:44 +01:00
a625e2aeec doc: add comments for docker* commands 2022-01-30 15:54:43 +01:00
12b548e906 fix: broken entrypoint script & config name 2022-01-28 19:43:53 +01:00
73e55d8e55 fix: add missing package 'curl' 2022-01-28 18:46:55 +01:00
5515ff2d18 feat: handle mkdocs patching 2022-01-28 18:41:34 +01:00
da505d456b doc: add details for commands + verbosity 2022-01-26 17:03:07 +01:00
Glenn Y. Rolland
a8e8699d91
Update README.md 2022-01-25 16:06:04 +01:00
dependabot[bot]
f2428f0403
build(deps): bump nanoid from 3.1.30 to 3.2.0
Bumps [nanoid](https://github.com/ai/nanoid) from 3.1.30 to 3.2.0.
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ai/nanoid/compare/3.1.30...3.2.0)

---
updated-dependencies:
- dependency-name: nanoid
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-22 05:00:08 +00:00
dependabot[bot]
1a5aaecd36
build(deps): bump follow-redirects from 1.14.1 to 1.14.7
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.1 to 1.14.7.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.1...v1.14.7)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-14 08:31:54 +00:00
dependabot[bot]
8c6f41bab8
build(deps): bump pillow from 8.4.0 to 9.0.0
Bumps [pillow](https://github.com/python-pillow/Pillow) from 8.4.0 to 9.0.0.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/8.4.0...9.0.0)

---
updated-dependencies:
- dependency-name: pillow
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-13 04:28:14 +00:00
dependabot[bot]
a5d505188c
build(deps): bump markdown-it from 12.2.0 to 12.3.2
Bumps [markdown-it](https://github.com/markdown-it/markdown-it) from 12.2.0 to 12.3.2.
- [Release notes](https://github.com/markdown-it/markdown-it/releases)
- [Changelog](https://github.com/markdown-it/markdown-it/blob/master/CHANGELOG.md)
- [Commits](https://github.com/markdown-it/markdown-it/compare/12.2.0...12.3.2)

---
updated-dependencies:
- dependency-name: markdown-it
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-12 23:03:08 +00:00
69eeba6311 fix: set basedir to sane default value 2021-12-23 22:42:53 +01:00
50e056d6c3 feat: add rule build-slides-html (no action yet) 2021-12-21 19:54:12 +01:00
82bc12586f feat: add support for PDF generation from docs 2021-12-21 17:42:47 +01:00
911856ef49 docker: add more tools needed for pdfs 2021-12-21 17:38:13 +01:00
0ead3496ff ci: fix command in test job 2021-12-21 17:26:22 +01:00
d832ca6ad5 fix: Create missing directory for appuser (needed by marp) 2021-12-21 17:25:50 +01:00
47c507074d Disable debug line 2021-12-21 16:55:46 +01:00
bd325fd13e fix: add missing package m4 (needed by build-docs-pdf) 2021-12-21 16:54:22 +01:00
27e203a3ac ci: handle no-tty mode 2021-12-21 16:42:00 +01:00
ef5b288261 ci: re-add path to dockerfile 2021-12-21 16:17:56 +01:00
0bf28ff215 ci: enable buildkit again 2021-12-21 16:15:55 +01:00
545221fa52 ci: try faster build 2021-12-21 16:14:29 +01:00
137ecfbebb ci: fix artifact file name 2021-12-21 16:04:30 +01:00
f7fb326eca ci: fix upload artifacts 2021-12-21 15:52:30 +01:00
95b3a73489 ci: improve environment handling 2021-12-21 15:45:01 +01:00
3b6395c696 ci: add missing steps 2021-12-21 15:33:51 +01:00
219a1e7a2a CI: add support for test 2021-12-21 15:30:17 +01:00
939f161845 Add support for unzip 2021-12-16 06:44:22 +01:00
c5a74ae4cb Remove tocupdate 2021-12-15 23:43:28 +01:00
95a40d2f18 Use sane defaults for 2-level depth 2021-12-15 23:34:22 +01:00
2a2dcd0dec Disable tocupdate 2021-12-15 23:34:09 +01:00
4ce276bf83 fix: Pipenv must use .venv in project to share dependencies 2021-12-15 18:10:04 +01:00
be90f72334 chore: update Pipfile.lock 2021-12-15 17:52:20 +01:00
ee216534a3 ci: Disable javascript analysis in CodeQL 2021-12-15 17:49:25 +01:00
1f7f09ce67 ci: Disable ruby analysis in CodeQL 2021-12-15 17:48:33 +01:00
67a5cea132 fix: Add missing link & env for pipenv 2021-12-15 17:47:14 +01:00
630e589960 makefile: Fix pipenv parameters 2021-12-15 17:46:23 +01:00
5c7ce79966 doc: add comments in entrypoint 2021-12-06 14:59:59 +01:00
20b498bc55 fix: make pipenv install system-wide 2021-12-06 14:59:18 +01:00
e0a256084a marp: handle theme for build-slides 2021-12-06 12:22:19 +01:00
61a5f735ab docker: add shell command to entrypoint 2021-12-06 11:47:53 +01:00
effbefc00a scripts: make slides/docs optional (in case of missing directory) 2021-12-06 11:11:24 +01:00
c33e2da44e docker: test if _build directory exists before chown 2021-12-06 11:10:43 +01:00
ce2b0e546d fix: change permissions of _build 2021-11-30 21:58:34 +01:00
8418db7b38 fix: update Marp because of chrome bug[F 2021-11-30 21:42:42 +01:00
020cce774b security: update package.json 2021-11-30 15:28:08 +01:00
2803bfa852 security: fix DependaBot alerts 2021-11-30 15:22:41 +01:00
de00ec0a3f fix: handle user UID/GID 2021-11-30 15:16:01 +01:00
4e09526845 fix: handle user UID/GID 2021-11-30 15:01:01 +01:00
4131813fa5 docker: switch to non-root user 2021-11-30 14:02:48 +01:00
e7bfbca9dc docker: include chromium to build slides (fix) 2021-11-30 13:38:30 +01:00
ea801eacb8 docker: include chromium to build slides 2021-11-30 13:33:42 +01:00
4ca84cf000 style: Fix design of slides 2021-11-30 13:33:29 +01:00
d08be654fe style: Add support for bc-title 2021-11-25 20:22:28 +01:00
a266ea7dc7 style: fix display for h3 in slides 2021-11-25 18:48:48 +01:00
9c4c2710d6 script: fix volumes in gx-teaching 2021-11-25 18:44:46 +01:00
5c13743b86 make: fix docker commands 2021-11-25 18:44:26 +01:00
6db13325d7 scripts: fix theme detection 2021-11-25 17:52:03 +01:00
3d28838756 make: add shell target 2021-11-25 17:50:22 +01:00
3736cf293b CI: fix syntax for environment variables in GITHUB 2021-11-25 17:04:03 +01:00
35316eae6b Better tagging of images 2021-11-25 16:59:13 +01:00
ace7dd095a Add plugins from vedem-doc 2021-11-25 16:39:10 +01:00
dc6b5b7b21 Change theme extension (for build) 2021-11-24 19:58:03 +01:00
31d6d31dc8 CI: Fix path to dockerfile 2021-11-24 19:35:30 +01:00
ee60b803db Disable marp theme if not needed 2021-11-24 19:35:20 +01:00
84783f1454 Update workflow 2021-11-24 19:27:41 +01:00
ada5f968a0 Update workflow 2021-11-24 19:26:24 +01:00
4f460de55b
Merge pull request #17 from glenux/dependabot/npm_and_yarn/tar-6.1.11
build(deps): bump tar from 6.1.0 to 6.1.11
2021-11-24 19:24:07 +01:00
d60b2c2d0b
Merge pull request #11 from glenux/dependabot/npm_and_yarn/http-proxy-1.18.1
Bump http-proxy from 1.18.0 to 1.18.1
2021-11-24 19:23:28 +01:00
63c97afa87
Merge pull request #19 from glenux/dependabot/pip/mkdocs-1.2.3
build(deps): bump mkdocs from 1.2.1 to 1.2.3
2021-11-24 19:22:39 +01:00
8b674f3822
Merge pull request #18 from glenux/dependabot/npm_and_yarn/jszip-3.7.1
build(deps): bump jszip from 3.6.0 to 3.7.1
2021-11-24 19:22:23 +01:00
7d80d14e7c
Create codeql-analysis.yml 2021-11-24 19:20:57 +01:00
cb3cae27b4 Add CI script 2021-11-24 19:17:27 +01:00
dependabot[bot]
2096130c16
build(deps): bump mkdocs from 1.2.1 to 1.2.3
Bumps [mkdocs](https://github.com/mkdocs/mkdocs) from 1.2.1 to 1.2.3.
- [Release notes](https://github.com/mkdocs/mkdocs/releases)
- [Commits](https://github.com/mkdocs/mkdocs/compare/1.2.1...1.2.3)

---
updated-dependencies:
- dependency-name: mkdocs
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-23 22:50:56 +00:00
f892fe9658 Update script 2021-11-23 23:48:06 +01:00
dependabot[bot]
039b8c0c70
build(deps): bump jszip from 3.6.0 to 3.7.1
Bumps [jszip](https://github.com/Stuk/jszip) from 3.6.0 to 3.7.1.
- [Release notes](https://github.com/Stuk/jszip/releases)
- [Changelog](https://github.com/Stuk/jszip/blob/master/CHANGES.md)
- [Commits](https://github.com/Stuk/jszip/compare/v3.6.0...v3.7.1)

---
updated-dependencies:
- dependency-name: jszip
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-23 22:47:53 +00:00
5b2db39475 Merge branch 'master' of github.com:glenux/teaching-boilerplate 2021-11-23 23:47:12 +01:00
8fa255631d Update docker scripts 2021-11-23 23:46:50 +01:00
7572df48f7 Bump python version 2021-11-23 23:44:50 +01:00
da362946a9 Add columns layout 2021-11-23 23:44:20 +01:00
ce08f3d90f Add docker files 2021-10-10 11:21:36 +02:00
dependabot[bot]
114982cdcd
build(deps): bump tar from 6.1.0 to 6.1.11
Bumps [tar](https://github.com/npm/node-tar) from 6.1.0 to 6.1.11.
- [Release notes](https://github.com/npm/node-tar/releases)
- [Changelog](https://github.com/npm/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-tar/compare/v6.1.0...v6.1.11)

---
updated-dependencies:
- dependency-name: tar
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-31 19:09:32 +00:00
65f8b8a07d Add sample images for .dot and .circo 2021-07-23 16:52:57 +02:00
5ed9a58bac Update .makefiles 2021-07-23 16:16:58 +02:00
5e6f017f0c Add support for mdpp slides 2021-07-23 16:15:53 +02:00
7ae04dee64 Add dependency to makefiles-forever 2021-07-23 15:51:26 +02:00
03dc8e36c8 Add missing doc line 2021-07-21 13:59:28 +02:00
dependabot[bot]
0da4f6a7ce
Bump http-proxy from 1.18.0 to 1.18.1
Bumps [http-proxy](https://github.com/http-party/node-http-proxy) from 1.18.0 to 1.18.1.
- [Release notes](https://github.com/http-party/node-http-proxy/releases)
- [Changelog](https://github.com/http-party/node-http-proxy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/http-party/node-http-proxy/compare/1.18.0...1.18.1)

---
updated-dependencies:
- dependency-name: http-proxy
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-27 21:55:41 +00:00
34 changed files with 6500 additions and 1900 deletions

View file

@ -2,3 +2,4 @@
examples
exercises
node_modules
.drone.yml

59
.drone.yml Normal file
View file

@ -0,0 +1,59 @@
---
kind: pipeline
type: docker
name: default
steps:
- name: debug
image: alpine
environment:
commands:
- 'echo "Repository: glenux/docmachine"'
- 'echo "Git commit: ${DRONE_COMMIT_SHA:0:8}"'
- name: publish:commit_branch
image: plugins/docker
# volumes:
# - name: cache
# path: /stupid
settings:
username:
from_secret: DOCKERHUB_USERNAME
password:
from_secret: DOCKERHUB_PASSWORD
cache_from: "glenux/docmachine:latest_${DRONE_BRANCH/\\//-}"
context: .
dockerfile: docker/Dockerfile
repo: glenux/docmachine
tags:
- "latest_${DRONE_BRANCH/\\//-}"
- "${DRONE_COMMIT_SHA:0:8}"
purge: false
when:
branch:
- "master"
- "develop"
- "feature/*"
- name: publish:latest
image: plugins/docker
settings:
username:
from_secret: DOCKERHUB_USERNAME
password:
from_secret: DOCKERHUB_PASSWORD
cache_from: "glenux/docmachine:latest_${DRONE_BRANCH/\\//-}"
context: .
dockerfile: docker/Dockerfile
repo: glenux/docmachine
tags: latest
purge: false
when:
branch:
- master
# volumes:
# - name: cache
# temp: {}
#

150
.github/workflows/build-and-publish.yml vendored Normal file
View file

@ -0,0 +1,150 @@
---
name: "Build, Test and Publish"
"on":
# run it on push to the default repository branch
push:
branches: [master, develop]
# run it during pull request
pull_request:
env:
IMAGE_NAME: glenux/teaching-boilerplate
DOCKER_BUILDKIT: 1
jobs:
build-docker-image:
name: "Build docker image"
# run only when code is compiling and tests are passing
runs-on: ubuntu-latest
# steps to perform in job
steps:
- name: Set current date as env variable
run: |
export BUILD_VERSION=v$(date +'%Y%m%d_%H%M')
echo "BUILD_VERSION=$BUILD_VERSION" >> $GITHUB_ENV
- name: Checkout code
uses: actions/checkout@v2
- name: Build image and save as file
run: |
docker build \
--file docker/Dockerfile \
--cache-from $IMAGE_NAME:latest \
--tag $IMAGE_NAME:latest \
--build-arg BUILDKIT_INLINE_CACHE=1 \
"."
docker save $IMAGE_NAME:latest > /tmp/image.tar
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}
- name: Save important variables as extra.env
run: |
echo "BUILD_VERSION=$BUILD_VERSION" >> /tmp/extra.env
cat /tmp/extra.env
- name: Upload artifacts
uses: actions/upload-artifact@v2
with:
name: artifacts
path: |
/tmp/image.tar
/tmp/extra.env
test-docker-image:
name: "Test docker image (build PDF and HTML)"
needs: build-docker-image
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Download artifact
uses: actions/download-artifact@v2
with:
name: artifacts
path: /tmp
- name: Load environment
run: |
cat /tmp/extra.env >> $GITHUB_ENV
- name: Load image
run: |
docker load --input /tmp/image.tar
docker image ls -a
- name: Build HTML for docs
run: |
./scripts/gx-teaching \
--no-tty \
--data-dir . \
--action build-docs-html
- name: Build PDF for docs
run: |
./scripts/gx-teaching \
--no-tty \
--data-dir . \
--action build-docs-pdf
- name: Build HTML for slides
run: |
./scripts/gx-teaching \
--no-tty \
--data-dir . \
--action build-slides-html
- name: Build PDF for slides
run: |
./scripts/gx-teaching \
--no-tty \
--data-dir . \
--action build-slides-pdf
push-docker-image:
name: "Push docker image to registry"
needs: test-docker-image
if: github.ref == 'refs/heads/master'
runs-on: ubuntu-latest
steps:
- name: Download artifact
uses: actions/download-artifact@v2
with:
name: artifacts
path: /tmp
- name: Load environment
run: |
cat /tmp/extra.env >> $GITHUB_ENV
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v1
- name: Load image
run: |
docker load --input /tmp/image.tar
docker image ls -a
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Tag images
run: |
docker tag \
glenux/teaching-boilerplate:latest \
glenux/teaching-boilerplate:${{ env.BUILD_VERSION }}
- name: Build image and push to Docker Hub and GitHub Container Registry
run: |
docker push glenux/teaching-boilerplate:latest
docker push glenux/teaching-boilerplate:${{ env.BUILD_VERSION }}
#

72
.github/workflows/codeql-analysis.yml vendored Normal file
View file

@ -0,0 +1,72 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
---
name: "CodeQL"
on:
push:
branches: [ master ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ master ]
schedule:
- cron: '28 4 * * 2'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
# language: [ 'javascript', 'python']
language: ['python']
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
# Learn more about CodeQL language support at https://git.io/codeql-language-support
steps:
- name: Checkout repository
uses: actions/checkout@v2
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v1
# Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1

1
.gitignore vendored
View file

@ -3,6 +3,7 @@
.bundle
*.docx
*.epub
/slides/autoslide.md
/images/*.circo.svg
/images/*.dot.svg
/images/*.ora.png

3
.gitmodules vendored
View file

@ -4,3 +4,6 @@
[submodule "ext/marp-assets"]
path = ext/marp-assets
url = git@bitbucket.org:glenux/marp-assets.git
[submodule ".makefiles"]
path = .makefiles
url = https://github.com/glenux/makefiles-forever

1
.makefiles Submodule

@ -0,0 +1 @@
Subproject commit d5627404e17e12ff6349007efc25fa01db4c9c54

View file

@ -1,6 +1,7 @@
// engine.js
// You have to run `npm i @marp-team/marp-core` at first.
const { Marp } = require('@marp-team/marp-core')
const highlightLines = require('markdown-it-highlight-lines')
module.exports = opts => {
@ -10,11 +11,12 @@ module.exports = opts => {
opts.html = true
// console.log(opts)
const marp = new Marp(opts)
// Disable parsing fragmented list
marp.markdown.core.ruler.disable('marpit_fragment')
return marp
// Enable code lines highlighting
// ref. https://github.com/marp-team/marp-vscode/issues/146
return marp.use(highlightLines)
}

View file

@ -1,85 +0,0 @@
/* @theme glenux */
@import-theme 'default';
body {
--primary-color: #009fcb;
--secondary-color: #241c1c;
--text-color: #111111; }
section {
font-size: 24px;
justify-content: start; }
section footer {
opacity: 0.75;
color: #888; }
section::after {
opacity: 0.5;
color: black; }
section[id="1"] h1,
section[id="1"] h2,
section[id="1"] h3,
section[id="1"] h4,
section[id="1"] h5,
section[id="1"] h6 {
/* color: white !important; */ }
section[id="1"]::after {
color: var(--text-color); }
section[id="1"] footer {
color: var(--text-color); }
section.chapter {
justify-content: center; }
/*
section.chapter h1:first-child::before,
section.chapter h2:first-child::before,
section.chapter h3:first-child::before,
section.chapter h4:first-child::before,
section.chapter h5:first-child::before {
display: none;
}
*/
h1:first-child,
h2:first-child,
h3:first-child,
h4:first-child,
h5:first-child,
h6:first-child {
font-family: "Droid Sans Mono", monospace;
color: #662d91;
font-weight: bold;
position: relative; }
h1:first-child::before {
content: "";
position: absolute;
display: block;
top: 0.2em;
left: -100px;
width: 70px;
height: 0.9em;
background-color: white; }
section:not(.chapter) h2:first-child {
font-size: 100%; }
h2:first-child::before {
content: "";
position: absolute;
display: block;
top: 0.2em;
left: -100px;
width: 70px;
height: 0.9em;
background-color: #662d91; }
a {
color: inherit;
text-decoration: underline; }
blockquote {
color: inherit; }

259
.marp/theme.scss Normal file
View file

@ -0,0 +1,259 @@
/* @theme glenux */
@import-theme 'default';
$primaryColor: #662d91;
$secondaryColor: #f60;
$tertiaryColor: #241c1c;
$textColor: #111111;
body {
--primary-color: $primaryColor;
--secondary-color: $secondaryColor;
--tertiary-color: $tertiaryColor;
--text-color: $textColor;
}
section {
font-size: 24px;
justify-content: start;
padding: 120px 80px 80px 80px;
}
// https://github.com/marp-team/marp-vscode/issues/146
.highlighted-line {
background-color: #ff0;
display: block;
margin: 0 -16px;
padding: 0 16px;
}
section footer {
opacity: 0.75;
color: $textColor; }
section::after {
opacity: 0.5;
color: $textColor; }
section[id="1"] h1,
section[id="1"] h2,
section[id="1"] h3,
section[id="1"] h4,
section[id="1"] h5,
section[id="1"] h6 {
/* color: white !important; */ }
section[id="1"]::after {
color: var(--text-color); }
section[id="1"] footer {
color: var(--text-color); }
section.chapter {
justify-content: center; }
section.chapter > bc-title:first-child,
section.chapter > h1:first-child,
section.chapter > h2:first-child,
section.chapter > h3:first-child,
section.chapter > h4:first-child,
section.chapter > h5:first-child,
section.chapter > h6:first-child {
position: relative;
top: -40px;
}
/*
section.chapter h1:first-child::before,
section.chapter h2:first-child::before,
section.chapter h3:first-child::before,
section.chapter h4:first-child::before,
section.chapter h5:first-child::before {
display: none;
}
*/
section > ul {
padding-left: 1em;
}
section > bc-title {
line-height: 39px;
font-size: 32px;
padding-bottom: 9.36px;
}
section > h1 {
color: var(--text-color);
}
section > bc-title:first-child,
section > h1:first-child,
section > h2:first-child,
section > h3:first-child,
section > h4:first-child,
section > h5:first-child,
section > h6:first-child {
font-family: "Droid Sans Mono", monospace;
color: $primaryColor;
font-weight: bold;
// position: relative;
// top: -40px;
position: absolute;
top: 50px;
}
section > bc-title:first-child::before,
section > h1:first-child::before,
section > h2:first-child::before,
section > h3:first-child::before {
content: "";
position: absolute;
display: block;
top: 0.2em;
left: -100px;
width: 70px;
height: 0.9em;
background-color: white;
}
section > bc-title:first-child::before,
section > h1:first-child::before,
section > h2:first-child::before,
section > h3:first-child::before,
section > h4:first-child::before,
section > h5:first-child::before,
section > h6:first-child::before
{
content: "";
position: absolute;
display: block;
top: 0.2em;
left: -100px;
width: 70px;
height: 0.9em;
background-color: $primaryColor;
}
section:not(.chapter) > h2:first-child {
font-size: 100%; }
section.draft {
box-shadow: inset 20px 20px 0px red, inset -20px 20px 0px red, inset 20px -20px 0px red, inset -20px -20px 0px red;
}
section.draft::before {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) rotate(-30deg);
font-size: 100px;
display: block;
content: "DRAFT";
color: darkred;
opacity: 0.25;
}
a {
color: inherit;
text-decoration: underline; }
blockquote {
color: inherit; }
bc-row {
margin-top: 20px;
margin-bottom: auto;
/* outline: 1px solid red; */
/* padding: 10px; */
box-sizing: border-box;
display: flex;
}
bc-row[bc-height-full] {
flex: 1 1 0;
}
bc-row > bc-column {
/* outline: 1px solid red; */
margin-left: 100px;
flex-basis: 100%;
height: inherit;
flex: 1 1 0;
}
bc-row > bc-column[bc-margin-small] {
margin-left: 50px;
}
bc-row > bc-column[bc-margin-tiny] {
margin-left: 25px;
}
bc-row > bc-column[bc-text-small] {
font-size: 90%;
}
bc-row > bc-column[bc-text-tiny] {
font-size: 80%;
}
bc-row > bc-column[bc-width-large] {
flex: 2 1 0;
}
bc-row > bc-column[bc-primary] {
background-color: $primaryColor;
color: white;
padding: 24px;
}
bc-row > bc-column[bc-secondary] {
background-color: $secondaryColor;
color: white;
padding: 24px;
}
bc-row > bc-column[bc-tertiary] {
background-color: $tertiaryColor;
color: white;
padding: 24px;
}
bc-row > bc-column[bc-grey] {
background-color: #eeeeee;
padding: 24px;
}
bc-row > bc-column[bc-invert] {
color: white;
background-color: $textColor;
padding: 24px;
}
bc-row > bc-column:first-of-type {
margin-left: 0px;
}
bc-row > bc-column p:only-child {
margin-bottom: 0px;
}
bc-row > bc-column > h1:first-child,
bc-row > bc-column > h2:first-child,
bc-row > bc-column > h3:first-child,
bc-row > bc-column > h4:first-child,
bc-row > bc-column > h5:first-child,
bc-row > bc-column > h6:first-child {
margin-top: 0;
}
p img:only-child[alt*="center"] {
display: block;
margin-left: auto;
margin-right: auto;
}

View file

@ -1 +0,0 @@
python 3.8.3

View file

@ -1,10 +0,0 @@
FROM node:buster-slim
MAINTAINER Glenn ROLLAND <glenux@glenux.net>
RUN apt-get update && \
apt-get install -y make python build-essential
COPY . /app
WORKDIR /app
RUN make prepare
CMD make watch

139
Makefile
View file

@ -1,5 +1,8 @@
#!/usr/bin/make -f
## System-wide installation of python/node ?
SYSTEM_INSTALL=0
## Configure this part if you wish to
DEPLOY_REPO=
DEPLOY_OPTS=
@ -9,34 +12,52 @@ SLIDES_DIR=slides
DOCS_DIR=docs
IMAGES_DIR=images
BUILD_DIR=_build
CACHE_DIR=_cache
## Internal directories
CACHE_SLIDES_DIR=$(CACHE_DIR)/slides
## Output directories
BUILD_SLIDES_DIR=$(BUILD_DIR)/slides
BUILD_DOCS_DIR=$(BUILD_DIR)/docs
BUILD_IMAGES_DIR=images
BUILD_VERSION=v$(shell date "+%Y%m%d-%H%M")
## Ports
DOCS_PORT=5100
SLIDES_PORT=5200
## Find .md slides
SLIDES_MD=$(shell find $(SLIDES_DIR) \( -name '*.md' ! -name '_*' \))
SLIDES_PDF=$(patsubst $(SLIDES_DIR)/%.md,$(BUILD_SLIDES_DIR)/%.pdf,$(SLIDES_MD))
SLIDES_MDPP=$(shell find -L $(SLIDES_DIR) -regextype sed \( -name '*.mdpp' ! -regex '.*/_.*' \))
SLIDES_MDPP_MD=$(patsubst $(SLIDES_DIR)/%.mdpp,$(CACHE_SLIDES_DIR)/%.mdpp.md,$(SLIDES_MDPP))
SLIDES_MDPP_MD_PDF=$(patsubst $(CACHE_SLIDES_DIR)/%.mdpp.md,$(BUILD_SLIDES_DIR)/%.pdf,$(SLIDES_MDPP_MD))
SLIDES_MDPP_MD_PPTX=$(patsubst $(CACHE_SLIDES_DIR)/%.mdpp.md,$(BUILD_SLIDES_DIR)/%.pptx,$(SLIDES_MDPP_MD))
SLIDES_MD=$(shell find -L $(SLIDES_DIR) -regextype sed \( -name '*.md' ! -regex '.*/_.*' \)) $(SLIDES_MDPP_MD)
SLIDES_MD_PDF=$(patsubst $(SLIDES_DIR)/%.md,$(BUILD_SLIDES_DIR)/%.pdf,$(SLIDES_MD))
SLIDES_MD_PPTX=$(patsubst $(SLIDES_DIR)/%.md,$(BUILD_SLIDES_DIR)/%.pptx,$(SLIDES_MD))
SLIDES_MD_ALL=$(SLIDES_MDPP_MD) $(SLIDES_MD) $(SLIDES_DIR)/autoslide.md
SLIDES_PDF_ALL=$(SLIDES_MDPP_MD_PDF) $(SLIDES_MD_PDF) $(BUILD_SLIDES_DIR)/autoslide.pdf
SLIDES_PPTX_ALL=$(SLIDES_MDPP_MD_PPTX) $(SLIDES_MD_PPTX) $(BUILD_SLIDES_DIR)/autoslide.pptx
DOCS_MD=$(shell find -L $(DOCS_DIR) -regextype sed \( -name '*.md' ! -regex '.*/_.*' \))
## Find .uml graphs
DOCS_IMAGES_UML=$(shell find $(IMAGES_DIR) \( -name '*.uml' ! -name '_*' \))
DOCS_IMAGES_UML=$(shell find -L $(IMAGES_DIR) -regextype sed \( -name '*.uml' ! -regex '.*/_.*' \))
DOCS_IMAGES_UML_SVG=$(patsubst $(IMAGES_DIR)/%.uml,$(BUILD_IMAGES_DIR)/%.uml.svg,$(DOCS_IMAGES_UML))
## Find .dot graphs
DOCS_IMAGES_DOT=$(shell find $(IMAGES_DIR) \( -name '*.dot' ! -name '_*' \))
DOCS_IMAGES_DOT=$(shell find -L $(IMAGES_DIR) -regextype sed \( -name '*.dot' ! -regex '.*/_.*' \))
DOCS_IMAGES_DOT_SVG=$(patsubst $(IMAGES_DIR)/%.dot,$(BUILD_IMAGES_DIR)/%.dot.svg,$(DOCS_IMAGES_DOT))
## Find .circo graphs
DOCS_IMAGES_CIRCO=$(shell find $(IMAGES_DIR) \( -name '*.circo' ! -name '_*' \))
DOCS_IMAGES_CIRCO=$(shell find -L $(IMAGES_DIR) -regextype sed \( -name '*.circo' ! -regex '.*/_.*' \))
DOCS_IMAGES_CIRCO_SVG=$(patsubst $(IMAGES_DIR)/%.circo,$(BUILD_IMAGES_DIR)/%.circo.svg,$(DOCS_IMAGES_CIRCO))
## Find .ora images
DOCS_IMAGES_ORA=$(shell find $(IMAGES_DIR) \( -name '*.ora' ! -name '_*' \))
DOCS_IMAGES_ORA=$(shell find -L $(IMAGES_DIR) -regextype sed \( -name '*.ora' ! -regex '.*/_.*' \))
DOCS_IMAGES_ORA_PNG=$(patsubst $(IMAGES_DIR)/%.ora,$(BUILD_IMAGES_DIR)/%.ora.png,$(DOCS_IMAGES_ORA))
## Merge all lists
@ -53,6 +74,7 @@ prepare: prepare-slides prepare-docs ## install prerequisites
prepare-slides: ## install prerequisites for PDF slides only
npm install
npm rebuild node-sass
npx browserslist@latest --update-db
prepare-docs: ## install prerequisites for static docs site only
@ -67,6 +89,9 @@ images: $(DOCS_IMAGES_SVG) $(DOCS_IMAGES_PNG) ## build images
@echo " dot: $(DOCS_IMAGES_DOT)"
@echo " circo: $(DOCS_IMAGES_CIRCO)"
@echo "Built: $(DOCS_IMAGES_SVG) $(DOCS_IMAGES_PNG)"
for dir in $$(find -L $(DOCS_DIR) -type d -regextype sed -regex '.*/[0-9][^/]*/images$$') $(DOCS_DIR)/images ; do \
rsync -av $$dir/ $(SLIDES_DIR)/images/ || exit 1 ; \
done
.PHONY: images
@ -85,17 +110,38 @@ images: $(DOCS_IMAGES_SVG) $(DOCS_IMAGES_PNG) ## build images
%.circo.svg: %.circo
circo -Tsvg $< > $@
$(CACHE_SLIDES_DIR)/%.mdpp.md: $(SLIDES_DIR)/%.mdpp
mkdir -p "$$(dirname "$@")"
m4 -d -I$(SLIDES_DIR) -I$(CACHE_SLIDES_DIR) $< > $@ \
|| ( rm -f $@ && exit 1 )
.marp/theme.css:
cd .marp && $(MAKE) theme.css
watch: ## run development server
$(MAKE) autoslide
pipenv run honcho start
autoslide: $(SLIDES_DIR)/autoslide.md | $(BUILD_SLIDES_DIR)
$(SLIDES_DIR)/autoslide.md: $(DOCS_MD)
find -L $(DOCS_DIR) -regextype sed \( -regex '.*/[0-9][^/]*\.md' ! -regex '.*/_.*' \) -print0 \
| sort -z \
| xargs -0 sed '/^---$$/,/^---$$/d' \
> $(SLIDES_DIR)/autoslide.md
watch-autoslide-internal:
# FIXME: use watchexec instead
while inotifywait -q -e move -e modify -e create -e attrib -e delete -e moved_to -r $(DOCS_DIR) ; do \
sleep 0.25 ; \
$(MAKE) autoslide ; \
done
watch-tocupdate-internal:
while inotifywait -q -e move -e modify -e create -e attrib -e delete -e moved_to -r docs ; do \
# FIXME: use watchexec instead
while inotifywait -q -e move -e modify -e create -e attrib -e delete -e moved_to -r $(DOCS_DIR) ; do \
sleep 2 ; \
$(MAKE) images ; \
$(MAKE) tocupdate ; \
done
watch-docs-internal:
@ -104,6 +150,7 @@ watch-docs-internal:
watch-slides-internal: .marp/theme.css
PORT=$(SLIDES_PORT) \
npx marp \
--allow-local-files \
--engine $$(pwd)/.marp/engine.js \
--html \
--theme $$(pwd)/.marp/theme.css \
@ -111,7 +158,7 @@ watch-slides-internal: .marp/theme.css
-s
watch-slides: ## run development server for PDF slides
pipenv run honcho start slides
pipenv run honcho start slides autoslide
watch-docs: ## run development server for static docs site
pipenv run honcho start docs toc
@ -123,12 +170,7 @@ serve-docs: watch-docs
.PHONY: watch watch-slides watch-docs watch-slides-internal watch-docs-internal serve serve-docs serve-slides
tocupdate:
pipenv run ./scripts/update-toc $(DOCS_DIR) ; \
$(BUILD_SLIDES_DIR)/%.pdf: $(SLIDES_DIR)/%.md
mkdir -p $(BUILD_SLIDES_DIR)
$(BUILD_SLIDES_DIR)/%.pdf: $(CACHE_SLIDES_DIR)/%.mdpp.md | $(BUILD_SLIDES_DIR) .marp/theme.css
npx marp --allow-local-files \
--engine $$(pwd)/.marp/engine.js \
--html \
@ -136,6 +178,24 @@ $(BUILD_SLIDES_DIR)/%.pdf: $(SLIDES_DIR)/%.md
$< \
-o $@
$(BUILD_SLIDES_DIR)/%.pdf: $(SLIDES_DIR)/%.md | $(BUILD_SLIDES_DIR) .marp/theme.css
npx marp --allow-local-files \
--engine $$(pwd)/.marp/engine.js \
--html \
--theme $$(pwd)/.marp/theme.css \
$< \
-o $@
$(BUILD_SLIDES_DIR)/%.pptx: $(SLIDES_DIR)/%.md | $(BUILD_SLIDES_DIR) .marp/theme.css
npx marp --allow-local-files \
--engine $$(pwd)/.marp/engine.js \
--html \
--theme $$(pwd)/.marp/theme.css \
$< \
-o $@
$(BUILD_SLIDES_DIR):
mkdir -p $(BUILD_SLIDES_DIR)
##
## Build final documents
@ -144,12 +204,38 @@ $(BUILD_SLIDES_DIR)/%.pdf: $(SLIDES_DIR)/%.md
## docs => static web site
##
build: build-docs build-slides ## build all documents
build: build-pdf build-html ## build all documents as PDF and HTML files
build-slides: $(SLIDES_PDF) $(SLIDES_MD) ## build PDF slides only
build-pptx: build-slides-pptx ## build slides as PPTX files
build-docs: ## build static docs site only
$(MAKE) tocupdate
build-pdf: build-docs-pdf build-slides-pdf ## build both docs and slides as PDF files
build-html: build-docs-html build-slides-html ## build both docs and slides as HTML files
build-docs: build-docs-pdf build-docs-html ## build only docs as PDF and HTML
build-slides: build-slides-pdf build-slides-html ## build only slides as PDF and HTML
build-slides-pptx: $(SLIDES_PPTX_ALL) $(SLIDES_MD_ALL) ## build PPTX slides only
build-slides-pdf: $(SLIDES_PDF_ALL) $(SLIDES_MD_ALL) ## build PDF slides only
build-slides-html: $(SLIDES_HTML_ALL) ## build HTML slides only
merge-slides: $(SLIDES_MDPP_MD) $(SLIDES_MD_ALL)
build-docs-pdf: ## build pdf docs only
mkdir -p $(BUILD_DOCS_DIR)
rm -f $(BUILD_DOCS_DIR)/combined.pdf
PYTHONUTF8=1 \
ENABLE_PDF_EXPORT=1 \
pipenv run mkdocs build \
--site-dir $(BUILD_DOCS_DIR)
pdftk \
$$(find -L $(BUILD_DOCS_DIR) -name *.pdf -not -name index.pdf |sort ) \
cat output $(BUILD_DOCS_DIR)/docs.pdf
build-docs-html: ## build static docs site only
mkdir -p $(BUILD_DOCS_DIR)
pipenv run mkdocs build \
--site-dir $(BUILD_DOCS_DIR)
@ -195,3 +281,18 @@ fixme:
@egrep --color -rni '(fixme)' $(DOCS_DIR) $(SLIDES_DIR)
.PHONY: fixme
docker-build: ## build docker image
docker build \
--file docker/Dockerfile \
--tag glenux/docmachine:$(BUILD_VERSION) \
.
docker tag \
glenux/docmachine:$(BUILD_VERSION) \
glenux/docmachine:latest
docker-push: ## push docker image
env docker push glenux/docmachine:latest
docker-pull: ## download docker image
env docker pull glenux/docmachine:latest

17
Pipfile
View file

@ -6,13 +6,18 @@ verify_ssl = true
[dev-packages]
[packages]
mkdocs = "*"
mkdocs-material = "*"
mdx-truly-sane-lists = "*"
pymdown-extensions = "*"
ansicolors = "*"
honcho = "*"
pyinotify = "*"
mdx-truly-sane-lists = "*"
mkdocs = "*"
mkdocs-awesome-pages-plugin = "*"
mkdocs-gitbook = "*"
mkdocs-include-markdown-plugin = "*"
mkdocs-material = "*"
mocodo = "*"
pyinotify = "*"
pymdown-extensions = "*"
mkdocs-pdf-export-plugin = "*"
[requires]
python_full_version = "3.8.3"
python_version = "3.11"

791
Pipfile.lock generated
View file

@ -1,11 +1,11 @@
{
"_meta": {
"hash": {
"sha256": "545d3115bc32a7fc35ee3c62f87a5cc727fa23d0908a2a1db960739e0650ca4c"
"sha256": "3a402e1a3937fef8857d2d9fe3adba4e6d8f1ead319624d294cfe69d9ce520fa"
},
"pipfile-spec": 6,
"requires": {
"python_full_version": "3.8.0"
"python_version": "3.9"
},
"sources": [
{
@ -16,120 +16,271 @@
]
},
"default": {
"ansicolors": {
"hashes": [
"sha256:00d2dde5a675579325902536738dd27e4fac1fd68f773fe36c21044eb559e187",
"sha256:99f94f5e3348a0bcd43c82e5fc4414013ccc19d70bd939ad71e0133ce9c372e0"
],
"index": "pypi",
"version": "==1.1.8"
},
"beautifulsoup4": {
"hashes": [
"sha256:9a315ce70049920ea4572a4055bc4bd700c940521d36fc858205ad4fcde149bf",
"sha256:c23ad23c521d818955a4151a67d81580319d4bf548d3d49f4223ae041ff98891"
],
"markers": "python_version >= '3.1'",
"version": "==4.10.0"
},
"bracex": {
"hashes": [
"sha256:096c4b788bf492f7af4e90ef8b5bcbfb99759ae3415ea1b83c9d29a5ed8f9a94",
"sha256:1c8d1296e00ad9a91030ccb4c291f9e4dc7c054f12c707ba3c5ff3e9a81bcd21"
],
"markers": "python_version >= '3.6'",
"version": "==2.2.1"
},
"brotli": {
"hashes": [
"sha256:12effe280b8ebfd389022aa65114e30407540ccb89b177d3fbc9a4f177c4bd5d",
"sha256:160c78292e98d21e73a4cc7f76a234390e516afcd982fa17e1422f7c6a9ce9c8",
"sha256:16d528a45c2e1909c2798f27f7bf0a3feec1dc9e50948e738b961618e38b6a7b",
"sha256:19598ecddd8a212aedb1ffa15763dd52a388518c4550e615aed88dc3753c0f0c",
"sha256:1c48472a6ba3b113452355b9af0a60da5c2ae60477f8feda8346f8fd48e3e87c",
"sha256:268fe94547ba25b58ebc724680609c8ee3e5a843202e9a381f6f9c5e8bdb5c70",
"sha256:269a5743a393c65db46a7bb982644c67ecba4b8d91b392403ad8a861ba6f495f",
"sha256:26d168aac4aaec9a4394221240e8a5436b5634adc3cd1cdf637f6645cecbf181",
"sha256:29d1d350178e5225397e28ea1b7aca3648fcbab546d20e7475805437bfb0a130",
"sha256:2aad0e0baa04517741c9bb5b07586c642302e5fb3e75319cb62087bd0995ab19",
"sha256:3496fc835370da351d37cada4cf744039616a6db7d13c430035e901443a34daa",
"sha256:35a3edbe18e876e596553c4007a087f8bcfd538f19bc116917b3c7522fca0429",
"sha256:3b78a24b5fd13c03ee2b7b86290ed20efdc95da75a3557cc06811764d5ad1126",
"sha256:40d15c79f42e0a2c72892bf407979febd9cf91f36f495ffb333d1d04cebb34e4",
"sha256:44bb8ff420c1d19d91d79d8c3574b8954288bdff0273bf788954064d260d7ab0",
"sha256:4688c1e42968ba52e57d8670ad2306fe92e0169c6f3af0089be75bbac0c64a3b",
"sha256:495ba7e49c2db22b046a53b469bbecea802efce200dffb69b93dd47397edc9b6",
"sha256:4d1b810aa0ed773f81dceda2cc7b403d01057458730e309856356d4ef4188438",
"sha256:503fa6af7da9f4b5780bb7e4cbe0c639b010f12be85d02c99452825dd0feef3f",
"sha256:56d027eace784738457437df7331965473f2c0da2c70e1a1f6fdbae5402e0389",
"sha256:5913a1177fc36e30fcf6dc868ce23b0453952c78c04c266d3149b3d39e1410d6",
"sha256:5b6ef7d9f9c38292df3690fe3e302b5b530999fa90014853dcd0d6902fb59f26",
"sha256:5cb1e18167792d7d21e21365d7650b72d5081ed476123ff7b8cac7f45189c0c7",
"sha256:61a7ee1f13ab913897dac7da44a73c6d44d48a4adff42a5701e3239791c96e14",
"sha256:622a231b08899c864eb87e85f81c75e7b9ce05b001e59bbfbf43d4a71f5f32b2",
"sha256:68715970f16b6e92c574c30747c95cf8cf62804569647386ff032195dc89a430",
"sha256:6b2ae9f5f67f89aade1fab0f7fd8f2832501311c363a21579d02defa844d9296",
"sha256:6c772d6c0a79ac0f414a9f8947cc407e119b8598de7621f39cacadae3cf57d12",
"sha256:6d847b14f7ea89f6ad3c9e3901d1bc4835f6b390a9c71df999b0162d9bb1e20f",
"sha256:76ffebb907bec09ff511bb3acc077695e2c32bc2142819491579a695f77ffd4d",
"sha256:7bbff90b63328013e1e8cb50650ae0b9bac54ffb4be6104378490193cd60f85a",
"sha256:7cb81373984cc0e4682f31bc3d6be9026006d96eecd07ea49aafb06897746452",
"sha256:7ee83d3e3a024a9618e5be64648d6d11c37047ac48adff25f12fa4226cf23d1c",
"sha256:854c33dad5ba0fbd6ab69185fec8dab89e13cda6b7d191ba111987df74f38761",
"sha256:85f7912459c67eaab2fb854ed2bc1cc25772b300545fe7ed2dc03954da638649",
"sha256:87fdccbb6bb589095f413b1e05734ba492c962b4a45a13ff3408fa44ffe6479b",
"sha256:88c63a1b55f352b02c6ffd24b15ead9fc0e8bf781dbe070213039324922a2eea",
"sha256:8a674ac10e0a87b683f4fa2b6fa41090edfd686a6524bd8dedbd6138b309175c",
"sha256:93130612b837103e15ac3f9cbacb4613f9e348b58b3aad53721d92e57f96d46a",
"sha256:9744a863b489c79a73aba014df554b0e7a0fc44ef3f8a0ef2a52919c7d155031",
"sha256:9749a124280a0ada4187a6cfd1ffd35c350fb3af79c706589d98e088c5044267",
"sha256:97f715cf371b16ac88b8c19da00029804e20e25f30d80203417255d239f228b5",
"sha256:9bf919756d25e4114ace16a8ce91eb340eb57a08e2c6950c3cebcbe3dff2a5e7",
"sha256:9d12cf2851759b8de8ca5fde36a59c08210a97ffca0eb94c532ce7b17c6a3d1d",
"sha256:9ed4c92a0665002ff8ea852353aeb60d9141eb04109e88928026d3c8a9e5433c",
"sha256:a72661af47119a80d82fa583b554095308d6a4c356b2a554fdc2799bc19f2a43",
"sha256:afde17ae04d90fbe53afb628f7f2d4ca022797aa093e809de5c3cf276f61bbfa",
"sha256:b336c5e9cf03c7be40c47b5fd694c43c9f1358a80ba384a21969e0b4e66a9b17",
"sha256:b663f1e02de5d0573610756398e44c130add0eb9a3fc912a09665332942a2efb",
"sha256:b83bb06a0192cccf1eb8d0a28672a1b79c74c3a8a5f2619625aeb6f28b3a82bb",
"sha256:c2415d9d082152460f2bd4e382a1e85aed233abc92db5a3880da2257dc7daf7b",
"sha256:c83aa123d56f2e060644427a882a36b3c12db93727ad7a7b9efd7d7f3e9cc2c4",
"sha256:cfc391f4429ee0a9370aa93d812a52e1fee0f37a81861f4fdd1f4fb28e8547c3",
"sha256:db844eb158a87ccab83e868a762ea8024ae27337fc7ddcbfcddd157f841fdfe7",
"sha256:defed7ea5f218a9f2336301e6fd379f55c655bea65ba2476346340a0ce6f74a1",
"sha256:e16eb9541f3dd1a3e92b89005e37b1257b157b7256df0e36bd7b33b50be73bcb",
"sha256:e23281b9a08ec338469268f98f194658abfb13658ee98e2b7f85ee9dd06caa91",
"sha256:e2d9e1cbc1b25e22000328702b014227737756f4b5bf5c485ac1d8091ada078b",
"sha256:e48f4234f2469ed012a98f4b7874e7f7e173c167bed4934912a29e03167cf6b1",
"sha256:e4c4e92c14a57c9bd4cb4be678c25369bf7a092d55fd0866f759e425b9660806",
"sha256:ec1947eabbaf8e0531e8e899fc1d9876c179fc518989461f5d24e2223395a9e3",
"sha256:f909bbbc433048b499cb9db9e713b5d8d949e8c109a2a548502fb9aa8630f0b1"
],
"version": "==1.0.9"
},
"cffi": {
"hashes": [
"sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3",
"sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2",
"sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636",
"sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20",
"sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728",
"sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27",
"sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66",
"sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443",
"sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0",
"sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7",
"sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39",
"sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605",
"sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a",
"sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37",
"sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029",
"sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139",
"sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc",
"sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df",
"sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14",
"sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880",
"sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2",
"sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a",
"sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e",
"sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474",
"sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024",
"sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8",
"sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0",
"sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e",
"sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a",
"sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e",
"sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032",
"sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6",
"sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e",
"sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b",
"sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e",
"sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954",
"sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962",
"sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c",
"sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4",
"sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55",
"sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962",
"sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023",
"sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c",
"sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6",
"sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8",
"sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382",
"sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7",
"sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc",
"sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997",
"sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"
],
"version": "==1.15.0"
},
"click": {
"hashes": [
"sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a",
"sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"
"sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1",
"sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"
],
"version": "==7.1.2"
"markers": "python_version >= '3.6'",
"version": "==8.0.4"
},
"future": {
"cssselect2": {
"hashes": [
"sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"
"sha256:8d4690bce5f25013262997e64cef3e7bade877d3ef126f9cc624e5b1f294d934",
"sha256:d98a7bbdd8ebc46093279195d669a3359bd5a23f90c19e82c19d9eeef333e617"
],
"version": "==0.18.2"
"markers": "python_version >= '3.7'",
"version": "==0.5.0"
},
"fonttools": {
"extras": [
"woff"
],
"hashes": [
"sha256:084dd1762f083a1bf49e41da1bfeafb475c9dce46265690a6bdd33290b9a63f4",
"sha256:6985cc5380c06db07fdc73ade15e6adbd4ce6ff850d7561ca00f97090b4b263d"
],
"markers": "python_version >= '3.7'",
"version": "==4.30.0"
},
"ghp-import": {
"hashes": [
"sha256:5f8962b30b20652cdffa9c5a9812f7de6bcb56ec475acac579807719bf242c46",
"sha256:947b3771f11be850c852c64b561c600fdddf794bab363060854c1ee7ad05e071"
],
"version": "==2.0.2"
},
"honcho": {
"hashes": [
"sha256:af5806bf13e3b20acdcb9ff8c0beb91eee6fe07393c3448dfad89667e6ac7576",
"sha256:c189402ad2e337777283c6a12d0f4f61dc6dd20c254c9a3a4af5087fc66cea6e"
"sha256:a4d6e3a88a7b51b66351ecfc6e9d79d8f4b87351db9ad7e923f5632cc498122f",
"sha256:c5eca0bded4bef6697a23aec0422fd4f6508ea3581979a3485fc4b89357eb2a9"
],
"index": "pypi",
"version": "==1.0.1"
"version": "==1.1.0"
},
"html5lib": {
"hashes": [
"sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d",
"sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
"version": "==1.1"
},
"importlib-metadata": {
"hashes": [
"sha256:b36ffa925fe3139b2f6ff11d6925ffd4fa7bc47870165e3ac260ac7b4f91e6ac",
"sha256:d16e8c1deb60de41b8e8ed21c1a7b947b0bc62fab7e1d470bcdf331cea2e6735"
],
"markers": "python_version >= '3.7'",
"version": "==4.11.2"
},
"jinja2": {
"hashes": [
"sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419",
"sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6"
"sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8",
"sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"
],
"version": "==2.11.3"
},
"joblib": {
"hashes": [
"sha256:9c17567692206d2f3fb9ecf5e991084254fe631665c450b443761c4186a613f7",
"sha256:feeb1ec69c4d45129954f1b7034954241eedfd6ba39b5e9e4b6883be3332d5e5"
],
"version": "==1.0.1"
},
"livereload": {
"hashes": [
"sha256:776f2f865e59fde56490a56bcc6773b6917366bce0c267c60ee8aaf1a0959869"
],
"version": "==2.6.3"
},
"lunr": {
"extras": [
"languages"
],
"hashes": [
"sha256:aab3f489c4d4fab4c1294a257a30fec397db56f0a50273218ccc3efdbf01d6ca",
"sha256:c4fb063b98eff775dd638b3df380008ae85e6cb1d1a24d1cd81a10ef6391c26e"
],
"version": "==0.5.8"
"markers": "python_version >= '3.6'",
"version": "==3.0.3"
},
"markdown": {
"hashes": [
"sha256:31b5b491868dcc87d6c24b7e3d19a0d730d59d3e46f4eea6430a321bed387a49",
"sha256:96c3ba1261de2f7547b46a00ea8463832c921d3f9d6aba3f255a6f71386db20c"
"sha256:76df8ae32294ec39dcf89340382882dfa12975f87f45c3ed1ecdb1e8cefc7006",
"sha256:9923332318f843411e9932237530df53162e29dc7a4e2b91e35764583c46c9a3"
],
"version": "==3.3.4"
"markers": "python_version >= '3.6'",
"version": "==3.3.6"
},
"markupsafe": {
"hashes": [
"sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473",
"sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161",
"sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235",
"sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5",
"sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42",
"sha256:195d7d2c4fbb0ee8139a6cf67194f3973a6b3042d742ebe0a9ed36d8b6f0c07f",
"sha256:22c178a091fc6630d0d045bdb5992d2dfe14e3259760e713c490da5323866c39",
"sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff",
"sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b",
"sha256:2beec1e0de6924ea551859edb9e7679da6e4870d32cb766240ce17e0a0ba2014",
"sha256:3b8a6499709d29c2e2399569d96719a1b21dcd94410a586a18526b143ec8470f",
"sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1",
"sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e",
"sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183",
"sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66",
"sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b",
"sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1",
"sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15",
"sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1",
"sha256:6f1e273a344928347c1290119b493a1f0303c52f5a5eae5f16d74f48c15d4a85",
"sha256:6fffc775d90dcc9aed1b89219549b329a9250d918fd0b8fa8d93d154918422e1",
"sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e",
"sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b",
"sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905",
"sha256:7fed13866cf14bba33e7176717346713881f56d9d2bcebab207f7a036f41b850",
"sha256:84dee80c15f1b560d55bcfe6d47b27d070b4681c699c572af2e3c7cc90a3b8e0",
"sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735",
"sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d",
"sha256:98bae9582248d6cf62321dcb52aaf5d9adf0bad3b40582925ef7c7f0ed85fceb",
"sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e",
"sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d",
"sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c",
"sha256:a6a744282b7718a2a62d2ed9d993cad6f5f585605ad352c11de459f4108df0a1",
"sha256:acf08ac40292838b3cbbb06cfe9b2cb9ec78fce8baca31ddb87aaac2e2dc3bc2",
"sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21",
"sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2",
"sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5",
"sha256:b1dba4527182c95a0db8b6060cc98ac49b9e2f5e64320e2b56e47cb2831978c7",
"sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b",
"sha256:b7d644ddb4dbd407d31ffb699f1d140bc35478da613b441c582aeb7c43838dd8",
"sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6",
"sha256:bf5aa3cbcfdf57fa2ee9cd1822c862ef23037f5c832ad09cfea57fa846dec193",
"sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f",
"sha256:caabedc8323f1e93231b52fc32bdcde6db817623d33e100708d9a68e1f53b26b",
"sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f",
"sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2",
"sha256:d53bc011414228441014aa71dbec320c66468c1030aae3a6e29778a3382d96e5",
"sha256:d73a845f227b0bfe8a7455ee623525ee656a9e2e749e4742706d80a6065d5e2c",
"sha256:d9be0ba6c527163cbed5e0857c451fcd092ce83947944d6c14bc95441203f032",
"sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7",
"sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be",
"sha256:feb7b34d6325451ef96bc0e36e1a6c0c1c64bc1fbec4b854f4529e51887b1621"
"sha256:023af8c54fe63530545f70dd2a2a7eed18d07a9a77b94e8bf1e2ff7f252db9a3",
"sha256:09c86c9643cceb1d87ca08cdc30160d1b7ab49a8a21564868921959bd16441b8",
"sha256:142119fb14a1ef6d758912b25c4e803c3ff66920635c44078666fe7cc3f8f759",
"sha256:1d1fb9b2eec3c9714dd936860850300b51dbaa37404209c8d4cb66547884b7ed",
"sha256:204730fd5fe2fe3b1e9ccadb2bd18ba8712b111dcabce185af0b3b5285a7c989",
"sha256:24c3be29abb6b34052fd26fc7a8e0a49b1ee9d282e3665e8ad09a0a68faee5b3",
"sha256:290b02bab3c9e216da57c1d11d2ba73a9f73a614bbdcc027d299a60cdfabb11a",
"sha256:3028252424c72b2602a323f70fbf50aa80a5d3aa616ea6add4ba21ae9cc9da4c",
"sha256:30c653fde75a6e5eb814d2a0a89378f83d1d3f502ab710904ee585c38888816c",
"sha256:3cace1837bc84e63b3fd2dfce37f08f8c18aeb81ef5cf6bb9b51f625cb4e6cd8",
"sha256:4056f752015dfa9828dce3140dbadd543b555afb3252507348c493def166d454",
"sha256:454ffc1cbb75227d15667c09f164a0099159da0c1f3d2636aa648f12675491ad",
"sha256:598b65d74615c021423bd45c2bc5e9b59539c875a9bdb7e5f2a6b92dfcfc268d",
"sha256:599941da468f2cf22bf90a84f6e2a65524e87be2fce844f96f2dd9a6c9d1e635",
"sha256:5ddea4c352a488b5e1069069f2f501006b1a4362cb906bee9a193ef1245a7a61",
"sha256:62c0285e91414f5c8f621a17b69fc0088394ccdaa961ef469e833dbff64bd5ea",
"sha256:679cbb78914ab212c49c67ba2c7396dc599a8479de51b9a87b174700abd9ea49",
"sha256:6e104c0c2b4cd765b4e83909cde7ec61a1e313f8a75775897db321450e928cce",
"sha256:736895a020e31b428b3382a7887bfea96102c529530299f426bf2e636aacec9e",
"sha256:75bb36f134883fdbe13d8e63b8675f5f12b80bb6627f7714c7d6c5becf22719f",
"sha256:7d2f5d97fcbd004c03df8d8fe2b973fe2b14e7bfeb2cfa012eaa8759ce9a762f",
"sha256:80beaf63ddfbc64a0452b841d8036ca0611e049650e20afcb882f5d3c266d65f",
"sha256:84ad5e29bf8bab3ad70fd707d3c05524862bddc54dc040982b0dbcff36481de7",
"sha256:8da5924cb1f9064589767b0f3fc39d03e3d0fb5aa29e0cb21d43106519bd624a",
"sha256:961eb86e5be7d0973789f30ebcf6caab60b844203f4396ece27310295a6082c7",
"sha256:96de1932237abe0a13ba68b63e94113678c379dca45afa040a17b6e1ad7ed076",
"sha256:a0a0abef2ca47b33fb615b491ce31b055ef2430de52c5b3fb19a4042dbc5cadb",
"sha256:b2a5a856019d2833c56a3dcac1b80fe795c95f401818ea963594b345929dffa7",
"sha256:b8811d48078d1cf2a6863dafb896e68406c5f513048451cd2ded0473133473c7",
"sha256:c532d5ab79be0199fa2658e24a02fce8542df196e60665dd322409a03db6a52c",
"sha256:d3b64c65328cb4cd252c94f83e66e3d7acf8891e60ebf588d7b493a55a1dbf26",
"sha256:d4e702eea4a2903441f2735799d217f4ac1b55f7d8ad96ab7d4e25417cb0827c",
"sha256:d5653619b3eb5cbd35bfba3c12d575db2a74d15e0e1c08bf1db788069d410ce8",
"sha256:d66624f04de4af8bbf1c7f21cc06649c1c69a7f84109179add573ce35e46d448",
"sha256:e67ec74fada3841b8c5f4c4f197bea916025cb9aa3fe5abf7d52b655d042f956",
"sha256:e6f7f3f41faffaea6596da86ecc2389672fa949bd035251eab26dc6697451d05",
"sha256:f02cf7221d5cd915d7fa58ab64f7ee6dd0f6cddbb48683debf5d04ae9b1c2cc1",
"sha256:f0eddfcabd6936558ec020130f932d479930581171368fd728efcfb6ef0dd357",
"sha256:fabbe18087c3d33c5824cb145ffca52eccd053061df1d79d4b66dafa5ad2a5ea",
"sha256:fc3150f85e2dbcf99e65238c842d1cfe69d3e7649b19864c1cc043213d9cd730"
],
"version": "==1.1.1"
"markers": "python_version >= '3.7'",
"version": "==2.1.0"
},
"mdx-truly-sane-lists": {
"hashes": [
@ -139,13 +290,29 @@
"index": "pypi",
"version": "==1.2"
},
"mergedeep": {
"hashes": [
"sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8",
"sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"
],
"markers": "python_version >= '3.6'",
"version": "==1.3.4"
},
"mkdocs": {
"hashes": [
"sha256:096f52ff52c02c7e90332d2e53da862fde5c062086e1b5356a6e392d5d60f5e9",
"sha256:f0b61e5402b99d7789efa032c7a74c90a20220a9c81749da06dbfbcbd52ffb39"
"sha256:89f5a094764381cda656af4298727c9f53dc3e602983087e1fe96ea1df24f4c1",
"sha256:a1fa8c2d0c1305d7fc2b9d9f607c71778572a8b110fb26642aa00296c9e6d072"
],
"index": "pypi",
"version": "==1.1.2"
"version": "==1.2.3"
},
"mkdocs-awesome-pages-plugin": {
"hashes": [
"sha256:43994aedadca881088e5d6bb420140a73ce517ca3e070972715f93b086c9c497",
"sha256:8f2f803a3d4a2cd2e290644b1b8c54cf2ae942db9ce91021c2ba858a991a3a8a"
],
"index": "pypi",
"version": "==2.6.1"
},
"mkdocs-gitbook": {
"hashes": [
@ -155,34 +322,118 @@
"index": "pypi",
"version": "==0.0.1"
},
"mkdocs-material": {
"mkdocs-include-markdown-plugin": {
"hashes": [
"sha256:1798d9a0a01f54db575801826d6b1b99a1185fef58bcaca36625ee1d519df83c",
"sha256:925221cf1877a50f72d9bf64a7a26c407d4b14fdc6a16e27fe7547178613e56c"
"sha256:5a8b0c60d8981225c012b8f657b6557910997e46dacae4aff039b181487236cf",
"sha256:64dd8c408a1b5b7422d4a5a826c434e5372af2fb7bd244dd5c87e09ff8f13302"
],
"index": "pypi",
"version": "==7.1.1"
"version": "==3.2.3"
},
"mkdocs-material": {
"hashes": [
"sha256:b8014d8a77ba45879525e0e7619d0833d10897487a77d6697ef94240fed8c892",
"sha256:ee153b8130ae580acd57082af0e54d644fe2a37c62f2ec9400f77e389ac1b294"
],
"index": "pypi",
"version": "==8.1.3"
},
"mkdocs-material-extensions": {
"hashes": [
"sha256:6947fb7f5e4291e3c61405bad3539d81e0b3cd62ae0d66ced018128af509c68f",
"sha256:d90c807a88348aa6d1805657ec5c0b2d8d609c110e62b9dce4daf7fa981fa338"
"sha256:a82b70e533ce060b2a5d9eb2bc2e1be201cf61f901f93704b4acf6e3d5983a44",
"sha256:bfd24dfdef7b41c312ede42648f9eb83476ea168ec163b613f9abd12bbfddba2"
],
"version": "==1.0.1"
"markers": "python_version >= '3.6'",
"version": "==1.0.3"
},
"nltk": {
"mkdocs-pdf-export-plugin": {
"hashes": [
"sha256:1235660f52ab10fda34d5277096724747f767b2903e1c0c4e14bde013552c9ba",
"sha256:cbc2ed576998fcf7cd181eeb3ca029e5f0025b264074b4beb57ce780673f8b86"
"sha256:77ba89ebea6f565286fb04360e3d9810567e27302383c9e2b6fa386f8ecca7d9",
"sha256:e6e58f8bdedb300423336b00ea1846516f471b529ea85cb7f254fa2a2ee577d8"
],
"version": "==3.6.1"
"index": "pypi",
"version": "==0.5.10"
},
"mocodo": {
"hashes": [
"sha256:878cd8a3341c087bd658296833b37ba4f5f608f856fdb53872b7b3fca0937d21",
"sha256:b62372eef18f03c4a12eb70a4c40539ba5908ef6f38d7357b76b2547df961bd1",
"sha256:d869693e4b1dbe0f35f3376b00faddb84351ca0f5dc51593fda18c2be42dfc43"
],
"index": "pypi",
"version": "==2.3.9"
},
"packaging": {
"hashes": [
"sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb",
"sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"
],
"markers": "python_version >= '3.6'",
"version": "==21.3"
},
"pillow": {
"hashes": [
"sha256:011233e0c42a4a7836498e98c1acf5e744c96a67dd5032a6f666cc1fb97eab97",
"sha256:0f29d831e2151e0b7b39981756d201f7108d3d215896212ffe2e992d06bfe049",
"sha256:12875d118f21cf35604176872447cdb57b07126750a33748bac15e77f90f1f9c",
"sha256:14d4b1341ac07ae07eb2cc682f459bec932a380c3b122f5540432d8977e64eae",
"sha256:1c3c33ac69cf059bbb9d1a71eeaba76781b450bc307e2291f8a4764d779a6b28",
"sha256:1d19397351f73a88904ad1aee421e800fe4bbcd1aeee6435fb62d0a05ccd1030",
"sha256:253e8a302a96df6927310a9d44e6103055e8fb96a6822f8b7f514bb7ef77de56",
"sha256:2632d0f846b7c7600edf53c48f8f9f1e13e62f66a6dbc15191029d950bfed976",
"sha256:335ace1a22325395c4ea88e00ba3dc89ca029bd66bd5a3c382d53e44f0ccd77e",
"sha256:413ce0bbf9fc6278b2d63309dfeefe452835e1c78398efb431bab0672fe9274e",
"sha256:5100b45a4638e3c00e4d2320d3193bdabb2d75e79793af7c3eb139e4f569f16f",
"sha256:514ceac913076feefbeaf89771fd6febde78b0c4c1b23aaeab082c41c694e81b",
"sha256:528a2a692c65dd5cafc130de286030af251d2ee0483a5bf50c9348aefe834e8a",
"sha256:6295f6763749b89c994fcb6d8a7f7ce03c3992e695f89f00b741b4580b199b7e",
"sha256:6c8bc8238a7dfdaf7a75f5ec5a663f4173f8c367e5a39f87e720495e1eed75fa",
"sha256:718856856ba31f14f13ba885ff13874be7fefc53984d2832458f12c38205f7f7",
"sha256:7f7609a718b177bf171ac93cea9fd2ddc0e03e84d8fa4e887bdfc39671d46b00",
"sha256:80ca33961ced9c63358056bd08403ff866512038883e74f3a4bf88ad3eb66838",
"sha256:80fe64a6deb6fcfdf7b8386f2cf216d329be6f2781f7d90304351811fb591360",
"sha256:81c4b81611e3a3cb30e59b0cf05b888c675f97e3adb2c8672c3154047980726b",
"sha256:855c583f268edde09474b081e3ddcd5cf3b20c12f26e0d434e1386cc5d318e7a",
"sha256:9bfdb82cdfeccec50aad441afc332faf8606dfa5e8efd18a6692b5d6e79f00fd",
"sha256:a5d24e1d674dd9d72c66ad3ea9131322819ff86250b30dc5821cbafcfa0b96b4",
"sha256:a9f44cd7e162ac6191491d7249cceb02b8116b0f7e847ee33f739d7cb1ea1f70",
"sha256:b5b3f092fe345c03bca1e0b687dfbb39364b21ebb8ba90e3fa707374b7915204",
"sha256:b9618823bd237c0d2575283f2939655f54d51b4527ec3972907a927acbcc5bfc",
"sha256:cef9c85ccbe9bee00909758936ea841ef12035296c748aaceee535969e27d31b",
"sha256:d21237d0cd37acded35154e29aec853e945950321dd2ffd1a7d86fe686814669",
"sha256:d3c5c79ab7dfce6d88f1ba639b77e77a17ea33a01b07b99840d6ed08031cb2a7",
"sha256:d9d7942b624b04b895cb95af03a23407f17646815495ce4547f0e60e0b06f58e",
"sha256:db6d9fac65bd08cea7f3540b899977c6dee9edad959fa4eaf305940d9cbd861c",
"sha256:ede5af4a2702444a832a800b8eb7f0a7a1c0eed55b644642e049c98d589e5092",
"sha256:effb7749713d5317478bb3acb3f81d9d7c7f86726d41c1facca068a04cf5bb4c",
"sha256:f154d173286a5d1863637a7dcd8c3437bb557520b01bddb0be0258dcb72696b5",
"sha256:f25ed6e28ddf50de7e7ea99d7a976d6a9c415f03adcaac9c41ff6ff41b6d86ac"
],
"index": "pypi",
"version": "==9.0.1"
},
"pycparser": {
"hashes": [
"sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9",
"sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"
],
"version": "==2.21"
},
"pydyf": {
"hashes": [
"sha256:1e2f5de48174f505de025a7d1e7cf01bbdd9422ca8ab9451782bf00ee178602c",
"sha256:9ef1505c424e2ac9c4caef5b8f8c105a311c23fdb4db4979d7d82ad6cff76fa7"
],
"markers": "python_version >= '3.6'",
"version": "==0.1.2"
},
"pygments": {
"hashes": [
"sha256:2656e1a6edcdabf4275f9a3640db59fd5de107d88e8663c5d4e9a0fa62f77f94",
"sha256:534ef71d539ae97d4c3a4cf7d6f110f214b0e687e92f9cb9d2a3b0d3101289c8"
"sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65",
"sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"
],
"version": "==2.8.1"
"markers": "python_version >= '3.5'",
"version": "==2.11.2"
},
"pyinotify": {
"hashes": [
@ -193,151 +444,219 @@
},
"pymdown-extensions": {
"hashes": [
"sha256:478b2c04513fbb2db61688d5f6e9030a92fb9be14f1f383535c43f7be9dff95b",
"sha256:632371fa3bf1b21a0e3f4063010da59b41db049f261f4c0b0872069a9b6d1735"
"sha256:74247f2c80f1d9e3c7242abe1c16317da36c6f26c7ad4b8a7f457f0ec20f0365",
"sha256:b03e66f91f33af4a6e7a0e20c740313522995f69a03d86316b1449766c473d0e"
],
"index": "pypi",
"version": "==8.1.1"
"version": "==9.1"
},
"pyparsing": {
"hashes": [
"sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea",
"sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"
],
"markers": "python_version >= '3.6'",
"version": "==3.0.7"
},
"pyphen": {
"hashes": [
"sha256:459020cd320eb200c0c5ba46b98b2278fd34c5546f520fdcd2ce5f8d733eb994",
"sha256:b7d3dfc24b6f2178cdb2b1757ace0bd5d222de3e62c28d22ac578c5f22a13e9b"
],
"markers": "python_version >= '3.7'",
"version": "==0.12.0"
},
"python-dateutil": {
"hashes": [
"sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86",
"sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==2.8.2"
},
"pyyaml": {
"hashes": [
"sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf",
"sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696",
"sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393",
"sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77",
"sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922",
"sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5",
"sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8",
"sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10",
"sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc",
"sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018",
"sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e",
"sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253",
"sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347",
"sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183",
"sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541",
"sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb",
"sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185",
"sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc",
"sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db",
"sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa",
"sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46",
"sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122",
"sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b",
"sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63",
"sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df",
"sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc",
"sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247",
"sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6",
"sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"
"sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293",
"sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b",
"sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57",
"sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b",
"sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4",
"sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07",
"sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba",
"sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9",
"sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287",
"sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513",
"sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0",
"sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0",
"sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92",
"sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f",
"sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2",
"sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc",
"sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c",
"sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86",
"sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4",
"sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c",
"sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34",
"sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b",
"sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c",
"sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb",
"sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737",
"sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3",
"sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d",
"sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53",
"sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78",
"sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803",
"sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a",
"sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174",
"sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"
],
"version": "==5.4.1"
"markers": "python_version >= '3.6'",
"version": "==6.0"
},
"regex": {
"pyyaml-env-tag": {
"hashes": [
"sha256:01afaf2ec48e196ba91b37451aa353cb7eda77efe518e481707e0515025f0cd5",
"sha256:11d773d75fa650cd36f68d7ca936e3c7afaae41b863b8c387a22aaa78d3c5c79",
"sha256:18c071c3eb09c30a264879f0d310d37fe5d3a3111662438889ae2eb6fc570c31",
"sha256:1e1c20e29358165242928c2de1482fb2cf4ea54a6a6dea2bd7a0e0d8ee321500",
"sha256:281d2fd05555079448537fe108d79eb031b403dac622621c78944c235f3fcf11",
"sha256:314d66636c494ed9c148a42731b3834496cc9a2c4251b1661e40936814542b14",
"sha256:32e65442138b7b76dd8173ffa2cf67356b7bc1768851dded39a7a13bf9223da3",
"sha256:339456e7d8c06dd36a22e451d58ef72cef293112b559010db3d054d5560ef439",
"sha256:3916d08be28a1149fb97f7728fca1f7c15d309a9f9682d89d79db75d5e52091c",
"sha256:3a9cd17e6e5c7eb328517969e0cb0c3d31fd329298dd0c04af99ebf42e904f82",
"sha256:47bf5bf60cf04d72bf6055ae5927a0bd9016096bf3d742fa50d9bf9f45aa0711",
"sha256:4c46e22a0933dd783467cf32b3516299fb98cfebd895817d685130cc50cd1093",
"sha256:4c557a7b470908b1712fe27fb1ef20772b78079808c87d20a90d051660b1d69a",
"sha256:52ba3d3f9b942c49d7e4bc105bb28551c44065f139a65062ab7912bef10c9afb",
"sha256:563085e55b0d4fb8f746f6a335893bda5c2cef43b2f0258fe1020ab1dd874df8",
"sha256:598585c9f0af8374c28edd609eb291b5726d7cbce16be6a8b95aa074d252ee17",
"sha256:619d71c59a78b84d7f18891fe914446d07edd48dc8328c8e149cbe0929b4e000",
"sha256:67bdb9702427ceddc6ef3dc382455e90f785af4c13d495f9626861763ee13f9d",
"sha256:6d1b01031dedf2503631d0903cb563743f397ccaf6607a5e3b19a3d76fc10480",
"sha256:741a9647fcf2e45f3a1cf0e24f5e17febf3efe8d4ba1281dcc3aa0459ef424dc",
"sha256:7c2a1af393fcc09e898beba5dd59196edaa3116191cc7257f9224beaed3e1aa0",
"sha256:7d9884d86dd4dd489e981d94a65cd30d6f07203d90e98f6f657f05170f6324c9",
"sha256:90f11ff637fe8798933fb29f5ae1148c978cccb0452005bf4c69e13db951e765",
"sha256:919859aa909429fb5aa9cf8807f6045592c85ef56fdd30a9a3747e513db2536e",
"sha256:96fcd1888ab4d03adfc9303a7b3c0bd78c5412b2bfbe76db5b56d9eae004907a",
"sha256:97f29f57d5b84e73fbaf99ab3e26134e6687348e95ef6b48cfd2c06807005a07",
"sha256:980d7be47c84979d9136328d882f67ec5e50008681d94ecc8afa8a65ed1f4a6f",
"sha256:a91aa8619b23b79bcbeb37abe286f2f408d2f2d6f29a17237afda55bb54e7aac",
"sha256:ade17eb5d643b7fead300a1641e9f45401c98eee23763e9ed66a43f92f20b4a7",
"sha256:b9c3db21af35e3b3c05764461b262d6f05bbca08a71a7849fd79d47ba7bc33ed",
"sha256:bd28bc2e3a772acbb07787c6308e00d9626ff89e3bfcdebe87fa5afbfdedf968",
"sha256:bf5824bfac591ddb2c1f0a5f4ab72da28994548c708d2191e3b87dd207eb3ad7",
"sha256:c0502c0fadef0d23b128605d69b58edb2c681c25d44574fc673b0e52dce71ee2",
"sha256:c38c71df845e2aabb7fb0b920d11a1b5ac8526005e533a8920aea97efb8ec6a4",
"sha256:ce15b6d103daff8e9fee13cf7f0add05245a05d866e73926c358e871221eae87",
"sha256:d3029c340cfbb3ac0a71798100ccc13b97dddf373a4ae56b6a72cf70dfd53bc8",
"sha256:e512d8ef5ad7b898cdb2d8ee1cb09a8339e4f8be706d27eaa180c2f177248a10",
"sha256:e8e5b509d5c2ff12f8418006d5a90e9436766133b564db0abaec92fd27fcee29",
"sha256:ee54ff27bf0afaf4c3b3a62bcd016c12c3fdb4ec4f413391a90bd38bc3624605",
"sha256:fa4537fb4a98fe8fde99626e4681cc644bdcf2a795038533f9f711513a862ae6",
"sha256:fd45ff9293d9274c5008a2054ecef86a9bfe819a67c7be1afb65e69b405b3042"
"sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb",
"sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"
],
"version": "==2021.4.4"
"markers": "python_version >= '3.6'",
"version": "==0.1"
},
"six": {
"hashes": [
"sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259",
"sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"
"sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926",
"sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"
],
"version": "==1.15.0"
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==1.16.0"
},
"tornado": {
"soupsieve": {
"hashes": [
"sha256:0a00ff4561e2929a2c37ce706cb8233b7907e0cdc22eab98888aca5dd3775feb",
"sha256:0d321a39c36e5f2c4ff12b4ed58d41390460f798422c4504e09eb5678e09998c",
"sha256:1e8225a1070cd8eec59a996c43229fe8f95689cb16e552d130b9793cb570a288",
"sha256:20241b3cb4f425e971cb0a8e4ffc9b0a861530ae3c52f2b0434e6c1b57e9fd95",
"sha256:25ad220258349a12ae87ede08a7b04aca51237721f63b1808d39bdb4b2164558",
"sha256:33892118b165401f291070100d6d09359ca74addda679b60390b09f8ef325ffe",
"sha256:33c6e81d7bd55b468d2e793517c909b139960b6c790a60b7991b9b6b76fb9791",
"sha256:3447475585bae2e77ecb832fc0300c3695516a47d46cefa0528181a34c5b9d3d",
"sha256:34ca2dac9e4d7afb0bed4677512e36a52f09caa6fded70b4e3e1c89dbd92c326",
"sha256:3e63498f680547ed24d2c71e6497f24bca791aca2fe116dbc2bd0ac7f191691b",
"sha256:548430be2740e327b3fe0201abe471f314741efcb0067ec4f2d7dcfb4825f3e4",
"sha256:6196a5c39286cc37c024cd78834fb9345e464525d8991c21e908cc046d1cc02c",
"sha256:61b32d06ae8a036a6607805e6720ef00a3c98207038444ba7fd3d169cd998910",
"sha256:6286efab1ed6e74b7028327365cf7346b1d777d63ab30e21a0f4d5b275fc17d5",
"sha256:65d98939f1a2e74b58839f8c4dab3b6b3c1ce84972ae712be02845e65391ac7c",
"sha256:66324e4e1beede9ac79e60f88de548da58b1f8ab4b2f1354d8375774f997e6c0",
"sha256:6c77c9937962577a6a76917845d06af6ab9197702a42e1346d8ae2e76b5e3675",
"sha256:70dec29e8ac485dbf57481baee40781c63e381bebea080991893cd297742b8fd",
"sha256:7250a3fa399f08ec9cb3f7b1b987955d17e044f1ade821b32e5f435130250d7f",
"sha256:748290bf9112b581c525e6e6d3820621ff020ed95af6f17fedef416b27ed564c",
"sha256:7da13da6f985aab7f6f28debab00c67ff9cbacd588e8477034c0652ac141feea",
"sha256:8f959b26f2634a091bb42241c3ed8d3cedb506e7c27b8dd5c7b9f745318ddbb6",
"sha256:9de9e5188a782be6b1ce866e8a51bc76a0fbaa0e16613823fc38e4fc2556ad05",
"sha256:a48900ecea1cbb71b8c71c620dee15b62f85f7c14189bdeee54966fbd9a0c5bd",
"sha256:b87936fd2c317b6ee08a5741ea06b9d11a6074ef4cc42e031bc6403f82a32575",
"sha256:c77da1263aa361938476f04c4b6c8916001b90b2c2fdd92d8d535e1af48fba5a",
"sha256:cb5ec8eead331e3bb4ce8066cf06d2dfef1bfb1b2a73082dfe8a161301b76e37",
"sha256:cc0ee35043162abbf717b7df924597ade8e5395e7b66d18270116f8745ceb795",
"sha256:d14d30e7f46a0476efb0deb5b61343b1526f73ebb5ed84f23dc794bdb88f9d9f",
"sha256:d371e811d6b156d82aa5f9a4e08b58debf97c302a35714f6f45e35139c332e32",
"sha256:d3d20ea5782ba63ed13bc2b8c291a053c8d807a8fa927d941bd718468f7b950c",
"sha256:d3f7594930c423fd9f5d1a76bee85a2c36fd8b4b16921cae7e965f22575e9c01",
"sha256:dcef026f608f678c118779cd6591c8af6e9b4155c44e0d1bc0c87c036fb8c8c4",
"sha256:e0791ac58d91ac58f694d8d2957884df8e4e2f6687cdf367ef7eb7497f79eaa2",
"sha256:e385b637ac3acaae8022e7e47dfa7b83d3620e432e3ecb9a3f7f58f150e50921",
"sha256:e519d64089b0876c7b467274468709dadf11e41d65f63bba207e04217f47c085",
"sha256:e7229e60ac41a1202444497ddde70a48d33909e484f96eb0da9baf8dc68541df",
"sha256:ed3ad863b1b40cd1d4bd21e7498329ccaece75db5a5bf58cd3c9f130843e7102",
"sha256:f0ba29bafd8e7e22920567ce0d232c26d4d47c8b5cf4ed7b562b5db39fa199c5",
"sha256:fa2ba70284fa42c2a5ecb35e322e68823288a4251f9ba9cc77be04ae15eada68",
"sha256:fba85b6cd9c39be262fcd23865652920832b61583de2a2ca907dbd8e8a8c81e5"
"sha256:1a3cca2617c6b38c0343ed661b1fa5de5637f257d4fe22bd9f1338010a1efefb",
"sha256:b8d49b1cd4f037c7082a9683dfa1801aa2597fb11c3a1155b7a5b94829b4f1f9"
],
"version": "==6.1"
"markers": "python_version >= '3.6'",
"version": "==2.3.1"
},
"tqdm": {
"tinycss2": {
"hashes": [
"sha256:daec693491c52e9498632dfbe9ccfc4882a557f5fa08982db1b4d3adbe0887c3",
"sha256:ebdebdb95e3477ceea267decfc0784859aa3df3e27e22d23b83e9b272bf157ae"
"sha256:b2e44dd8883c360c35dd0d1b5aad0b610e5156c2cb3b33434634e539ead9d8bf",
"sha256:fe794ceaadfe3cf3e686b22155d0da5780dd0e273471a51846d0a02bc204fec8"
],
"version": "==4.60.0"
"markers": "python_version >= '3.6'",
"version": "==1.1.1"
},
"watchdog": {
"hashes": [
"sha256:25fb5240b195d17de949588628fdf93032ebf163524ef08933db0ea1f99bd685",
"sha256:3386b367e950a11b0568062b70cc026c6f645428a698d33d39e013aaeda4cc04",
"sha256:3becdb380d8916c873ad512f1701f8a92ce79ec6978ffde92919fd18d41da7fb",
"sha256:4ae38bf8ba6f39d5b83f78661273216e7db5b00f08be7592062cb1fc8b8ba542",
"sha256:8047da932432aa32c515ec1447ea79ce578d0559362ca3605f8e9568f844e3c6",
"sha256:8f1c00aa35f504197561060ca4c21d3cc079ba29cf6dd2fe61024c70160c990b",
"sha256:922a69fa533cb0c793b483becaaa0845f655151e7256ec73630a1b2e9ebcb660",
"sha256:9693f35162dc6208d10b10ddf0458cc09ad70c30ba689d9206e02cd836ce28a3",
"sha256:a0f1c7edf116a12f7245be06120b1852275f9506a7d90227648b250755a03923",
"sha256:a36e75df6c767cbf46f61a91c70b3ba71811dfa0aca4a324d9407a06a8b7a2e7",
"sha256:aba5c812f8ee8a3ff3be51887ca2d55fb8e268439ed44110d3846e4229eb0e8b",
"sha256:ad6f1796e37db2223d2a3f302f586f74c72c630b48a9872c1e7ae8e92e0ab669",
"sha256:ae67501c95606072aafa865b6ed47343ac6484472a2f95490ba151f6347acfc2",
"sha256:b2fcf9402fde2672545b139694284dc3b665fd1be660d73eca6805197ef776a3",
"sha256:b52b88021b9541a60531142b0a451baca08d28b74a723d0c99b13c8c8d48d604",
"sha256:b7d336912853d7b77f9b2c24eeed6a5065d0a0cc0d3b6a5a45ad6d1d05fb8cd8",
"sha256:bd9ba4f332cf57b2c1f698be0728c020399ef3040577cde2939f2e045b39c1e5",
"sha256:be9be735f827820a06340dff2ddea1fb7234561fa5e6300a62fe7f54d40546a0",
"sha256:cca7741c0fcc765568350cb139e92b7f9f3c9a08c4f32591d18ab0a6ac9e71b6",
"sha256:d0d19fb2441947b58fbf91336638c2b9f4cc98e05e1045404d7a4cb7cddc7a65",
"sha256:e02794ac791662a5eafc6ffeaf9bcc149035a0e48eb0a9d40a8feb4622605a3d",
"sha256:e0f30db709c939cabf64a6dc5babb276e6d823fd84464ab916f9b9ba5623ca15",
"sha256:e92c2d33858c8f560671b448205a268096e17870dcf60a9bb3ac7bfbafb7f5f9"
],
"markers": "python_version >= '3.6'",
"version": "==2.1.6"
},
"wcmatch": {
"hashes": [
"sha256:371072912398af61d1e4e78609e18801c6faecd3cb36c54c82556a60abc965db",
"sha256:7141d2c85314253f16b38cb3d6cc0fb612918d407e1df3ccc2be7c86cc259c22"
],
"markers": "python_version >= '3.6'",
"version": "==8.3"
},
"weasyprint": {
"hashes": [
"sha256:6a673e48c9b784d0c106f0147a88ba27f34ce49e69028640644fec8ae1b5cfa5",
"sha256:d5e8aa82e3e2a2477a4543f0646d9fb14080c9ba34a0859751eb23757cc00466"
],
"markers": "python_version >= '3.6'",
"version": "==54.2"
},
"webencodings": {
"hashes": [
"sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78",
"sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"
],
"version": "==0.5.1"
},
"zipp": {
"hashes": [
"sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d",
"sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"
],
"markers": "python_version >= '3.7'",
"version": "==3.7.0"
},
"zopfli": {
"hashes": [
"sha256:0190633ca26568f6fa810af9b7c108279d5f565a8aca1224333ff732f565086d",
"sha256:0f052a07a6fb6b7bf87ed30a099187597eb594a8a573a4426c16a6a852a05d86",
"sha256:0f45111b31f32aef070be180433fec5de548dc87caf92c5c304d1e3642b12815",
"sha256:195209711463a399f0c252b34042d8027f3b41dcb646fc112551cfaef507eab4",
"sha256:2442b99067229d786aa9f9b86976db1ba9602c1b204f361d2901d1bbcaca3441",
"sha256:28a103434694ce35cbe4f2380e18077052a78f1a0de061b3c8f1bd35b54c2822",
"sha256:29357c34b8de35c05dd04d8706393bfa09b2dd8bb7a331cc5e98e2b8d39d2efd",
"sha256:2cd55bf9952884f3c0a3a32f95e5ba5fb0e1f371c9b1a99ed41351c1e00f4700",
"sha256:2f61ecd57bc47684c44a60e8cecb8e67f633cf238f30cc255627e172119ad72d",
"sha256:338c7b2bba06ff60a73f724b7e1c8a16a5aebe9155edf58cf69b4ff7cb0b46f6",
"sha256:3663d25419476b9e999e12ab8f6f5f8d39079bf536947da2cb5f3e45491db6f4",
"sha256:37071a3dd5ec0c7f27a1f440d6f50ed8171665e7e3b6ae9a6228e6c48d21570c",
"sha256:38b1928a5fc5c706ec90aa833ffb5f4512bf886fe41c1b30a95edf7fb09544d6",
"sha256:51537999c2114a68b1c0fac8f7ab2a05e4251d778b568213f1666f04feb79e1c",
"sha256:58b2bd497273e1344098370d959f837ec1d18bae9bfafad8f4e4a2802cbbf049",
"sha256:5ee224ec851b4b53042ff6ad6e81712c8c9aa18396396acb024fe5a65c6bb8f1",
"sha256:5fa38b9bb6636fd11b3348dfd6aee4839e71145c3aebc76de4ba44886ec9fd6e",
"sha256:5ffcdc5ee695da73990f7806f8f1dd9a6d99d338bbe54d08fb3aaa55c9603e27",
"sha256:683c2d521553aa8ca4526c911d419d37223db298f76048ce920aded18ae060cb",
"sha256:7b189d80aeedb986d226e966df9e13fe8ccc28352d9d5c6c1bd3ac208aa79769",
"sha256:7c829c577f976b05e4ec583da4f48f31448db97b9f7b65c438d45ba7893aa2a7",
"sha256:7e2b47662632809d7035f4fc16edbe141c4538158ad74eb3c47532b8bedb8277",
"sha256:890a83502bb5dff27b1e2b829f8b879d9b7c1383d20a68dc13f0de71da4ff604",
"sha256:8a40d9d113902aea0de370dce115051cf9cae4767b50af4fdde66d931b9bcae5",
"sha256:8bc92b4008854afa465d647be5ae51b01788ec47cfd10a362dcc865ff898c473",
"sha256:95a7ca4571797375b1fa924858cda344767621ef70a43b1b2c0b116e275f42b2",
"sha256:9e123bfb16cf86ef5abda375012a97c7d00d989b3519d785ca298326f671a81b",
"sha256:a8ca5b541544a7b959fdf5a8f614c52a31002e4be489663d835aadeef3473cb0",
"sha256:a9def54c90edd112f785b07a812005ab374e7d0aaf50ecac900ca0c51adab3e7",
"sha256:aa11904718fd27b2ccadf0ac88c1ca0b96ba67ad0c3c2bd584f85de060d04534",
"sha256:aa18771d1d76c09d2ec2c859b6c55fdad29d2511549b4225437194aca102ad3c",
"sha256:b25540fee3d54e0fb627f911f7e1bed79611ea09aa048708777a34f6f1ac9b70",
"sha256:b882f85b13c47eb19e7f07bccac7564701424ed5ec6d7ba8886ad6de04110e21",
"sha256:ba4001a8c798a9bb2a59bb30284acd604e0c702477dce69b7fde35a50e55a95b",
"sha256:bbcdbfe93dad34f0e30f166092ffdf95e564e415b29732a6f6a52def7bb1c4d3",
"sha256:c5d722b2bfde6dbfbda548e7f6b5b50b57ee06f334b055be24d9bbcdbee60e84",
"sha256:c993919cd01ea5c4b0134908bbd59321d9bdbb9085aa30c538fa1289745fe52f",
"sha256:c9b9f73d99080ca2d79600683b8be3395d46a386b4e1d351c6ed6dc261d267e9",
"sha256:cfffa5ad327585754f811fd49518d7170d200ba7888c49ae8629ae94c6c4a77d",
"sha256:d067f39d72f364ae94a118df3b4cf2db8a9f53625f497ad0f04bf91ea8720db0",
"sha256:d8457452a9151b56f17bbb9af57a4764fb41958ab84bf808e3296aefb6e61bca",
"sha256:dbf30730f169bbe77b2b6e000bf8b486559e8a36e6ab82f2471d75be4661e6bc",
"sha256:e5263d2806e2c1ccb23f52b2972a235d31d42f22f3fa3032cc9aded51e9bf2c6",
"sha256:e9091778e9e0dbbded72c389eace553153102acc9da560870d9d0845c8547a8d",
"sha256:f04a2cf50797dfa6fa954dd24de533f471542aa1923b89381a046a936bcbdcc5",
"sha256:faf26674e52a957b8fd76e955b6d89215265f4b8c7e13abf834c84a8e23def9d",
"sha256:fd917247bb0489c924d74186075cf0a2d7d06b3b1413197f9f6ee8fcbd0263a0",
"sha256:fe9c9276edafb8746c01be15e5d702dcdab41062e2f7fb8af1dd8fa51a18b717"
],
"version": "==0.2.1"
}
},
"develop": {}

View file

@ -1,3 +1,5 @@
docs: make watch-docs-internal
slides: make watch-slides-internal
toc: make watch-tocupdate-internal
autoslide: make watch-autoslide-internal
# proxy: caddy

View file

@ -1,53 +1,76 @@
# Teaching-Boilerplate
<!--
# SPDX-License-Identifier: GPL-3.0-or-later
#
# SPDX-FileCopyrightText: 2023 Glenn Y. Rolland <glenux@glenux.net>
# Copyright © 2023 Glenn Y. Rolland <glenux@glenux.net>
-->
[![Build Status](https://cicd.apps.glenux.net/api/badges/glenux/docmachine-containers/status.svg)](https://cicd.apps.glenux.net/glenux/docmachine-containers)
![License LGPL3.0-or-later](https://img.shields.io/badge/license-LGPL3.0--or--later-blue.svg)
[![Donate on patreon](https://img.shields.io/badge/patreon-donate-orange.svg)](https://patreon.com/glenux)
> :information_source: This project is available on our self-hosted server and
> on CodeBerg and GitHub as mirrors. For the latest updates and comprehensive
> version of our project, please visit our primary repository at:
> <https://code.apps.glenux.net/glenux/docmachine-containers>.
# DocMachine Containers
## Prerequisites
Make sure you have python and node installed
Make sure you have Docker installed.
git remote rename origin boilerplate
git remote add origin git@...
## Writing content
### Create your directory tree
Install python packages
```
. # project directory
|- docs # where website documents go
| `- *.md
|- slides # where presentation documents go
| `- *.md
|- images/ # where images go
|- ...
```
pip install -U pipenv
pipenv install
### Content for docs
Install node packages
FIXME: tree structure
npm install
FIXME: autoslide feature
### Content for slides
## Usage
FIXME: tree structure
### First steps
Clean this repository
Change the remote
### Watch mode
## Watch mode
This mode allows you the result on-the-fly as you makea changes in the content.
To use watch mode, type:
make watch
docmachine -a watch
To use watch mode for slides only type:
make watch-slides
docmachine -a watch-slides
To use watch mode for docs only type:
make watch-docs
docmachine -a watch-docs
### Build mode
## Build mode
This mode builds final content for delivery (website, PDF files)
### Building HTML
To use build mode:
make build
docmachine build
### Building PDF

10
caddy.conf Normal file
View file

@ -0,0 +1,10 @@
handle_path /docs* {
reverse_proxy 127.0.0.1:5100
}
handle_path /slides* {
reverse_proxy 127.0.0.1:5200
}

View file

@ -3,7 +3,10 @@ version: "3.4"
services:
app:
build: .
build:
context: .
dockerfile: docker/Dockerfile
image: glenux/teaching-boilerplate
environment: {}
ports:
- 5100:5100

44
docker/Dockerfile Normal file
View file

@ -0,0 +1,44 @@
FROM node:18-bookworm-slim
LABEL maintainer="Glenn ROLLAND glenux@glenux.net"
RUN apt-get update \
&& apt-get install -y --no-install-recommends python3 python3-pip pipenv \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
&& truncate -s 0 /var/log/*log
# Tools for running the common parts
RUN apt-get update \
&& apt-get install -y --no-install-recommends make build-essential inotify-tools gosu unzip curl rsync \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
&& truncate -s 0 /var/log/*log
# Tools for building pdfs
RUN apt-get update \
&& apt-get install -y --no-install-recommends make pdftk m4 chromium \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
&& truncate -s 0 /var/log/*log
# External tools
# yq => manage YML
RUN curl -sSL -o /usr/local/bin/yq \
https://github.com/mikefarah/yq/releases/download/v4.18.1/yq_linux_amd64 \
&& chmod +x /usr/local/bin/yq
COPY . /app
COPY .marp /app/.marp
WORKDIR /app
ENV LANG=C.UTF-8 \
LC_ALL=C.UTF-8 \
PIPENV_HIDE_EMOJIS=1 \
PIPENV_VENV_IN_PROJECT=1
RUN ln -sf python3 /usr/bin/python \
&& make prepare SYSTEM_INSTALL=1
ENTRYPOINT ["/app/docker/entrypoint.sh"]
CMD ["watch"]

51
docker/entrypoint.sh Executable file
View file

@ -0,0 +1,51 @@
#!/bin/sh
set -u
set -e
ARGS="$*"
echo "Arguments: $ARGS"
EXT_UID=${EXT_UID:-999}
EXT_GID=${EXT_GID:-999}
# Create missing directories
mkdir -p _cache
mkdir -p _build
mkdir -p .marp
mkdir -p /home/appuser
# Create user with given ID if needed
if ! grep -q "^[^:]*:[^:]*:$EXT_UID:" /etc/group ; then
groupadd -g "$EXT_GID" appuser
fi
# Create group with given ID if needed
if ! grep -q "^[^:]*:[^:]*:$EXT_UID:" /etc/passwd ; then
useradd -r -u "$EXT_UID" -g appuser appuser
fi
chown -R "$EXT_UID:$EXT_GID" _cache
chown -R "$EXT_UID:$EXT_GID" _build
chown -R "$EXT_UID:$EXT_GID" .marp
chown -R "$EXT_UID:$EXT_GID" /home/appuser
# Patch mkdocs configuration
# set -x
if [ -f mkdocs-patch.yml ]; then
# patch reference mkdocs with user-provided options
yq eval-all '. as $item ireduce ({}; . * $item)' \
mkdocs-source.yml \
mkdocs-patch.yml \
> mkdocs.yml
else
# use reference mkdocs only (no options)
ln -s mkdocs-source.yml mkdocs.yml
fi
# set +x
if [ "$1" = "shell" ]; then
exec bash
else
exec gosu "$EXT_UID:$EXT_GID" make "$@"
fi

View file

@ -0,0 +1,49 @@
p > img[alt*="center"] {
display: block;
margin-left: auto;
margin-right: auto;
}
hr {
display: none;
}
@page {
size: a4 portrait;
margin: 25mm 10mm 25mm 10mm;
counter-increment: page;
font-family: "Noto", sans-serif;
white-space: pre;
color: grey;
@top-left {
font-size: 70%;
content: 'Formation « Cloud & Enjeux »';
}
/*
@top-center {
content: string(chapter);
}*/
@top-right {
font-size: 70%;
/* content: 'SQLI INSTITUT (ASTON)'; */
/* content: 'AELION'; */
content: '';
}
@bottom-left {
font-size: 70%;
content: '2017-2022 © Glenn ROLLAND - Ne pas diffuser';
}
/*
@bottom-center {
content: string(chapter);
}*/
/*
@bottom-right {
font-size: 70%;
content: 'Page ' counter(page);
}*/
}

View file

@ -0,0 +1,18 @@
window.MathJax = {
tex: {
inlineMath: [["\\(", "\\)"]],
displayMath: [["\\[", "\\]"]],
processEscapes: true,
processEnvironments: true
},
options: {
ignoreHtmlClass: ".*|",
processHtmlClass: "arithmatex"
}
};
document$.subscribe(() => {
MathJax.typesetPromise()
})

View file

@ -0,0 +1,8 @@
digraph G {
A -> B;
B -> C;
B -> D;
C -> E;
C -> F;
C -> G;
}

8
images/sample-graph.dot Normal file
View file

@ -0,0 +1,8 @@
digraph G {
A -> B;
B -> C;
B -> D;
C -> E;
C -> F;
C -> G;
}

View file

View file

@ -6,12 +6,13 @@ site_dir: _build/docs
# theme_dir: 'themes/mkdocs-material'
site_author: 'Glenn Y. Rolland'
site_url: 'http://glenux.github.io/teaching-boilerplate'
site_url: 'https://glenux.net'
# copyright: 'Copyright (c) 2016 Glenux'
repo_name: 'GitHub'
repo_url: 'https://bitbucket.com/glenux-corp/teaching-boilerplate'
repo_name: 'Source'
repo_url: ''
# https://bitbucket.com/glenux-corp/teaching-boilerplate'
# site_favicon: 'favicon.ico'
theme:
@ -25,8 +26,11 @@ theme:
primary: 'white'
accent: 'black'
neutral: 'black'
feature:
tabs: false
features:
- navigation.sections
- navigation.footer
# - navigation.tabs
# - navigation.tabs.sticky
i18n:
prev: 'Chapitre précédent'
@ -34,9 +38,16 @@ i18n:
extra_css:
- css/extra.css
- ../docs.assets/css/extra.css
# - css/source.css
# - css/patch.css
extra_javascript:
- js/extra.js
- ../docs.assets/javascript/mathjax.js
- https://polyfill.io/v3/polyfill.min.js?features=es6
- https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js
# - ../docs.assets/javascript/extra.js
# author:
# github: 'glenux'
@ -48,8 +59,13 @@ markdown_extensions:
- admonition
- toc:
permalink: '#'
# https://squidfunk.github.io/mkdocs-material/reference/code-blocks/
- pymdownx.highlight:
anchor_linenums: false
- pymdownx.inlinehilite
- codehilite:
guess_lang: false
guess_lang: true
# pip install mdx_truly_sane_lists
- mdx_truly_sane_lists
@ -60,8 +76,18 @@ markdown_extensions:
#
# pip install pymdown-extensions
- pymdownx.superfences:
# - pymdownx.arithmatex:
# generic: true
plugins: []
# plugins: []
plugins:
- include-markdown
- awesome-pages
- pdf-export:
verbose: true
media_type: print
enabled_if_env: ENABLE_PDF_EXPORT
combined: false
extra:
search:

6369
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -12,12 +12,11 @@
"author": "",
"license": "ISC",
"dependencies": {
"@marp-team/marp-cli": "^1.0.3",
"@marp-team/marp-cli": "^3.4.0",
"@marp-team/marp-core": "^3.9.0",
"foreman": "^3.0.1",
"node-sass": "^6.0.0"
},
"devDependencies": {
"@marp-team/marp-core": "^2.0.2",
"markdown-it-footnote": "^3.0.2"
"markdown-it-footnote": "^3.0.2",
"markdown-it-highlight-lines": "^1.0.2",
"node-sass": "^7.0.0"
}
}

View file

@ -1,86 +0,0 @@
#!/usr/bin/env ruby
# frozen_string_literal: true
require 'fileutils'
require 'find'
require 'thor'
require 'colorize'
EXCLUDE_LIST = ['.git', 'node_modules'].freeze
SKEL_DIR = ENV['HOME'] + '/src/Glenux.Teaching/teaching-boilerplate'
if ! File.directory? SKEL_DIR
warn "ERROR: missing #{SKEL_DIR}"
exit 1
end
# TeachingCli
class TeachingCli < Thor
desc 'create PROJECT', 'Create PROJECT directory'
def create(target)
# Create dir
if target.empty?
warn 'Target not specified'
exit 1
end
puts "Creating project #{target}"
FileUtils.mkdir_p target
# Create structure
Find.find(SKEL_DIR) do |path|
if EXCLUDE_LIST.include? File.basename(path)
Find.prune
next
end
next unless File.directory?(path)
shortpath = path.gsub(SKEL_DIR, '').gsub(%r{^/}, '')
next if shortpath.empty?
targetpath = File.join(target, shortpath)
print "Creating directory #{shortpath}… "
FileUtils.mkdir_p targetpath
puts 'ok'.green
end
# Create files if possible
Find.find(SKEL_DIR) do |path|
if EXCLUDE_LIST.include? File.basename(path)
Find.prune
next
end
next if File.directory?(path)
shortpath = path.gsub(SKEL_DIR, '').gsub(%r{^/}, '')
next if shortpath.empty?
targetpath = File.join(target, shortpath)
print "Creating file #{shortpath}… "
# File does not exist => install it
unless File.exist? targetpath
FileUtils.cp path, targetpath
puts 'ok (installed)'.green
next
end
# File exist & different
unless system 'cmp', '--quiet', path, targetpath
if File.exist? targetpath + '.new'
puts 'error (pease solve previous conflict)'.red
else
puts 'warning (conflict when creating file)'.yellow
FileUtils.cp path, targetpath + '.new'
end
next
end
puts 'ok (identical)'.green
FileUtils.cp path, targetpath
end
end
end
TeachingCli.start(ARGV)

View file

35
slides/index.mdpp Normal file
View file

@ -0,0 +1,35 @@
<!--
theme: default
vim: set ft=m4.markdown:
paginate: true
footer: Teaching Boilerplate © 2021
-->
<!--
_class: chapter
-->
![bg w:512 left:50%](images/logo.png)
# Teaching boilerplate
----
changequote(`{{',`}}')dnl
include({{slides/010-demo/_010-about.md}})dnl
----
include({{slides/010-demo/_020-about.md}})dnl
----
<!--
_class: chapter
-->
![bg right](images/background.png)
## Questions ?