Compare commits
74 commits
Author | SHA1 | Date | |
---|---|---|---|
a6eb0033d8 | |||
1627825208 | |||
c93426fdf6 | |||
ab49a83c6f | |||
7350648c55 | |||
5b580cd52b | |||
25fe273c20 | |||
2bb01f238f | |||
203ab58c84 | |||
2fd1b7e9f5 | |||
44ae2d2415 | |||
222ee14d8c | |||
c8b91d66d7 | |||
6541f9ff31 | |||
f038432f4f | |||
750d5052d3 | |||
375abb3146 | |||
778d4a9ca7 | |||
78b24c6021 | |||
e51ab5a4e2 | |||
88ef9ac88c | |||
41729f95b4 | |||
7298386b2f | |||
a3c202d0dc | |||
03c36a86c6 | |||
b178036dd3 | |||
988bd8c1d8 | |||
457b460886 | |||
12e09be6df | |||
7cce63b660 | |||
5d60e2043d | |||
3bb91fa2b0 | |||
95e3391634 | |||
d43f349827 | |||
b9396e150c | |||
96052d40f0 | |||
34acd5803e | |||
4635e1c454 | |||
d8354512e3 | |||
141b1e33f2 | |||
dd5b7d8591 | |||
9298ecdcb3 | |||
b8ec402504 | |||
df4fa13e2a | |||
bf8a122ac1 | |||
058d4c6400 | |||
45c42d0bfe | |||
2d2a6ee041 | |||
3572ceffed | |||
6b9a8f9921 | |||
75d6511cbc | |||
108f6c42c6 | |||
d4beaa8167 | |||
afdbe7071a | |||
0e7642b1d9 | |||
00b992e2f5 | |||
d16e8d0869 | |||
44f0ded376 | |||
|
d15ccac880 | ||
|
f9bcf3feb8 | ||
|
9bb3014976 | ||
|
7259319460 | ||
8054a7a8b0 | |||
016202ee5a | |||
feb4a20cc1 | |||
810d0c97f2 | |||
ce8cc97350 | |||
5fa78d5a3d | |||
479b053785 | |||
850524ecd9 | |||
712a50930b | |||
3dc96fa75c | |||
cf33bec956 | |||
9e68c430f2 |
24 changed files with 1272 additions and 5475 deletions
|
@ -2,4 +2,3 @@
|
||||||
examples
|
examples
|
||||||
exercises
|
exercises
|
||||||
node_modules
|
node_modules
|
||||||
.drone.yml
|
|
||||||
|
|
59
.drone.yml
59
.drone.yml
|
@ -1,59 +0,0 @@
|
||||||
---
|
|
||||||
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: {}
|
|
||||||
#
|
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -3,7 +3,6 @@
|
||||||
.bundle
|
.bundle
|
||||||
*.docx
|
*.docx
|
||||||
*.epub
|
*.epub
|
||||||
/slides/autoslide.md
|
|
||||||
/images/*.circo.svg
|
/images/*.circo.svg
|
||||||
/images/*.dot.svg
|
/images/*.dot.svg
|
||||||
/images/*.ora.png
|
/images/*.ora.png
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
// engine.js
|
// engine.js
|
||||||
// You have to run `npm i @marp-team/marp-core` at first.
|
// You have to run `npm i @marp-team/marp-core` at first.
|
||||||
const { Marp } = require('@marp-team/marp-core')
|
const { Marp } = require('@marp-team/marp-core')
|
||||||
const highlightLines = require('markdown-it-highlight-lines')
|
|
||||||
|
|
||||||
module.exports = opts => {
|
module.exports = opts => {
|
||||||
|
|
||||||
|
@ -11,12 +10,11 @@ module.exports = opts => {
|
||||||
opts.html = true
|
opts.html = true
|
||||||
|
|
||||||
// console.log(opts)
|
// console.log(opts)
|
||||||
|
|
||||||
const marp = new Marp(opts)
|
const marp = new Marp(opts)
|
||||||
|
|
||||||
// Disable parsing fragmented list
|
// Disable parsing fragmented list
|
||||||
marp.markdown.core.ruler.disable('marpit_fragment')
|
marp.markdown.core.ruler.disable('marpit_fragment')
|
||||||
|
|
||||||
// Enable code lines highlighting
|
return marp
|
||||||
// ref. https://github.com/marp-team/marp-vscode/issues/146
|
|
||||||
return marp.use(highlightLines)
|
|
||||||
}
|
}
|
||||||
|
|
138
.marp/theme.scss
138
.marp/theme.scss
|
@ -1,39 +1,21 @@
|
||||||
/* @theme glenux */
|
/* @theme glenux */
|
||||||
@import-theme 'default';
|
@import-theme 'default';
|
||||||
|
|
||||||
$primaryColor: #662d91;
|
|
||||||
$secondaryColor: #f60;
|
|
||||||
$tertiaryColor: #241c1c;
|
|
||||||
$textColor: #111111;
|
|
||||||
|
|
||||||
body {
|
body {
|
||||||
--primary-color: $primaryColor;
|
--primary-color: #009fcb;
|
||||||
--secondary-color: $secondaryColor;
|
--secondary-color: #241c1c;
|
||||||
--tertiary-color: $tertiaryColor;
|
--text-color: #111111; }
|
||||||
--text-color: $textColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
section {
|
section {
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
justify-content: start;
|
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 {
|
section footer {
|
||||||
opacity: 0.75;
|
opacity: 0.75;
|
||||||
color: $textColor; }
|
color: #888; }
|
||||||
|
|
||||||
section::after {
|
section::after {
|
||||||
opacity: 0.5;
|
opacity: 0.5;
|
||||||
color: $textColor; }
|
color: black; }
|
||||||
|
|
||||||
section[id="1"] h1,
|
section[id="1"] h1,
|
||||||
section[id="1"] h2,
|
section[id="1"] h2,
|
||||||
|
@ -52,17 +34,6 @@ section[id="1"] footer {
|
||||||
section.chapter {
|
section.chapter {
|
||||||
justify-content: center; }
|
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 h1:first-child::before,
|
||||||
section.chapter h2:first-child::before,
|
section.chapter h2:first-child::before,
|
||||||
|
@ -73,10 +44,6 @@ section.chapter h5:first-child::before {
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
section > ul {
|
|
||||||
padding-left: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
section > bc-title {
|
section > bc-title {
|
||||||
line-height: 39px;
|
line-height: 39px;
|
||||||
font-size: 32px;
|
font-size: 32px;
|
||||||
|
@ -95,13 +62,9 @@ section > h4:first-child,
|
||||||
section > h5:first-child,
|
section > h5:first-child,
|
||||||
section > h6:first-child {
|
section > h6:first-child {
|
||||||
font-family: "Droid Sans Mono", monospace;
|
font-family: "Droid Sans Mono", monospace;
|
||||||
color: $primaryColor;
|
color: #662d91;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
// position: relative;
|
position: relative; }
|
||||||
// top: -40px;
|
|
||||||
position: absolute;
|
|
||||||
top: 50px;
|
|
||||||
}
|
|
||||||
|
|
||||||
section > bc-title:first-child::before,
|
section > bc-title:first-child::before,
|
||||||
section > h1:first-child::before,
|
section > h1:first-child::before,
|
||||||
|
@ -133,30 +96,12 @@ section > h6:first-child::before
|
||||||
left: -100px;
|
left: -100px;
|
||||||
width: 70px;
|
width: 70px;
|
||||||
height: 0.9em;
|
height: 0.9em;
|
||||||
background-color: $primaryColor;
|
background-color: #662d91; }
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
section:not(.chapter) > h2:first-child {
|
section:not(.chapter) > h2:first-child {
|
||||||
font-size: 100%; }
|
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 {
|
a {
|
||||||
color: inherit;
|
color: inherit;
|
||||||
text-decoration: underline; }
|
text-decoration: underline; }
|
||||||
|
@ -173,54 +118,19 @@ bc-row {
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
bc-row[bc-height-full] {
|
bc-row > bc-column {
|
||||||
flex: 1 1 0;
|
/* outline: 1px solid red; */
|
||||||
|
margin-left: 100px;
|
||||||
|
flex-basis: 100%;
|
||||||
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bc-row > bc-column {
|
bc-row > bc-column {
|
||||||
/* outline: 1px solid red; */
|
/* outline: 1px solid red; */
|
||||||
margin-left: 100px;
|
margin-left: 100px;
|
||||||
flex-basis: 100%;
|
flex-basis: 100%;
|
||||||
height: inherit;
|
height: 100%;
|
||||||
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] {
|
bc-row > bc-column[bc-grey] {
|
||||||
|
@ -228,20 +138,10 @@ bc-row > bc-column[bc-grey] {
|
||||||
padding: 24px;
|
padding: 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
bc-row > bc-column[bc-invert] {
|
|
||||||
color: white;
|
|
||||||
background-color: $textColor;
|
|
||||||
padding: 24px;
|
|
||||||
}
|
|
||||||
|
|
||||||
bc-row > bc-column:first-of-type {
|
bc-row > bc-column:first-of-type {
|
||||||
margin-left: 0px;
|
margin-left: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
bc-row > bc-column p:only-child {
|
|
||||||
margin-bottom: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
bc-row > bc-column > h1:first-child,
|
bc-row > bc-column > h1:first-child,
|
||||||
bc-row > bc-column > h2:first-child,
|
bc-row > bc-column > h2:first-child,
|
||||||
bc-row > bc-column > h3:first-child,
|
bc-row > bc-column > h3:first-child,
|
||||||
|
@ -251,9 +151,3 @@ bc-row > bc-column > h6:first-child {
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
p img:only-child[alt*="center"] {
|
|
||||||
display: block;
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
1
.tool-versions
Normal file
1
.tool-versions
Normal file
|
@ -0,0 +1 @@
|
||||||
|
python 3.8.3
|
103
Makefile
103
Makefile
|
@ -29,35 +29,30 @@ DOCS_PORT=5100
|
||||||
SLIDES_PORT=5200
|
SLIDES_PORT=5200
|
||||||
|
|
||||||
## Find .md slides
|
## Find .md slides
|
||||||
SLIDES_MDPP=$(shell find -L $(SLIDES_DIR) -regextype sed \( -name '*.mdpp' ! -regex '.*/_.*' \))
|
SLIDES_MDPP=$(shell find $(SLIDES_DIR) \( -name '*.mdpp' ! -name '_*' \))
|
||||||
SLIDES_MDPP_MD=$(patsubst $(SLIDES_DIR)/%.mdpp,$(CACHE_SLIDES_DIR)/%.mdpp.md,$(SLIDES_MDPP))
|
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_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=$(shell find $(SLIDES_DIR) \( -name '*.md' ! -name '_*' \)) $(SLIDES_MDPP_MD)
|
||||||
SLIDES_MD_PDF=$(patsubst $(SLIDES_DIR)/%.md,$(BUILD_SLIDES_DIR)/%.pdf,$(SLIDES_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_MD_ALL=$(SLIDES_MDPP_MD) $(SLIDES_MD)
|
||||||
SLIDES_PDF_ALL=$(SLIDES_MDPP_MD_PDF) $(SLIDES_MD_PDF) $(BUILD_SLIDES_DIR)/autoslide.pdf
|
SLIDES_PDF_ALL=$(SLIDES_MDPP_MD_PDF) $(SLIDES_MD_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
|
## Find .uml graphs
|
||||||
DOCS_IMAGES_UML=$(shell find -L $(IMAGES_DIR) -regextype sed \( -name '*.uml' ! -regex '.*/_.*' \))
|
DOCS_IMAGES_UML=$(shell find $(IMAGES_DIR) \( -name '*.uml' ! -name '_*' \))
|
||||||
DOCS_IMAGES_UML_SVG=$(patsubst $(IMAGES_DIR)/%.uml,$(BUILD_IMAGES_DIR)/%.uml.svg,$(DOCS_IMAGES_UML))
|
DOCS_IMAGES_UML_SVG=$(patsubst $(IMAGES_DIR)/%.uml,$(BUILD_IMAGES_DIR)/%.uml.svg,$(DOCS_IMAGES_UML))
|
||||||
|
|
||||||
## Find .dot graphs
|
## Find .dot graphs
|
||||||
DOCS_IMAGES_DOT=$(shell find -L $(IMAGES_DIR) -regextype sed \( -name '*.dot' ! -regex '.*/_.*' \))
|
DOCS_IMAGES_DOT=$(shell find $(IMAGES_DIR) \( -name '*.dot' ! -name '_*' \))
|
||||||
DOCS_IMAGES_DOT_SVG=$(patsubst $(IMAGES_DIR)/%.dot,$(BUILD_IMAGES_DIR)/%.dot.svg,$(DOCS_IMAGES_DOT))
|
DOCS_IMAGES_DOT_SVG=$(patsubst $(IMAGES_DIR)/%.dot,$(BUILD_IMAGES_DIR)/%.dot.svg,$(DOCS_IMAGES_DOT))
|
||||||
|
|
||||||
## Find .circo graphs
|
## Find .circo graphs
|
||||||
DOCS_IMAGES_CIRCO=$(shell find -L $(IMAGES_DIR) -regextype sed \( -name '*.circo' ! -regex '.*/_.*' \))
|
DOCS_IMAGES_CIRCO=$(shell find $(IMAGES_DIR) \( -name '*.circo' ! -name '_*' \))
|
||||||
DOCS_IMAGES_CIRCO_SVG=$(patsubst $(IMAGES_DIR)/%.circo,$(BUILD_IMAGES_DIR)/%.circo.svg,$(DOCS_IMAGES_CIRCO))
|
DOCS_IMAGES_CIRCO_SVG=$(patsubst $(IMAGES_DIR)/%.circo,$(BUILD_IMAGES_DIR)/%.circo.svg,$(DOCS_IMAGES_CIRCO))
|
||||||
|
|
||||||
## Find .ora images
|
## Find .ora images
|
||||||
DOCS_IMAGES_ORA=$(shell find -L $(IMAGES_DIR) -regextype sed \( -name '*.ora' ! -regex '.*/_.*' \))
|
DOCS_IMAGES_ORA=$(shell find $(IMAGES_DIR) \( -name '*.ora' ! -name '_*' \))
|
||||||
DOCS_IMAGES_ORA_PNG=$(patsubst $(IMAGES_DIR)/%.ora,$(BUILD_IMAGES_DIR)/%.ora.png,$(DOCS_IMAGES_ORA))
|
DOCS_IMAGES_ORA_PNG=$(patsubst $(IMAGES_DIR)/%.ora,$(BUILD_IMAGES_DIR)/%.ora.png,$(DOCS_IMAGES_ORA))
|
||||||
|
|
||||||
## Merge all lists
|
## Merge all lists
|
||||||
|
@ -74,11 +69,15 @@ prepare: prepare-slides prepare-docs ## install prerequisites
|
||||||
|
|
||||||
prepare-slides: ## install prerequisites for PDF slides only
|
prepare-slides: ## install prerequisites for PDF slides only
|
||||||
npm install
|
npm install
|
||||||
npm rebuild node-sass
|
|
||||||
npx browserslist@latest --update-db
|
npx browserslist@latest --update-db
|
||||||
|
|
||||||
prepare-docs: ## install prerequisites for static docs site only
|
prepare-docs: ## install prerequisites for static docs site only
|
||||||
pipenv install
|
pipenv install
|
||||||
|
# if [ "$(SYSTEM_INSTALL)" -eq 1 ]; then \
|
||||||
|
# pipenv install --deploy --system ; \
|
||||||
|
#else \
|
||||||
|
# pipenv install ; \
|
||||||
|
#fi
|
||||||
|
|
||||||
.PHONY: prepare prepare-slides prepare-docs
|
.PHONY: prepare prepare-slides prepare-docs
|
||||||
|
|
||||||
|
@ -89,9 +88,6 @@ images: $(DOCS_IMAGES_SVG) $(DOCS_IMAGES_PNG) ## build images
|
||||||
@echo " dot: $(DOCS_IMAGES_DOT)"
|
@echo " dot: $(DOCS_IMAGES_DOT)"
|
||||||
@echo " circo: $(DOCS_IMAGES_CIRCO)"
|
@echo " circo: $(DOCS_IMAGES_CIRCO)"
|
||||||
@echo "Built: $(DOCS_IMAGES_SVG) $(DOCS_IMAGES_PNG)"
|
@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
|
.PHONY: images
|
||||||
|
|
||||||
|
@ -119,27 +115,10 @@ $(CACHE_SLIDES_DIR)/%.mdpp.md: $(SLIDES_DIR)/%.mdpp
|
||||||
cd .marp && $(MAKE) theme.css
|
cd .marp && $(MAKE) theme.css
|
||||||
|
|
||||||
watch: ## run development server
|
watch: ## run development server
|
||||||
$(MAKE) autoslide
|
|
||||||
pipenv run honcho start
|
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:
|
watch-tocupdate-internal:
|
||||||
# FIXME: use watchexec instead
|
while inotifywait -q -e move -e modify -e create -e attrib -e delete -e moved_to -r docs ; do \
|
||||||
while inotifywait -q -e move -e modify -e create -e attrib -e delete -e moved_to -r $(DOCS_DIR) ; do \
|
|
||||||
sleep 2 ; \
|
sleep 2 ; \
|
||||||
$(MAKE) images ; \
|
$(MAKE) images ; \
|
||||||
done
|
done
|
||||||
|
@ -150,7 +129,6 @@ watch-docs-internal:
|
||||||
watch-slides-internal: .marp/theme.css
|
watch-slides-internal: .marp/theme.css
|
||||||
PORT=$(SLIDES_PORT) \
|
PORT=$(SLIDES_PORT) \
|
||||||
npx marp \
|
npx marp \
|
||||||
--allow-local-files \
|
|
||||||
--engine $$(pwd)/.marp/engine.js \
|
--engine $$(pwd)/.marp/engine.js \
|
||||||
--html \
|
--html \
|
||||||
--theme $$(pwd)/.marp/theme.css \
|
--theme $$(pwd)/.marp/theme.css \
|
||||||
|
@ -158,7 +136,7 @@ watch-slides-internal: .marp/theme.css
|
||||||
-s
|
-s
|
||||||
|
|
||||||
watch-slides: ## run development server for PDF slides
|
watch-slides: ## run development server for PDF slides
|
||||||
pipenv run honcho start slides autoslide
|
pipenv run honcho start slides
|
||||||
|
|
||||||
watch-docs: ## run development server for static docs site
|
watch-docs: ## run development server for static docs site
|
||||||
pipenv run honcho start docs toc
|
pipenv run honcho start docs toc
|
||||||
|
@ -186,14 +164,6 @@ $(BUILD_SLIDES_DIR)/%.pdf: $(SLIDES_DIR)/%.md | $(BUILD_SLIDES_DIR) .marp/theme.
|
||||||
$< \
|
$< \
|
||||||
-o $@
|
-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):
|
$(BUILD_SLIDES_DIR):
|
||||||
mkdir -p $(BUILD_SLIDES_DIR)
|
mkdir -p $(BUILD_SLIDES_DIR)
|
||||||
|
|
||||||
|
@ -204,27 +174,23 @@ $(BUILD_SLIDES_DIR):
|
||||||
## docs => static web site
|
## docs => static web site
|
||||||
##
|
##
|
||||||
|
|
||||||
build: build-pdf build-html ## build all documents as PDF and HTML files
|
build: build-pdf build-html ## build all documents as PDF and HTML files
|
||||||
|
|
||||||
build-pptx: build-slides-pptx ## build slides as PPTX files
|
build-pdf: build-docs-pdf build-slides-pdf ## build both docs and slides as PDF files
|
||||||
|
|
||||||
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-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-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: build-slides-pdf build-slides-html ## build only slides as PDF and HTML
|
build-slides-pdf: $(SLIDES_PDF_ALL) $(SLIDES_MD_ALL) ## build PDF slides only
|
||||||
|
|
||||||
build-slides-pptx: $(SLIDES_PPTX_ALL) $(SLIDES_MD_ALL) ## build PPTX slides only
|
build-slides-html: $(SLIDES_HTML_ALL) ## build HTML 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)
|
merge-slides: $(SLIDES_MDPP_MD) $(SLIDES_MD_ALL)
|
||||||
|
|
||||||
build-docs-pdf: ## build pdf docs only
|
build-docs-pdf:
|
||||||
mkdir -p $(BUILD_DOCS_DIR)
|
mkdir -p $(BUILD_DOCS_DIR)
|
||||||
rm -f $(BUILD_DOCS_DIR)/combined.pdf
|
rm -f $(BUILD_DOCS_DIR)/combined.pdf
|
||||||
PYTHONUTF8=1 \
|
PYTHONUTF8=1 \
|
||||||
|
@ -232,8 +198,8 @@ build-docs-pdf: ## build pdf docs only
|
||||||
pipenv run mkdocs build \
|
pipenv run mkdocs build \
|
||||||
--site-dir $(BUILD_DOCS_DIR)
|
--site-dir $(BUILD_DOCS_DIR)
|
||||||
pdftk \
|
pdftk \
|
||||||
$$(find -L $(BUILD_DOCS_DIR) -name *.pdf -not -name index.pdf |sort ) \
|
$$(find $(BUILD_DOCS_DIR) -name *.pdf -not -name index.pdf |sort ) \
|
||||||
cat output $(BUILD_DOCS_DIR)/docs.pdf
|
cat output $(BUILD_DOCS_DIR)/combined.pdf
|
||||||
|
|
||||||
build-docs-html: ## build static docs site only
|
build-docs-html: ## build static docs site only
|
||||||
mkdir -p $(BUILD_DOCS_DIR)
|
mkdir -p $(BUILD_DOCS_DIR)
|
||||||
|
@ -282,17 +248,12 @@ fixme:
|
||||||
|
|
||||||
.PHONY: fixme
|
.PHONY: fixme
|
||||||
|
|
||||||
docker-build: ## build docker image
|
docker-build:
|
||||||
docker build \
|
docker build -t glenux/teaching-boilerplate:$(BUILD_VERSION)
|
||||||
--file docker/Dockerfile \
|
docker tag glenux/teaching-boilerplate:$(BUILD_VERSION) glenux/teaching-boilerplate:latest
|
||||||
--tag glenux/docmachine:$(BUILD_VERSION) \
|
|
||||||
.
|
|
||||||
docker tag \
|
|
||||||
glenux/docmachine:$(BUILD_VERSION) \
|
|
||||||
glenux/docmachine:latest
|
|
||||||
|
|
||||||
docker-push: ## push docker image
|
docker-push:
|
||||||
env docker push glenux/docmachine:latest
|
env docker push glenux/teaching-boilerplate:latest
|
||||||
|
|
||||||
docker-pull: ## download docker image
|
docker-pull:
|
||||||
env docker pull glenux/docmachine:latest
|
env docker pull glenux/teaching-boilerplate:latest
|
||||||
|
|
2
Pipfile
2
Pipfile
|
@ -20,4 +20,4 @@ pymdown-extensions = "*"
|
||||||
mkdocs-pdf-export-plugin = "*"
|
mkdocs-pdf-export-plugin = "*"
|
||||||
|
|
||||||
[requires]
|
[requires]
|
||||||
python_version = "3.11"
|
python_version = "3.9"
|
||||||
|
|
357
Pipfile.lock
generated
357
Pipfile.lock
generated
|
@ -42,7 +42,6 @@
|
||||||
},
|
},
|
||||||
"brotli": {
|
"brotli": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:12effe280b8ebfd389022aa65114e30407540ccb89b177d3fbc9a4f177c4bd5d",
|
|
||||||
"sha256:160c78292e98d21e73a4cc7f76a234390e516afcd982fa17e1422f7c6a9ce9c8",
|
"sha256:160c78292e98d21e73a4cc7f76a234390e516afcd982fa17e1422f7c6a9ce9c8",
|
||||||
"sha256:16d528a45c2e1909c2798f27f7bf0a3feec1dc9e50948e738b961618e38b6a7b",
|
"sha256:16d528a45c2e1909c2798f27f7bf0a3feec1dc9e50948e738b961618e38b6a7b",
|
||||||
"sha256:19598ecddd8a212aedb1ffa15763dd52a388518c4550e615aed88dc3753c0f0c",
|
"sha256:19598ecddd8a212aedb1ffa15763dd52a388518c4550e615aed88dc3753c0f0c",
|
||||||
|
@ -52,13 +51,10 @@
|
||||||
"sha256:26d168aac4aaec9a4394221240e8a5436b5634adc3cd1cdf637f6645cecbf181",
|
"sha256:26d168aac4aaec9a4394221240e8a5436b5634adc3cd1cdf637f6645cecbf181",
|
||||||
"sha256:29d1d350178e5225397e28ea1b7aca3648fcbab546d20e7475805437bfb0a130",
|
"sha256:29d1d350178e5225397e28ea1b7aca3648fcbab546d20e7475805437bfb0a130",
|
||||||
"sha256:2aad0e0baa04517741c9bb5b07586c642302e5fb3e75319cb62087bd0995ab19",
|
"sha256:2aad0e0baa04517741c9bb5b07586c642302e5fb3e75319cb62087bd0995ab19",
|
||||||
"sha256:3496fc835370da351d37cada4cf744039616a6db7d13c430035e901443a34daa",
|
|
||||||
"sha256:35a3edbe18e876e596553c4007a087f8bcfd538f19bc116917b3c7522fca0429",
|
"sha256:35a3edbe18e876e596553c4007a087f8bcfd538f19bc116917b3c7522fca0429",
|
||||||
"sha256:3b78a24b5fd13c03ee2b7b86290ed20efdc95da75a3557cc06811764d5ad1126",
|
"sha256:3b78a24b5fd13c03ee2b7b86290ed20efdc95da75a3557cc06811764d5ad1126",
|
||||||
"sha256:40d15c79f42e0a2c72892bf407979febd9cf91f36f495ffb333d1d04cebb34e4",
|
"sha256:40d15c79f42e0a2c72892bf407979febd9cf91f36f495ffb333d1d04cebb34e4",
|
||||||
"sha256:44bb8ff420c1d19d91d79d8c3574b8954288bdff0273bf788954064d260d7ab0",
|
"sha256:44bb8ff420c1d19d91d79d8c3574b8954288bdff0273bf788954064d260d7ab0",
|
||||||
"sha256:4688c1e42968ba52e57d8670ad2306fe92e0169c6f3af0089be75bbac0c64a3b",
|
|
||||||
"sha256:495ba7e49c2db22b046a53b469bbecea802efce200dffb69b93dd47397edc9b6",
|
|
||||||
"sha256:4d1b810aa0ed773f81dceda2cc7b403d01057458730e309856356d4ef4188438",
|
"sha256:4d1b810aa0ed773f81dceda2cc7b403d01057458730e309856356d4ef4188438",
|
||||||
"sha256:503fa6af7da9f4b5780bb7e4cbe0c639b010f12be85d02c99452825dd0feef3f",
|
"sha256:503fa6af7da9f4b5780bb7e4cbe0c639b010f12be85d02c99452825dd0feef3f",
|
||||||
"sha256:56d027eace784738457437df7331965473f2c0da2c70e1a1f6fdbae5402e0389",
|
"sha256:56d027eace784738457437df7331965473f2c0da2c70e1a1f6fdbae5402e0389",
|
||||||
|
@ -70,13 +66,10 @@
|
||||||
"sha256:68715970f16b6e92c574c30747c95cf8cf62804569647386ff032195dc89a430",
|
"sha256:68715970f16b6e92c574c30747c95cf8cf62804569647386ff032195dc89a430",
|
||||||
"sha256:6b2ae9f5f67f89aade1fab0f7fd8f2832501311c363a21579d02defa844d9296",
|
"sha256:6b2ae9f5f67f89aade1fab0f7fd8f2832501311c363a21579d02defa844d9296",
|
||||||
"sha256:6c772d6c0a79ac0f414a9f8947cc407e119b8598de7621f39cacadae3cf57d12",
|
"sha256:6c772d6c0a79ac0f414a9f8947cc407e119b8598de7621f39cacadae3cf57d12",
|
||||||
"sha256:6d847b14f7ea89f6ad3c9e3901d1bc4835f6b390a9c71df999b0162d9bb1e20f",
|
|
||||||
"sha256:76ffebb907bec09ff511bb3acc077695e2c32bc2142819491579a695f77ffd4d",
|
"sha256:76ffebb907bec09ff511bb3acc077695e2c32bc2142819491579a695f77ffd4d",
|
||||||
"sha256:7bbff90b63328013e1e8cb50650ae0b9bac54ffb4be6104378490193cd60f85a",
|
|
||||||
"sha256:7cb81373984cc0e4682f31bc3d6be9026006d96eecd07ea49aafb06897746452",
|
"sha256:7cb81373984cc0e4682f31bc3d6be9026006d96eecd07ea49aafb06897746452",
|
||||||
"sha256:7ee83d3e3a024a9618e5be64648d6d11c37047ac48adff25f12fa4226cf23d1c",
|
"sha256:7ee83d3e3a024a9618e5be64648d6d11c37047ac48adff25f12fa4226cf23d1c",
|
||||||
"sha256:854c33dad5ba0fbd6ab69185fec8dab89e13cda6b7d191ba111987df74f38761",
|
"sha256:854c33dad5ba0fbd6ab69185fec8dab89e13cda6b7d191ba111987df74f38761",
|
||||||
"sha256:85f7912459c67eaab2fb854ed2bc1cc25772b300545fe7ed2dc03954da638649",
|
|
||||||
"sha256:87fdccbb6bb589095f413b1e05734ba492c962b4a45a13ff3408fa44ffe6479b",
|
"sha256:87fdccbb6bb589095f413b1e05734ba492c962b4a45a13ff3408fa44ffe6479b",
|
||||||
"sha256:88c63a1b55f352b02c6ffd24b15ead9fc0e8bf781dbe070213039324922a2eea",
|
"sha256:88c63a1b55f352b02c6ffd24b15ead9fc0e8bf781dbe070213039324922a2eea",
|
||||||
"sha256:8a674ac10e0a87b683f4fa2b6fa41090edfd686a6524bd8dedbd6138b309175c",
|
"sha256:8a674ac10e0a87b683f4fa2b6fa41090edfd686a6524bd8dedbd6138b309175c",
|
||||||
|
@ -86,23 +79,15 @@
|
||||||
"sha256:97f715cf371b16ac88b8c19da00029804e20e25f30d80203417255d239f228b5",
|
"sha256:97f715cf371b16ac88b8c19da00029804e20e25f30d80203417255d239f228b5",
|
||||||
"sha256:9bf919756d25e4114ace16a8ce91eb340eb57a08e2c6950c3cebcbe3dff2a5e7",
|
"sha256:9bf919756d25e4114ace16a8ce91eb340eb57a08e2c6950c3cebcbe3dff2a5e7",
|
||||||
"sha256:9d12cf2851759b8de8ca5fde36a59c08210a97ffca0eb94c532ce7b17c6a3d1d",
|
"sha256:9d12cf2851759b8de8ca5fde36a59c08210a97ffca0eb94c532ce7b17c6a3d1d",
|
||||||
"sha256:9ed4c92a0665002ff8ea852353aeb60d9141eb04109e88928026d3c8a9e5433c",
|
|
||||||
"sha256:a72661af47119a80d82fa583b554095308d6a4c356b2a554fdc2799bc19f2a43",
|
"sha256:a72661af47119a80d82fa583b554095308d6a4c356b2a554fdc2799bc19f2a43",
|
||||||
"sha256:afde17ae04d90fbe53afb628f7f2d4ca022797aa093e809de5c3cf276f61bbfa",
|
"sha256:afde17ae04d90fbe53afb628f7f2d4ca022797aa093e809de5c3cf276f61bbfa",
|
||||||
"sha256:b336c5e9cf03c7be40c47b5fd694c43c9f1358a80ba384a21969e0b4e66a9b17",
|
|
||||||
"sha256:b663f1e02de5d0573610756398e44c130add0eb9a3fc912a09665332942a2efb",
|
"sha256:b663f1e02de5d0573610756398e44c130add0eb9a3fc912a09665332942a2efb",
|
||||||
"sha256:b83bb06a0192cccf1eb8d0a28672a1b79c74c3a8a5f2619625aeb6f28b3a82bb",
|
|
||||||
"sha256:c2415d9d082152460f2bd4e382a1e85aed233abc92db5a3880da2257dc7daf7b",
|
"sha256:c2415d9d082152460f2bd4e382a1e85aed233abc92db5a3880da2257dc7daf7b",
|
||||||
"sha256:c83aa123d56f2e060644427a882a36b3c12db93727ad7a7b9efd7d7f3e9cc2c4",
|
"sha256:c83aa123d56f2e060644427a882a36b3c12db93727ad7a7b9efd7d7f3e9cc2c4",
|
||||||
"sha256:cfc391f4429ee0a9370aa93d812a52e1fee0f37a81861f4fdd1f4fb28e8547c3",
|
"sha256:cfc391f4429ee0a9370aa93d812a52e1fee0f37a81861f4fdd1f4fb28e8547c3",
|
||||||
"sha256:db844eb158a87ccab83e868a762ea8024ae27337fc7ddcbfcddd157f841fdfe7",
|
"sha256:db844eb158a87ccab83e868a762ea8024ae27337fc7ddcbfcddd157f841fdfe7",
|
||||||
"sha256:defed7ea5f218a9f2336301e6fd379f55c655bea65ba2476346340a0ce6f74a1",
|
"sha256:defed7ea5f218a9f2336301e6fd379f55c655bea65ba2476346340a0ce6f74a1",
|
||||||
"sha256:e16eb9541f3dd1a3e92b89005e37b1257b157b7256df0e36bd7b33b50be73bcb",
|
"sha256:e16eb9541f3dd1a3e92b89005e37b1257b157b7256df0e36bd7b33b50be73bcb",
|
||||||
"sha256:e23281b9a08ec338469268f98f194658abfb13658ee98e2b7f85ee9dd06caa91",
|
|
||||||
"sha256:e2d9e1cbc1b25e22000328702b014227737756f4b5bf5c485ac1d8091ada078b",
|
|
||||||
"sha256:e48f4234f2469ed012a98f4b7874e7f7e173c167bed4934912a29e03167cf6b1",
|
|
||||||
"sha256:e4c4e92c14a57c9bd4cb4be678c25369bf7a092d55fd0866f759e425b9660806",
|
|
||||||
"sha256:ec1947eabbaf8e0531e8e899fc1d9876c179fc518989461f5d24e2223395a9e3",
|
|
||||||
"sha256:f909bbbc433048b499cb9db9e713b5d8d949e8c109a2a548502fb9aa8630f0b1"
|
"sha256:f909bbbc433048b499cb9db9e713b5d8d949e8c109a2a548502fb9aa8630f0b1"
|
||||||
],
|
],
|
||||||
"version": "==1.0.9"
|
"version": "==1.0.9"
|
||||||
|
@ -164,30 +149,30 @@
|
||||||
},
|
},
|
||||||
"click": {
|
"click": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1",
|
"sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3",
|
||||||
"sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"
|
"sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.6'",
|
"markers": "python_version >= '3.6'",
|
||||||
"version": "==8.0.4"
|
"version": "==8.0.3"
|
||||||
},
|
},
|
||||||
"cssselect2": {
|
"cssselect2": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:8d4690bce5f25013262997e64cef3e7bade877d3ef126f9cc624e5b1f294d934",
|
"sha256:2f4a9f20965367bae459e3bb42561f7927e0cfe5b7ea1692757cf67ef5d7dace",
|
||||||
"sha256:d98a7bbdd8ebc46093279195d669a3359bd5a23f90c19e82c19d9eeef333e617"
|
"sha256:93fbb9af860e95dd40bf18c3b2b6ed99189a07c0f29ba76f9c5be71344664ec8"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.7'",
|
"markers": "python_version >= '3.6'",
|
||||||
"version": "==0.5.0"
|
"version": "==0.4.1"
|
||||||
},
|
},
|
||||||
"fonttools": {
|
"fonttools": {
|
||||||
"extras": [
|
"extras": [
|
||||||
"woff"
|
"woff"
|
||||||
],
|
],
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:084dd1762f083a1bf49e41da1bfeafb475c9dce46265690a6bdd33290b9a63f4",
|
"sha256:545c05d0f7903a863c2020e07b8f0a57517f2c40d940bded77076397872d14ca",
|
||||||
"sha256:6985cc5380c06db07fdc73ade15e6adbd4ce6ff850d7561ca00f97090b4b263d"
|
"sha256:edf251d5d2cc0580d5f72de4621c338d8c66c5f61abb50cf486640f73c8194d5"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.7'",
|
"markers": "python_version >= '3.7'",
|
||||||
"version": "==4.30.0"
|
"version": "==4.28.5"
|
||||||
},
|
},
|
||||||
"ghp-import": {
|
"ghp-import": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
@ -214,11 +199,11 @@
|
||||||
},
|
},
|
||||||
"importlib-metadata": {
|
"importlib-metadata": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:b36ffa925fe3139b2f6ff11d6925ffd4fa7bc47870165e3ac260ac7b4f91e6ac",
|
"sha256:92a8b58ce734b2a4494878e0ecf7d79ccd7a128b5fc6014c401e0b61f006f0f6",
|
||||||
"sha256:d16e8c1deb60de41b8e8ed21c1a7b947b0bc62fab7e1d470bcdf331cea2e6735"
|
"sha256:b7cf7d3fef75f1e4c80a96ca660efbd51473d7e8f39b5ab9210febc7809012a4"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.7'",
|
"markers": "python_version < '3.10'",
|
||||||
"version": "==4.11.2"
|
"version": "==4.10.0"
|
||||||
},
|
},
|
||||||
"jinja2": {
|
"jinja2": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
@ -238,49 +223,78 @@
|
||||||
},
|
},
|
||||||
"markupsafe": {
|
"markupsafe": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:023af8c54fe63530545f70dd2a2a7eed18d07a9a77b94e8bf1e2ff7f252db9a3",
|
"sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298",
|
||||||
"sha256:09c86c9643cceb1d87ca08cdc30160d1b7ab49a8a21564868921959bd16441b8",
|
"sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64",
|
||||||
"sha256:142119fb14a1ef6d758912b25c4e803c3ff66920635c44078666fe7cc3f8f759",
|
"sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b",
|
||||||
"sha256:1d1fb9b2eec3c9714dd936860850300b51dbaa37404209c8d4cb66547884b7ed",
|
"sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194",
|
||||||
"sha256:204730fd5fe2fe3b1e9ccadb2bd18ba8712b111dcabce185af0b3b5285a7c989",
|
"sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567",
|
||||||
"sha256:24c3be29abb6b34052fd26fc7a8e0a49b1ee9d282e3665e8ad09a0a68faee5b3",
|
"sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff",
|
||||||
"sha256:290b02bab3c9e216da57c1d11d2ba73a9f73a614bbdcc027d299a60cdfabb11a",
|
"sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724",
|
||||||
"sha256:3028252424c72b2602a323f70fbf50aa80a5d3aa616ea6add4ba21ae9cc9da4c",
|
"sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74",
|
||||||
"sha256:30c653fde75a6e5eb814d2a0a89378f83d1d3f502ab710904ee585c38888816c",
|
"sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646",
|
||||||
"sha256:3cace1837bc84e63b3fd2dfce37f08f8c18aeb81ef5cf6bb9b51f625cb4e6cd8",
|
"sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35",
|
||||||
"sha256:4056f752015dfa9828dce3140dbadd543b555afb3252507348c493def166d454",
|
"sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6",
|
||||||
"sha256:454ffc1cbb75227d15667c09f164a0099159da0c1f3d2636aa648f12675491ad",
|
"sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a",
|
||||||
"sha256:598b65d74615c021423bd45c2bc5e9b59539c875a9bdb7e5f2a6b92dfcfc268d",
|
"sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6",
|
||||||
"sha256:599941da468f2cf22bf90a84f6e2a65524e87be2fce844f96f2dd9a6c9d1e635",
|
"sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad",
|
||||||
"sha256:5ddea4c352a488b5e1069069f2f501006b1a4362cb906bee9a193ef1245a7a61",
|
"sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26",
|
||||||
"sha256:62c0285e91414f5c8f621a17b69fc0088394ccdaa961ef469e833dbff64bd5ea",
|
"sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38",
|
||||||
"sha256:679cbb78914ab212c49c67ba2c7396dc599a8479de51b9a87b174700abd9ea49",
|
"sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac",
|
||||||
"sha256:6e104c0c2b4cd765b4e83909cde7ec61a1e313f8a75775897db321450e928cce",
|
"sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7",
|
||||||
"sha256:736895a020e31b428b3382a7887bfea96102c529530299f426bf2e636aacec9e",
|
"sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6",
|
||||||
"sha256:75bb36f134883fdbe13d8e63b8675f5f12b80bb6627f7714c7d6c5becf22719f",
|
"sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047",
|
||||||
"sha256:7d2f5d97fcbd004c03df8d8fe2b973fe2b14e7bfeb2cfa012eaa8759ce9a762f",
|
"sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75",
|
||||||
"sha256:80beaf63ddfbc64a0452b841d8036ca0611e049650e20afcb882f5d3c266d65f",
|
"sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f",
|
||||||
"sha256:84ad5e29bf8bab3ad70fd707d3c05524862bddc54dc040982b0dbcff36481de7",
|
"sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b",
|
||||||
"sha256:8da5924cb1f9064589767b0f3fc39d03e3d0fb5aa29e0cb21d43106519bd624a",
|
"sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135",
|
||||||
"sha256:961eb86e5be7d0973789f30ebcf6caab60b844203f4396ece27310295a6082c7",
|
"sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8",
|
||||||
"sha256:96de1932237abe0a13ba68b63e94113678c379dca45afa040a17b6e1ad7ed076",
|
"sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a",
|
||||||
"sha256:a0a0abef2ca47b33fb615b491ce31b055ef2430de52c5b3fb19a4042dbc5cadb",
|
"sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a",
|
||||||
"sha256:b2a5a856019d2833c56a3dcac1b80fe795c95f401818ea963594b345929dffa7",
|
"sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1",
|
||||||
"sha256:b8811d48078d1cf2a6863dafb896e68406c5f513048451cd2ded0473133473c7",
|
"sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9",
|
||||||
"sha256:c532d5ab79be0199fa2658e24a02fce8542df196e60665dd322409a03db6a52c",
|
"sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864",
|
||||||
"sha256:d3b64c65328cb4cd252c94f83e66e3d7acf8891e60ebf588d7b493a55a1dbf26",
|
"sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914",
|
||||||
"sha256:d4e702eea4a2903441f2735799d217f4ac1b55f7d8ad96ab7d4e25417cb0827c",
|
"sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee",
|
||||||
"sha256:d5653619b3eb5cbd35bfba3c12d575db2a74d15e0e1c08bf1db788069d410ce8",
|
"sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f",
|
||||||
"sha256:d66624f04de4af8bbf1c7f21cc06649c1c69a7f84109179add573ce35e46d448",
|
"sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18",
|
||||||
"sha256:e67ec74fada3841b8c5f4c4f197bea916025cb9aa3fe5abf7d52b655d042f956",
|
"sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8",
|
||||||
"sha256:e6f7f3f41faffaea6596da86ecc2389672fa949bd035251eab26dc6697451d05",
|
"sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2",
|
||||||
"sha256:f02cf7221d5cd915d7fa58ab64f7ee6dd0f6cddbb48683debf5d04ae9b1c2cc1",
|
"sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d",
|
||||||
"sha256:f0eddfcabd6936558ec020130f932d479930581171368fd728efcfb6ef0dd357",
|
"sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b",
|
||||||
"sha256:fabbe18087c3d33c5824cb145ffca52eccd053061df1d79d4b66dafa5ad2a5ea",
|
"sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b",
|
||||||
"sha256:fc3150f85e2dbcf99e65238c842d1cfe69d3e7649b19864c1cc043213d9cd730"
|
"sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86",
|
||||||
|
"sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6",
|
||||||
|
"sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f",
|
||||||
|
"sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb",
|
||||||
|
"sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833",
|
||||||
|
"sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28",
|
||||||
|
"sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e",
|
||||||
|
"sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415",
|
||||||
|
"sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902",
|
||||||
|
"sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f",
|
||||||
|
"sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d",
|
||||||
|
"sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9",
|
||||||
|
"sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d",
|
||||||
|
"sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145",
|
||||||
|
"sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066",
|
||||||
|
"sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c",
|
||||||
|
"sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1",
|
||||||
|
"sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a",
|
||||||
|
"sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207",
|
||||||
|
"sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f",
|
||||||
|
"sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53",
|
||||||
|
"sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd",
|
||||||
|
"sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134",
|
||||||
|
"sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85",
|
||||||
|
"sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9",
|
||||||
|
"sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5",
|
||||||
|
"sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94",
|
||||||
|
"sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509",
|
||||||
|
"sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51",
|
||||||
|
"sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.7'",
|
"markers": "python_version >= '3.6'",
|
||||||
"version": "==2.1.0"
|
"version": "==2.0.1"
|
||||||
},
|
},
|
||||||
"mdx-truly-sane-lists": {
|
"mdx-truly-sane-lists": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
@ -373,44 +387,50 @@
|
||||||
},
|
},
|
||||||
"pillow": {
|
"pillow": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:011233e0c42a4a7836498e98c1acf5e744c96a67dd5032a6f666cc1fb97eab97",
|
"sha256:066f3999cb3b070a95c3652712cffa1a748cd02d60ad7b4e485c3748a04d9d76",
|
||||||
"sha256:0f29d831e2151e0b7b39981756d201f7108d3d215896212ffe2e992d06bfe049",
|
"sha256:0a0956fdc5defc34462bb1c765ee88d933239f9a94bc37d132004775241a7585",
|
||||||
"sha256:12875d118f21cf35604176872447cdb57b07126750a33748bac15e77f90f1f9c",
|
"sha256:0b052a619a8bfcf26bd8b3f48f45283f9e977890263e4571f2393ed8898d331b",
|
||||||
"sha256:14d4b1341ac07ae07eb2cc682f459bec932a380c3b122f5540432d8977e64eae",
|
"sha256:1394a6ad5abc838c5cd8a92c5a07535648cdf6d09e8e2d6df916dfa9ea86ead8",
|
||||||
"sha256:1c3c33ac69cf059bbb9d1a71eeaba76781b450bc307e2291f8a4764d779a6b28",
|
"sha256:1bc723b434fbc4ab50bb68e11e93ce5fb69866ad621e3c2c9bdb0cd70e345f55",
|
||||||
"sha256:1d19397351f73a88904ad1aee421e800fe4bbcd1aeee6435fb62d0a05ccd1030",
|
"sha256:244cf3b97802c34c41905d22810846802a3329ddcb93ccc432870243211c79fc",
|
||||||
"sha256:253e8a302a96df6927310a9d44e6103055e8fb96a6822f8b7f514bb7ef77de56",
|
"sha256:25a49dc2e2f74e65efaa32b153527fc5ac98508d502fa46e74fa4fd678ed6645",
|
||||||
"sha256:2632d0f846b7c7600edf53c48f8f9f1e13e62f66a6dbc15191029d950bfed976",
|
"sha256:2e4440b8f00f504ee4b53fe30f4e381aae30b0568193be305256b1462216feff",
|
||||||
"sha256:335ace1a22325395c4ea88e00ba3dc89ca029bd66bd5a3c382d53e44f0ccd77e",
|
"sha256:3862b7256046fcd950618ed22d1d60b842e3a40a48236a5498746f21189afbbc",
|
||||||
"sha256:413ce0bbf9fc6278b2d63309dfeefe452835e1c78398efb431bab0672fe9274e",
|
"sha256:3eb1ce5f65908556c2d8685a8f0a6e989d887ec4057326f6c22b24e8a172c66b",
|
||||||
"sha256:5100b45a4638e3c00e4d2320d3193bdabb2d75e79793af7c3eb139e4f569f16f",
|
"sha256:3f97cfb1e5a392d75dd8b9fd274d205404729923840ca94ca45a0af57e13dbe6",
|
||||||
"sha256:514ceac913076feefbeaf89771fd6febde78b0c4c1b23aaeab082c41c694e81b",
|
"sha256:493cb4e415f44cd601fcec11c99836f707bb714ab03f5ed46ac25713baf0ff20",
|
||||||
"sha256:528a2a692c65dd5cafc130de286030af251d2ee0483a5bf50c9348aefe834e8a",
|
"sha256:4acc0985ddf39d1bc969a9220b51d94ed51695d455c228d8ac29fcdb25810e6e",
|
||||||
"sha256:6295f6763749b89c994fcb6d8a7f7ce03c3992e695f89f00b741b4580b199b7e",
|
"sha256:5503c86916d27c2e101b7f71c2ae2cddba01a2cf55b8395b0255fd33fa4d1f1a",
|
||||||
"sha256:6c8bc8238a7dfdaf7a75f5ec5a663f4173f8c367e5a39f87e720495e1eed75fa",
|
"sha256:5b7bb9de00197fb4261825c15551adf7605cf14a80badf1761d61e59da347779",
|
||||||
"sha256:718856856ba31f14f13ba885ff13874be7fefc53984d2832458f12c38205f7f7",
|
"sha256:5e9ac5f66616b87d4da618a20ab0a38324dbe88d8a39b55be8964eb520021e02",
|
||||||
"sha256:7f7609a718b177bf171ac93cea9fd2ddc0e03e84d8fa4e887bdfc39671d46b00",
|
"sha256:620582db2a85b2df5f8a82ddeb52116560d7e5e6b055095f04ad828d1b0baa39",
|
||||||
"sha256:80ca33961ced9c63358056bd08403ff866512038883e74f3a4bf88ad3eb66838",
|
"sha256:62cc1afda735a8d109007164714e73771b499768b9bb5afcbbee9d0ff374b43f",
|
||||||
"sha256:80fe64a6deb6fcfdf7b8386f2cf216d329be6f2781f7d90304351811fb591360",
|
"sha256:70ad9e5c6cb9b8487280a02c0ad8a51581dcbbe8484ce058477692a27c151c0a",
|
||||||
"sha256:81c4b81611e3a3cb30e59b0cf05b888c675f97e3adb2c8672c3154047980726b",
|
"sha256:72b9e656e340447f827885b8d7a15fc8c4e68d410dc2297ef6787eec0f0ea409",
|
||||||
"sha256:855c583f268edde09474b081e3ddcd5cf3b20c12f26e0d434e1386cc5d318e7a",
|
"sha256:72cbcfd54df6caf85cc35264c77ede902452d6df41166010262374155947460c",
|
||||||
"sha256:9bfdb82cdfeccec50aad441afc332faf8606dfa5e8efd18a6692b5d6e79f00fd",
|
"sha256:792e5c12376594bfcb986ebf3855aa4b7c225754e9a9521298e460e92fb4a488",
|
||||||
"sha256:a5d24e1d674dd9d72c66ad3ea9131322819ff86250b30dc5821cbafcfa0b96b4",
|
"sha256:7b7017b61bbcdd7f6363aeceb881e23c46583739cb69a3ab39cb384f6ec82e5b",
|
||||||
"sha256:a9f44cd7e162ac6191491d7249cceb02b8116b0f7e847ee33f739d7cb1ea1f70",
|
"sha256:81f8d5c81e483a9442d72d182e1fb6dcb9723f289a57e8030811bac9ea3fef8d",
|
||||||
"sha256:b5b3f092fe345c03bca1e0b687dfbb39364b21ebb8ba90e3fa707374b7915204",
|
"sha256:82aafa8d5eb68c8463b6e9baeb4f19043bb31fefc03eb7b216b51e6a9981ae09",
|
||||||
"sha256:b9618823bd237c0d2575283f2939655f54d51b4527ec3972907a927acbcc5bfc",
|
"sha256:84c471a734240653a0ec91dec0996696eea227eafe72a33bd06c92697728046b",
|
||||||
"sha256:cef9c85ccbe9bee00909758936ea841ef12035296c748aaceee535969e27d31b",
|
"sha256:8c803ac3c28bbc53763e6825746f05cc407b20e4a69d0122e526a582e3b5e153",
|
||||||
"sha256:d21237d0cd37acded35154e29aec853e945950321dd2ffd1a7d86fe686814669",
|
"sha256:93ce9e955cc95959df98505e4608ad98281fff037350d8c2671c9aa86bcf10a9",
|
||||||
"sha256:d3c5c79ab7dfce6d88f1ba639b77e77a17ea33a01b07b99840d6ed08031cb2a7",
|
"sha256:9a3e5ddc44c14042f0844b8cf7d2cd455f6cc80fd7f5eefbe657292cf601d9ad",
|
||||||
"sha256:d9d7942b624b04b895cb95af03a23407f17646815495ce4547f0e60e0b06f58e",
|
"sha256:a4901622493f88b1a29bd30ec1a2f683782e57c3c16a2dbc7f2595ba01f639df",
|
||||||
"sha256:db6d9fac65bd08cea7f3540b899977c6dee9edad959fa4eaf305940d9cbd861c",
|
"sha256:a5a4532a12314149d8b4e4ad8ff09dde7427731fcfa5917ff16d0291f13609df",
|
||||||
"sha256:ede5af4a2702444a832a800b8eb7f0a7a1c0eed55b644642e049c98d589e5092",
|
"sha256:b8831cb7332eda5dc89b21a7bce7ef6ad305548820595033a4b03cf3091235ed",
|
||||||
"sha256:effb7749713d5317478bb3acb3f81d9d7c7f86726d41c1facca068a04cf5bb4c",
|
"sha256:b8e2f83c56e141920c39464b852de3719dfbfb6e3c99a2d8da0edf4fb33176ed",
|
||||||
"sha256:f154d173286a5d1863637a7dcd8c3437bb557520b01bddb0be0258dcb72696b5",
|
"sha256:c70e94281588ef053ae8998039610dbd71bc509e4acbc77ab59d7d2937b10698",
|
||||||
"sha256:f25ed6e28ddf50de7e7ea99d7a976d6a9c415f03adcaac9c41ff6ff41b6d86ac"
|
"sha256:c8a17b5d948f4ceeceb66384727dde11b240736fddeda54ca740b9b8b1556b29",
|
||||||
|
"sha256:d82cdb63100ef5eedb8391732375e6d05993b765f72cb34311fab92103314649",
|
||||||
|
"sha256:d89363f02658e253dbd171f7c3716a5d340a24ee82d38aab9183f7fdf0cdca49",
|
||||||
|
"sha256:d99ec152570e4196772e7a8e4ba5320d2d27bf22fdf11743dd882936ed64305b",
|
||||||
|
"sha256:ddc4d832a0f0b4c52fff973a0d44b6c99839a9d016fe4e6a1cb8f3eea96479c2",
|
||||||
|
"sha256:e3dacecfbeec9a33e932f00c6cd7996e62f53ad46fbe677577394aaa90ee419a",
|
||||||
|
"sha256:eb9fc393f3c61f9054e1ed26e6fe912c7321af2f41ff49d3f83d05bacf22cc78"
|
||||||
],
|
],
|
||||||
"index": "pypi",
|
"markers": "python_version >= '3.6'",
|
||||||
"version": "==9.0.1"
|
"version": "==8.4.0"
|
||||||
},
|
},
|
||||||
"pycparser": {
|
"pycparser": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
@ -429,11 +449,11 @@
|
||||||
},
|
},
|
||||||
"pygments": {
|
"pygments": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65",
|
"sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380",
|
||||||
"sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"
|
"sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.5'",
|
"markers": "python_version >= '3.5'",
|
||||||
"version": "==2.11.2"
|
"version": "==2.10.0"
|
||||||
},
|
},
|
||||||
"pyinotify": {
|
"pyinotify": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
@ -452,19 +472,19 @@
|
||||||
},
|
},
|
||||||
"pyparsing": {
|
"pyparsing": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea",
|
"sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4",
|
||||||
"sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"
|
"sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.6'",
|
"markers": "python_version >= '3.6'",
|
||||||
"version": "==3.0.7"
|
"version": "==3.0.6"
|
||||||
},
|
},
|
||||||
"pyphen": {
|
"pyphen": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:459020cd320eb200c0c5ba46b98b2278fd34c5546f520fdcd2ce5f8d733eb994",
|
"sha256:e2c3ed82c3a04317df5102addafe89652b0876bc6c6265f5dd4c3efaf02315e8",
|
||||||
"sha256:b7d3dfc24b6f2178cdb2b1757ace0bd5d222de3e62c28d22ac578c5f22a13e9b"
|
"sha256:e3c1b1d05deaa31acdd78e2e24005402358feb7a4b407c4af7e5cc2e41c4d608"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.7'",
|
"markers": "python_version >= '3.6'",
|
||||||
"version": "==0.12.0"
|
"version": "==0.11.0"
|
||||||
},
|
},
|
||||||
"python-dateutil": {
|
"python-dateutil": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
@ -584,11 +604,11 @@
|
||||||
},
|
},
|
||||||
"weasyprint": {
|
"weasyprint": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:6a673e48c9b784d0c106f0147a88ba27f34ce49e69028640644fec8ae1b5cfa5",
|
"sha256:10ccb17d55c73096bdf1edd3efe58cb855b07e4c307d9bad4ebc9a3f13ff4580",
|
||||||
"sha256:d5e8aa82e3e2a2477a4543f0646d9fb14080c9ba34a0859751eb23757cc00466"
|
"sha256:a48872d9ec4ba41bc09fec789fb1b5595aef005d1544060f4f255e1f20708852"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.6'",
|
"markers": "python_version >= '3.6'",
|
||||||
"version": "==54.2"
|
"version": "==53.4"
|
||||||
},
|
},
|
||||||
"webencodings": {
|
"webencodings": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
@ -599,64 +619,53 @@
|
||||||
},
|
},
|
||||||
"zipp": {
|
"zipp": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d",
|
"sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832",
|
||||||
"sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"
|
"sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"
|
||||||
],
|
],
|
||||||
"markers": "python_version >= '3.7'",
|
"markers": "python_version >= '3.6'",
|
||||||
"version": "==3.7.0"
|
"version": "==3.6.0"
|
||||||
},
|
},
|
||||||
"zopfli": {
|
"zopfli": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:0190633ca26568f6fa810af9b7c108279d5f565a8aca1224333ff732f565086d",
|
"sha256:08ca761a8be61d3e46807adef8e8dad314ab93c824fc4d882f9e14a67d59fe57",
|
||||||
"sha256:0f052a07a6fb6b7bf87ed30a099187597eb594a8a573a4426c16a6a852a05d86",
|
"sha256:116934fed1e2a918a9225acc856163211661c8dd855061acf17210c015bcd7ca",
|
||||||
"sha256:0f45111b31f32aef070be180433fec5de548dc87caf92c5c304d1e3642b12815",
|
"sha256:1a1794435319de903ffe7a36dfce657799df42a38bd4d50b58fd2361621c1fe5",
|
||||||
"sha256:195209711463a399f0c252b34042d8027f3b41dcb646fc112551cfaef507eab4",
|
"sha256:1b04ef791c60e05a569e9229e106b5e145f55dd93b5ced6fe810985a6c461a4c",
|
||||||
"sha256:2442b99067229d786aa9f9b86976db1ba9602c1b204f361d2901d1bbcaca3441",
|
"sha256:27a7df4c4611a5a9cb81ddafa1d56f7ed5a08827308c6546ca607097f4e36194",
|
||||||
"sha256:28a103434694ce35cbe4f2380e18077052a78f1a0de061b3c8f1bd35b54c2822",
|
"sha256:289d7c2f135add4c0964291c7eee40defb20fbcafc4deceb63d8d2ccc19d6c4d",
|
||||||
"sha256:29357c34b8de35c05dd04d8706393bfa09b2dd8bb7a331cc5e98e2b8d39d2efd",
|
"sha256:2ad7c1d56229c51eb42001d10b6784e41436d4706e8075264743a0036f3faf53",
|
||||||
"sha256:2cd55bf9952884f3c0a3a32f95e5ba5fb0e1f371c9b1a99ed41351c1e00f4700",
|
"sha256:33d270a14f9f2bde1846b8370372f1038a01a75d81e6f5a0f4ee341877bd327c",
|
||||||
"sha256:2f61ecd57bc47684c44a60e8cecb8e67f633cf238f30cc255627e172119ad72d",
|
"sha256:377e70a4dfed0d0b4119023d8722897081343e187341b3a220e08f2284bda0d7",
|
||||||
"sha256:338c7b2bba06ff60a73f724b7e1c8a16a5aebe9155edf58cf69b4ff7cb0b46f6",
|
"sha256:3b529645c7f963dc321523beee777f795dece7a355564a5084cd45ea51a6e985",
|
||||||
"sha256:3663d25419476b9e999e12ab8f6f5f8d39079bf536947da2cb5f3e45491db6f4",
|
"sha256:3da24da35b9584a4a45bd67fa6b41281d3d90efd27de5056f789f1ff123f445e",
|
||||||
"sha256:37071a3dd5ec0c7f27a1f440d6f50ed8171665e7e3b6ae9a6228e6c48d21570c",
|
"sha256:44f6c2592a1cd56a3f57562650cc7c95e13e465f3727f9ffc40def486124307d",
|
||||||
"sha256:38b1928a5fc5c706ec90aa833ffb5f4512bf886fe41c1b30a95edf7fb09544d6",
|
"sha256:49020bcb4acb04d625a464633716316313f271a0a2421a9cc2862823a3adf3c5",
|
||||||
"sha256:51537999c2114a68b1c0fac8f7ab2a05e4251d778b568213f1666f04feb79e1c",
|
"sha256:509bbfc19006526bfd4917a91108bb44ee26729e9ae25656c12247dbe3cfece8",
|
||||||
"sha256:58b2bd497273e1344098370d959f837ec1d18bae9bfafad8f4e4a2802cbbf049",
|
"sha256:56f756f841f14180fd13e79b6b2ae4c9e47b73a9a7dc287109f7d432fd495df6",
|
||||||
"sha256:5ee224ec851b4b53042ff6ad6e81712c8c9aa18396396acb024fe5a65c6bb8f1",
|
"sha256:614f56e98111d57747d1c766b987f480353dad9bf8fb27089933fb350cc53bf1",
|
||||||
"sha256:5fa38b9bb6636fd11b3348dfd6aee4839e71145c3aebc76de4ba44886ec9fd6e",
|
"sha256:631a09bfd19bfcb70d950c13e4e2993aa682c2bf49fa463add4cc77962ee5d75",
|
||||||
"sha256:5ffcdc5ee695da73990f7806f8f1dd9a6d99d338bbe54d08fb3aaa55c9603e27",
|
"sha256:6324dcc03633e7310db68f5c2b59ad8436b8fd5dddf5e2adab7b8aa4f6a5f442",
|
||||||
"sha256:683c2d521553aa8ca4526c911d419d37223db298f76048ce920aded18ae060cb",
|
"sha256:74255e8e5a0f9993863094cd54e9501eb5f62d0a2970e9c9ca005f62c9c38338",
|
||||||
"sha256:7b189d80aeedb986d226e966df9e13fe8ccc28352d9d5c6c1bd3ac208aa79769",
|
"sha256:745cbe6f036b8398d2f59bbb7165c4ba5cd0ac2e8243efc7082dee1f5731baf7",
|
||||||
"sha256:7c829c577f976b05e4ec583da4f48f31448db97b9f7b65c438d45ba7893aa2a7",
|
"sha256:78de3cc08a8efaa8013d61528907d91ac4d6cc014ffd8a41cc10ee75e9e60d7b",
|
||||||
"sha256:7e2b47662632809d7035f4fc16edbe141c4538158ad74eb3c47532b8bedb8277",
|
"sha256:7a085eee2896b55959ef06cd962dfb0d01a6b5e79e2446a140ec81e7f4499dfc",
|
||||||
"sha256:890a83502bb5dff27b1e2b829f8b879d9b7c1383d20a68dc13f0de71da4ff604",
|
"sha256:9368d2f9a8073e41e10c5440569d540a63f2bd7a126fe81cc5f469a56692833b",
|
||||||
"sha256:8a40d9d113902aea0de370dce115051cf9cae4767b50af4fdde66d931b9bcae5",
|
"sha256:97058951ffbfef5f37d68a0537d3049b48dffbb461bd1971d14f3259e60ef849",
|
||||||
"sha256:8bc92b4008854afa465d647be5ae51b01788ec47cfd10a362dcc865ff898c473",
|
"sha256:9b6ecc0dd348c3153fc596de6206148adf349aa25f745b6bf47c682911068fac",
|
||||||
"sha256:95a7ca4571797375b1fa924858cda344767621ef70a43b1b2c0b116e275f42b2",
|
"sha256:9d1115a985ce5af418b06ea5f9e1974d056227d90216bd7232a75c5ca60ab478",
|
||||||
"sha256:9e123bfb16cf86ef5abda375012a97c7d00d989b3519d785ca298326f671a81b",
|
"sha256:a42254a7c9550c5237666dab1191c55802f47bce4f1511725cfc033d7bf2c3a9",
|
||||||
"sha256:a8ca5b541544a7b959fdf5a8f614c52a31002e4be489663d835aadeef3473cb0",
|
"sha256:a91044948344c793b9c0f9de343d85960c002a31fdd83110a01d3f66e6100c57",
|
||||||
"sha256:a9def54c90edd112f785b07a812005ab374e7d0aaf50ecac900ca0c51adab3e7",
|
"sha256:b955dc2fff85b37ecbfeec09f174effdb617fd977eb34ff118dfa14aa8ac68df",
|
||||||
"sha256:aa11904718fd27b2ccadf0ac88c1ca0b96ba67ad0c3c2bd584f85de060d04534",
|
"sha256:ba346570cea24250613060ea1f62550e0de8bfd1733b950c24424dacc93cfd12",
|
||||||
"sha256:aa18771d1d76c09d2ec2c859b6c55fdad29d2511549b4225437194aca102ad3c",
|
"sha256:bd750ca39bb0555ce69b8ed5c6bf5cf1293fae4657f09e488af1aacfc267c409",
|
||||||
"sha256:b25540fee3d54e0fb627f911f7e1bed79611ea09aa048708777a34f6f1ac9b70",
|
"sha256:bf5990d5a3e6c6abe49f0509c67a38c00c3e0b8c8da26b867661b34bfeeb9e8d",
|
||||||
"sha256:b882f85b13c47eb19e7f07bccac7564701424ed5ec6d7ba8886ad6de04110e21",
|
"sha256:c2446eb17fc677d1789693510d902bca6bb492e079f3a64efeac687e20be3416",
|
||||||
"sha256:ba4001a8c798a9bb2a59bb30284acd604e0c702477dce69b7fde35a50e55a95b",
|
"sha256:d2e37f12eb2e336993bde6cb6d8d19019a23b711ce1b8ad037a3c3838802958c",
|
||||||
"sha256:bbcdbfe93dad34f0e30f166092ffdf95e564e415b29732a6f6a52def7bb1c4d3",
|
"sha256:da74c371ee20795561ef22def8d1943939b7e9a7533a27de7a9a4a68301cf4ce",
|
||||||
"sha256:c5d722b2bfde6dbfbda548e7f6b5b50b57ee06f334b055be24d9bbcdbee60e84",
|
"sha256:dff085fe9df5ee3839fca15a7319068bb9728397b9d9a59c0561bf1bf7f2a990",
|
||||||
"sha256:c993919cd01ea5c4b0134908bbd59321d9bdbb9085aa30c538fa1289745fe52f",
|
"sha256:e9bedbb085b3b011a1cd911d85691c82904bc94903ce1ad98d5eb34b392cb093"
|
||||||
"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"
|
"version": "==0.1.9"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"develop": {}
|
"develop": {}
|
||||||
|
|
2
Procfile
2
Procfile
|
@ -1,5 +1,3 @@
|
||||||
docs: make watch-docs-internal
|
docs: make watch-docs-internal
|
||||||
slides: make watch-slides-internal
|
slides: make watch-slides-internal
|
||||||
toc: make watch-tocupdate-internal
|
toc: make watch-tocupdate-internal
|
||||||
autoslide: make watch-autoslide-internal
|
|
||||||
# proxy: caddy
|
|
||||||
|
|
72
README.md
72
README.md
|
@ -1,76 +1,54 @@
|
||||||
<!--
|
# 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
|
## Prerequisites
|
||||||
|
|
||||||
Make sure you have Docker installed.
|
Make sure you have python and node installed
|
||||||
|
|
||||||
## Writing content
|
git remote rename origin boilerplate
|
||||||
|
git remote add origin git@...
|
||||||
|
git checkout -b upstream/boilerplate/master --track
|
||||||
|
|
||||||
### 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
|
|
||||||
|- ...
|
|
||||||
```
|
|
||||||
|
|
||||||
### Content for docs
|
pip install -U pipenv
|
||||||
|
pipenv install
|
||||||
|
|
||||||
FIXME: tree structure
|
Install node packages
|
||||||
|
|
||||||
FIXME: autoslide feature
|
npm install
|
||||||
|
|
||||||
### Content for slides
|
|
||||||
|
|
||||||
FIXME: tree structure
|
## Usage
|
||||||
|
|
||||||
## Watch mode
|
### First steps
|
||||||
|
|
||||||
This mode allows you the result on-the-fly as you makea changes in the content.
|
Clean this repository
|
||||||
|
|
||||||
|
Change the remote
|
||||||
|
|
||||||
|
|
||||||
|
### Watch mode
|
||||||
|
|
||||||
|
This mode allows you the result on-the-fly as you make changes in the content.
|
||||||
|
|
||||||
To use watch mode, type:
|
To use watch mode, type:
|
||||||
|
|
||||||
docmachine -a watch
|
make watch
|
||||||
|
|
||||||
To use watch mode for slides only type:
|
To use watch mode for slides only type:
|
||||||
|
|
||||||
docmachine -a watch-slides
|
make watch-slides
|
||||||
|
|
||||||
To use watch mode for docs only type:
|
To use watch mode for docs only type:
|
||||||
|
|
||||||
docmachine -a watch-docs
|
make watch-docs
|
||||||
|
|
||||||
|
|
||||||
## Build mode
|
### Build mode
|
||||||
|
|
||||||
This mode builds final content for delivery (website, PDF files)
|
This mode builds final content for delivery (website, PDF files)
|
||||||
|
|
||||||
### Building HTML
|
|
||||||
|
|
||||||
To use build mode:
|
To use build mode:
|
||||||
|
|
||||||
docmachine build
|
make build
|
||||||
|
|
||||||
### Building PDF
|
|
||||||
|
|
||||||
|
|
||||||
|
|
10
caddy.conf
10
caddy.conf
|
@ -1,10 +0,0 @@
|
||||||
|
|
||||||
handle_path /docs* {
|
|
||||||
reverse_proxy 127.0.0.1:5100
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
handle_path /slides* {
|
|
||||||
reverse_proxy 127.0.0.1:5200
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
FROM node:18-bookworm-slim
|
FROM node:bullseye-slim
|
||||||
LABEL maintainer="Glenn ROLLAND glenux@glenux.net"
|
MAINTAINER Glenn ROLLAND <glenux@glenux.net>
|
||||||
|
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& apt-get install -y --no-install-recommends python3 python3-pip pipenv \
|
&& apt-get install -y --no-install-recommends python3 python3-pip pipenv \
|
||||||
|
@ -9,7 +9,7 @@ RUN apt-get update \
|
||||||
|
|
||||||
# Tools for running the common parts
|
# Tools for running the common parts
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& apt-get install -y --no-install-recommends make build-essential inotify-tools gosu unzip curl rsync \
|
&& apt-get install -y --no-install-recommends make build-essential inotify-tools gosu unzip \
|
||||||
&& apt-get clean \
|
&& apt-get clean \
|
||||||
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
|
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
|
||||||
&& truncate -s 0 /var/log/*log
|
&& truncate -s 0 /var/log/*log
|
||||||
|
@ -21,14 +21,7 @@ RUN apt-get update \
|
||||||
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
|
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
|
||||||
&& truncate -s 0 /var/log/*log
|
&& 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 . /app
|
||||||
COPY .marp /app/.marp
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
ENV LANG=C.UTF-8 \
|
ENV LANG=C.UTF-8 \
|
||||||
|
|
|
@ -17,12 +17,12 @@ mkdir -p /home/appuser
|
||||||
|
|
||||||
# Create user with given ID if needed
|
# Create user with given ID if needed
|
||||||
if ! grep -q "^[^:]*:[^:]*:$EXT_UID:" /etc/group ; then
|
if ! grep -q "^[^:]*:[^:]*:$EXT_UID:" /etc/group ; then
|
||||||
groupadd -g "$EXT_GID" appuser
|
groupadd -g "$EXT_GID" appuser
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Create group with given ID if needed
|
# Create group with given ID if needed
|
||||||
if ! grep -q "^[^:]*:[^:]*:$EXT_UID:" /etc/passwd ; then
|
if ! grep -q "^[^:]*:[^:]*:$EXT_UID:" /etc/passwd ; then
|
||||||
useradd -r -u "$EXT_UID" -g appuser appuser
|
useradd -r -u "$EXT_UID" -g appuser appuser
|
||||||
fi
|
fi
|
||||||
|
|
||||||
chown -R "$EXT_UID:$EXT_GID" _cache
|
chown -R "$EXT_UID:$EXT_GID" _cache
|
||||||
|
@ -30,22 +30,8 @@ chown -R "$EXT_UID:$EXT_GID" _build
|
||||||
chown -R "$EXT_UID:$EXT_GID" .marp
|
chown -R "$EXT_UID:$EXT_GID" .marp
|
||||||
chown -R "$EXT_UID:$EXT_GID" /home/appuser
|
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
|
if [ "$1" = "shell" ]; then
|
||||||
exec bash
|
exec bash
|
||||||
else
|
else
|
||||||
exec gosu "$EXT_UID:$EXT_GID" make "$@"
|
exec gosu "$EXT_UID:$EXT_GID" make "$@"
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -1,49 +0,0 @@
|
||||||
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);
|
|
||||||
}*/
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
window.MathJax = {
|
|
||||||
tex: {
|
|
||||||
inlineMath: [["\\(", "\\)"]],
|
|
||||||
displayMath: [["\\[", "\\]"]],
|
|
||||||
processEscapes: true,
|
|
||||||
processEnvironments: true
|
|
||||||
},
|
|
||||||
options: {
|
|
||||||
ignoreHtmlClass: ".*|",
|
|
||||||
processHtmlClass: "arithmatex"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
document$.subscribe(() => {
|
|
||||||
|
|
||||||
|
|
||||||
MathJax.typesetPromise()
|
|
||||||
})
|
|
0
examples/.empty
Normal file
0
examples/.empty
Normal file
0
exercises/.empty
Normal file
0
exercises/.empty
Normal file
0
mindmaps/.empty
Normal file
0
mindmaps/.empty
Normal file
|
@ -6,13 +6,12 @@ site_dir: _build/docs
|
||||||
# theme_dir: 'themes/mkdocs-material'
|
# theme_dir: 'themes/mkdocs-material'
|
||||||
|
|
||||||
site_author: 'Glenn Y. Rolland'
|
site_author: 'Glenn Y. Rolland'
|
||||||
site_url: 'https://glenux.net'
|
site_url: 'http://glenux.github.io/teaching-boilerplate'
|
||||||
|
|
||||||
# copyright: 'Copyright (c) 2016 Glenux'
|
# copyright: 'Copyright (c) 2016 Glenux'
|
||||||
|
|
||||||
repo_name: 'Source'
|
repo_name: 'GitHub'
|
||||||
repo_url: ''
|
repo_url: 'https://bitbucket.com/glenux-corp/teaching-boilerplate'
|
||||||
# https://bitbucket.com/glenux-corp/teaching-boilerplate'
|
|
||||||
# site_favicon: 'favicon.ico'
|
# site_favicon: 'favicon.ico'
|
||||||
|
|
||||||
theme:
|
theme:
|
||||||
|
@ -28,7 +27,6 @@ theme:
|
||||||
neutral: 'black'
|
neutral: 'black'
|
||||||
features:
|
features:
|
||||||
- navigation.sections
|
- navigation.sections
|
||||||
- navigation.footer
|
|
||||||
# - navigation.tabs
|
# - navigation.tabs
|
||||||
# - navigation.tabs.sticky
|
# - navigation.tabs.sticky
|
||||||
|
|
||||||
|
@ -38,16 +36,9 @@ i18n:
|
||||||
|
|
||||||
extra_css:
|
extra_css:
|
||||||
- css/extra.css
|
- css/extra.css
|
||||||
- ../docs.assets/css/extra.css
|
|
||||||
# - css/source.css
|
|
||||||
# - css/patch.css
|
|
||||||
|
|
||||||
extra_javascript:
|
extra_javascript:
|
||||||
- js/extra.js
|
- 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:
|
# author:
|
||||||
# github: 'glenux'
|
# github: 'glenux'
|
||||||
|
@ -59,13 +50,8 @@ markdown_extensions:
|
||||||
- admonition
|
- admonition
|
||||||
- toc:
|
- toc:
|
||||||
permalink: '#'
|
permalink: '#'
|
||||||
|
|
||||||
# https://squidfunk.github.io/mkdocs-material/reference/code-blocks/
|
|
||||||
- pymdownx.highlight:
|
|
||||||
anchor_linenums: false
|
|
||||||
- pymdownx.inlinehilite
|
|
||||||
- codehilite:
|
- codehilite:
|
||||||
guess_lang: true
|
guess_lang: false
|
||||||
|
|
||||||
# pip install mdx_truly_sane_lists
|
# pip install mdx_truly_sane_lists
|
||||||
- mdx_truly_sane_lists
|
- mdx_truly_sane_lists
|
||||||
|
@ -76,8 +62,6 @@ markdown_extensions:
|
||||||
#
|
#
|
||||||
# pip install pymdown-extensions
|
# pip install pymdown-extensions
|
||||||
- pymdownx.superfences:
|
- pymdownx.superfences:
|
||||||
# - pymdownx.arithmatex:
|
|
||||||
# generic: true
|
|
||||||
|
|
||||||
# plugins: []
|
# plugins: []
|
||||||
plugins:
|
plugins:
|
5672
package-lock.json
generated
5672
package-lock.json
generated
File diff suppressed because it is too large
Load diff
11
package.json
11
package.json
|
@ -12,11 +12,12 @@
|
||||||
"author": "",
|
"author": "",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@marp-team/marp-cli": "^3.4.0",
|
"@marp-team/marp-cli": "^1.5.0",
|
||||||
"@marp-team/marp-core": "^3.9.0",
|
|
||||||
"foreman": "^3.0.1",
|
"foreman": "^3.0.1",
|
||||||
"markdown-it-footnote": "^3.0.2",
|
"node-sass": "^6.0.1"
|
||||||
"markdown-it-highlight-lines": "^1.0.2",
|
},
|
||||||
"node-sass": "^7.0.0"
|
"devDependencies": {
|
||||||
|
"@marp-team/marp-core": "^3.0.0",
|
||||||
|
"markdown-it-footnote": "^3.0.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
86
scripts/gx-mkteaching
Executable file
86
scripts/gx-mkteaching
Executable file
|
@ -0,0 +1,86 @@
|
||||||
|
#!/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)
|
100
scripts/gx-teaching
Executable file
100
scripts/gx-teaching
Executable file
|
@ -0,0 +1,100 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# vim: set ft=sh:
|
||||||
|
|
||||||
|
# Set defaults
|
||||||
|
BASEDIR="$(pwd)"
|
||||||
|
ACTION="watch"
|
||||||
|
DOCKER_IMAGE=glenux/teaching-boilerplate:latest
|
||||||
|
DOCKER_OPT_TTY="-t"
|
||||||
|
|
||||||
|
# Parse arguments
|
||||||
|
while [ $# -gt 0 ]; do
|
||||||
|
ARG="${1:-}"
|
||||||
|
OPT="${2:-}"
|
||||||
|
shift
|
||||||
|
|
||||||
|
# echo "DEBUG: ARG=$ARG OPT=$OPT"
|
||||||
|
|
||||||
|
case "$ARG" in
|
||||||
|
-d|--data-dir)
|
||||||
|
shift # argument requires a parameter
|
||||||
|
if [ -z "$OPT" ]; then
|
||||||
|
>&2 echo "ERROR: missing argument for --data-dir"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [ ! -d "$OPT" ]; then
|
||||||
|
>&2 echo "ERROR: argument for --data-dir must be a directory"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
BASEDIR="$(cd "$OPT" && pwd)"
|
||||||
|
;;
|
||||||
|
-a|--action)
|
||||||
|
shift # argument requires a parameter
|
||||||
|
if [ -z "$OPT" ]; then
|
||||||
|
>&2 echo "ERROR: missing argument for --action"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
ACTION="$OPT"
|
||||||
|
;;
|
||||||
|
-T|--no-tty)
|
||||||
|
DOCKER_OPT_TTY=""
|
||||||
|
;;
|
||||||
|
-h|--help)
|
||||||
|
echo "Usage: $0 [options]"
|
||||||
|
echo ""
|
||||||
|
echo "-d, --data-dir DIR Content directory"
|
||||||
|
echo "-a, --action ACTION Action (watch, build, shell, etc.)"
|
||||||
|
echo "-t, --tty Enable TTY mode (needed for shell)"
|
||||||
|
echo "-h, --help Show this help"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
>&2 echo "ERROR: unknown option '$ARG'"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "basedir = $BASEDIR"
|
||||||
|
echo "docker_image = $DOCKER_IMAGE"
|
||||||
|
echo "action = $ACTION"
|
||||||
|
|
||||||
|
if [ -f "$BASEDIR/.marp/theme.scss" ]; then
|
||||||
|
DOCKER_OPT_MARP_THEME="-v $BASEDIR/.marp:/app/.marp"
|
||||||
|
echo "Theme: detected Marp files. Adding option to command line ($DOCKER_OPT_MARP_THEME)"
|
||||||
|
else
|
||||||
|
echo "Theme: no theme detected. Using default files"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "$BASEDIR/mkdocs.yml" ]; then
|
||||||
|
DOCKER_OPT_MKDOCS_CONFIG="-v $BASEDIR/mkdocs.yml:/app/mkdocs.yml"
|
||||||
|
echo "Mkdocs: detected mkdocs.yml file. Adding option to command line ($DOCKER_OPT_MKDOCS_CONFIG)"
|
||||||
|
else
|
||||||
|
echo "Mkdocs: no mkdocs.yml detected. Using default files"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -d "$BASEDIR/slides" ]; then
|
||||||
|
DOCKER_OPT_MARP_PORT="-p 5200:5200"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -d "$BASEDIR/docs" ]; then
|
||||||
|
DOCKER_OPT_MKDOCS_PORT="-p 5100:5100"
|
||||||
|
fi
|
||||||
|
|
||||||
|
set -x
|
||||||
|
docker run -i $DOCKER_OPT_TTY \
|
||||||
|
--shm-size=1gb \
|
||||||
|
-e "EXT_UID=$(id -u)" \
|
||||||
|
-e "EXT_GID=$(id -g)" \
|
||||||
|
-v "$BASEDIR/docs:/app/docs" \
|
||||||
|
-v "$BASEDIR/slides:/app/slides" \
|
||||||
|
-v "$BASEDIR/images:/app/images" \
|
||||||
|
-v "$BASEDIR/_build:/app/_build" \
|
||||||
|
$DOCKER_OPT_MKDOCS_CONFIG \
|
||||||
|
$DOCKER_OPT_MARP_THEME \
|
||||||
|
$DOCKER_OPT_MKDOCS_PORT \
|
||||||
|
$DOCKER_OPT_MARP_PORT \
|
||||||
|
"$DOCKER_IMAGE" "$ACTION"
|
||||||
|
set +x
|
||||||
|
|
||||||
|
# TODO: ask current user permissions
|
||||||
|
# TODO: fix permissions on generated files
|
Loading…
Reference in a new issue