diff --git a/docs/REPOSITORY_INDEX.md b/docs/REPOSITORY_INDEX.md index 9f41f2e..a1dd4f8 100644 --- a/docs/REPOSITORY_INDEX.md +++ b/docs/REPOSITORY_INDEX.md @@ -75,6 +75,7 @@ Generated from `repositories.json`. Use that JSON file as the machine-readable s | `govoplan-views` | `platform` | `../govoplan-views` | [govoplan-views](https://git.add-ideas.de/GovOPlaN/govoplan-views) | | `govoplan-wiki` | `domain` | `../govoplan-wiki` | [govoplan-wiki](https://git.add-ideas.de/GovOPlaN/govoplan-wiki) | | `govoplan-workflow` | `platform` | `../govoplan-workflow` | [govoplan-workflow](https://git.add-ideas.de/GovOPlaN/govoplan-workflow) | +| `govoplan-workflow-engine` | `platform` | `../govoplan-workflow-engine` | [govoplan-workflow-engine](https://git.add-ideas.de/GovOPlaN/govoplan-workflow-engine) | ## Connector diff --git a/repositories.json b/repositories.json index f212a0f..e3d0594 100644 --- a/repositories.json +++ b/repositories.json @@ -72,6 +72,7 @@ {"name": "govoplan-wiki", "category": "module", "subtype": "domain", "remote": "git@git.add-ideas.de:GovOPlaN/govoplan-wiki.git", "path": "govoplan-wiki"}, {"name": "addideas-govoplan-website", "category": "website", "subtype": "public-site", "remote": "git@git.add-ideas.de:add-ideas/addideas-govoplan-website.git", "path": "addideas-govoplan-website", "bootstrap_transport": "registered"}, {"name": "govoplan-workflow", "category": "module", "subtype": "platform", "remote": "git@git.add-ideas.de:GovOPlaN/govoplan-workflow.git", "path": "govoplan-workflow"}, + {"name": "govoplan-workflow-engine", "category": "module", "subtype": "platform", "remote": "git@git.add-ideas.de:GovOPlaN/govoplan-workflow-engine.git", "path": "govoplan-workflow-engine"}, {"name": "govoplan-xoev", "category": "connector", "subtype": "standard", "remote": "git@git.add-ideas.de:GovOPlaN/govoplan-xoev.git", "path": "govoplan-xoev"}, {"name": "govoplan-xrechnung", "category": "connector", "subtype": "standard", "remote": "git@git.add-ideas.de:GovOPlaN/govoplan-xrechnung.git", "path": "govoplan-xrechnung"}, {"name": "govoplan-xta-osci", "category": "connector", "subtype": "standard", "remote": "git@git.add-ideas.de:GovOPlaN/govoplan-xta-osci.git", "path": "govoplan-xta-osci"} diff --git a/requirements-dev.txt b/requirements-dev.txt index 9b839f5..c1892e0 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -22,6 +22,7 @@ -e ../govoplan-connectors -e ../govoplan-datasources -e ../govoplan-dataflow +-e ../govoplan-workflow-engine -e ../govoplan-workflow -e ../govoplan-views -e ../govoplan-search diff --git a/tests/test_dependency_boundaries.py b/tests/test_dependency_boundaries.py index d2d1186..ba7898d 100644 --- a/tests/test_dependency_boundaries.py +++ b/tests/test_dependency_boundaries.py @@ -88,9 +88,17 @@ class DependencyBoundaryDiscoveryTests(unittest.TestCase): "govoplan-calendar", "govoplan-poll", "govoplan-scheduling", + "govoplan-workflow-engine", ): self.assertIn(owner, boundary.REPOS) + def test_transitional_allowlist_entries_have_a_removal_target(self) -> None: + boundary = load_boundary_module() + + for item in boundary.ALLOWLIST: + self.assertIn("remove", item.reason.casefold()) + self.assertRegex(item.reason, r"#[0-9]+") + def test_webui_discovery_is_fail_closed(self) -> None: boundary = load_boundary_module() with tempfile.TemporaryDirectory(prefix="govoplan-boundary-webui-") as directory: diff --git a/tools/checks/check-datasource-composition.py b/tools/checks/check-datasource-composition.py index 1a497db..15dc778 100644 --- a/tools/checks/check-datasource-composition.py +++ b/tools/checks/check-datasource-composition.py @@ -58,7 +58,13 @@ from govoplan_datasources.backend.db.models import ( def main() -> int: registry = build_platform_registry( - ("connectors", "datasources", "dataflow", "workflow") + ( + "connectors", + "datasources", + "dataflow", + "workflow_engine", + "workflow", + ) ) registry.configure_capability_context( ModuleContext(registry=registry, settings=object()) diff --git a/tools/checks/check-focused.sh b/tools/checks/check-focused.sh index 499ffdc..c5105ca 100644 --- a/tools/checks/check-focused.sh +++ b/tools/checks/check-focused.sh @@ -76,6 +76,7 @@ PY "$PYTHON" -m unittest discover -s /mnt/DATA/git/govoplan-connectors/tests "$PYTHON" -m unittest discover -s /mnt/DATA/git/govoplan-datasources/tests "$PYTHON" -m unittest discover -s /mnt/DATA/git/govoplan-dataflow/tests +"$PYTHON" -m unittest discover -s /mnt/DATA/git/govoplan-workflow-engine/tests "$PYTHON" -m unittest discover -s /mnt/DATA/git/govoplan-workflow/tests "$PYTHON" -m unittest discover -s /mnt/DATA/git/govoplan-views/tests "$PYTHON" -m unittest discover -s /mnt/DATA/git/govoplan-dashboard/tests diff --git a/tools/checks/check_dependency_boundaries.py b/tools/checks/check_dependency_boundaries.py index 3241052..0e6394f 100644 --- a/tools/checks/check_dependency_boundaries.py +++ b/tools/checks/check_dependency_boundaries.py @@ -109,9 +109,36 @@ class AllowlistedImport: reason: str -# Transitional exceptions. This should remain empty; add entries only with a -# dated removal plan and a capability/API contract issue. -ALLOWLIST: tuple[AllowlistedImport, ...] = () +# Transitional exceptions. This should remain empty outside explicit, +# time-bounded compatibility facades with a tracked removal issue. +_WORKFLOW_ENGINE_COMPATIBILITY_FACADES = ( + "backend/bpmn.py", + "backend/bpmn_adapters.py", + "backend/bpmn_graph.py", + "backend/db/__init__.py", + "backend/db/models.py", + "backend/governance.py", + "backend/instance_service.py", + "backend/manifest.py", + "backend/node_library.py", + "backend/router.py", + "backend/runtime.py", + "backend/schemas.py", + "backend/service.py", + "backend/validation.py", +) +ALLOWLIST: tuple[AllowlistedImport, ...] = tuple( + AllowlistedImport( + owner="govoplan-workflow", + relative_path=relative_path, + imported_owner="govoplan-workflow-engine", + reason=( + "One-release Engine extraction facade; remove for 0.2 under " + "govoplan-workflow#14 and govoplan-core#40." + ), + ) + for relative_path in _WORKFLOW_ENGINE_COMPATIBILITY_FACADES +) ALLOWLIST_KEYS = {(item.owner, item.relative_path, item.imported_owner) for item in ALLOWLIST} diff --git a/tools/deployment/govoplan_deploy/bundle.py b/tools/deployment/govoplan_deploy/bundle.py index 0557f07..c9936b8 100644 --- a/tools/deployment/govoplan_deploy/bundle.py +++ b/tools/deployment/govoplan_deploy/bundle.py @@ -172,7 +172,7 @@ def reconcile_runtime_environment( "ENABLED_MODULES": ",".join(spec.enabled_modules), "CELERY_ENABLED": "true" if redis.mode != "disabled" else "false", "CELERY_QUEUES": ( - "send_email,append_sent,notifications,calendar,dataflow,events,default" + "send_email,append_sent,notifications,calendar,dataflow,workflow,events,default" ), "CORS_ORIGINS": spec.public_url, "GOVOPLAN_TRUSTED_HOSTS": public.hostname or "", diff --git a/tools/deployment/govoplan_deploy/model.py b/tools/deployment/govoplan_deploy/model.py index 8d96033..aa73e96 100644 --- a/tools/deployment/govoplan_deploy/model.py +++ b/tools/deployment/govoplan_deploy/model.py @@ -50,6 +50,7 @@ FULL_MODULES = ( "connectors", "datasources", "dataflow", + "workflow_engine", "workflow", "views", "search", diff --git a/tools/launch/launch-production-like-dev.sh b/tools/launch/launch-production-like-dev.sh index 2c0385a..a28eddd 100644 --- a/tools/launch/launch-production-like-dev.sh +++ b/tools/launch/launch-production-like-dev.sh @@ -51,12 +51,12 @@ set +a export APP_ENV="${APP_ENV:-staging}" export GOVOPLAN_INSTALL_PROFILE="${GOVOPLAN_INSTALL_PROFILE:-production-like}" -export ENABLED_MODULES="${ENABLED_MODULES:-tenancy,organizations,identity,access,admin,dashboard,policy,audit,campaigns,files,mail,calendar,poll,scheduling,connectors,datasources,dataflow,workflow,views,search,risk_compliance,notifications,docs,ops}" +export ENABLED_MODULES="${ENABLED_MODULES:-tenancy,organizations,identity,access,admin,dashboard,policy,audit,campaigns,files,mail,calendar,poll,scheduling,connectors,datasources,dataflow,workflow_engine,workflow,views,search,risk_compliance,notifications,docs,ops}" export DATABASE_URL="${DATABASE_URL:-${GOVOPLAN_PRODUCTION_LIKE_DATABASE_URL:-postgresql+psycopg://govoplan:govoplan-dev@127.0.0.1:55433/govoplan}}" export GOVOPLAN_DATABASE_URL_PGTOOLS="${GOVOPLAN_DATABASE_URL_PGTOOLS:-${GOVOPLAN_PRODUCTION_LIKE_DATABASE_URL_PGTOOLS:-postgresql://govoplan:govoplan-dev@127.0.0.1:55433/govoplan}}" export REDIS_URL="${REDIS_URL:-${GOVOPLAN_PRODUCTION_LIKE_REDIS_URL:-redis://127.0.0.1:56379/0}}" export CELERY_ENABLED="${CELERY_ENABLED:-true}" -export CELERY_QUEUES="${CELERY_QUEUES:-send_email,append_sent,notifications,calendar,default}" +export CELERY_QUEUES="${CELERY_QUEUES:-send_email,append_sent,notifications,calendar,workflow,default}" export FILE_STORAGE_BACKEND="${FILE_STORAGE_BACKEND:-local}" export FILE_STORAGE_LOCAL_ROOT="${FILE_STORAGE_LOCAL_ROOT:-$META_ROOT/runtime/production-like/files}" export DEV_AUTO_MIGRATE_ENABLED="${DEV_AUTO_MIGRATE_ENABLED:-false}" diff --git a/tools/launch/production-like-dev.sh b/tools/launch/production-like-dev.sh index 965d650..aab2ad5 100644 --- a/tools/launch/production-like-dev.sh +++ b/tools/launch/production-like-dev.sh @@ -66,7 +66,7 @@ export DATABASE_URL="${DATABASE_URL:-${GOVOPLAN_PRODUCTION_LIKE_DATABASE_URL:-po export GOVOPLAN_DATABASE_URL_PGTOOLS="${GOVOPLAN_DATABASE_URL_PGTOOLS:-${GOVOPLAN_PRODUCTION_LIKE_DATABASE_URL_PGTOOLS:-postgresql://govoplan:govoplan-dev@127.0.0.1:55433/govoplan}}" export REDIS_URL="${REDIS_URL:-${GOVOPLAN_PRODUCTION_LIKE_REDIS_URL:-redis://127.0.0.1:56379/0}}" export CELERY_ENABLED="${CELERY_ENABLED:-true}" -export ENABLED_MODULES="${ENABLED_MODULES:-tenancy,organizations,identity,access,admin,dashboard,policy,audit,campaigns,files,mail,calendar,poll,scheduling,connectors,datasources,dataflow,workflow,views,search,risk_compliance,notifications,docs,ops}" +export ENABLED_MODULES="${ENABLED_MODULES:-tenancy,organizations,identity,access,admin,dashboard,policy,audit,campaigns,files,mail,calendar,poll,scheduling,connectors,datasources,dataflow,workflow_engine,workflow,views,search,risk_compliance,notifications,docs,ops}" export FILE_STORAGE_BACKEND="${FILE_STORAGE_BACKEND:-local}" export FILE_STORAGE_LOCAL_ROOT="${FILE_STORAGE_LOCAL_ROOT:-$META_ROOT/runtime/production-like/files}" export DEV_AUTO_MIGRATE_ENABLED="${DEV_AUTO_MIGRATE_ENABLED:-false}" diff --git a/tools/release/push-release-tag.sh b/tools/release/push-release-tag.sh index 6a92f50..8c0ef85 100644 --- a/tools/release/push-release-tag.sh +++ b/tools/release/push-release-tag.sh @@ -116,6 +116,7 @@ PACKAGE_MODULE_REPOS=( "$PARENT/govoplan-transparency" "$PARENT/govoplan-evaluation" "$PARENT/govoplan-views" + "$PARENT/govoplan-workflow-engine" "$PARENT/govoplan-workflow" ) TAG_ONLY_MODULE_REPOS=(