From 652307b7746f49851845546fb1fb260d749d4624 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 14 Apr 2026 18:02:26 -0500 Subject: [PATCH] Integrate MokoStandards API for build and validation - Add mokoconsulting-tech/enterprise as Composer dev dependency - Replace generic Makefile with MokoStandards CLI-powered targets - Validation: check:syntax, check:joomla, check:version, check:xml, check:headers, check:secrets, health - Build: reads version from README.md, packages src/ into installable ZIP - Cross-platform ZIP support (zip, pwsh, powershell) Co-Authored-By: Claude Opus 4.6 (1M context) --- Makefile | 390 +++++++++++++++++--------------------------------- composer.json | 30 +++- 2 files changed, 157 insertions(+), 263 deletions(-) diff --git a/Makefile b/Makefile index ec94cc9..dc8ca18 100644 --- a/Makefile +++ b/Makefile @@ -1,58 +1,32 @@ -# Makefile for Joomla Extensions +# Makefile for MokoCassiopeia Joomla Template # Copyright (C) 2026 Moko Consulting # SPDX-License-Identifier: GPL-3.0-or-later # -# This is a reference Makefile for building Joomla extensions. -# Copy this to your repository root as "Makefile" and customize as needed. -# -# Supports: Modules, Plugins, Components, Packages, Templates +# Build and validation powered by MokoStandards Enterprise API +# Install: composer install # ============================================================================== -# CONFIGURATION - Customize these for your extension +# CONFIGURATION # ============================================================================== -# Extension Configuration -EXTENSION_NAME := mokoexample -EXTENSION_TYPE := module -# Options: module, plugin, component, package, template -EXTENSION_VERSION := 1.0.0 +EXTENSION_NAME := mokocassiopeia +EXTENSION_TYPE := template +EXTENSION_VERSION := $(shell grep -oP 'VERSION:\s*\K[0-9.]+' README.md 2>/dev/null || echo "0.0.0") -# Module Configuration (for modules only) -MODULE_TYPE := site -# Options: site, admin - -# Plugin Configuration (for plugins only) -PLUGIN_GROUP := system -# Options: system, content, user, authentication, etc. - -# Directories -SRC_DIR := . +SRC_DIR := src BUILD_DIR := build -DIST_DIR := dist -DOCS_DIR := docs +DIST_DIR := dist -# Joomla Installation (for local testing - customize paths) -JOOMLA_ROOT := /var/www/html/joomla -JOOMLA_VERSION := 4 - -# Tools -PHP := php +PHP := php COMPOSER := composer -NPM := npm -PHPCS := vendor/bin/phpcs -PHPCBF := vendor/bin/phpcbf -PHPUNIT := vendor/bin/phpunit -ZIP := zip +MOKO := vendor/bin/moko -# Coding Standards -PHPCS_STANDARD := Joomla - -# Colors for output -COLOR_RESET := \033[0m -COLOR_GREEN := \033[32m +# Colors +COLOR_RESET := \033[0m +COLOR_GREEN := \033[32m COLOR_YELLOW := \033[33m -COLOR_BLUE := \033[34m -COLOR_RED := \033[31m +COLOR_BLUE := \033[34m +COLOR_RED := \033[31m # ============================================================================== # TARGETS @@ -61,92 +35,85 @@ COLOR_RED := \033[31m .PHONY: help help: ## Show this help message @echo "$(COLOR_BLUE)╔════════════════════════════════════════════════════════════╗$(COLOR_RESET)" - @echo "$(COLOR_BLUE)║ Joomla Extension Makefile ║$(COLOR_RESET)" + @echo "$(COLOR_BLUE)║ MokoCassiopeia Template Build ║$(COLOR_RESET)" @echo "$(COLOR_BLUE)╚════════════════════════════════════════════════════════════╝$(COLOR_RESET)" @echo "" @echo "Extension: $(EXTENSION_NAME) ($(EXTENSION_TYPE)) v$(EXTENSION_VERSION)" + @echo "Powered by: MokoStandards Enterprise API" @echo "" @echo "$(COLOR_GREEN)Available targets:$(COLOR_RESET)" @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " $(COLOR_BLUE)%-20s$(COLOR_RESET) %s\n", $$1, $$2}' @echo "" - @echo "$(COLOR_YELLOW)Quick Start:$(COLOR_RESET)" - @echo " 1. make install-deps # Install dependencies" - @echo " 2. make build # Build extension package" - @echo " 3. make test # Run tests" - @echo "" + +# ── Dependencies ────────────────────────────────────────────────────────────── .PHONY: install-deps -install-deps: ## Install all dependencies (Composer + npm) +install-deps: ## Install Composer dependencies (includes MokoStandards API) @echo "$(COLOR_BLUE)Installing dependencies...$(COLOR_RESET)" - @if [ -f "composer.json" ]; then \ - $(COMPOSER) install; \ - echo "$(COLOR_GREEN)✓ Composer dependencies installed$(COLOR_RESET)"; \ - fi - @if [ -f "package.json" ]; then \ - $(NPM) install; \ - echo "$(COLOR_GREEN)✓ npm dependencies installed$(COLOR_RESET)"; \ - fi + @$(COMPOSER) install + @echo "$(COLOR_GREEN)✓ Dependencies installed$(COLOR_RESET)" .PHONY: update-deps -update-deps: ## Update all dependencies +update-deps: ## Update Composer dependencies @echo "$(COLOR_BLUE)Updating dependencies...$(COLOR_RESET)" - @if [ -f "composer.json" ]; then \ - $(COMPOSER) update; \ - echo "$(COLOR_GREEN)✓ Composer dependencies updated$(COLOR_RESET)"; \ - fi - @if [ -f "package.json" ]; then \ - $(NPM) update; \ - echo "$(COLOR_GREEN)✓ npm dependencies updated$(COLOR_RESET)"; \ + @$(COMPOSER) update + @echo "$(COLOR_GREEN)✓ Dependencies updated$(COLOR_RESET)" + +# ── Validation (MokoStandards API) ──────────────────────────────────────────── + +.PHONY: check-moko +check-moko: + @if [ ! -f "$(MOKO)" ]; then \ + echo "$(COLOR_RED)✗ MokoStandards CLI not found. Run: make install-deps$(COLOR_RESET)"; \ + exit 1; \ fi .PHONY: lint -lint: ## Run PHP linter (syntax check) - @echo "$(COLOR_BLUE)Running PHP linter...$(COLOR_RESET)" - @find . -name "*.php" ! -path "./vendor/*" ! -path "./node_modules/*" ! -path "./$(BUILD_DIR)/*" \ - -exec $(PHP) -l {} \; | grep -v "No syntax errors" || true - @echo "$(COLOR_GREEN)✓ PHP linting complete$(COLOR_RESET)" +lint: check-moko ## PHP syntax check via MokoStandards + @echo "$(COLOR_BLUE)Running PHP syntax check...$(COLOR_RESET)" + @$(PHP) $(MOKO) check:syntax -- --path . + @echo "$(COLOR_GREEN)✓ PHP syntax OK$(COLOR_RESET)" -.PHONY: phpcs -phpcs: ## Run PHP CodeSniffer (Joomla standards) - @echo "$(COLOR_BLUE)Running PHP CodeSniffer...$(COLOR_RESET)" - @if [ -f "$(PHPCS)" ]; then \ - $(PHPCS) --standard=$(PHPCS_STANDARD) --extensions=php --ignore=vendor,node_modules,$(BUILD_DIR) .; \ - else \ - echo "$(COLOR_YELLOW)⚠ PHP CodeSniffer not installed. Run: make install-deps$(COLOR_RESET)"; \ - fi +.PHONY: check-joomla +check-joomla: check-moko ## Validate Joomla manifest via MokoStandards + @echo "$(COLOR_BLUE)Validating Joomla manifest...$(COLOR_RESET)" + @$(PHP) $(MOKO) check:joomla -- --path . + @echo "$(COLOR_GREEN)✓ Joomla manifest valid$(COLOR_RESET)" -.PHONY: phpcbf -phpcbf: ## Fix coding standards automatically - @echo "$(COLOR_BLUE)Running PHP Code Beautifier...$(COLOR_RESET)" - @if [ -f "$(PHPCBF)" ]; then \ - $(PHPCBF) --standard=$(PHPCS_STANDARD) --extensions=php --ignore=vendor,node_modules,$(BUILD_DIR) .; \ - echo "$(COLOR_GREEN)✓ Code formatting applied$(COLOR_RESET)"; \ - else \ - echo "$(COLOR_YELLOW)⚠ PHP Code Beautifier not installed. Run: make install-deps$(COLOR_RESET)"; \ - fi +.PHONY: check-version +check-version: check-moko ## Verify version consistency across files + @echo "$(COLOR_BLUE)Checking version consistency...$(COLOR_RESET)" + @$(PHP) $(MOKO) check:version -- --path . + @echo "$(COLOR_GREEN)✓ Versions consistent$(COLOR_RESET)" + +.PHONY: check-headers +check-headers: check-moko ## Check license headers on source files + @echo "$(COLOR_BLUE)Checking license headers...$(COLOR_RESET)" + @$(PHP) $(MOKO) check:headers -- --path . + @echo "$(COLOR_GREEN)✓ Headers OK$(COLOR_RESET)" + +.PHONY: check-secrets +check-secrets: check-moko ## Scan for leaked credentials + @echo "$(COLOR_BLUE)Scanning for secrets...$(COLOR_RESET)" + @$(PHP) $(MOKO) check:secrets -- --path . + @echo "$(COLOR_GREEN)✓ No secrets found$(COLOR_RESET)" + +.PHONY: check-xml +check-xml: check-moko ## Validate XML files are well-formed + @echo "$(COLOR_BLUE)Checking XML files...$(COLOR_RESET)" + @$(PHP) $(MOKO) check:xml -- --path . + @echo "$(COLOR_GREEN)✓ XML well-formed$(COLOR_RESET)" .PHONY: validate -validate: lint phpcs ## Run all validation checks +validate: lint check-joomla check-version check-xml check-headers check-secrets ## Run all MokoStandards validation checks @echo "$(COLOR_GREEN)✓ All validation checks passed$(COLOR_RESET)" -.PHONY: test -test: ## Run PHPUnit tests - @echo "$(COLOR_BLUE)Running tests...$(COLOR_RESET)" - @if [ -f "$(PHPUNIT)" ] && [ -f "phpunit.xml" ]; then \ - $(PHPUNIT); \ - else \ - echo "$(COLOR_YELLOW)⚠ PHPUnit not configured$(COLOR_RESET)"; \ - fi +.PHONY: health +health: check-moko ## Full repository health check via MokoStandards + @echo "$(COLOR_BLUE)Running full health check...$(COLOR_RESET)" + @$(PHP) $(MOKO) health -- --path . -.PHONY: test-coverage -test-coverage: ## Run tests with coverage report - @echo "$(COLOR_BLUE)Running tests with coverage...$(COLOR_RESET)" - @if [ -f "$(PHPUNIT)" ] && [ -f "phpunit.xml" ]; then \ - $(PHPUNIT) --coverage-html $(BUILD_DIR)/coverage; \ - echo "$(COLOR_GREEN)✓ Coverage report: $(BUILD_DIR)/coverage/index.html$(COLOR_RESET)"; \ - else \ - echo "$(COLOR_YELLOW)⚠ PHPUnit not configured$(COLOR_RESET)"; \ - fi +# ── Build ───────────────────────────────────────────────────────────────────── .PHONY: clean clean: ## Clean build artifacts @@ -155,179 +122,78 @@ clean: ## Clean build artifacts @echo "$(COLOR_GREEN)✓ Build artifacts cleaned$(COLOR_RESET)" .PHONY: build -build: clean validate ## Build extension package - @echo "$(COLOR_BLUE)Building Joomla extension package...$(COLOR_RESET)" - @mkdir -p $(DIST_DIR) $(BUILD_DIR) - - # Determine package prefix based on extension type - @case "$(EXTENSION_TYPE)" in \ - module) \ - PACKAGE_PREFIX="mod_$(EXTENSION_NAME)"; \ - BUILD_TARGET="$(BUILD_DIR)/$$PACKAGE_PREFIX"; \ - ;; \ - plugin) \ - PACKAGE_PREFIX="plg_$(PLUGIN_GROUP)_$(EXTENSION_NAME)"; \ - BUILD_TARGET="$(BUILD_DIR)/$$PACKAGE_PREFIX"; \ - ;; \ - component) \ - PACKAGE_PREFIX="com_$(EXTENSION_NAME)"; \ - BUILD_TARGET="$(BUILD_DIR)/$$PACKAGE_PREFIX"; \ - ;; \ - package) \ - PACKAGE_PREFIX="pkg_$(EXTENSION_NAME)"; \ - BUILD_TARGET="$(BUILD_DIR)/$$PACKAGE_PREFIX"; \ - ;; \ - template) \ - PACKAGE_PREFIX="tpl_$(EXTENSION_NAME)"; \ - BUILD_TARGET="$(BUILD_DIR)/$$PACKAGE_PREFIX"; \ - ;; \ - *) \ - echo "$(COLOR_RED)✗ Unknown extension type: $(EXTENSION_TYPE)$(COLOR_RESET)"; \ +build: clean ## Build template installable ZIP from src/ + @echo "$(COLOR_BLUE)Building $(EXTENSION_NAME) v$(EXTENSION_VERSION)...$(COLOR_RESET)" + @mkdir -p $(BUILD_DIR)/package $(DIST_DIR) + @cp -r $(SRC_DIR)/* $(BUILD_DIR)/package/ + @cd $(BUILD_DIR)/package && \ + if command -v zip >/dev/null 2>&1; then \ + zip -r "../../$(DIST_DIR)/$(EXTENSION_NAME)-$(EXTENSION_VERSION).zip" .; \ + elif command -v pwsh >/dev/null 2>&1; then \ + pwsh -Command "Compress-Archive -Path '*' -DestinationPath '../../$(DIST_DIR)/$(EXTENSION_NAME)-$(EXTENSION_VERSION).zip' -Force"; \ + elif command -v powershell >/dev/null 2>&1; then \ + powershell -Command "Compress-Archive -Path '*' -DestinationPath '../../$(DIST_DIR)/$(EXTENSION_NAME)-$(EXTENSION_VERSION).zip' -Force"; \ + else \ + echo "$(COLOR_RED)✗ No zip tool found (zip, pwsh, powershell)$(COLOR_RESET)"; \ exit 1; \ - ;; \ - esac; \ - \ - mkdir -p "$$BUILD_TARGET"; \ - \ - echo "Building $$PACKAGE_PREFIX..."; \ - \ - rsync -av --progress \ - --exclude='$(BUILD_DIR)' \ - --exclude='$(DIST_DIR)' \ - --exclude='.git*' \ - --exclude='vendor/' \ - --exclude='node_modules/' \ - --exclude='tests/' \ - --exclude='Makefile' \ - --exclude='composer.json' \ - --exclude='composer.lock' \ - --exclude='package.json' \ - --exclude='package-lock.json' \ - --exclude='phpunit.xml' \ - --exclude='*.md' \ - --exclude='.editorconfig' \ - . "$$BUILD_TARGET/"; \ - \ - cd $(BUILD_DIR) && $(ZIP) -r "../$(DIST_DIR)/$${PACKAGE_PREFIX}-$(EXTENSION_VERSION).zip" "$${PACKAGE_PREFIX}"; \ - \ - echo "$(COLOR_GREEN)✓ Package created: $(DIST_DIR)/$${PACKAGE_PREFIX}-$(EXTENSION_VERSION).zip$(COLOR_RESET)" + fi + @echo "$(COLOR_GREEN)✓ Package: $(DIST_DIR)/$(EXTENSION_NAME)-$(EXTENSION_VERSION).zip$(COLOR_RESET)" -.PHONY: package -package: build ## Alias for build - @echo "$(COLOR_GREEN)✓ Package ready for distribution$(COLOR_RESET)" - -.PHONY: install-local -install-local: build ## Install to local Joomla (upload via admin) - @echo "$(COLOR_BLUE)Package ready for installation$(COLOR_RESET)" - @case "$(EXTENSION_TYPE)" in \ - module) PACKAGE="mod_$(EXTENSION_NAME)";; \ - plugin) PACKAGE="plg_$(PLUGIN_GROUP)_$(EXTENSION_NAME)";; \ - component) PACKAGE="com_$(EXTENSION_NAME)";; \ - package) PACKAGE="pkg_$(EXTENSION_NAME)";; \ - template) PACKAGE="tpl_$(EXTENSION_NAME)";; \ - esac; \ - echo "$(COLOR_YELLOW)Upload $(DIST_DIR)/$${PACKAGE}-$(EXTENSION_VERSION).zip via Joomla Administrator$(COLOR_RESET)"; \ - echo "Admin URL: $(JOOMLA_ROOT) → Extensions → Install" - -.PHONY: dev-install -dev-install: ## Create symlink for development (Joomla 4+) - @echo "$(COLOR_BLUE)Creating development symlink...$(COLOR_RESET)" - @if [ ! -d "$(JOOMLA_ROOT)" ]; then \ - echo "$(COLOR_RED)✗ Joomla root not found at $(JOOMLA_ROOT)$(COLOR_RESET)"; \ - echo "Update JOOMLA_ROOT in Makefile"; \ - exit 1; \ - fi - - @case "$(EXTENSION_TYPE)" in \ - module) \ - if [ "$(MODULE_TYPE)" = "admin" ]; then \ - TARGET="$(JOOMLA_ROOT)/administrator/modules/mod_$(EXTENSION_NAME)"; \ - else \ - TARGET="$(JOOMLA_ROOT)/modules/mod_$(EXTENSION_NAME)"; \ - fi; \ - ;; \ - plugin) \ - TARGET="$(JOOMLA_ROOT)/plugins/$(PLUGIN_GROUP)/$(EXTENSION_NAME)"; \ - ;; \ - component) \ - echo "$(COLOR_YELLOW)⚠ Components require complex symlink setup$(COLOR_RESET)"; \ - echo "Manual setup recommended for component development"; \ +.PHONY: build-beta +build-beta: clean ## Build beta release ZIP + @echo "$(COLOR_BLUE)Building $(EXTENSION_NAME) v$(EXTENSION_VERSION)-beta...$(COLOR_RESET)" + @mkdir -p $(BUILD_DIR)/package $(DIST_DIR) + @cp -r $(SRC_DIR)/* $(BUILD_DIR)/package/ + @cd $(BUILD_DIR)/package && \ + if command -v zip >/dev/null 2>&1; then \ + zip -r "../../$(DIST_DIR)/$(EXTENSION_NAME)-$(EXTENSION_VERSION)-beta.zip" .; \ + elif command -v pwsh >/dev/null 2>&1; then \ + pwsh -Command "Compress-Archive -Path '*' -DestinationPath '../../$(DIST_DIR)/$(EXTENSION_NAME)-$(EXTENSION_VERSION)-beta.zip' -Force"; \ + elif command -v powershell >/dev/null 2>&1; then \ + powershell -Command "Compress-Archive -Path '*' -DestinationPath '../../$(DIST_DIR)/$(EXTENSION_NAME)-$(EXTENSION_VERSION)-beta.zip' -Force"; \ + else \ + echo "$(COLOR_RED)✗ No zip tool found$(COLOR_RESET)"; \ exit 1; \ - ;; \ - *) \ - echo "$(COLOR_RED)✗ dev-install not supported for $(EXTENSION_TYPE)$(COLOR_RESET)"; \ - exit 1; \ - ;; \ - esac; \ - \ - rm -rf "$$TARGET"; \ - ln -s "$(PWD)" "$$TARGET"; \ - echo "$(COLOR_GREEN)✓ Development symlink created at $$TARGET$(COLOR_RESET)" + fi + @echo "$(COLOR_GREEN)✓ Package: $(DIST_DIR)/$(EXTENSION_NAME)-$(EXTENSION_VERSION)-beta.zip$(COLOR_RESET)" -.PHONY: watch -watch: ## Watch for changes and rebuild - @echo "$(COLOR_BLUE)Watching for changes...$(COLOR_RESET)" - @echo "$(COLOR_YELLOW)Press Ctrl+C to stop$(COLOR_RESET)" - @while true; do \ - inotifywait -r -e modify,create,delete --exclude '($(BUILD_DIR)|$(DIST_DIR)|vendor|node_modules)' . 2>/dev/null || \ - (echo "$(COLOR_YELLOW)⚠ inotifywait not installed. Install: apt-get install inotify-tools$(COLOR_RESET)" && sleep 5); \ - make build; \ +.PHONY: checksum +checksum: ## Generate SHA-256 checksums for dist packages + @echo "$(COLOR_BLUE)Generating checksums...$(COLOR_RESET)" + @for f in $(DIST_DIR)/*.zip; do \ + sha256sum "$$f" | tee "$${f}.sha256"; \ done + @echo "$(COLOR_GREEN)✓ Checksums generated$(COLOR_RESET)" + +# ── Release ─────────────────────────────────────────────────────────────────── + +.PHONY: release +release: validate build checksum ## Full release pipeline (validate + build + checksum) + @echo "$(COLOR_GREEN)✓ Release package ready$(COLOR_RESET)" + @echo "" + @echo "$(COLOR_BLUE)Next steps:$(COLOR_RESET)" + @echo " 1. Tag: git tag $(EXTENSION_VERSION)" + @echo " 2. Push: git push origin --tags" + @echo " 3. Create Gitea release and attach $(DIST_DIR)/$(EXTENSION_NAME)-$(EXTENSION_VERSION).zip" + @echo "" + +# ── Info ────────────────────────────────────────────────────────────────────── .PHONY: version -version: ## Display version information +version: ## Display version and extension info @echo "$(COLOR_BLUE)Extension Information:$(COLOR_RESET)" @echo " Name: $(EXTENSION_NAME)" @echo " Type: $(EXTENSION_TYPE)" @echo " Version: $(EXTENSION_VERSION)" - @if [ "$(EXTENSION_TYPE)" = "module" ]; then \ - echo " Module: $(MODULE_TYPE)"; \ - fi - @if [ "$(EXTENSION_TYPE)" = "plugin" ]; then \ - echo " Group: $(PLUGIN_GROUP)"; \ - fi - -.PHONY: docs -docs: ## Generate documentation - @echo "$(COLOR_BLUE)Generating documentation...$(COLOR_RESET)" - @mkdir -p $(DOCS_DIR) - @echo "$(COLOR_YELLOW)⚠ Documentation generation not configured$(COLOR_RESET)" - @echo "Consider adding phpDocumentor or similar" - -.PHONY: release -release: validate test build ## Create a release (validate + test + build) - @echo "$(COLOR_GREEN)✓ Release package ready$(COLOR_RESET)" - @echo "" - @echo "$(COLOR_BLUE)Release Checklist:$(COLOR_RESET)" - @echo " [ ] Update CHANGELOG.md" - @echo " [ ] Update version in XML manifest" - @echo " [ ] Test installation in clean Joomla" - @echo " [ ] Tag release in git: git tag v$(EXTENSION_VERSION)" - @echo " [ ] Push tags: git push --tags" - @echo " [ ] Create GitHub release" - @echo "" - @case "$(EXTENSION_TYPE)" in \ - module) PACKAGE="mod_$(EXTENSION_NAME)";; \ - plugin) PACKAGE="plg_$(PLUGIN_GROUP)_$(EXTENSION_NAME)";; \ - component) PACKAGE="com_$(EXTENSION_NAME)";; \ - package) PACKAGE="pkg_$(EXTENSION_NAME)";; \ - template) PACKAGE="tpl_$(EXTENSION_NAME)";; \ - esac; \ - echo "$(COLOR_GREEN)Package: $(DIST_DIR)/$${PACKAGE}-$(EXTENSION_VERSION).zip$(COLOR_RESET)" .PHONY: security-check -security-check: ## Run security checks on dependencies +security-check: ## Run Composer security audit @echo "$(COLOR_BLUE)Running security checks...$(COLOR_RESET)" - @if [ -f "composer.json" ]; then \ - $(COMPOSER) audit || echo "$(COLOR_YELLOW)⚠ Vulnerabilities found$(COLOR_RESET)"; \ - fi - @if [ -f "package.json" ]; then \ - $(NPM) audit || echo "$(COLOR_YELLOW)⚠ Vulnerabilities found$(COLOR_RESET)"; \ - fi + @$(COMPOSER) audit + @echo "$(COLOR_GREEN)✓ Security check complete$(COLOR_RESET)" .PHONY: all -all: install-deps validate test build ## Run complete build pipeline +all: install-deps validate build checksum ## Full pipeline: deps → validate → build → checksum @echo "$(COLOR_GREEN)✓ Complete build pipeline finished$(COLOR_RESET)" -# Default target .DEFAULT_GOAL := help diff --git a/composer.json b/composer.json index 8b13789..5f32b61 100644 --- a/composer.json +++ b/composer.json @@ -1 +1,29 @@ - +{ + "name": "mokoconsulting/mokocassiopeia", + "description": "MokoCassiopeia — Joomla site template based on Cassiopeia", + "type": "joomla-template", + "license": "GPL-3.0-or-later", + "authors": [ + { + "name": "Jonathan Miller", + "email": "hello@mokoconsulting.tech" + } + ], + "require": { + "php": ">=8.1" + }, + "require-dev": { + "mokoconsulting-tech/enterprise": "^4.0" + }, + "config": { + "sort-packages": true, + "optimize-autoloader": true, + "preferred-install": "dist" + }, + "repositories": [ + { + "type": "composer", + "url": "https://git.mokoconsulting.tech/api/packages/MokoConsulting/composer" + } + ] +}