cd docs && make make[1]: Entering directory `/src/docs' cat ../CHANGELOG-0.4.md |sed 's/^# \(.*\) CHANGELOG$/# \1/g' >900-changelogs/CHANGELOG-0.4.md cat ../CHANGELOG-0.5.md |sed 's/^# \(.*\) CHANGELOG$/# \1/g' >900-changelogs/CHANGELOG-0.5.md cat ../CHANGELOG-0.6.md |sed 's/^# \(.*\) CHANGELOG$/# \1/g' >900-changelogs/CHANGELOG-0.6.md cat ../CHANGELOG-0.7.md |sed 's/^# \(.*\) CHANGELOG$/# \1/g' >900-changelogs/CHANGELOG-0.7.md cat ../CHANGELOG-0.8.md |sed 's/^# \(.*\) CHANGELOG$/# \1/g' >900-changelogs/CHANGELOG-0.8.md cat ../CHANGELOG-0.9.md |sed 's/^# \(.*\) CHANGELOG$/# \1/g' >900-changelogs/CHANGELOG-0.9.md cat ../CHANGELOG-1.0.md |sed 's/^# \(.*\) CHANGELOG$/# \1/g' >900-changelogs/CHANGELOG-1.0.md rm -f 850-reference/100-components.md echo "# Available components" >850-reference/100-components.md echo >>850-reference/100-components.md if test "MFSERV" = "MFEXT" -a "" != "1"; then echo "!!! note" >>850-reference/100-components.md; echo " Available components in all mfext layers **(excepting add-ons)**" >>850-reference/100-components.md ; echo >>850-reference/100-components.md ; echo " :arrow_right: **you will find plenty of other components in [addons]({{addons}}) (even some officially maintained)**" >>850-reference/100-components.md ; fi cat ../.metwork-framework/components.md >>850-reference/100-components.md echo >>850-reference/100-components.md if test "MFSERV" = "MFEXT" -a "" != "1"; then echo "!!! note" >>850-reference/100-components.md; echo " Available components in all mfext layers **(excepting add-ons)**" >>850-reference/100-components.md ; echo >>850-reference/100-components.md ; echo " :arrow_right: **you will find plenty of other components in [addons]({{addons}}) (even some officially maintained)**" >>850-reference/100-components.md ; fi cp -f /opt/metwork-mfserv-1.1/config/config.ini 850-reference/config.ini for T in `ls /opt/metwork-mfserv-1.1/share/templates/plugins |grep -v ^_`; do rm -Rf 850-reference/plugin_templates/${T} ; mkdir -p 850-reference/plugin_templates/${T}; layer_wrapper --layers=python3@mfext -- bootstrap_plugin.py create --template=${T} --no-input foobar; cp foobar/config.ini 850-reference/plugin_templates/${T}/config.ini; cat 850-reference/_plugin_config_ini.md |sed "s/@@@TEMPLATE@@@/${T}/g" >850-reference/plugin_templates/${T}/200-config_ini.md; rm -Rf foobar; if test -f /opt/metwork-mfserv-1.1/share/templates/plugins/${T}/README.md; then cp -f /opt/metwork-mfserv-1.1/share/templates/plugins/${T}/README.md 850-reference/plugin_templates/${T}/100-intro.md; fi; done Plugin foobar successfully created on directory /src/docs/foobar ╔══════════════════════════════════════════════════════════════════════════════╗ ║ README ║ ╚══════════════════════════════════════════════════════════════════════════════╝ Introduction This template is made for building Python3 webservices/websites using the Flask framework. How to play with it? By default, the main entry point is in main/wsgi.py file. !!! note "An interactive debugger is automatically configured if you use debug=1 in your plugin config.ini file." You will find a tutorial about this plugin at https://metwork-framework.org/pub/ metwork/continuous_integration/docs/integration/mfserv/870-tutorials/050_python3 _flask_plugin/ Whats next? Read the plugins guide at https://metwork-framework.org/pub/metwork/continuous_integration/docs/integration/mfserv/350-plugin_guide/ Plugin foobar successfully created on directory /src/docs/foobar ╔══════════════════════════════════════════════════════════════════════════════╗ ║ README ║ ╚══════════════════════════════════════════════════════════════════════════════╝ Introduction This template is made for building NodeJS plugins. !!! warning To use this template, you need the metwork-mfext-layer-nodejs mfext extra layer. ┌──────────────────────────────────────────────────────────────────────────────┐ │Please refer to the [Installation guide](https://metwork-framework.org/pub/met│ │work/continuous_integration/docs/integration/mfserv/100-installation_guide) if│ │you don't know how to do that. │ └──────────────────────────────────────────────────────────────────────────────┘ With this plugin template, you will be able to host one NodeJS app and its node_modules. For technical reasons, you can't host several NodeJS apps under the same plugin (like with most of Python templates). How to play with it? By default, the plugin will launch several node processes (each process will listen to a dedicated unix socket load balanced behind nginx webserver). This is a "production ready" installation and you don't need any additional cluster or processes manager. You can change the node command in cmd_and_args configuration option. By default, we launch a minimal server.js file (built with express library) but of course you can change this. In the plugin directory, you will find a package.json to manage your node_modules dependencies (dedicated to your plugin) with npm tool in a standard way. You will find a tutorial about this plugin at https://metwork-framework.org/pub/ metwork/continuous_integration/docs/integration/mfserv/870-tutorials/010_node_pl ugin/ Whats next? Read the plugins guide at https://metwork-framework.org/pub/metwork/continuous_integration/docs/integration/mfserv/350-plugin_guide/ Plugin foobar successfully created on directory /src/docs/foobar ╔══════════════════════════════════════════════════════════════════════════════╗ ║ README ║ ╚══════════════════════════════════════════════════════════════════════════════╝ Introduction This template is made for hosting NodeJS applications without a web part (see the node plugin template if you need a web app). !!! warning To use this template, you need the metwork-mfext-layer-nodejs mfext extra layer. ┌──────────────────────────────────────────────────────────────────────────────┐ │Please refer to the [Installation guide](https://metwork-framework.org/pub/met│ │work/continuous_integration/docs/integration/mfserv/100-installation_guide) if│ │you don't know how to do that. │ └──────────────────────────────────────────────────────────────────────────────┘ How to play with it? By default, the plugin will launch nothing. You can install NodeJS things with npm or with package.json (and make command). As there is no automatically configured web part, you have to launch your app by yourself of you can also set up an extra daemon with config.ini file (to have a monitored automatic launch). Whats next? Read the plugins guide at https://metwork-framework.org/pub/metwork/continuous_integration/docs/integration/mfserv/350-plugin_guide/ Plugin foobar successfully created on directory /src/docs/foobar ╔══════════════════════════════════════════════════════════════════════════════╗ ║ README ║ ╚══════════════════════════════════════════════════════════════════════════════╝ Introduction This template is made for building OpenResty applications (written in Lua) directly integrated into the nginx webserver. How to play with it? By default, you will find these special files: • nginx_extra_http.conf: nginx configuration fragment injected in the http nginx configuration section • nginx_extra_server.conf: nginx configuration fragment injected in the server nginx configuration section • init_worker_by_lua.lua: custom lua code to execute during worker initialization (see openresty init_by_lua doc) • content_by_lua.lua: file loaded (by default) in nginx_extra_server.conf to provide an example content !!! warning Your code is directly integrated into the mfserv nginx server (at module level). So you can break up the whole mfserv module with your plugin. !!! warning As we are at very low level, the autorestart feature does not work in all cases. Of course, you can reload the mfserv running instance with mfserv.stop ; mfserv.start but it's a little bit slow. So in this particular use case, you can use circusctl restart nginx to force reload in all cases. !!! tip As you can break the nginx configuration, we recommend you to keep a tail -f ${MODULE_RUNTIME_HOME}/log/nginx_error.log in a terminal to see some errors. And also, please execute frequently mfserv.status. Whats next? Read the plugins guide at https://metwork-framework.org/pub/metwork/continuous_integration/docs/integration/mfserv/350-plugin_guide/ Plugin foobar successfully created on directory /src/docs/foobar ╔══════════════════════════════════════════════════════════════════════════════╗ ║ README ║ ╚══════════════════════════════════════════════════════════════════════════════╝ Introduction This template is made for building Python2 webservices/websites using the Flask framework. How to play with it? By default, the main entry point is in main/wsgi.py file. Note that an interactive debugger is automatically configured if you use debug=1 in your plugin config.ini file. You will find a tutorial about this plugin at https://metwork-framework.org/pub/ metwork/continuous_integration/docs/integration/mfserv/870-tutorials/020_python2 _flask_plugin/ Whats next? Read the plugins guide at https://metwork-framework.org/pub/metwork/continuous_integration/docs/integration/mfserv/350-plugin_guide/ Plugin foobar successfully created on directory /src/docs/foobar ╔══════════════════════════════════════════════════════════════════════════════╗ ║ README ║ ╚══════════════════════════════════════════════════════════════════════════════╝ Introduction This template is made for hosting Python2 without a web part (see the python2_flask plugin template for example if you need a web app). How to play with it? By default, the plugin will launch nothing. You can install Python2 PyPi packages: • with pip (after entering "your plugin" plugin_env) • or by adding package names at the end of python2_virtualenv_sources/requirements-to-freeze.txt (and using the make command) See "plugins guide" for more details. Whats next? Read the plugins guide at https://metwork-framework.org/pub/metwork/continuous_integration/docs/integration/mfserv/350-plugin_guide/ Plugin foobar successfully created on directory /src/docs/foobar ╔══════════════════════════════════════════════════════════════════════════════╗ ║ README ║ ╚══════════════════════════════════════════════════════════════════════════════╝ Introduction This template is made for building Python2 webservices/websites using the WSGI interface. Every framework made for WSGI should work with this plugin. Or, of course, you can use plain WSGI protocol by hand. How to play with it? By default, the main entry point is in main/wsgi.py file. Note that an interactive debugger is automatically configured if you use debug=1 in your plugin config.ini file. ??? question "Want to change everything?" The file main/wsgi.py must define a WSGI application() function (you can change this in the plugin config.ini file in the _cmd_and_args key) Whats next? Read the plugins guide at https://metwork-framework.org/pub/metwork/continuous_integration/docs/integration/mfserv/350-plugin_guide/ Plugin foobar successfully created on directory /src/docs/foobar ╔══════════════════════════════════════════════════════════════════════════════╗ ║ README ║ ╚══════════════════════════════════════════════════════════════════════════════╝ Introduction This template is made for building Python3 webservices/websites using the AioHttp server async framework. How to play with it? By default, the main entry point is in main/application.py file. ??? question "Want to change everything?" The file main/application.py (you can change this in the plugin config.ini file) is called (through python interpreter) one time for each configured worker/process. ┌──────────────────────────────────────────────────────────────────────────────┐ │It's called by the framework with two arguments as CLI: │ │ - a private unix socket to listen │ │ - a timeout (in seconds) for the webservice │ │ │ │You can change everything you want but you have to keep this! │ └──────────────────────────────────────────────────────────────────────────────┘ You will find a tutorial about this plugin at https://metwork-framework.org/pub/ metwork/continuous_integration/docs/integration/mfserv/870-tutorials/030_python3 _aiohttp_plugin/ Whats next? Read the plugins guide at https://metwork-framework.org/pub/metwork/continuous_integration/docs/integration/mfserv/350-plugin_guide/ Plugin foobar successfully created on directory /src/docs/foobar ╔══════════════════════════════════════════════════════════════════════════════╗ ║ README ║ ╚══════════════════════════════════════════════════════════════════════════════╝ Introduction This template is made for building Python3 webservices/websites using the Django framework. How to play with it? By default, you have a configured django project (same name as the plugin) with one application hello. Have a look to the postinstall script to see what we have configured (you can change everything if you want). You will find a tutorial about this plugin at https://metwork-framework.org/pub/ metwork/continuous_integration/docs/integration/mfserv/870-tutorials/040_python3 _django_plugin/ Whats next? Read the plugins guide at https://metwork-framework.org/pub/metwork/continuous_integration/docs/integration/mfserv/350-plugin_guide/ Plugin foobar successfully created on directory /src/docs/foobar ╔══════════════════════════════════════════════════════════════════════════════╗ ║ README ║ ╚══════════════════════════════════════════════════════════════════════════════╝ Introduction This template is made for building Python3 webservices/websites using the Flask framework. How to play with it? By default, the main entry point is in main/wsgi.py file. !!! note "An interactive debugger is automatically configured if you use debug=1 in your plugin config.ini file." You will find a tutorial about this plugin at https://metwork-framework.org/pub/ metwork/continuous_integration/docs/integration/mfserv/870-tutorials/050_python3 _flask_plugin/ Whats next? Read the plugins guide at https://metwork-framework.org/pub/metwork/continuous_integration/docs/integration/mfserv/350-plugin_guide/ Plugin foobar successfully created on directory /src/docs/foobar ╔══════════════════════════════════════════════════════════════════════════════╗ ║ README ║ ╚══════════════════════════════════════════════════════════════════════════════╝ Introduction This template is made for hosting Python3 without a web part (see the python3_flask plugin template for example if you need a web app). How to play with it? By default, the plugin will launch nothing. You can install Python3 PyPi packages: • with pip (after entering "your plugin" plugin_env) • or by adding package names at the end of python3_virtualenv_sources/requirements-to-freeze.txt (and using the make command) See "plugins guide" for more details. Whats next? Read the plugins guide at https://metwork-framework.org/pub/metwork/continuous_integration/docs/integration/mfserv/350-plugin_guide/ Plugin foobar successfully created on directory /src/docs/foobar ╔══════════════════════════════════════════════════════════════════════════════╗ ║ README ║ ╚══════════════════════════════════════════════════════════════════════════════╝ Introduction This template is made for building Python3 async webservices/websites using ASGI interface and the Uvicorn server. How to play with it? By default, the main entry point is in main/application.py file (app() function). With this template, you have a raw (without framework) implementation. But of course, you can use the ASGI framework you want (Django/Channels, FastAPI, Quart, Starlette…). ??? question "change the entry-point?" The ASGI entry point is by default the app() function in main/application.py file. But you can change this on the _cmd_and_args option in your plugin config.ini file Whats next? Read the plugins guide at https://metwork-framework.org/pub/metwork/continuous_integration/docs/integration/mfserv/350-plugin_guide/ Plugin foobar successfully created on directory /src/docs/foobar ╔══════════════════════════════════════════════════════════════════════════════╗ ║ README ║ ╚══════════════════════════════════════════════════════════════════════════════╝ Introduction This template is made for building Python3 webservices/websites using the WSGI interface. Every framework made for WSGI should work with this plugin. Or, of course, you can use plain WSGI protocol by hand. How to play with it? By default, the main entry point is in main/wsgi.py file. Note that an interactive debugger is automatically configured if you use debug=1 in your plugin config.ini file. ??? question "Want to change everything?" The file main/wsgi.py must define a WSGI application() function (you can change this in the plugin config.ini file in the _cmd_and_args key) Whats next? Read the plugins guide at https://metwork-framework.org/pub/metwork/continuous_integration/docs/integration/mfserv/350-plugin_guide/ Plugin foobar successfully created on directory /src/docs/foobar ╔══════════════════════════════════════════════════════════════════════════════╗ ║ README ║ ╚══════════════════════════════════════════════════════════════════════════════╝ Introduction This template is made for building Python3 web applications with Tornado Async Framework. How to play with it? The (default) code is in main/application.py file. !!! note This a standard Python3 plugin with the tornado library preinstalled and configured. Whats next? Read the plugins guide at https://metwork-framework.org/pub/metwork/continuous_integration/docs/integration/mfserv/350-plugin_guide/ Plugin foobar successfully created on directory /src/docs/foobar ╔══════════════════════════════════════════════════════════════════════════════╗ ║ README ║ ╚══════════════════════════════════════════════════════════════════════════════╝ Introduction This template is made for serving static files with the nginx webserver. How to play with it? By default, just put your static files in the main/ subdirectory of the plugin. nginx will serve them through: • http://{host}:{port}/{plugin_name}/main/… (and) • http://{host}:{port}/{plugin_name}/… Of course, you can add several apps (like main in the default configuration) or configure extra things like virtualdomain based routing. See config.ini file for options. Whats next? Read the plugins guide at https://metwork-framework.org/pub/metwork/continuous_integration/docs/integration/mfserv/350-plugin_guide/ make[1]: Leaving directory `/src/docs' rm -Rf _docs_build layer_wrapper --layers=python3_devtools@mfext -- mkdocs build --strict --site-dir _docs_build [macros] Macros arguments: {'module_name': 'mkdocs_main', 'include_dir': '', 'include_yaml': [], 'j2_block_start_string': '', 'j2_block_end_string': '', 'j2_variable_start_string': '', 'j2_variable_end_string': ''} [macros] Found external Python module 'mkdocs_main' in: /src [macros] Variables: ['extra', 'config', 'environment', 'git', 'context', 'macros_info', 'now', 'fix_url', 'components', 'config_ini', 'installation_guide', 'addons', 'declare_utility', 'link_utility'] [macros] extra variables: {} [macros] Filters: {'pretty': .pretty at 0x7fdecf36d0d0>, 'shell': , 'getenv': , 'fnmatch': , 'from_json': } [macros] Docs directory: /src/docs [macros] Includes directory: /src/docs INFO - Cleaning site directory INFO - Building documentation to directory: /src/_docs_build /opt/metwork-mfext-1.1/opt/python3_devtools/lib/python3.8/site-packages/pymdownx/superfences.py:662: PymdownxDeprecationWarning: The tab option in SuperFences has been deprecated in favor of the general purpose 'pymdownx.tabbed' extension. While you can continue to use this feature for now, it will be removed in the future. Also be mindful of the class changes, if you require old style classes, please enable the 'legacy_tab_classes' option. warnings.warn(MSG_TAB_DEPRECATION, PymdownxDeprecationWarning) INFO - Documentation built in 3.39 seconds rm -Rf /opt/metwork-mfserv-1.1/html_doc && cp -Rf _docs_build /opt/metwork-mfserv-1.1/html_doc