Integrate MokoStandards API for build and validation
Some checks failed
Repo Health / Access control (push) Failing after 9s
Repo Health / Release configuration (push) Has been skipped
Repo Health / Scripts governance (push) Has been skipped
Repo Health / Repository health (push) Has been skipped

- 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) <noreply@anthropic.com>
This commit is contained in:
Jonathan Miller
2026-04-14 18:02:26 -05:00
parent 15a43fcdca
commit 652307b774
2 changed files with 157 additions and 263 deletions

390
Makefile
View File

@@ -1,58 +1,32 @@
# Makefile for Joomla Extensions # Makefile for MokoCassiopeia Joomla Template
# Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech> # Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This is a reference Makefile for building Joomla extensions. # Build and validation powered by MokoStandards Enterprise API
# Copy this to your repository root as "Makefile" and customize as needed. # Install: composer install
#
# Supports: Modules, Plugins, Components, Packages, Templates
# ============================================================================== # ==============================================================================
# CONFIGURATION - Customize these for your extension # CONFIGURATION
# ============================================================================== # ==============================================================================
# Extension Configuration EXTENSION_NAME := mokocassiopeia
EXTENSION_NAME := mokoexample EXTENSION_TYPE := template
EXTENSION_TYPE := module EXTENSION_VERSION := $(shell grep -oP 'VERSION:\s*\K[0-9.]+' README.md 2>/dev/null || echo "0.0.0")
# Options: module, plugin, component, package, template
EXTENSION_VERSION := 1.0.0
# Module Configuration (for modules only) SRC_DIR := src
MODULE_TYPE := site
# Options: site, admin
# Plugin Configuration (for plugins only)
PLUGIN_GROUP := system
# Options: system, content, user, authentication, etc.
# Directories
SRC_DIR := .
BUILD_DIR := build BUILD_DIR := build
DIST_DIR := dist DIST_DIR := dist
DOCS_DIR := docs
# Joomla Installation (for local testing - customize paths) PHP := php
JOOMLA_ROOT := /var/www/html/joomla
JOOMLA_VERSION := 4
# Tools
PHP := php
COMPOSER := composer COMPOSER := composer
NPM := npm MOKO := vendor/bin/moko
PHPCS := vendor/bin/phpcs
PHPCBF := vendor/bin/phpcbf
PHPUNIT := vendor/bin/phpunit
ZIP := zip
# Coding Standards # Colors
PHPCS_STANDARD := Joomla COLOR_RESET := \033[0m
COLOR_GREEN := \033[32m
# Colors for output
COLOR_RESET := \033[0m
COLOR_GREEN := \033[32m
COLOR_YELLOW := \033[33m COLOR_YELLOW := \033[33m
COLOR_BLUE := \033[34m COLOR_BLUE := \033[34m
COLOR_RED := \033[31m COLOR_RED := \033[31m
# ============================================================================== # ==============================================================================
# TARGETS # TARGETS
@@ -61,92 +35,85 @@ COLOR_RED := \033[31m
.PHONY: help .PHONY: help
help: ## Show this help message help: ## Show this help message
@echo "$(COLOR_BLUE)╔════════════════════════════════════════════════════════════╗$(COLOR_RESET)" @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 "$(COLOR_BLUE)╚════════════════════════════════════════════════════════════╝$(COLOR_RESET)"
@echo "" @echo ""
@echo "Extension: $(EXTENSION_NAME) ($(EXTENSION_TYPE)) v$(EXTENSION_VERSION)" @echo "Extension: $(EXTENSION_NAME) ($(EXTENSION_TYPE)) v$(EXTENSION_VERSION)"
@echo "Powered by: MokoStandards Enterprise API"
@echo "" @echo ""
@echo "$(COLOR_GREEN)Available targets:$(COLOR_RESET)" @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}' @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " $(COLOR_BLUE)%-20s$(COLOR_RESET) %s\n", $$1, $$2}'
@echo "" @echo ""
@echo "$(COLOR_YELLOW)Quick Start:$(COLOR_RESET)"
@echo " 1. make install-deps # Install dependencies" # ── Dependencies ──────────────────────────────────────────────────────────────
@echo " 2. make build # Build extension package"
@echo " 3. make test # Run tests"
@echo ""
.PHONY: install-deps .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)" @echo "$(COLOR_BLUE)Installing dependencies...$(COLOR_RESET)"
@if [ -f "composer.json" ]; then \ @$(COMPOSER) install
$(COMPOSER) install; \ @echo "$(COLOR_GREEN)✓ Dependencies installed$(COLOR_RESET)"
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
.PHONY: update-deps .PHONY: update-deps
update-deps: ## Update all dependencies update-deps: ## Update Composer dependencies
@echo "$(COLOR_BLUE)Updating dependencies...$(COLOR_RESET)" @echo "$(COLOR_BLUE)Updating dependencies...$(COLOR_RESET)"
@if [ -f "composer.json" ]; then \ @$(COMPOSER) update
$(COMPOSER) update; \ @echo "$(COLOR_GREEN)✓ Dependencies updated$(COLOR_RESET)"
echo "$(COLOR_GREEN)✓ Composer dependencies updated$(COLOR_RESET)"; \
fi # ── Validation (MokoStandards API) ────────────────────────────────────────────
@if [ -f "package.json" ]; then \
$(NPM) update; \ .PHONY: check-moko
echo "$(COLOR_GREEN)✓ npm dependencies updated$(COLOR_RESET)"; \ check-moko:
@if [ ! -f "$(MOKO)" ]; then \
echo "$(COLOR_RED)✗ MokoStandards CLI not found. Run: make install-deps$(COLOR_RESET)"; \
exit 1; \
fi fi
.PHONY: lint .PHONY: lint
lint: ## Run PHP linter (syntax check) lint: check-moko ## PHP syntax check via MokoStandards
@echo "$(COLOR_BLUE)Running PHP linter...$(COLOR_RESET)" @echo "$(COLOR_BLUE)Running PHP syntax check...$(COLOR_RESET)"
@find . -name "*.php" ! -path "./vendor/*" ! -path "./node_modules/*" ! -path "./$(BUILD_DIR)/*" \ @$(PHP) $(MOKO) check:syntax -- --path .
-exec $(PHP) -l {} \; | grep -v "No syntax errors" || true @echo "$(COLOR_GREEN)✓ PHP syntax OK$(COLOR_RESET)"
@echo "$(COLOR_GREEN)✓ PHP linting complete$(COLOR_RESET)"
.PHONY: phpcs .PHONY: check-joomla
phpcs: ## Run PHP CodeSniffer (Joomla standards) check-joomla: check-moko ## Validate Joomla manifest via MokoStandards
@echo "$(COLOR_BLUE)Running PHP CodeSniffer...$(COLOR_RESET)" @echo "$(COLOR_BLUE)Validating Joomla manifest...$(COLOR_RESET)"
@if [ -f "$(PHPCS)" ]; then \ @$(PHP) $(MOKO) check:joomla -- --path .
$(PHPCS) --standard=$(PHPCS_STANDARD) --extensions=php --ignore=vendor,node_modules,$(BUILD_DIR) .; \ @echo "$(COLOR_GREEN)✓ Joomla manifest valid$(COLOR_RESET)"
else \
echo "$(COLOR_YELLOW)⚠ PHP CodeSniffer not installed. Run: make install-deps$(COLOR_RESET)"; \
fi
.PHONY: phpcbf .PHONY: check-version
phpcbf: ## Fix coding standards automatically check-version: check-moko ## Verify version consistency across files
@echo "$(COLOR_BLUE)Running PHP Code Beautifier...$(COLOR_RESET)" @echo "$(COLOR_BLUE)Checking version consistency...$(COLOR_RESET)"
@if [ -f "$(PHPCBF)" ]; then \ @$(PHP) $(MOKO) check:version -- --path .
$(PHPCBF) --standard=$(PHPCS_STANDARD) --extensions=php --ignore=vendor,node_modules,$(BUILD_DIR) .; \ @echo "$(COLOR_GREEN)✓ Versions consistent$(COLOR_RESET)"
echo "$(COLOR_GREEN)✓ Code formatting applied$(COLOR_RESET)"; \
else \ .PHONY: check-headers
echo "$(COLOR_YELLOW)⚠ PHP Code Beautifier not installed. Run: make install-deps$(COLOR_RESET)"; \ check-headers: check-moko ## Check license headers on source files
fi @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 .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)" @echo "$(COLOR_GREEN)✓ All validation checks passed$(COLOR_RESET)"
.PHONY: test .PHONY: health
test: ## Run PHPUnit tests health: check-moko ## Full repository health check via MokoStandards
@echo "$(COLOR_BLUE)Running tests...$(COLOR_RESET)" @echo "$(COLOR_BLUE)Running full health check...$(COLOR_RESET)"
@if [ -f "$(PHPUNIT)" ] && [ -f "phpunit.xml" ]; then \ @$(PHP) $(MOKO) health -- --path .
$(PHPUNIT); \
else \
echo "$(COLOR_YELLOW)⚠ PHPUnit not configured$(COLOR_RESET)"; \
fi
.PHONY: test-coverage # ── Build ─────────────────────────────────────────────────────────────────────
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
.PHONY: clean .PHONY: clean
clean: ## Clean build artifacts clean: ## Clean build artifacts
@@ -155,179 +122,78 @@ clean: ## Clean build artifacts
@echo "$(COLOR_GREEN)✓ Build artifacts cleaned$(COLOR_RESET)" @echo "$(COLOR_GREEN)✓ Build artifacts cleaned$(COLOR_RESET)"
.PHONY: build .PHONY: build
build: clean validate ## Build extension package build: clean ## Build template installable ZIP from src/
@echo "$(COLOR_BLUE)Building Joomla extension package...$(COLOR_RESET)" @echo "$(COLOR_BLUE)Building $(EXTENSION_NAME) v$(EXTENSION_VERSION)...$(COLOR_RESET)"
@mkdir -p $(DIST_DIR) $(BUILD_DIR) @mkdir -p $(BUILD_DIR)/package $(DIST_DIR)
@cp -r $(SRC_DIR)/* $(BUILD_DIR)/package/
# Determine package prefix based on extension type @cd $(BUILD_DIR)/package && \
@case "$(EXTENSION_TYPE)" in \ if command -v zip >/dev/null 2>&1; then \
module) \ zip -r "../../$(DIST_DIR)/$(EXTENSION_NAME)-$(EXTENSION_VERSION).zip" .; \
PACKAGE_PREFIX="mod_$(EXTENSION_NAME)"; \ elif command -v pwsh >/dev/null 2>&1; then \
BUILD_TARGET="$(BUILD_DIR)/$$PACKAGE_PREFIX"; \ pwsh -Command "Compress-Archive -Path '*' -DestinationPath '../../$(DIST_DIR)/$(EXTENSION_NAME)-$(EXTENSION_VERSION).zip' -Force"; \
;; \ elif command -v powershell >/dev/null 2>&1; then \
plugin) \ powershell -Command "Compress-Archive -Path '*' -DestinationPath '../../$(DIST_DIR)/$(EXTENSION_NAME)-$(EXTENSION_VERSION).zip' -Force"; \
PACKAGE_PREFIX="plg_$(PLUGIN_GROUP)_$(EXTENSION_NAME)"; \ else \
BUILD_TARGET="$(BUILD_DIR)/$$PACKAGE_PREFIX"; \ echo "$(COLOR_RED)✗ No zip tool found (zip, pwsh, powershell)$(COLOR_RESET)"; \
;; \
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)"; \
exit 1; \ exit 1; \
;; \ fi
esac; \ @echo "$(COLOR_GREEN)✓ Package: $(DIST_DIR)/$(EXTENSION_NAME)-$(EXTENSION_VERSION).zip$(COLOR_RESET)"
\
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)"
.PHONY: package .PHONY: build-beta
package: build ## Alias for build build-beta: clean ## Build beta release ZIP
@echo "$(COLOR_GREEN)✓ Package ready for distribution$(COLOR_RESET)" @echo "$(COLOR_BLUE)Building $(EXTENSION_NAME) v$(EXTENSION_VERSION)-beta...$(COLOR_RESET)"
@mkdir -p $(BUILD_DIR)/package $(DIST_DIR)
.PHONY: install-local @cp -r $(SRC_DIR)/* $(BUILD_DIR)/package/
install-local: build ## Install to local Joomla (upload via admin) @cd $(BUILD_DIR)/package && \
@echo "$(COLOR_BLUE)Package ready for installation$(COLOR_RESET)" if command -v zip >/dev/null 2>&1; then \
@case "$(EXTENSION_TYPE)" in \ zip -r "../../$(DIST_DIR)/$(EXTENSION_NAME)-$(EXTENSION_VERSION)-beta.zip" .; \
module) PACKAGE="mod_$(EXTENSION_NAME)";; \ elif command -v pwsh >/dev/null 2>&1; then \
plugin) PACKAGE="plg_$(PLUGIN_GROUP)_$(EXTENSION_NAME)";; \ pwsh -Command "Compress-Archive -Path '*' -DestinationPath '../../$(DIST_DIR)/$(EXTENSION_NAME)-$(EXTENSION_VERSION)-beta.zip' -Force"; \
component) PACKAGE="com_$(EXTENSION_NAME)";; \ elif command -v powershell >/dev/null 2>&1; then \
package) PACKAGE="pkg_$(EXTENSION_NAME)";; \ powershell -Command "Compress-Archive -Path '*' -DestinationPath '../../$(DIST_DIR)/$(EXTENSION_NAME)-$(EXTENSION_VERSION)-beta.zip' -Force"; \
template) PACKAGE="tpl_$(EXTENSION_NAME)";; \ else \
esac; \ echo "$(COLOR_RED)✗ No zip tool found$(COLOR_RESET)"; \
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"; \
exit 1; \ exit 1; \
;; \ fi
*) \ @echo "$(COLOR_GREEN)✓ Package: $(DIST_DIR)/$(EXTENSION_NAME)-$(EXTENSION_VERSION)-beta.zip$(COLOR_RESET)"
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)"
.PHONY: watch .PHONY: checksum
watch: ## Watch for changes and rebuild checksum: ## Generate SHA-256 checksums for dist packages
@echo "$(COLOR_BLUE)Watching for changes...$(COLOR_RESET)" @echo "$(COLOR_BLUE)Generating checksums...$(COLOR_RESET)"
@echo "$(COLOR_YELLOW)Press Ctrl+C to stop$(COLOR_RESET)" @for f in $(DIST_DIR)/*.zip; do \
@while true; do \ sha256sum "$$f" | tee "$${f}.sha256"; \
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; \
done 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 .PHONY: version
version: ## Display version information version: ## Display version and extension info
@echo "$(COLOR_BLUE)Extension Information:$(COLOR_RESET)" @echo "$(COLOR_BLUE)Extension Information:$(COLOR_RESET)"
@echo " Name: $(EXTENSION_NAME)" @echo " Name: $(EXTENSION_NAME)"
@echo " Type: $(EXTENSION_TYPE)" @echo " Type: $(EXTENSION_TYPE)"
@echo " Version: $(EXTENSION_VERSION)" @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 .PHONY: security-check
security-check: ## Run security checks on dependencies security-check: ## Run Composer security audit
@echo "$(COLOR_BLUE)Running security checks...$(COLOR_RESET)" @echo "$(COLOR_BLUE)Running security checks...$(COLOR_RESET)"
@if [ -f "composer.json" ]; then \ @$(COMPOSER) audit
$(COMPOSER) audit || echo "$(COLOR_YELLOW)⚠ Vulnerabilities found$(COLOR_RESET)"; \ @echo "$(COLOR_GREEN)✓ Security check complete$(COLOR_RESET)"
fi
@if [ -f "package.json" ]; then \
$(NPM) audit || echo "$(COLOR_YELLOW)⚠ Vulnerabilities found$(COLOR_RESET)"; \
fi
.PHONY: all .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)" @echo "$(COLOR_GREEN)✓ Complete build pipeline finished$(COLOR_RESET)"
# Default target
.DEFAULT_GOAL := help .DEFAULT_GOAL := help

View File

@@ -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"
}
]
}