/** * Dolibarr Platform Structure Definition * Standard repository structure for the full Dolibarr ERP/CRM installation * * This is distinct from dolibarr — it defines the ENTIRE Dolibarr platform * (htdocs/, not src/). It does NOT have a module descriptor, numero, or * publish-to-mokodolimods workflow. * * Copyright (C) 2026 Moko Consulting * SPDX-License-Identifier: GPL-3.0-or-later * Schema Version: 1.0 */ locals { repository_structure = { metadata = { name = "Dolibarr Platform" description = "Full Dolibarr ERP/CRM installation — htdocs/ root, not a module" repository_type = "platform" platform = "dolibarr" last_updated = "2026-03-31T00:00:00Z" maintainer = "Moko Consulting" version = "05.00.00" schema_version = "1.0" } root_files = [ { name = "README.md" extension = "md" description = "Developer-focused documentation" required = true always_overwrite = false protected = true audience = "developer" }, { name = "CONTRIBUTING.md" extension = "md" description = "Contribution guidelines" required = true always_overwrite = true template = "templates/docs/required/template-CONTRIBUTING.md" audience = "contributor" }, { name = "LICENSE" extension = "" description = "GPL-3.0-or-later license file" required = true always_overwrite = true template = "templates/docs/required/LICENSE" }, { name = "composer.json" extension = "json" description = "Composer package definition" required = true always_overwrite = false }, { name = "phpstan.neon" extension = "neon" description = "PHPStan static analysis configuration" required = true always_overwrite = true template = "templates/configs/phpstan.neon" }, { name = "Makefile" extension = "" description = "Build automation targets" required = true always_overwrite = true template = "templates/configs/Makefile" }, { name = "src/.ftpignore" extension = "" description = "Files excluded from SFTP deployment" required = true always_overwrite = true template = "templates/configs/ftp_ignore" }, { name = ".gitea/.mokostandards" extension = "xml" description = "MokoStandards XML manifest — generated programmatically by RepositorySynchronizer::migrateMokoStandards()" required = true always_overwrite = false template = "managed-by-sync" source_type = "programmatic" }, { name = "renovate.json" extension = "json" description = "Renovate dependency management configuration" required = true always_overwrite = false audience = "developer" template = "templates/configs/renovate.json" } ] directories = [ { name = "htdocs" path = "htdocs" description = "Dolibarr web root — entire platform" required = true purpose = "Contains the full Dolibarr installation including core, custom modules, and themes" }, { name = "docs" path = "docs" description = "Developer and technical documentation" required = true purpose = "Contains technical documentation" files = [ { name = "update-server.md" extension = "md" description = "Dolibarr update server (update.txt) documentation" required = true always_overwrite = true template = "templates/docs/required/template-update-server-dolibarr.md" } ] }, { name = ".github" path = ".github" description = "GitHub configuration" required = true purpose = "Contains GitHub Actions workflows and configuration" subdirectories = [ { name = "workflows" path = ".github/workflows" description = "GitHub Actions workflows" requirement_status = "required" files = [ { name = "codeql-analysis.yml" extension = "yml" description = "CodeQL security analysis workflow" requirement_status = "required" always_overwrite = true template = "templates/workflows/generic/codeql-analysis.yml.template" }, { name = "standards-compliance.yml" extension = "yml" description = "MokoStandards compliance validation" requirement_status = "required" always_overwrite = true template = ".github/workflows/standards-compliance.yml" }, { name = "enterprise-firewall-setup.yml" extension = "yml" description = "Enterprise firewall configuration" requirement_status = "required" always_overwrite = true template = "templates/workflows/shared/enterprise-firewall-setup.yml.template" }, { name = "deploy-dev.yml" extension = "yml" description = "SFTP deployment to dev server (htdocs/)" requirement_status = "required" always_overwrite = true template = "templates/workflows/shared/deploy-dev.yml.template" }, { name = "deploy-demo.yml" extension = "yml" description = "SFTP deployment to demo server" requirement_status = "required" always_overwrite = true template = "templates/workflows/shared/deploy-demo.yml.template" }, { name = "deploy-rs.yml" extension = "yml" description = "SFTP deployment to release staging server" requirement_status = "required" always_overwrite = true template = "templates/workflows/shared/deploy-rs.yml.template" }, { name = "sync-version-on-merge.yml" extension = "yml" description = "Auto-bump patch version on merge" requirement_status = "required" always_overwrite = true template = "templates/workflows/shared/sync-version-on-merge.yml.template" }, { name = "auto-release.yml" extension = "yml" description = "Auto-create GitHub Release on minor version" requirement_status = "required" always_overwrite = true template = "templates/workflows/shared/auto-release.yml.template" }, { name = "repository-cleanup.yml" extension = "yml" description = "Scheduled cleanup: retired workflows, stale branches" requirement_status = "required" always_overwrite = true template = "templates/workflows/shared/repository-cleanup.yml.template" }, { name = "auto-dev-issue.yml" extension = "yml" description = "Auto-create tracking issue on dev/rc branch creation" requirement_status = "required" always_overwrite = true template = "templates/workflows/shared/auto-dev-issue.yml.template" }, { name = "repo_health.yml" extension = "yml" description = "Dolibarr platform health checks (shared guardrails, no module-specific checks)" requirement_status = "required" always_overwrite = true template = "templates/workflows/dolibarr/repo_health.yml.template" }, { name = "cascade-dev.yml" extension = "yml" description = "Forward-merge main to all open branches (dev, rc/*, beta/*, alpha/*) on push to main" requirement_status = "required" always_overwrite = true template = "workflows/cascade-dev.yml" }, { name = "gitleaks.yml" extension = "yml" description = "Secret scanning — detect leaked credentials, API keys, and tokens using Gitleaks" requirement_status = "required" always_overwrite = true template = "workflows/gitleaks.yml" } ] }, { name = "ISSUE_TEMPLATE" path = ".github/ISSUE_TEMPLATE" description = "GitHub issue templates" requirement_status = "required" files = [ { name = "config.yml" always_overwrite = true template = "templates/github/ISSUE_TEMPLATE/config.yml" }, { name = "adr.md" always_overwrite = true template = "templates/github/ISSUE_TEMPLATE/adr.md" }, { name = "bug_report.md" always_overwrite = true template = "templates/github/ISSUE_TEMPLATE/bug_report.md" }, { name = "documentation.md" always_overwrite = true template = "templates/github/ISSUE_TEMPLATE/documentation.md" }, { name = "enterprise_support.md" always_overwrite = true template = "templates/github/ISSUE_TEMPLATE/enterprise_support.md" }, { name = "feature_request.md" always_overwrite = true template = "templates/github/ISSUE_TEMPLATE/feature_request.md" }, { name = "firewall-request.md" always_overwrite = true template = "templates/github/ISSUE_TEMPLATE/firewall-request.md" }, { name = "question.md" always_overwrite = true template = "templates/github/ISSUE_TEMPLATE/question.md" }, { name = "request-license.md" always_overwrite = true template = "templates/github/ISSUE_TEMPLATE/request-license.md" }, { name = "rfc.md" always_overwrite = true template = "templates/github/ISSUE_TEMPLATE/rfc.md" }, { name = "security.md" always_overwrite = true template = "templates/github/ISSUE_TEMPLATE/security.md" }, { name = "dolibarr_issue.md" always_overwrite = true template = "templates/github/ISSUE_TEMPLATE/dolibarr_issue.md" }, { name = "dolibarr_module_id_request.md" always_overwrite = true template = "templates/github/ISSUE_TEMPLATE/dolibarr_module_id_request.md" } ] } ] } ] } } output "crm_platform_structure" { description = "Dolibarr Platform repository structure definition" value = local.repository_structure }