feat: update

This commit is contained in:
egarette@silique.fr 2025-11-09 14:20:04 +01:00
parent 665eabe250
commit f0cb191971
111 changed files with 164 additions and 91 deletions

124
build.py
View file

@ -5,6 +5,7 @@ from json import dump, loads
from pathlib import Path from pathlib import Path
from ruamel.yaml import YAML from ruamel.yaml import YAML
from ansi2html import Ansi2HTMLConverter from ansi2html import Ansi2HTMLConverter
from bs4 import BeautifulSoup
from rougail import Rougail from rougail import Rougail
from rougail.config import get_rougail_config from rougail.config import get_rougail_config
@ -13,11 +14,11 @@ from rougail.user_data_yaml import RougailUserDataYaml
from rougail.output_doc import RougailOutputDoc from rougail.output_doc import RougailOutputDoc
if __name__ == "__main__": if __name__ == "__main__":
builder_dir = sys.argv[1] builder_dir = sys.argv[1]
previous = Path(builder_dir) / "previous.yml" previous = Path(builder_dir) / "previous.yml"
with Path("install.txt").open() as fh:
cmd = fh.read()
commit_id = sys.argv[2] commit_id = sys.argv[2]
# rougailconfig = RougailConfig.copy() # rougailconfig = RougailConfig.copy()
rougailconfig = get_rougail_config(backward_compatibility=False, add_extra_options=False) rougailconfig = get_rougail_config(backward_compatibility=False, add_extra_options=False)
@ -58,57 +59,68 @@ if __name__ == "__main__":
doc = '' doc = ''
yaml = YAML() yaml = YAML()
namespace = 'firefox' namespace = 'firefox'
file_found = False
if rougailconfig['main_namespace']: if rougailconfig['main_namespace']:
all_dirs = [[rougailconfig['main_structural_directories']], [['foxyproxy']]] dirname = "foxyproxy"
else: else:
all_dirs = [[rougailconfig['main_structural_directories']]] dirname = "firefox"
doc += inv_formatter.title('Screenshot', 2) + '\n' doc += inv_formatter.title('Screenshot', 2) + '\n'
doc += f'<img src="{namespace}.png" width=50% height=50% alt="{namespace.capitalize()} Proxy setting"/>\n\n' doc += f'<img src="{namespace}.png" width=50% height=50% alt="{namespace.capitalize()} Proxy setting"/>\n\n'
# with doc_file.open('r') as docfh: # with doc_file.open('r') as docfh:
# doc += docfh.read() # doc += docfh.read()
doc += '\n' + inv_formatter.title('Structure', 2) + '\n' doc += '\n' + inv_formatter.title('Clone and install', 2) + '\n\n'
print(all_dirs) doc += "To test this tutorial, you need to download this repository and install Rougail:\n\n"
for r in all_dirs: doc += f'```shell\n{cmd}```\n\n'
for dirs in r: doc += "Then switch to the tutorial page:\n\n"
for d in dirs: doc += f"```shell\ngit switch --detach {commit_id}\n```\n"
print(d) tree = Path('tree.html')
files = list(Path(d).iterdir()) display_yml = None
files.sort() if tree.is_file():
for f in files: doc += '\n' + inv_formatter.title('Structure', 2) + '\n\n'
namespace = f.parent.name with tree.open() as fh:
file_found = True soup = BeautifulSoup(fh.read(), features="lxml")
if f.name.endswith('.yml') or f.name.endswith('.yaml'): doc += str(soup.find('p')) + "\n\n"
doc += inv_formatter.title(str(f), 3) for f in Path('.').iterdir():
doc += '\n```yml\n' if f.name.startswith('DISPLAY_'):
with f.open(encoding="utf8") as file_fh: filename = f.name[9:]
doc += file_fh.read() display_yml = Path(dirname) / filename
doc += '\n```\n' break
else:
files = list(Path(dirname).iterdir())
files.sort()
for f in reversed(files):
if not f.name.endswith('.yml'):
continue
display_yml = f
break
if display_yml:
doc += f"Contents of the {str(display_yml)} file"
doc += '\n\n```yml\n'
with display_yml.open(encoding="utf8") as file_fh:
doc += file_fh.read()
doc += '\n```\n'
rougailconfig['step.output'] = 'doc' rougailconfig['step.output'] = 'doc'
rougailconfig["doc.title_level"] = 4 rougailconfig["doc.title_level"] = 4
inv_doc = inventory.run()[1] inv_doc = inventory.run()[1]
CMD = f"foo@bar:~$ git switch --detach {commit_id}\n" CMD = "rougail -m firefox/ "
CMD += "foo@bar:~$ rougail -m firefox/ "
if has_namespace: if has_namespace:
CMD += "-s Firefox " CMD += "-s Firefox "
if has_foxyproxy: if has_foxyproxy:
CMD += "-xn FoxyProxy -xd 0 foxyproxy/ " CMD += "-xn FoxyProxy -xd 0 foxyproxy/ "
if has_mode: if has_mode:
CMD += "--modes_level basic standard advanced " CMD += "--modes_level basic standard advanced "
if file_found and inv_doc: if inv_doc:
doc += inv_formatter.title("Let's generate the documentation", 3) doc += inv_formatter.title("Let's generate the documentation", 3)
cmd = CMD + "-o doc" cmd = CMD + "-o doc"
doc += f'```console\n{cmd}\n```\n' doc += f'```shell\n{cmd}\n```\n'
doc += inv_doc doc += inv_doc
if previous.is_file(): if previous.is_file():
rougailconfig["doc.contents"] = ["changelog"] rougailconfig["doc.contents"] = ["changelog"]
rougailconfig["doc.previous_json_file"] = str(previous) rougailconfig["doc.previous_json_file"] = str(previous)
inv_doc = inventory.run()[1] inv_doc = inventory.run()[1]
if file_found and inv_doc: if inv_doc:
doc += inv_formatter.title("Let's generate the changelog", 3) doc += inv_formatter.title("Let's generate the changelog", 3)
cmd = CMD + "-o doc --doc.contents changelog" cmd = CMD + "-o doc --doc.contents changelog"
doc += f'```console\n{cmd}\n```\n' doc += f'```shell\n{cmd}\n```\n'
doc += inv_doc + "\n" doc += inv_doc + "\n"
# save PREVIOUS # save PREVIOUS
rougailconfig["doc.contents"] = ["variables"] rougailconfig["doc.contents"] = ["variables"]
@ -134,15 +146,7 @@ if __name__ == "__main__":
doc += '\n```yml\n' doc += '\n```yml\n'
with filename.open(encoding="utf8") as file_fh: with filename.open(encoding="utf8") as file_fh:
doc += file_fh.read() doc += file_fh.read()
doc += '\n```\n' doc += '```\n'
# with filename.open(encoding="utf8") as file_fh:
# objects = yaml.load(file_fh)
# doc += inv_formatter.yaml(objects)
#readme = dirname / 'README.md'
#if readme.is_file():
# doc += inv_formatter.title('Description', 4)
# with readme.open() as fh:
# doc += fh.read() + '\n\n'
rougail = Rougail(rougailconfig) rougail = Rougail(rougailconfig)
tiramisu_config = rougail.run() tiramisu_config = rougail.run()
rougailconfig['step.user_data'] = ['yaml'] rougailconfig['step.user_data'] = ['yaml']
@ -158,25 +162,51 @@ if __name__ == "__main__":
console = export.run()[1] console = export.run()[1]
conv = Ansi2HTMLConverter(inline=True) conv = Ansi2HTMLConverter(inline=True)
doc += inv_formatter.title('Output', 4) doc += inv_formatter.title('Output', 4)
cmd = CMD + f"-u yaml -ff {filename}" cmd = CMD + f"-u yaml -yf {filename}"
doc += f"```console\n{cmd}\n```\n" with (dirname / "cmd_ro.txt").open("w") as fh:
fh.write(cmd)
doc += f"```shell\n{cmd}\n```\n"
conv_data = '<pre>' + conv.convert(console, full=False) + "</pre>\n" conv_data = '<pre>' + conv.convert(console, full=False) + "</pre>\n"
doc += conv_data doc += conv_data
with open(dirname / 'output_ro.html', 'w') as fh_output: with open(dirname / 'output_ro.html', 'w') as fh_output:
fh_output.write(conv_data) fh_output.write(conv_data)
if (config / 'read_write').is_file(): if (dirname / 'invalid').is_file():
tiramisu_config.property.read_write errors2 = rougail.user_datas(ret, invalid_user_datas_error=True)
export = RougailOutputConsole(tiramisu_config, export = RougailOutputConsole(tiramisu_config,
rougailconfig=rougailconfig, rougailconfig=rougailconfig,
user_data_errors=errors['errors'], user_data_errors=errors2['errors'],
user_data_warnings=errors['warnings'], user_data_warnings=errors2['warnings'],
)
console = export.run()[1]
conv = Ansi2HTMLConverter(inline=True)
doc += inv_formatter.title('Output when invalid user datas is an error', 4)
cmd2 = cmd + " --cli.invalid_user_datas_error"
with (dirname / "cmd_invalid.txt").open("w") as fh:
fh.write(cmd2)
doc += f"```shell\n{cmd2}\n```\n"
conv_data = '<pre>' + conv.convert(console, full=False) + "</pre>\n"
doc += conv_data
with open(dirname / 'output_invalid.html', 'w') as fh_output:
fh_output.write(conv_data)
if (dirname / 'read_write').is_file():
trougailconfig = rougailconfig.copy()
trougailconfig["console.mandatory"] = False
tiramisu_config.property.read_write()
errors2 = rougail.user_datas(ret, invalid_user_datas_error=True)
export = RougailOutputConsole(tiramisu_config,
rougailconfig=trougailconfig,
user_data_errors=errors2['errors'],
user_data_warnings=errors2['warnings'],
) )
console = export.run()[1] console = export.run()[1]
conv = Ansi2HTMLConverter(inline=True) conv = Ansi2HTMLConverter(inline=True)
doc += inv_formatter.title('Output in read write mode', 4) doc += inv_formatter.title('Output in read write mode', 4)
cmd = cmd + " --cli.read_write" cmd2 = cmd + " --cli.read_write"
doc += f"```console\n{cmd}\n```\n" with (dirname / "cmd_rw.txt").open("w") as fh:
doc += '<pre>' + conv.convert(console, full=False) + "</pre>\n" fh.write(cmd2)
doc += f"```shell\n{cmd2}\n```\n"
conv_data = '<pre>' + conv.convert(console, full=False) + "</pre>\n"
doc += conv_data
with open(dirname / 'output_rw.html', 'w') as fh_output: with open(dirname / 'output_rw.html', 'w') as fh_output:
fh_output.write(conv_data) fh_output.write(conv_data)
# #

