exordos-core 0.0.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- exordos_core-0.0.7/.github/dependabot.yml +12 -0
- exordos_core-0.0.7/.github/workflows/build.yml +48 -0
- exordos_core-0.0.7/.github/workflows/docs.yml +55 -0
- exordos_core-0.0.7/.github/workflows/inventory.yml +21 -0
- exordos_core-0.0.7/.github/workflows/markdownlint.yml +26 -0
- exordos_core-0.0.7/.github/workflows/publish-to-pypi.yml +97 -0
- exordos_core-0.0.7/.github/workflows/tests.yml +102 -0
- exordos_core-0.0.7/.gitignore +138 -0
- exordos_core-0.0.7/.markdownlint.yaml +150 -0
- exordos_core-0.0.7/.vscode/launch.json +82 -0
- exordos_core-0.0.7/.vscode/settings.json +7 -0
- exordos_core-0.0.7/.vscode/tests.env +5 -0
- exordos_core-0.0.7/CODEOWNERS +5 -0
- exordos_core-0.0.7/Makefile +17 -0
- exordos_core-0.0.7/PKG-INFO +113 -0
- exordos_core-0.0.7/README.md +51 -0
- exordos_core-0.0.7/docker-compose-test.yml +13 -0
- exordos_core-0.0.7/docs/app-developer-guide/build.md +270 -0
- exordos_core-0.0.7/docs/app-developer-guide/build.ru.md +270 -0
- exordos_core-0.0.7/docs/app-developer-guide/deploy.md +82 -0
- exordos_core-0.0.7/docs/app-developer-guide/deploy.ru.md +82 -0
- exordos_core-0.0.7/docs/app-developer-guide/index.md +164 -0
- exordos_core-0.0.7/docs/app-developer-guide/index.ru.md +164 -0
- exordos_core-0.0.7/docs/app-developer-guide/init.md +88 -0
- exordos_core-0.0.7/docs/app-developer-guide/init.ru.md +88 -0
- exordos_core-0.0.7/docs/app-developer-guide/push.md +128 -0
- exordos_core-0.0.7/docs/app-developer-guide/push.ru.md +128 -0
- exordos_core-0.0.7/docs/em/cli.md +23 -0
- exordos_core-0.0.7/docs/em/cli.ru.md +22 -0
- exordos_core-0.0.7/docs/em/manifest.md +114 -0
- exordos_core-0.0.7/docs/em/manifest.ru.md +114 -0
- exordos_core-0.0.7/docs/em/service.md +400 -0
- exordos_core-0.0.7/docs/em/service.ru.md +400 -0
- exordos_core-0.0.7/docs/iam/permissions_overview.md +377 -0
- exordos_core-0.0.7/docs/iam/permissions_overview.ru.md +377 -0
- exordos_core-0.0.7/docs/index.md +55 -0
- exordos_core-0.0.7/docs/index.ru.md +55 -0
- exordos_core-0.0.7/docs/network/load_balancer.md +338 -0
- exordos_core-0.0.7/docs/network/load_balancer.ru.md +323 -0
- exordos_core-0.0.7/docs/openapi/openapi.ru.md +5 -0
- exordos_core-0.0.7/docs/openapi/openapi_boot.md +5 -0
- exordos_core-0.0.7/docs/openapi/openapi_boot.yaml +1363 -0
- exordos_core-0.0.7/docs/openapi/openapi_orch.md +5 -0
- exordos_core-0.0.7/docs/openapi/openapi_orch.yaml +357 -0
- exordos_core-0.0.7/docs/openapi/openapi_status.md +5 -0
- exordos_core-0.0.7/docs/openapi/openapi_status.yaml +992 -0
- exordos_core-0.0.7/docs/openapi/openapi_user.md +5 -0
- exordos_core-0.0.7/docs/openapi/openapi_user.yaml +26294 -0
- exordos_core-0.0.7/docs/secret/certificates.md +69 -0
- exordos_core-0.0.7/docs/secret/certificates.ru.md +68 -0
- exordos_core-0.0.7/docs/usage/local_deployment.md +132 -0
- exordos_core-0.0.7/docs/usage/local_deployment.ru.md +132 -0
- exordos_core-0.0.7/etc/90-exordos-dummy-config.yaml +6 -0
- exordos_core-0.0.7/etc/90-exordos-net-config.yaml.j2 +21 -0
- exordos_core-0.0.7/etc/dnsdist/dnsdist-private.conf.j2 +14 -0
- exordos_core-0.0.7/etc/dnsdist/dnsdist-public.conf +15 -0
- exordos_core-0.0.7/etc/exordos_core/core_agent.conf +64 -0
- exordos_core-0.0.7/etc/exordos_core/event_type_mapping.yaml +3 -0
- exordos_core-0.0.7/etc/exordos_core/exordos_core.conf.j2 +46 -0
- exordos_core-0.0.7/etc/exordos_core/exordos_core.conf.local.example +22 -0
- exordos_core-0.0.7/etc/exordos_core/exordos_core.d/.empty +0 -0
- exordos_core-0.0.7/etc/exordos_core/logging.yaml +33 -0
- exordos_core-0.0.7/etc/genesis_universal_agent/genesis_universal_agent.conf.j2 +41 -0
- exordos_core-0.0.7/etc/genesis_universal_agent/logging.yaml +38 -0
- exordos_core-0.0.7/etc/nginx/sites-available/default +11 -0
- exordos_core-0.0.7/etc/nginx/sites-available/exordos.conf +25 -0
- exordos_core-0.0.7/etc/powerdns/exordos.conf +9 -0
- exordos_core-0.0.7/etc/systemd/ec-boot-api.service +14 -0
- exordos_core-0.0.7/etc/systemd/ec-core-agent.service +12 -0
- exordos_core-0.0.7/etc/systemd/ec-gservice.service +12 -0
- exordos_core-0.0.7/etc/systemd/ec-orch-api.service +14 -0
- exordos_core-0.0.7/etc/systemd/ec-status-api.service +14 -0
- exordos_core-0.0.7/etc/systemd/ec-user-api.service +14 -0
- exordos_core-0.0.7/etc/systemd/genesis-universal-agent.service +12 -0
- exordos_core-0.0.7/etc/systemd/genesis-universal-scheduler.service +12 -0
- exordos_core-0.0.7/etc/systemd/resolved.conf.j2 +37 -0
- exordos_core-0.0.7/exordos_core/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/agent/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/agent/universal/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/agent/universal/clients/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/agent/universal/clients/exceptions.py +23 -0
- exordos_core-0.0.7/exordos_core/agent/universal/clients/rest.py +66 -0
- exordos_core-0.0.7/exordos_core/agent/universal/drivers/secret/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/agent/universal/drivers/secret/backend/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/agent/universal/drivers/secret/backend/cert.py +159 -0
- exordos_core-0.0.7/exordos_core/agent/universal/drivers/secret/backend/db.py +132 -0
- exordos_core-0.0.7/exordos_core/agent/universal/drivers/secret/cert.py +51 -0
- exordos_core-0.0.7/exordos_core/agent/universal/drivers/secret/dm/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/agent/universal/drivers/secret/dm/models.py +121 -0
- exordos_core-0.0.7/exordos_core/agent/universal/drivers/secret/password.py +43 -0
- exordos_core-0.0.7/exordos_core/boot_api/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/boot_api/api/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/boot_api/api/app.py +81 -0
- exordos_core-0.0.7/exordos_core/boot_api/api/controllers.py +71 -0
- exordos_core-0.0.7/exordos_core/boot_api/api/packers.py +52 -0
- exordos_core-0.0.7/exordos_core/boot_api/api/routes.py +51 -0
- exordos_core-0.0.7/exordos_core/boot_api/api/versions.py +17 -0
- exordos_core-0.0.7/exordos_core/boot_api/dm/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/boot_api/dm/models.py +77 -0
- exordos_core-0.0.7/exordos_core/bootstrap/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/bootstrap/defaults.py +596 -0
- exordos_core-0.0.7/exordos_core/cmd/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/cmd/boot_api.py +109 -0
- exordos_core-0.0.7/exordos_core/cmd/bootstrap.py +376 -0
- exordos_core-0.0.7/exordos_core/cmd/bootstrap_templates.py +224 -0
- exordos_core-0.0.7/exordos_core/cmd/elements_inventory.py +89 -0
- exordos_core-0.0.7/exordos_core/cmd/gservice.py +65 -0
- exordos_core-0.0.7/exordos_core/cmd/orch_api.py +89 -0
- exordos_core-0.0.7/exordos_core/cmd/status_api.py +97 -0
- exordos_core-0.0.7/exordos_core/cmd/user_api.py +130 -0
- exordos_core-0.0.7/exordos_core/common/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/common/api/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/common/api/middlewares/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/common/api/middlewares/errors.py +44 -0
- exordos_core-0.0.7/exordos_core/common/config.py +49 -0
- exordos_core-0.0.7/exordos_core/common/constants.py +86 -0
- exordos_core-0.0.7/exordos_core/common/contexts.py +66 -0
- exordos_core-0.0.7/exordos_core/common/dm/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/common/dm/models.py +52 -0
- exordos_core-0.0.7/exordos_core/common/dm/targets.py +102 -0
- exordos_core-0.0.7/exordos_core/common/exceptions.py +48 -0
- exordos_core-0.0.7/exordos_core/common/log.py +84 -0
- exordos_core-0.0.7/exordos_core/common/system.py +90 -0
- exordos_core-0.0.7/exordos_core/common/utils.py +109 -0
- exordos_core-0.0.7/exordos_core/compute/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/compute/agents/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/compute/agents/universal/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/compute/agents/universal/drivers/pool.py +788 -0
- exordos_core-0.0.7/exordos_core/compute/builders/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/compute/builders/node.py +231 -0
- exordos_core-0.0.7/exordos_core/compute/builders/node_set.py +169 -0
- exordos_core-0.0.7/exordos_core/compute/builders/pool.py +712 -0
- exordos_core-0.0.7/exordos_core/compute/builders/volume.py +159 -0
- exordos_core-0.0.7/exordos_core/compute/constants.py +127 -0
- exordos_core-0.0.7/exordos_core/compute/dm/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/compute/dm/models.py +889 -0
- exordos_core-0.0.7/exordos_core/compute/node_set/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/compute/node_set/dm/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/compute/node_set/dm/models.py +87 -0
- exordos_core-0.0.7/exordos_core/compute/pool/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/compute/pool/dm/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/compute/pool/dm/models.py +295 -0
- exordos_core-0.0.7/exordos_core/compute/pool/drivers/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/compute/pool/drivers/base.py +259 -0
- exordos_core-0.0.7/exordos_core/compute/pool/drivers/exceptions.py +63 -0
- exordos_core-0.0.7/exordos_core/compute/pool/drivers/libvirt.py +1400 -0
- exordos_core-0.0.7/exordos_core/compute/scheduler/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/compute/scheduler/driver/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/compute/scheduler/driver/base.py +83 -0
- exordos_core-0.0.7/exordos_core/compute/scheduler/driver/filters/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/compute/scheduler/driver/filters/affinity.py +69 -0
- exordos_core-0.0.7/exordos_core/compute/scheduler/driver/filters/available.py +52 -0
- exordos_core-0.0.7/exordos_core/compute/scheduler/driver/weighter/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/compute/scheduler/driver/weighter/relative.py +92 -0
- exordos_core-0.0.7/exordos_core/compute/scheduler/service.py +605 -0
- exordos_core-0.0.7/exordos_core/config/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/config/constants.py +34 -0
- exordos_core-0.0.7/exordos_core/config/dm/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/config/dm/models.py +201 -0
- exordos_core-0.0.7/exordos_core/config/service.py +354 -0
- exordos_core-0.0.7/exordos_core/dns_sync/__init__.py +1 -0
- exordos_core-0.0.7/exordos_core/dns_sync/service.py +489 -0
- exordos_core-0.0.7/exordos_core/elements/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/elements/builders/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/elements/builders/service.py +99 -0
- exordos_core-0.0.7/exordos_core/elements/constants.py +24 -0
- exordos_core-0.0.7/exordos_core/elements/dm/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/elements/dm/models.py +1277 -0
- exordos_core-0.0.7/exordos_core/elements/dm/res_models.py +82 -0
- exordos_core-0.0.7/exordos_core/elements/dm/utils.py +371 -0
- exordos_core-0.0.7/exordos_core/elements/services/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/elements/services/builders.py +79 -0
- exordos_core-0.0.7/exordos_core/events/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/events/constants.py +18 -0
- exordos_core-0.0.7/exordos_core/events/payloads.py +59 -0
- exordos_core-0.0.7/exordos_core/gservice/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/gservice/service.py +238 -0
- exordos_core-0.0.7/exordos_core/janitor/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/janitor/service.py +56 -0
- exordos_core-0.0.7/exordos_core/network/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/network/dhcp/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/network/dhcp/isc.py +172 -0
- exordos_core-0.0.7/exordos_core/network/dm/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/network/dm/models.py +40 -0
- exordos_core-0.0.7/exordos_core/network/driver/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/network/driver/base.py +108 -0
- exordos_core-0.0.7/exordos_core/network/driver/flat.py +397 -0
- exordos_core-0.0.7/exordos_core/network/exceptions.py +25 -0
- exordos_core-0.0.7/exordos_core/network/ipam.py +200 -0
- exordos_core-0.0.7/exordos_core/network/lb/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/network/lb/builders/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/network/lb/builders/iaas.py +103 -0
- exordos_core-0.0.7/exordos_core/network/lb/builders/paas.py +107 -0
- exordos_core-0.0.7/exordos_core/network/lb/dm/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/network/lb/dm/models.py +177 -0
- exordos_core-0.0.7/exordos_core/network/service.py +336 -0
- exordos_core-0.0.7/exordos_core/orch_api/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/orch_api/api/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/orch_api/api/app.py +71 -0
- exordos_core-0.0.7/exordos_core/orch_api/api/controllers.py +22 -0
- exordos_core-0.0.7/exordos_core/orch_api/api/routes.py +29 -0
- exordos_core-0.0.7/exordos_core/orch_api/api/versions.py +17 -0
- exordos_core-0.0.7/exordos_core/secret/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/secret/constants.py +42 -0
- exordos_core-0.0.7/exordos_core/secret/dm/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/secret/dm/models.py +408 -0
- exordos_core-0.0.7/exordos_core/secret/service.py +659 -0
- exordos_core-0.0.7/exordos_core/secret/utils.py +94 -0
- exordos_core-0.0.7/exordos_core/status_api/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/status_api/api/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/status_api/api/app.py +71 -0
- exordos_core-0.0.7/exordos_core/status_api/api/controllers.py +22 -0
- exordos_core-0.0.7/exordos_core/status_api/api/routes.py +30 -0
- exordos_core-0.0.7/exordos_core/status_api/api/versions.py +17 -0
- exordos_core-0.0.7/exordos_core/telemetry/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/telemetry/service.py +296 -0
- exordos_core-0.0.7/exordos_core/tests/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/tests/functional/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/tests/functional/conftest.py +933 -0
- exordos_core-0.0.7/exordos_core/tests/functional/consts.py +29 -0
- exordos_core-0.0.7/exordos_core/tests/functional/manifests/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/tests/functional/manifests/examples/invalid_exports.yaml +27 -0
- exordos_core-0.0.7/exordos_core/tests/functional/manifests/examples/invalid_imports.yaml +32 -0
- exordos_core-0.0.7/exordos_core/tests/functional/manifests/examples/invalid_resource.yaml +22 -0
- exordos_core-0.0.7/exordos_core/tests/functional/manifests/test_validate.py +111 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/compute/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/compute/test_compute_boot_api.py +125 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/compute/test_node_set_api.py +263 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/compute/test_node_user_api.py +357 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/config/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/config/test_configs.py +241 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/em/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/em/test_em.py +150 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/base.py +23 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/test_clients.py +821 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/test_idp.py +259 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/test_organizations.py +332 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/test_permission_bindings.py +143 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/test_permissions.py +99 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/test_projects.py +288 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/test_reset_password.py +351 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/test_role_bindings.py +178 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/test_roles.py +100 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/test_security_rules.py +364 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/test_user_creation_security.py +195 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/iam/test_users.py +1109 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/secret/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/secret/test_certificates.py +208 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/secret/test_passwords.py +206 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/secret/test_ssh_keys.py +261 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/vs/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/tests/functional/restapi/vs/test_user_api.py +470 -0
- exordos_core-0.0.7/exordos_core/tests/functional/service/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/tests/functional/service/dns/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/tests/functional/service/dns/conftest.py +91 -0
- exordos_core-0.0.7/exordos_core/tests/functional/service/dns/test_pdns.py +223 -0
- exordos_core-0.0.7/exordos_core/tests/functional/service/test_config.py +323 -0
- exordos_core-0.0.7/exordos_core/tests/functional/service/test_elements.py +32 -0
- exordos_core-0.0.7/exordos_core/tests/functional/service/test_janitor.py +70 -0
- exordos_core-0.0.7/exordos_core/tests/functional/service/test_network.py +515 -0
- exordos_core-0.0.7/exordos_core/tests/functional/service/test_scheduler.py +406 -0
- exordos_core-0.0.7/exordos_core/tests/functional/service/test_secrets.py +742 -0
- exordos_core-0.0.7/exordos_core/tests/functional/service/test_vs_builder.py +235 -0
- exordos_core-0.0.7/exordos_core/tests/functional/stubs.py +60 -0
- exordos_core-0.0.7/exordos_core/tests/functional/utils.py +174 -0
- exordos_core-0.0.7/exordos_core/tests/manual/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/tests/manual/conftest.py +1019 -0
- exordos_core-0.0.7/exordos_core/tests/manual/consts.py +29 -0
- exordos_core-0.0.7/exordos_core/tests/manual/openapi/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/tests/manual/openapi/test_openapi.py +104 -0
- exordos_core-0.0.7/exordos_core/tests/manual/utils.py +174 -0
- exordos_core-0.0.7/exordos_core/tests/unit/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/tests/unit/compute/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/tests/unit/compute/test_ipam.py +112 -0
- exordos_core-0.0.7/exordos_core/tests/unit/compute/test_weighter.py +102 -0
- exordos_core-0.0.7/exordos_core/tests/unit/conftest.py +34 -0
- exordos_core-0.0.7/exordos_core/tests/unit/em/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/tests/unit/em/test_utils.py +205 -0
- exordos_core-0.0.7/exordos_core/tests/unit/user_api/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/tests/unit/user_api/iam/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/tests/unit/user_api/iam/dm/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/tests/unit/user_api/iam/dm/test_types.py +126 -0
- exordos_core-0.0.7/exordos_core/user_api/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/user_api/api/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/user_api/api/app.py +85 -0
- exordos_core-0.0.7/exordos_core/user_api/api/controllers.py +30 -0
- exordos_core-0.0.7/exordos_core/user_api/api/middlewares.py +88 -0
- exordos_core-0.0.7/exordos_core/user_api/api/routes.py +54 -0
- exordos_core-0.0.7/exordos_core/user_api/api/versions.py +17 -0
- exordos_core-0.0.7/exordos_core/user_api/compute/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/user_api/compute/api/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/user_api/compute/api/controllers.py +203 -0
- exordos_core-0.0.7/exordos_core/user_api/compute/api/routes.py +86 -0
- exordos_core-0.0.7/exordos_core/user_api/compute/dm/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/user_api/compute/dm/models.py +30 -0
- exordos_core-0.0.7/exordos_core/user_api/config/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/user_api/config/api/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/user_api/config/api/controllers.py +46 -0
- exordos_core-0.0.7/exordos_core/user_api/config/api/routes.py +34 -0
- exordos_core-0.0.7/exordos_core/user_api/dns/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/user_api/dns/api/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/user_api/dns/api/controllers.py +71 -0
- exordos_core-0.0.7/exordos_core/user_api/dns/api/routes.py +42 -0
- exordos_core-0.0.7/exordos_core/user_api/dns/dm/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/user_api/dns/dm/models.py +240 -0
- exordos_core-0.0.7/exordos_core/user_api/em/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/user_api/em/api/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/user_api/em/api/controllers.py +228 -0
- exordos_core-0.0.7/exordos_core/user_api/em/api/routes.py +146 -0
- exordos_core-0.0.7/exordos_core/user_api/iam/api/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/user_api/iam/api/controllers.py +1027 -0
- exordos_core-0.0.7/exordos_core/user_api/iam/api/openapi_specs.py +326 -0
- exordos_core-0.0.7/exordos_core/user_api/iam/api/routes.py +293 -0
- exordos_core-0.0.7/exordos_core/user_api/iam/clients/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/user_api/iam/clients/idp.py +35 -0
- exordos_core-0.0.7/exordos_core/user_api/iam/clients/keycloak.py +49 -0
- exordos_core-0.0.7/exordos_core/user_api/iam/constants.py +268 -0
- exordos_core-0.0.7/exordos_core/user_api/iam/dm/models.py +1959 -0
- exordos_core-0.0.7/exordos_core/user_api/iam/dm/types.py +77 -0
- exordos_core-0.0.7/exordos_core/user_api/iam/drivers.py +59 -0
- exordos_core-0.0.7/exordos_core/user_api/iam/exceptions.py +292 -0
- exordos_core-0.0.7/exordos_core/user_api/network/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/user_api/network/api/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/user_api/network/api/controllers.py +113 -0
- exordos_core-0.0.7/exordos_core/user_api/network/api/routes.py +57 -0
- exordos_core-0.0.7/exordos_core/user_api/network/dm/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/user_api/network/dm/models.py +592 -0
- exordos_core-0.0.7/exordos_core/user_api/secret/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/user_api/secret/api/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/user_api/secret/api/controllers.py +151 -0
- exordos_core-0.0.7/exordos_core/user_api/secret/api/routes.py +55 -0
- exordos_core-0.0.7/exordos_core/user_api/security/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/user_api/security/api/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/user_api/security/api/controllers.py +38 -0
- exordos_core-0.0.7/exordos_core/user_api/security/api/routes.py +34 -0
- exordos_core-0.0.7/exordos_core/user_api/security/dm/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/user_api/security/dm/models.py +314 -0
- exordos_core-0.0.7/exordos_core/user_api/security/exceptions.py +21 -0
- exordos_core-0.0.7/exordos_core/user_api/vs/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/user_api/vs/api/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/user_api/vs/api/controllers.py +141 -0
- exordos_core-0.0.7/exordos_core/user_api/vs/api/routes.py +71 -0
- exordos_core-0.0.7/exordos_core/version.py +23 -0
- exordos_core-0.0.7/exordos_core/vs/builders/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/vs/builders/service.py +150 -0
- exordos_core-0.0.7/exordos_core/vs/dm/__init__.py +0 -0
- exordos_core-0.0.7/exordos_core/vs/dm/models.py +345 -0
- exordos_core-0.0.7/exordos_core.egg-info/PKG-INFO +113 -0
- exordos_core-0.0.7/exordos_core.egg-info/SOURCES.txt +445 -0
- exordos_core-0.0.7/exordos_core.egg-info/dependency_links.txt +1 -0
- exordos_core-0.0.7/exordos_core.egg-info/entry_points.txt +25 -0
- exordos_core-0.0.7/exordos_core.egg-info/requires.txt +48 -0
- exordos_core-0.0.7/exordos_core.egg-info/top_level.txt +7 -0
- exordos_core-0.0.7/genesis/genesis.yaml +71 -0
- exordos_core-0.0.7/genesis/images/bootstrap.sh +362 -0
- exordos_core-0.0.7/genesis/images/install.sh +253 -0
- exordos_core-0.0.7/genesis/manifests/core-node-set-example.yaml.j2 +35 -0
- exordos_core-0.0.7/genesis/manifests/core-service-example.yaml.j2 +37 -0
- exordos_core-0.0.7/genesis/manifests/core.yaml.j2 +253 -0
- exordos_core-0.0.7/genesis/manifests/ecosystem_realm.yaml.j2 +65 -0
- exordos_core-0.0.7/genesis/manifests/examples/core.element.yaml +166 -0
- exordos_core-0.0.7/genesis/manifests/examples/load_balancer.yaml +193 -0
- exordos_core-0.0.7/genesis/manifests/examples/values-store-base.yaml +62 -0
- exordos_core-0.0.7/genesis/manifests/specification/base_spec.yaml +75 -0
- exordos_core-0.0.7/genesis/manifests/specification/full_spec.yaml +4232 -0
- exordos_core-0.0.7/logo_black.svg +5 -0
- exordos_core-0.0.7/logo_white.svg +5 -0
- exordos_core-0.0.7/migrations/0000-init-compute-tables-0234eb.py +139 -0
- exordos_core-0.0.7/migrations/0000-init-config-tables-9a7b58.py +42 -0
- exordos_core-0.0.7/migrations/0000-init-discovery-tables-907a68.py +42 -0
- exordos_core-0.0.7/migrations/0000-init-elements-tables-fe8bdb.py +42 -0
- exordos_core-0.0.7/migrations/0000-init-iam-tables-9c9153.py +443 -0
- exordos_core-0.0.7/migrations/0000-init-values-and-profiles-tables-0a61dc.py +42 -0
- exordos_core-0.0.7/migrations/0000-root-d34de1.py +39 -0
- exordos_core-0.0.7/migrations/0001-init-all-tables-f47bad.py +47 -0
- exordos_core-0.0.7/migrations/0002-add-volumes-tables-a6972c.py +114 -0
- exordos_core-0.0.7/migrations/0003-Organization-Roles-4b584d.py +114 -0
- exordos_core-0.0.7/migrations/0004-fix_typoes-31d9b2.py +64 -0
- exordos_core-0.0.7/migrations/0005-add-organization-info-4fac91.py +55 -0
- exordos_core-0.0.7/migrations/0006-add-gc-organization-678510.py +63 -0
- exordos_core-0.0.7/migrations/0007-add-default-roles-73f4c4.py +86 -0
- exordos_core-0.0.7/migrations/0008-add-iam-permissions-d81bba.py +169 -0
- exordos_core-0.0.7/migrations/0009-node-builder-entities-0d8f66.py +127 -0
- exordos_core-0.0.7/migrations/0010-image-for-machine-31471a.py +56 -0
- exordos_core-0.0.7/migrations/0011-add-surname-and-phone-ea974b.py +54 -0
- exordos_core-0.0.7/migrations/0012-compute-permissions-aac851.py +123 -0
- exordos_core-0.0.7/migrations/0013-add-ttl-to-token-2b8e3e.py +51 -0
- exordos_core-0.0.7/migrations/0014-network-ipam-067981.py +209 -0
- exordos_core-0.0.7/migrations/0015-add-email-confirmation-info-8b38d3.py +62 -0
- exordos_core-0.0.7/migrations/0016-add-permissions-to-all-iam-resources-3b82c6.py +199 -0
- exordos_core-0.0.7/migrations/0017-init-configs-c3bbc6.py +186 -0
- exordos_core-0.0.7/migrations/0018-add-elements-76bca4.py +248 -0
- exordos_core-0.0.7/migrations/0019-init-dns-40a307.py +135 -0
- exordos_core-0.0.7/migrations/0020-init-secret-a643b1.py +97 -0
- exordos_core-0.0.7/migrations/0021-dns-permissions-7adac7.py +127 -0
- exordos_core-0.0.7/migrations/0022-secret-certs-d340e8.py +90 -0
- exordos_core-0.0.7/migrations/0023-nullable_fio-c9cb3a.py +53 -0
- exordos_core-0.0.7/migrations/0024-user_confirmation_code_made_at-added-435e66.py +45 -0
- exordos_core-0.0.7/migrations/0025-secret-ssh-keys-ad3fad.py +73 -0
- exordos_core-0.0.7/migrations/0026-case-insensitive-users-name-index-41f4b9.py +49 -0
- exordos_core-0.0.7/migrations/0027-email-lowercase-unique-constraint-98a7bb.py +49 -0
- exordos_core-0.0.7/migrations/0028-add-api-version-to-manifest-8de907.py +63 -0
- exordos_core-0.0.7/migrations/0029-sdk-0-7-0-migration-c2c52a.py +79 -0
- exordos_core-0.0.7/migrations/0030-compute-node-sets-b1869c.py +130 -0
- exordos_core-0.0.7/migrations/0031-node-set-permissions-2de46e.py +102 -0
- exordos_core-0.0.7/migrations/0032-project-id-dns-records-1ca60d.py +70 -0
- exordos_core-0.0.7/migrations/0033-em-ua-status-check-5be89c.py +133 -0
- exordos_core-0.0.7/migrations/0034-add-export-adn-import-resources-a12854.py +108 -0
- exordos_core-0.0.7/migrations/0035-dummy-placement-e6d5dc.py +181 -0
- exordos_core-0.0.7/migrations/0036-init-services-741b72.py +114 -0
- exordos_core-0.0.7/migrations/0037-manifest-indexes-815825.py +94 -0
- exordos_core-0.0.7/migrations/0038-init-lb-e88603.py +126 -0
- exordos_core-0.0.7/migrations/0039-add-oidc-structures-e5d2a8.py +196 -0
- exordos_core-0.0.7/migrations/0040-secret-rsa-keys-2f3c1a.py +71 -0
- exordos_core-0.0.7/migrations/0041-remove-idp-clientid-secret-18d7c4.py +83 -0
- exordos_core-0.0.7/migrations/0042-compute-ua-integration-4bd866.py +456 -0
- exordos_core-0.0.7/migrations/0043-add-user-source-4f5e1f.py +58 -0
- exordos_core-0.0.7/migrations/0044-add-lb-ext-source-ca08ef.py +57 -0
- exordos_core-0.0.7/migrations/0045-add-security-rules-7c2f6d.py +74 -0
- exordos_core-0.0.7/migrations/0046-init-vs-f5aaa2.py +149 -0
- exordos_core-0.0.7/migrations/0047-sdk-1-3-0-migration-33fdc9.py +55 -0
- exordos_core-0.0.7/migrations/0048-iam-nonce-optional-c6e9f6.py +58 -0
- exordos_core-0.0.7/migrations/0049-lb-add-proxy-protocol-from-ef8f58.py +57 -0
- exordos_core-0.0.7/migrations/0050-subnet-source-6c071d.py +58 -0
- exordos_core-0.0.7/migrations/0051-sdk-1-5-0-migration-eea262.py +55 -0
- exordos_core-0.0.7/migrations/0052-iam-user-custom-props-bc80b5.py +57 -0
- exordos_core-0.0.7/migrations/0053-lb-node-secret-set-permissions-11c9a8.py +129 -0
- exordos_core-0.0.7/migrations/0054-iam-idp-callback-kind-3a6c1b.py +90 -0
- exordos_core-0.0.7/migrations/0055-iam-user-type-8d7f2a.py +132 -0
- exordos_core-0.0.7/migrations/0056-iam-user-create-perm-3e0dc5.py +83 -0
- exordos_core-0.0.7/migrations/0057-add-project-id-requirements-to-element-3bc138.py +61 -0
- exordos_core-0.0.7/migrations/0058-copy-iam-users-target-to-actual-resources-a1b2c3.py +83 -0
- exordos_core-0.0.7/migrations/0059-dns-sync-to-ecosystem-secret-len-a7b3c1.py +74 -0
- exordos_core-0.0.7/migrations/0060-openapi-spec_e-m-link-02ef0a.py +74 -0
- exordos_core-0.0.7/migrations/MANUAL-boot-network-40b1ae.py +170 -0
- exordos_core-0.0.7/migrations/MANUAL-computeV2-e26427.py +339 -0
- exordos_core-0.0.7/migrations/MANUAL-fix-usernames-6b042b.py +51 -0
- exordos_core-0.0.7/mkdocs.yml +102 -0
- exordos_core-0.0.7/pyproject.toml +237 -0
- exordos_core-0.0.7/setup.cfg +4 -0
- exordos_core-0.0.7/tools/convert_multiline_to_oneline.py +23 -0
- exordos_core-0.0.7/tools/fetch_keycloak_users.py +208 -0
- exordos_core-0.0.7/tools/import_keycloak_users_to_iam.py +373 -0
- exordos_core-0.0.7/tox.ini +99 -0
- exordos_core-0.0.7/uv.lock +3456 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
name: build
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
|
|
6
|
+
env:
|
|
7
|
+
ARTIFACTS_PATH: artifacts
|
|
8
|
+
PROJECT_NAME: exordos_core
|
|
9
|
+
REPO_ENDPOINT_PUT: http://10.20.0.1:8082
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
Build:
|
|
13
|
+
runs-on: self-hosted
|
|
14
|
+
if : ${{ github.actor != 'dependabot[bot]' }}
|
|
15
|
+
strategy:
|
|
16
|
+
fail-fast: true
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v6
|
|
19
|
+
- name: Build Exordos Core
|
|
20
|
+
env:
|
|
21
|
+
PUSH_CFG: ${{ secrets.PUSH_CFG }}
|
|
22
|
+
run: |
|
|
23
|
+
set -eux
|
|
24
|
+
mkdir -p ${ARTIFACTS_PATH}
|
|
25
|
+
|
|
26
|
+
source ~/.profile
|
|
27
|
+
VERSION="$(genesis get-version .)"
|
|
28
|
+
|
|
29
|
+
# Build Exordos Core
|
|
30
|
+
genesis build $(pwd) --inventory
|
|
31
|
+
|
|
32
|
+
# Decode and write the push configuration
|
|
33
|
+
echo "$PUSH_CFG" | base64 -d > genesis/genesis.push.yaml
|
|
34
|
+
genesis push -c genesis/genesis.push.yaml -t local -f --latest
|
|
35
|
+
|
|
36
|
+
# Upload the VM image
|
|
37
|
+
gzip -k output/exordos-core.raw -c | \
|
|
38
|
+
curl -X PUT -T - "$REPO_ENDPOINT_PUT/${PROJECT_NAME}/${VERSION}/exordos-core.raw.gz"
|
|
39
|
+
|
|
40
|
+
# Temporary upload step is done in the build script
|
|
41
|
+
echo "${VERSION}" > "${ARTIFACTS_PATH}/version.txt"
|
|
42
|
+
|
|
43
|
+
- name: Upload the build artifacts
|
|
44
|
+
uses: actions/upload-artifact@v7
|
|
45
|
+
with:
|
|
46
|
+
name: build_artifacts
|
|
47
|
+
path: artifacts/
|
|
48
|
+
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
name: Build GitHub Pages
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches:
|
|
5
|
+
- master
|
|
6
|
+
paths:
|
|
7
|
+
- 'docs/**'
|
|
8
|
+
- mkdocs.yml
|
|
9
|
+
workflow_dispatch:
|
|
10
|
+
permissions:
|
|
11
|
+
contents: write
|
|
12
|
+
pages: write
|
|
13
|
+
id-token: write
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
build_mkdocs:
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
|
|
19
|
+
steps:
|
|
20
|
+
- name: Checkout code
|
|
21
|
+
uses: actions/checkout@v6
|
|
22
|
+
with:
|
|
23
|
+
fetch-depth: 0
|
|
24
|
+
- uses: actions/setup-python@v6
|
|
25
|
+
with:
|
|
26
|
+
python-version: 3.12
|
|
27
|
+
- name: Install requirements
|
|
28
|
+
run: sudo apt update && sudo apt install --yes libev-dev libvirt-dev
|
|
29
|
+
- name: Install uv
|
|
30
|
+
uses: astral-sh/setup-uv@v7
|
|
31
|
+
- name: Install tox-uv
|
|
32
|
+
run: uv tool install tox --with tox-uv
|
|
33
|
+
- name: Deploy docs to GitHub Pages
|
|
34
|
+
run: tox -e docs-deploy
|
|
35
|
+
|
|
36
|
+
deploy_mkdocs:
|
|
37
|
+
needs: build_mkdocs
|
|
38
|
+
environment:
|
|
39
|
+
name: github-pages
|
|
40
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
41
|
+
runs-on: ubuntu-latest
|
|
42
|
+
steps:
|
|
43
|
+
- name: Checkout
|
|
44
|
+
uses: actions/checkout@v6
|
|
45
|
+
with:
|
|
46
|
+
ref: gh-pages
|
|
47
|
+
- name: Setup Pages
|
|
48
|
+
uses: actions/configure-pages@v6
|
|
49
|
+
- name: Upload artifact
|
|
50
|
+
uses: actions/upload-pages-artifact@v5
|
|
51
|
+
with:
|
|
52
|
+
path: '.'
|
|
53
|
+
- name: Deploy to GitHub Pages
|
|
54
|
+
id: deployment
|
|
55
|
+
uses: actions/deploy-pages@v5
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
name: Build elements inventory
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
schedule:
|
|
5
|
+
- cron: '5 * * * *'
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
Build:
|
|
13
|
+
runs-on: self-hosted
|
|
14
|
+
strategy:
|
|
15
|
+
fail-fast: true
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v6
|
|
18
|
+
with:
|
|
19
|
+
fetch-depth: 30
|
|
20
|
+
- name: Build elements inventory
|
|
21
|
+
run: python3 exordos_core/cmd/elements_inventory.py
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
name: Markdown Lint
|
|
2
|
+
description: Lint Markdown files
|
|
3
|
+
|
|
4
|
+
on:
|
|
5
|
+
push:
|
|
6
|
+
paths:
|
|
7
|
+
- 'docs/**'
|
|
8
|
+
- mkdocs.yml
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
lint:
|
|
12
|
+
runs-on: ubuntu-24.04
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v6
|
|
15
|
+
with:
|
|
16
|
+
fetch-depth: 0
|
|
17
|
+
- uses: tj-actions/changed-files@v47
|
|
18
|
+
id: changed-files
|
|
19
|
+
with:
|
|
20
|
+
files: '**/*.md'
|
|
21
|
+
separator: ","
|
|
22
|
+
- uses: DavidAnson/markdownlint-cli2-action@v23
|
|
23
|
+
if: steps.changed-files.outputs.any_changed == 'true'
|
|
24
|
+
with:
|
|
25
|
+
globs: ${{ steps.changed-files.outputs.all_changed_files }}
|
|
26
|
+
separator: ","
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
name: Publish Python 🐍 distribution 📦 to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- '*'
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
build:
|
|
10
|
+
name: Build distribution 📦
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v6
|
|
15
|
+
with:
|
|
16
|
+
persist-credentials: false
|
|
17
|
+
- name: Set up Python
|
|
18
|
+
uses: actions/setup-python@v6
|
|
19
|
+
with:
|
|
20
|
+
python-version: "3.12"
|
|
21
|
+
- name: Install pypa/build
|
|
22
|
+
run: >-
|
|
23
|
+
python3 -m
|
|
24
|
+
pip install
|
|
25
|
+
build
|
|
26
|
+
--user
|
|
27
|
+
- name: Build a binary wheel and a source tarball
|
|
28
|
+
run: python3 -m build
|
|
29
|
+
- name: Store the distribution packages
|
|
30
|
+
uses: actions/upload-artifact@v7
|
|
31
|
+
with:
|
|
32
|
+
name: python-package-distributions
|
|
33
|
+
path: dist/
|
|
34
|
+
|
|
35
|
+
publish-to-pypi:
|
|
36
|
+
name: >-
|
|
37
|
+
Publish Python 🐍 distribution 📦 to PyPI
|
|
38
|
+
needs:
|
|
39
|
+
- build
|
|
40
|
+
runs-on: ubuntu-latest
|
|
41
|
+
environment:
|
|
42
|
+
name: pypi
|
|
43
|
+
url: https://pypi.org/p/exordos-core
|
|
44
|
+
permissions:
|
|
45
|
+
id-token: write # IMPORTANT: mandatory for trusted publishing
|
|
46
|
+
|
|
47
|
+
steps:
|
|
48
|
+
- name: Download all the dists
|
|
49
|
+
uses: actions/download-artifact@v8
|
|
50
|
+
with:
|
|
51
|
+
name: python-package-distributions
|
|
52
|
+
path: dist/
|
|
53
|
+
- name: Publish distribution 📦 to PyPI
|
|
54
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
55
|
+
|
|
56
|
+
github-release:
|
|
57
|
+
name: >-
|
|
58
|
+
Sign the Python 🐍 distribution 📦 with Sigstore
|
|
59
|
+
and upload them to GitHub Release
|
|
60
|
+
needs:
|
|
61
|
+
- publish-to-pypi
|
|
62
|
+
runs-on: ubuntu-latest
|
|
63
|
+
|
|
64
|
+
permissions:
|
|
65
|
+
contents: write # IMPORTANT: mandatory for making GitHub Releases
|
|
66
|
+
id-token: write # IMPORTANT: mandatory for sigstore
|
|
67
|
+
|
|
68
|
+
steps:
|
|
69
|
+
- name: Download all the dists
|
|
70
|
+
uses: actions/download-artifact@v8
|
|
71
|
+
with:
|
|
72
|
+
name: python-package-distributions
|
|
73
|
+
path: dist/
|
|
74
|
+
- name: Sign the dists with Sigstore
|
|
75
|
+
uses: sigstore/gh-action-sigstore-python@v3.3.0
|
|
76
|
+
with:
|
|
77
|
+
inputs: >-
|
|
78
|
+
./dist/*.tar.gz
|
|
79
|
+
./dist/*.whl
|
|
80
|
+
- name: Create GitHub Release
|
|
81
|
+
env:
|
|
82
|
+
GITHUB_TOKEN: ${{ github.token }}
|
|
83
|
+
run: >-
|
|
84
|
+
gh release create
|
|
85
|
+
"$GITHUB_REF_NAME"
|
|
86
|
+
--repo "$GITHUB_REPOSITORY"
|
|
87
|
+
--notes ""
|
|
88
|
+
- name: Upload artifact signatures to GitHub Release
|
|
89
|
+
env:
|
|
90
|
+
GITHUB_TOKEN: ${{ github.token }}
|
|
91
|
+
# Upload to GitHub Release using the `gh` CLI.
|
|
92
|
+
# `dist/` contains the built packages, and the
|
|
93
|
+
# sigstore-produced signatures and certificates.
|
|
94
|
+
run: >-
|
|
95
|
+
gh release upload
|
|
96
|
+
"$GITHUB_REF_NAME" dist/**
|
|
97
|
+
--repo "$GITHUB_REPOSITORY"
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
name: tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
paths-ignore:
|
|
6
|
+
- 'docs/**'
|
|
7
|
+
- 'mkdocs.yml'
|
|
8
|
+
- '.markdownlint.yaml'
|
|
9
|
+
pull_request:
|
|
10
|
+
paths-ignore:
|
|
11
|
+
- 'docs/**'
|
|
12
|
+
- 'mkdocs.yml'
|
|
13
|
+
- '.markdownlint.yaml'
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
Lint:
|
|
17
|
+
runs-on: ubuntu-24.04
|
|
18
|
+
strategy:
|
|
19
|
+
fail-fast: true
|
|
20
|
+
matrix:
|
|
21
|
+
python-version: [ "3.12" ]
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@v6
|
|
24
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
25
|
+
uses: actions/setup-python@v6
|
|
26
|
+
with:
|
|
27
|
+
python-version: ${{ matrix.python-version }}
|
|
28
|
+
- name: Install requirements
|
|
29
|
+
run: sudo apt update && sudo apt install --yes libev-dev libvirt-dev
|
|
30
|
+
- name: Install uv
|
|
31
|
+
uses: astral-sh/setup-uv@v7
|
|
32
|
+
- name: Install tox-uv
|
|
33
|
+
run: uv tool install tox --with tox-uv
|
|
34
|
+
- name: ruff
|
|
35
|
+
run: |
|
|
36
|
+
tox -e ruff-check
|
|
37
|
+
Tests:
|
|
38
|
+
runs-on: ubuntu-24.04
|
|
39
|
+
strategy:
|
|
40
|
+
fail-fast: true
|
|
41
|
+
matrix:
|
|
42
|
+
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
|
|
43
|
+
services:
|
|
44
|
+
postgresql:
|
|
45
|
+
image: postgres:latest
|
|
46
|
+
# Provide the password for postgres
|
|
47
|
+
env:
|
|
48
|
+
POSTGRES_DB: exordos_core
|
|
49
|
+
POSTGRES_HOST_AUTH_METHOD: trust
|
|
50
|
+
POSTGRES_USER: exordos_core
|
|
51
|
+
POSTGRES_PASSWORD: exordos_core
|
|
52
|
+
POSTGRES_INITDB_ARGS: "-c max_connections=100"
|
|
53
|
+
# Set health checks to wait until postgres has started
|
|
54
|
+
options: >-
|
|
55
|
+
--health-cmd pg_isready
|
|
56
|
+
--health-interval 10s
|
|
57
|
+
--health-timeout 5s
|
|
58
|
+
--health-retries 5
|
|
59
|
+
ports:
|
|
60
|
+
# Maps tcp port 5432 on service container to the host
|
|
61
|
+
- 5432:5432
|
|
62
|
+
steps:
|
|
63
|
+
- uses: actions/checkout@v6
|
|
64
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
65
|
+
uses: actions/setup-python@v6
|
|
66
|
+
with:
|
|
67
|
+
python-version: ${{ matrix.python-version }}
|
|
68
|
+
- name: Install dependencies
|
|
69
|
+
run: sudo apt update && sudo apt install --yes libev-dev libvirt-dev pdns-server pdns-backend-pgsql
|
|
70
|
+
- name: Install uv
|
|
71
|
+
uses: astral-sh/setup-uv@v7
|
|
72
|
+
- name: Install tox-uv
|
|
73
|
+
run: uv tool install tox --with tox-uv
|
|
74
|
+
- name: Unit tests
|
|
75
|
+
run: |
|
|
76
|
+
tox -e ${{ matrix.python-version }}
|
|
77
|
+
- name: Functional tests
|
|
78
|
+
env:
|
|
79
|
+
DATABASE_URI: "postgresql://exordos_core:exordos_core@localhost:5432/exordos_core"
|
|
80
|
+
run: |
|
|
81
|
+
tox -e ${{ matrix.python-version }}-functional
|
|
82
|
+
Coverage:
|
|
83
|
+
runs-on: ubuntu-24.04
|
|
84
|
+
strategy:
|
|
85
|
+
fail-fast: true
|
|
86
|
+
matrix:
|
|
87
|
+
python-version: ["3.12"]
|
|
88
|
+
steps:
|
|
89
|
+
- uses: actions/checkout@v6
|
|
90
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
91
|
+
uses: actions/setup-python@v6
|
|
92
|
+
with:
|
|
93
|
+
python-version: ${{ matrix.python-version }}
|
|
94
|
+
- name: Install dependencies
|
|
95
|
+
run: sudo apt update && sudo apt install --yes libev-dev libvirt-dev
|
|
96
|
+
- name: Install uv
|
|
97
|
+
uses: astral-sh/setup-uv@v7
|
|
98
|
+
- name: Install tox-uv
|
|
99
|
+
run: uv tool install tox --with tox-uv
|
|
100
|
+
- name: Coverage
|
|
101
|
+
run: |
|
|
102
|
+
tox -e begin,${{ matrix.python-version }},end
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# editors
|
|
10
|
+
*~
|
|
11
|
+
|
|
12
|
+
# IDE
|
|
13
|
+
.idea/
|
|
14
|
+
.vscode
|
|
15
|
+
.kilocode/
|
|
16
|
+
.kilocodemodes
|
|
17
|
+
.roo/
|
|
18
|
+
|
|
19
|
+
# Distribution / packaging
|
|
20
|
+
.Python
|
|
21
|
+
build/
|
|
22
|
+
output/
|
|
23
|
+
develop-eggs/
|
|
24
|
+
dist/
|
|
25
|
+
deps/
|
|
26
|
+
docker/common/bin
|
|
27
|
+
downloads/
|
|
28
|
+
eggs/
|
|
29
|
+
.eggs/
|
|
30
|
+
lib/
|
|
31
|
+
lib64/
|
|
32
|
+
parts/
|
|
33
|
+
sdist/
|
|
34
|
+
var/
|
|
35
|
+
wheels/
|
|
36
|
+
*.egg-info/
|
|
37
|
+
.installed.cfg
|
|
38
|
+
*.egg
|
|
39
|
+
MANIFEST
|
|
40
|
+
AUTHORS
|
|
41
|
+
ChangeLog
|
|
42
|
+
cover/
|
|
43
|
+
version.txt
|
|
44
|
+
etc/exordos_core/exordos_core.d/*.conf
|
|
45
|
+
etc/*/*.local
|
|
46
|
+
|
|
47
|
+
# OS
|
|
48
|
+
.DS_Store
|
|
49
|
+
|
|
50
|
+
# PyInstaller
|
|
51
|
+
# Usually these files are written by a python script from a template
|
|
52
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
53
|
+
*.manifest
|
|
54
|
+
*.spec
|
|
55
|
+
|
|
56
|
+
# Installer logs
|
|
57
|
+
pip-log.txt
|
|
58
|
+
pip-delete-this-directory.txt
|
|
59
|
+
|
|
60
|
+
# Unit test / coverage reports
|
|
61
|
+
htmlcov/
|
|
62
|
+
.tox/
|
|
63
|
+
.tox
|
|
64
|
+
.coverage
|
|
65
|
+
.coverage.*
|
|
66
|
+
.cache
|
|
67
|
+
nosetests.xml
|
|
68
|
+
coverage.xml
|
|
69
|
+
*.cover
|
|
70
|
+
.hypothesis/
|
|
71
|
+
.pytest_cache/
|
|
72
|
+
.testrepository/
|
|
73
|
+
|
|
74
|
+
# Translations
|
|
75
|
+
*.mo
|
|
76
|
+
*.pot
|
|
77
|
+
|
|
78
|
+
# Django stuff:
|
|
79
|
+
*.log
|
|
80
|
+
local_settings.py
|
|
81
|
+
db.sqlite3
|
|
82
|
+
|
|
83
|
+
# Flask stuff:
|
|
84
|
+
instance/
|
|
85
|
+
.webassets-cache
|
|
86
|
+
|
|
87
|
+
# Scrapy stuff:
|
|
88
|
+
.scrapy
|
|
89
|
+
|
|
90
|
+
# Sphinx documentation
|
|
91
|
+
docs/_build/
|
|
92
|
+
|
|
93
|
+
# PyBuilder
|
|
94
|
+
target/
|
|
95
|
+
|
|
96
|
+
# Jupyter Notebook
|
|
97
|
+
.ipynb_checkpoints
|
|
98
|
+
|
|
99
|
+
# pyenv
|
|
100
|
+
.python-version
|
|
101
|
+
|
|
102
|
+
# celery beat schedule file
|
|
103
|
+
celerybeat-schedule
|
|
104
|
+
|
|
105
|
+
# SageMath parsed files
|
|
106
|
+
*.sage.py
|
|
107
|
+
|
|
108
|
+
# Environments
|
|
109
|
+
.env
|
|
110
|
+
.venv
|
|
111
|
+
env/
|
|
112
|
+
venv/
|
|
113
|
+
ENV/
|
|
114
|
+
env.bak/
|
|
115
|
+
venv.bak/
|
|
116
|
+
|
|
117
|
+
# Spyder project settings
|
|
118
|
+
.spyderproject
|
|
119
|
+
.spyproject
|
|
120
|
+
|
|
121
|
+
# Rope project settings
|
|
122
|
+
.ropeproject
|
|
123
|
+
|
|
124
|
+
# mkdocs documentation
|
|
125
|
+
/site
|
|
126
|
+
|
|
127
|
+
# mypy
|
|
128
|
+
.mypy_cache/
|
|
129
|
+
|
|
130
|
+
# Documentation
|
|
131
|
+
docs/build
|
|
132
|
+
docs/source/*.png
|
|
133
|
+
|
|
134
|
+
# Vagrant
|
|
135
|
+
.vagrant/
|
|
136
|
+
|
|
137
|
+
# postgres
|
|
138
|
+
pgdata/
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
default: false
|
|
2
|
+
|
|
3
|
+
# MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md001.md
|
|
4
|
+
MD001: true
|
|
5
|
+
|
|
6
|
+
# MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md003.md
|
|
7
|
+
MD003:
|
|
8
|
+
style: "consistent"
|
|
9
|
+
|
|
10
|
+
# MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md004.md
|
|
11
|
+
MD004:
|
|
12
|
+
style: "consistent"
|
|
13
|
+
|
|
14
|
+
# MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md005.md
|
|
15
|
+
MD005: true
|
|
16
|
+
|
|
17
|
+
# MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md007.md
|
|
18
|
+
MD007:
|
|
19
|
+
indent: 4
|
|
20
|
+
|
|
21
|
+
# MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md009.md
|
|
22
|
+
MD009: true
|
|
23
|
+
|
|
24
|
+
# MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md010.md
|
|
25
|
+
MD010: true
|
|
26
|
+
|
|
27
|
+
# MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md011.md
|
|
28
|
+
MD011: true
|
|
29
|
+
|
|
30
|
+
# MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md012.md
|
|
31
|
+
MD012: true
|
|
32
|
+
|
|
33
|
+
# MD013/line-length Line length https://github.com/DavidAnson/markdownlint/blob/v0.40.0/doc/md013.md
|
|
34
|
+
MD013: false
|
|
35
|
+
|
|
36
|
+
# MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md014.md
|
|
37
|
+
MD014: true
|
|
38
|
+
|
|
39
|
+
# MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md018.md
|
|
40
|
+
MD018: true
|
|
41
|
+
|
|
42
|
+
# MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md019.md
|
|
43
|
+
MD019: true
|
|
44
|
+
|
|
45
|
+
# MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md020.md
|
|
46
|
+
MD020: true
|
|
47
|
+
|
|
48
|
+
# MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md021.md
|
|
49
|
+
MD021: true
|
|
50
|
+
|
|
51
|
+
# MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md022.md
|
|
52
|
+
MD022: true
|
|
53
|
+
|
|
54
|
+
# MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md023.md
|
|
55
|
+
MD023: true
|
|
56
|
+
|
|
57
|
+
# MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md024.md
|
|
58
|
+
MD024:
|
|
59
|
+
siblings_only: true
|
|
60
|
+
|
|
61
|
+
# MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md025.md
|
|
62
|
+
MD025: true
|
|
63
|
+
|
|
64
|
+
# MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md026.md
|
|
65
|
+
MD026: true
|
|
66
|
+
|
|
67
|
+
# MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md027.md
|
|
68
|
+
MD027: true
|
|
69
|
+
|
|
70
|
+
# MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md028.md
|
|
71
|
+
MD028: true
|
|
72
|
+
|
|
73
|
+
# MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md029.md
|
|
74
|
+
MD029:
|
|
75
|
+
style: "ordered"
|
|
76
|
+
|
|
77
|
+
# MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md030.md
|
|
78
|
+
MD030:
|
|
79
|
+
ul_single: 1
|
|
80
|
+
ol_single: 1
|
|
81
|
+
ul_multi: 1
|
|
82
|
+
ol_multi: 1
|
|
83
|
+
|
|
84
|
+
# MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md031.md
|
|
85
|
+
MD031: true
|
|
86
|
+
|
|
87
|
+
# MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md032.md
|
|
88
|
+
MD032: true
|
|
89
|
+
|
|
90
|
+
# MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md034.md
|
|
91
|
+
MD034: true
|
|
92
|
+
|
|
93
|
+
# MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md035.md
|
|
94
|
+
MD035: true
|
|
95
|
+
|
|
96
|
+
# MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md036.md
|
|
97
|
+
MD036: true
|
|
98
|
+
|
|
99
|
+
# MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md037.md
|
|
100
|
+
MD037: true
|
|
101
|
+
|
|
102
|
+
# MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md038.md
|
|
103
|
+
MD038: true
|
|
104
|
+
|
|
105
|
+
# MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md039.md
|
|
106
|
+
MD039: true
|
|
107
|
+
|
|
108
|
+
# MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md040.md
|
|
109
|
+
MD040: true
|
|
110
|
+
|
|
111
|
+
# MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md042.md
|
|
112
|
+
MD042: true
|
|
113
|
+
|
|
114
|
+
# MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md045.md
|
|
115
|
+
MD045: true
|
|
116
|
+
|
|
117
|
+
# MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md046.md
|
|
118
|
+
MD046:
|
|
119
|
+
style: "fenced"
|
|
120
|
+
|
|
121
|
+
# MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md047.md
|
|
122
|
+
MD047: true
|
|
123
|
+
|
|
124
|
+
# MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md048.md
|
|
125
|
+
MD048:
|
|
126
|
+
style: "backtick"
|
|
127
|
+
|
|
128
|
+
# MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md049.md
|
|
129
|
+
MD049:
|
|
130
|
+
style: "asterisk"
|
|
131
|
+
|
|
132
|
+
# MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md050.md
|
|
133
|
+
MD050:
|
|
134
|
+
style: "consistent"
|
|
135
|
+
|
|
136
|
+
# MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md051.md
|
|
137
|
+
MD051: true
|
|
138
|
+
|
|
139
|
+
# MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md053.md
|
|
140
|
+
MD053: true
|
|
141
|
+
|
|
142
|
+
# MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md054.md
|
|
143
|
+
MD054: true
|
|
144
|
+
|
|
145
|
+
# MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md055.md
|
|
146
|
+
MD055:
|
|
147
|
+
style: "consistent"
|
|
148
|
+
|
|
149
|
+
# MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.33.0/doc/md056.md
|
|
150
|
+
MD056: true
|