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 ruamel.yaml import YAML
from ansi2html import Ansi2HTMLConverter
from bs4 import BeautifulSoup
from rougail import Rougail
from rougail.config import get_rougail_config
@ -13,11 +14,11 @@ from rougail.user_data_yaml import RougailUserDataYaml
from rougail.output_doc import RougailOutputDoc
if __name__ == "__main__":
builder_dir = sys.argv[1]
previous = Path(builder_dir) / "previous.yml"
with Path("install.txt").open() as fh:
cmd = fh.read()
commit_id = sys.argv[2]
# rougailconfig = RougailConfig.copy()
rougailconfig = get_rougail_config(backward_compatibility=False, add_extra_options=False)
@ -58,57 +59,68 @@ if __name__ == "__main__":
doc = ''
yaml = YAML()
namespace = 'firefox'
file_found = False
if rougailconfig['main_namespace']:
all_dirs = [[rougailconfig['main_structural_directories']], [['foxyproxy']]]
dirname = "foxyproxy"
else:
all_dirs = [[rougailconfig['main_structural_directories']]]
dirname = "firefox"
doc += inv_formatter.title('Screenshot', 2) + '\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:
# doc += docfh.read()
doc += '\n' + inv_formatter.title('Structure', 2) + '\n'
print(all_dirs)
for r in all_dirs:
for dirs in r:
for d in dirs:
print(d)
files = list(Path(d).iterdir())
files.sort()
for f in files:
namespace = f.parent.name
file_found = True
if f.name.endswith('.yml') or f.name.endswith('.yaml'):
doc += inv_formatter.title(str(f), 3)
doc += '\n```yml\n'
with f.open(encoding="utf8") as file_fh:
doc += file_fh.read()
doc += '\n```\n'
doc += '\n' + inv_formatter.title('Clone and install', 2) + '\n\n'
doc += "To test this tutorial, you need to download this repository and install Rougail:\n\n"
doc += f'```shell\n{cmd}```\n\n'
doc += "Then switch to the tutorial page:\n\n"
doc += f"```shell\ngit switch --detach {commit_id}\n```\n"
tree = Path('tree.html')
display_yml = None
if tree.is_file():
doc += '\n' + inv_formatter.title('Structure', 2) + '\n\n'
with tree.open() as fh:
soup = BeautifulSoup(fh.read(), features="lxml")
doc += str(soup.find('p')) + "\n\n"
for f in Path('.').iterdir():
if f.name.startswith('DISPLAY_'):
filename = f.name[9:]
display_yml = Path(dirname) / filename
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["doc.title_level"] = 4
inv_doc = inventory.run()[1]
CMD = f"foo@bar:~$ git switch --detach {commit_id}\n"
CMD += "foo@bar:~$ rougail -m firefox/ "
CMD = "rougail -m firefox/ "
if has_namespace:
CMD += "-s Firefox "
if has_foxyproxy:
CMD += "-xn FoxyProxy -xd 0 foxyproxy/ "
if has_mode:
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)
cmd = CMD + "-o doc"
doc += f'```console\n{cmd}\n```\n'
doc += f'```shell\n{cmd}\n```\n'
doc += inv_doc
if previous.is_file():
rougailconfig["doc.contents"] = ["changelog"]
rougailconfig["doc.previous_json_file"] = str(previous)
inv_doc = inventory.run()[1]
if file_found and inv_doc:
if inv_doc:
doc += inv_formatter.title("Let's generate the changelog", 3)
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"
# save PREVIOUS
rougailconfig["doc.contents"] = ["variables"]
@ -134,15 +146,7 @@ if __name__ == "__main__":
doc += '\n```yml\n'
with filename.open(encoding="utf8") as file_fh:
doc += file_fh.read()
doc += '\n```\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'
doc += '```\n'
rougail = Rougail(rougailconfig)
tiramisu_config = rougail.run()
rougailconfig['step.user_data'] = ['yaml']
@ -158,25 +162,51 @@ if __name__ == "__main__":
console = export.run()[1]
conv = Ansi2HTMLConverter(inline=True)
doc += inv_formatter.title('Output', 4)
cmd = CMD + f"-u yaml -ff {filename}"
doc += f"```console\n{cmd}\n```\n"
cmd = CMD + f"-u yaml -yf {filename}"
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"
doc += conv_data
with open(dirname / 'output_ro.html', 'w') as fh_output:
fh_output.write(conv_data)
if (config / 'read_write').is_file():
tiramisu_config.property.read_write
if (dirname / 'invalid').is_file():
errors2 = rougail.user_datas(ret, invalid_user_datas_error=True)
export = RougailOutputConsole(tiramisu_config,
rougailconfig=rougailconfig,
user_data_errors=errors['errors'],
user_data_warnings=errors['warnings'],
user_data_errors=errors2['errors'],
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]
conv = Ansi2HTMLConverter(inline=True)
doc += inv_formatter.title('Output in read write mode', 4)
cmd = cmd + " --cli.read_write"
doc += f"```console\n{cmd}\n```\n"
doc += '<pre>' + conv.convert(console, full=False) + "</pre>\n"
cmd2 = cmd + " --cli.read_write"
with (dirname / "cmd_rw.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_rw.html', 'w') as fh_output:
fh_output.write(conv_data)
#

View file

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