View file

@ -11,7 +11,7 @@ if [ -d $DEST ]; then
exit 1 exit 1
fi fi
export LC_ALL=C export LC_ALL=C.UTF-8
BUILDER="$(pwd)" BUILDER="$(pwd)"
mkdir -p $DEST/firefox mkdir -p $DEST/firefox
@ -22,10 +22,13 @@ touch summary_total.md
cd "$DEST" cd "$DEST"
DEST="$(pwd)" DEST="$(pwd)"
TUTO_ROOT=https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit
cp "$BUILDER"/firefox.png . cp "$BUILDER"/firefox.png .
cp "$BUILDER"/foxyproxy.png . cp "$BUILDER"/foxyproxy.png .
cp "$BUILDER"/summary.md . cp "$BUILDER"/summary.md .
cp "$BUILDER"/install.txt .
touch README.md touch README.md
"$BUILDER"/build.py "$BUILDER" "$VERSION" "$BUILDER"/build.py "$BUILDER" "$VERSION"
rm -rf summary.md rm -rf summary.md
@ -38,11 +41,11 @@ git commit -am"$(cat $BUILDER/TITLE)"
cd - > /dev/null cd - > /dev/null
for i in $(ls -d "examples"/* | sort); do for i in $(ls -d "examples"/* | sort); do
num=$(echo $(basename "$i")) num=$(echo $(basename "$i"))
echo "$num" echo "$num"
commit_id="v${VERSION}_$num" commit_id="v${VERSION}_$num"
summary="[tutorial $commit_id] $(head -n 1 $i/README.md)" summary="[tutorial $commit_id] $(head -n 1 $i/README.md)"
echo "- [$summary](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/$commit_id/README.md) ([diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/${commit_id}~1..$commit_id))" >> summary_total.md echo "- [$summary](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/$commit_id/README.md) ([diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/${commit_id}~1..$commit_id))" >> summary_total.md
done done
for i in $(ls -d "examples"/* | sort); do for i in $(ls -d "examples"/* | sort); do
@ -53,7 +56,7 @@ for i in $(ls -d "examples"/* | sort); do
echo " - $(head -n 1 $i/SUBTITLE.md)" >> summary.md echo " - $(head -n 1 $i/SUBTITLE.md)" >> summary.md
fi fi
if [ -f "$i/README.md" ]; then if [ -f "$i/README.md" ]; then
rm -rf "$DEST/config" rm -rf "$DEST/config" "$DEST/tree.html"
num=$(echo $(basename "$i")) num=$(echo $(basename "$i"))
echo "$num" echo "$num"
commit_id="v${VERSION}_$num" commit_id="v${VERSION}_$num"
@ -61,9 +64,12 @@ for i in $(ls -d "examples"/* | sort); do
diff_url="https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/${commit_id}~1..$commit_id" diff_url="https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/${commit_id}~1..$commit_id"
echo " - [$summary](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/$commit_id/README.md) ([diff]($diff_url))" >> summary.md echo " - [$summary](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/$commit_id/README.md) ([diff]($diff_url))" >> summary.md
cp "summary_total.md" "$DEST" cp "summary_total.md" "$DEST"
BEFORE=$PWD
cd "$i/structural_files" cd "$i/structural_files"
echo "====================="
if [ -d firefox ]; then if [ -d firefox ]; then
for j in $(ls firefox/*.yml 2>/dev/null); do for j in $(ls firefox/*.yml 2>/dev/null); do
echo "++++ $j"
cp "$j" "$DEST/$j" cp "$j" "$DEST/$j"
done done
fi fi
@ -73,14 +79,18 @@ for i in $(ls -d "examples"/* | sort); do
cp "$j" "$DEST/$j" cp "$j" "$DEST/$j"
done done
fi fi
cp "DISPLAY_*" "$DEST/" 2> /dev/null || true
cd $DEST
tree -H $TUTO_ROOT/$commit_id/ -P "*.yml" > tree.html
cd - > /dev/null
cp -f ../README.md "$DEST" cp -f ../README.md "$DEST"
if [ -d ../config ]; then if [ -d ../config ]; then
cp -aL ../config "$DEST" cp -aL ../config "$DEST"
fi fi
msg="[tutorial $(basename $i)] $(cat ../README.md)" msg="[tutorial $commit_id] $(cat ../README.md)"
[ -e ../firefox.png ] && cp ../firefox.png "$DEST" [ -e ../firefox.png ] && cp ../firefox.png "$DEST"
[ -e ../foxyproxy.png ] && cp ../foxyproxy.png "$DEST" [ -e ../foxyproxy.png ] && cp ../foxyproxy.png "$DEST"
cd - > /dev/null cd $BEFORE
cd "$DEST" cd "$DEST"
# #
before=$(grep "commit/$commit_id/README.md" summary_total.md -B1 | wc -l) before=$(grep "commit/$commit_id/README.md" summary_total.md -B1 | wc -l)
@ -101,7 +111,7 @@ for i in $(ls -d "examples"/* | sort); do
mv config/mode mode mv config/mode mode
fi fi
"$BUILDER"/build.py "$BUILDER" "$commit_id" "$BUILDER"/build.py "$BUILDER" "$commit_id"
rm -rf config/*/README.md config/read_write config/namespace rm -rf config/*/README.md config/*/read_write config/namespace config/*/invalid DISPLAY_*
rm -rf jinja_caches summary.md summary_before.md summary_after.md summary_total.md rm -rf jinja_caches summary.md summary_before.md summary_after.md summary_total.md
if [ -f mode ]; then if [ -f mode ]; then
MODE=1 MODE=1
@ -109,7 +119,7 @@ for i in $(ls -d "examples"/* | sort); do
else else
MODE=0 MODE=0
fi fi
git add *.png README.md git add *.png README.md install.txt tree.html
if [ -d config ]; then if [ -d config ]; then
git add config git add config
else else
@ -145,13 +155,11 @@ This is what the page looks like:
" > README.md " > README.md
echo '# Installation echo '# Installation
```bash To test this tutorial, you need to download this repository and install Rougail:
# git clone -b 1.1 https://forge.cloud.silique.fr/stove/rougail-tutorials.git
# cd rougail-tutorials ```bash' >> README.md
# python -m venv rougail cat install.txt >> README.md
# . rougail/bin/activate echo '```
# pip install rougail-cli rougail-output-exporter rougail-output-doc rougail-user-data-file
```
' >> README.md ' >> README.md
echo "# Summary echo "# Summary
@ -161,7 +169,7 @@ cp "$BUILDER"/firefox.png .
cp "$BUILDER"/foxyproxy.png . cp "$BUILDER"/foxyproxy.png .
cat "$BUILDER"/summary.md >> README.md cat "$BUILDER"/summary.md >> README.md
echo >> README.md echo >> README.md
rm -rf firefox foxyproxy mode rm -rf firefox foxyproxy mode install.txt tree.html
git add . git add .
git commit -am"Summary" git commit -am"Summary"
# #

View file

@ -1 +0,0 @@
../010/config

View file

@ -0,0 +1 @@
The user data file is empty. So it's only default value that will be used.

View file

View file

@ -0,0 +1,2 @@
---
proxy_mode: No proxy

View file

@ -1 +0,0 @@
../010/config

View file

@ -0,0 +1 @@
The user data file is empty. So it's only default value that will be used.

View file

@ -0,0 +1,2 @@
---
proxy_mode: No proxy

View file

@ -0,0 +1 @@
"foo" should be an invalid value for this variable.

View file

@ -0,0 +1,2 @@
---
proxy_mode: foo

View file

@ -1 +0,0 @@
../010/config

View file

@ -0,0 +1 @@
The user data file is empty. So it's only default value that will be used.

View file

@ -0,0 +1,2 @@
---
proxy_mode: No proxy

View file

@ -0,0 +1 @@
"foo" should be an invalid value for this variable.

View file

@ -0,0 +1,2 @@
---
proxy_mode: foo

View file

View file

@ -0,0 +1,4 @@
---
manual:
http_proxy:
address: example.net

View file

@ -0,0 +1,5 @@
---
manual:
http_proxy:
address: example.net
port: 3128

View file

@ -0,0 +1,4 @@
---
manual:
http_proxy:
address: example.net

View file

@ -1,2 +0,0 @@
---
proxy_mode: Manual proxy configuration

View file

@ -0,0 +1,4 @@
---
manual:
http_proxy:
address: 192.168.0.1

View file

View file

@ -0,0 +1,4 @@
---
manual:
http_proxy:
address: not a valid domain name

View file

View file

@ -1,2 +0,0 @@
If "use_for_https" is false, HTTPS variables are visible in read only mode and in read write mode.

View file

@ -1,9 +0,0 @@
---
proxy_mode: Manual proxy configuration
manual:
http_proxy:
address: http.proxy.net
port: '3128'
use_for_https: false
https_proxy:
address: https.proxy.net

View file

@ -1 +1 @@
../022/config ../020/config

View file

@ -1 +0,0 @@
../022/config

View file

@ -3,4 +3,4 @@ proxy_mode: Manual proxy configuration
manual: manual:
http_proxy: http_proxy:
address: example.net address: example.net
port: '3128' port: 3128

View file

@ -0,0 +1,6 @@
---
proxy_mode: Manual proxy configuration
manual:
http_proxy:
address: example.net
port: 100000

View file

View file

@ -1 +0,0 @@
../013/config

View file

@ -0,0 +1,4 @@
---
manual:
http_proxy:
address: example.net

View file

@ -0,0 +1,5 @@
---
manual:
http_proxy:
address: example.net
use_for_https: false

View file

@ -1 +1 @@
../013/config ../020/config

View file

@ -1 +0,0 @@
../022/config

View file

View file

View file

View file

View file

View file

@ -1 +1 @@
../022/config ../030/config

View file

@ -1 +1 @@
../013/config ../030/config

View file

@ -1 +1 @@
../013/config ../030/config

Some files were not shown because too many files have changed in this diff Show more