Public Access
feat: add client-site definition
Defines standard structure for client Joomla site repos: - No updates.xml (not an installable extension) - No update-server workflow - Has sync-media.yml for bidirectional SFTP media sync - 10 workflows (vs 10+update-server for extensions) - Required per-repo variables/secrets for media sync Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,223 @@
|
||||
/**
|
||||
* Client Joomla Site Structure Definition
|
||||
* Standard repository structure for client Joomla site projects
|
||||
*
|
||||
* Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
* Version: 01.00.00
|
||||
* Schema Version: 1.0
|
||||
*/
|
||||
|
||||
locals {
|
||||
repository_structure = {
|
||||
metadata = {
|
||||
name = "Client Joomla Site"
|
||||
description = "Standard repository structure for client Joomla site projects (overrides, media, configuration)"
|
||||
repository_type = "client-site"
|
||||
platform = "mokowaas"
|
||||
last_updated = "2026-05-04T00:00:00Z"
|
||||
maintainer = "Moko Consulting"
|
||||
version = "01.00.00"
|
||||
schema_version = "1.0"
|
||||
template_repo = "MokoConsulting/MokoStandards-Template-Client"
|
||||
}
|
||||
|
||||
root_files = [
|
||||
{
|
||||
name = "README.md"
|
||||
description = "Client project documentation"
|
||||
required = true
|
||||
always_overwrite = false
|
||||
},
|
||||
{
|
||||
name = "LICENSE"
|
||||
description = "License file (GPL-3.0-or-later)"
|
||||
required = true
|
||||
},
|
||||
{
|
||||
name = "CHANGELOG.md"
|
||||
description = "Version history and changes"
|
||||
required = true
|
||||
},
|
||||
{
|
||||
name = "SECURITY.md"
|
||||
description = "Security policy and vulnerability reporting"
|
||||
required = true
|
||||
always_overwrite = true
|
||||
},
|
||||
{
|
||||
name = "CODE_OF_CONDUCT.md"
|
||||
description = "Community code of conduct"
|
||||
required = true
|
||||
always_overwrite = true
|
||||
},
|
||||
{
|
||||
name = "CONTRIBUTING.md"
|
||||
description = "Contribution guidelines"
|
||||
required = true
|
||||
always_overwrite = true
|
||||
},
|
||||
{
|
||||
name = "Makefile"
|
||||
description = "Build automation"
|
||||
required = true
|
||||
always_overwrite = true
|
||||
},
|
||||
{
|
||||
name = "composer.json"
|
||||
description = "PHP dependency management"
|
||||
required = true
|
||||
always_overwrite = false
|
||||
},
|
||||
{
|
||||
name = "phpstan.neon"
|
||||
description = "PHPStan static analysis config"
|
||||
required = true
|
||||
always_overwrite = true
|
||||
},
|
||||
{
|
||||
name = "codeception.yml"
|
||||
description = "Codeception test framework config"
|
||||
required = false
|
||||
always_overwrite = false
|
||||
},
|
||||
{
|
||||
name = ".editorconfig"
|
||||
description = "Editor configuration for consistent coding style"
|
||||
required = true
|
||||
always_overwrite = true
|
||||
},
|
||||
{
|
||||
name = ".gitignore"
|
||||
description = "Git ignore patterns for client site projects"
|
||||
required = true
|
||||
always_overwrite = false
|
||||
},
|
||||
]
|
||||
|
||||
// NOTE: Client sites do NOT have updates.xml — they are not installable extensions
|
||||
|
||||
subdirectories = [
|
||||
{
|
||||
name = "src"
|
||||
description = "Site source files — template overrides, custom code, and configuration"
|
||||
required = true
|
||||
files = []
|
||||
},
|
||||
{
|
||||
name = "src/images"
|
||||
description = "Site images — branding, headers, event photos, profiles"
|
||||
required = true
|
||||
files = []
|
||||
},
|
||||
{
|
||||
name = "src/media"
|
||||
description = "Media assets — uploaded files, documents"
|
||||
required = true
|
||||
files = []
|
||||
},
|
||||
{
|
||||
name = "docs"
|
||||
description = "Client-specific documentation — brand reference, deployment, migration plans"
|
||||
required = true
|
||||
files = []
|
||||
},
|
||||
{
|
||||
name = "scripts"
|
||||
description = "Deployment and maintenance scripts"
|
||||
required = false
|
||||
files = []
|
||||
},
|
||||
{
|
||||
name = "tests"
|
||||
description = "Acceptance and unit tests"
|
||||
required = false
|
||||
files = []
|
||||
},
|
||||
{
|
||||
name = ".gitea/workflows"
|
||||
description = "Gitea Actions CI/CD workflows (10 workflows — no update-server)"
|
||||
required = true
|
||||
files = [
|
||||
{
|
||||
name = "auto-release.yml"
|
||||
description = "Stable release on PR merge to main"
|
||||
required = true
|
||||
always_overwrite = true
|
||||
},
|
||||
{
|
||||
name = "pre-release.yml"
|
||||
description = "Manual pre-release for dev/alpha/beta/rc channels"
|
||||
required = true
|
||||
always_overwrite = true
|
||||
},
|
||||
{
|
||||
name = "ci-joomla.yml"
|
||||
description = "PHP lint, PHPStan, coding standards"
|
||||
required = true
|
||||
always_overwrite = true
|
||||
},
|
||||
{
|
||||
name = "pr-check.yml"
|
||||
description = "PR gate — validates code quality before merge"
|
||||
required = true
|
||||
always_overwrite = true
|
||||
},
|
||||
{
|
||||
name = "deploy-manual.yml"
|
||||
description = "Manual SFTP deploy to selected environment"
|
||||
required = true
|
||||
always_overwrite = true
|
||||
},
|
||||
{
|
||||
name = "repo-health.yml"
|
||||
description = "Repository health checks"
|
||||
required = true
|
||||
always_overwrite = true
|
||||
},
|
||||
{
|
||||
name = "security-audit.yml"
|
||||
description = "Dependency vulnerability scanning"
|
||||
required = true
|
||||
always_overwrite = true
|
||||
},
|
||||
{
|
||||
name = "notify.yml"
|
||||
description = "ntfy push notifications on release success or failure"
|
||||
required = true
|
||||
always_overwrite = true
|
||||
},
|
||||
{
|
||||
name = "cleanup.yml"
|
||||
description = "Weekly merged branch + old run cleanup"
|
||||
required = true
|
||||
always_overwrite = true
|
||||
},
|
||||
{
|
||||
name = "sync-media.yml"
|
||||
description = "Bidirectional SFTP sync for images/, files/, media/ between dev and production"
|
||||
required = true
|
||||
always_overwrite = true
|
||||
},
|
||||
]
|
||||
},
|
||||
]
|
||||
|
||||
// Per-repo variables required for sync-media.yml
|
||||
required_variables = [
|
||||
{ name = "DEV_SYNC_HOST", description = "Dev server hostname" },
|
||||
{ name = "DEV_SYNC_PORT", description = "Dev SSH port (default 22)" },
|
||||
{ name = "DEV_SYNC_USERNAME", description = "Dev server username" },
|
||||
{ name = "DEV_SYNC_PATH", description = "Base path on dev server" },
|
||||
{ name = "PROD_SYNC_HOST", description = "Production server hostname" },
|
||||
{ name = "PROD_SYNC_PORT", description = "Production SSH port (default 22)" },
|
||||
{ name = "PROD_SYNC_USERNAME", description = "Production server username" },
|
||||
{ name = "PROD_SYNC_PATH", description = "Base path on production server" },
|
||||
]
|
||||
|
||||
required_secrets = [
|
||||
{ name = "DEV_SYNC_KEY", description = "SSH private key for dev server" },
|
||||
{ name = "PROD_SYNC_KEY", description = "SSH private key for production server" },
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user