a5b14048f4
- Rename project display name across 69 files (PHP, XML, INI, SQL, CSS, JS, JSON, MD) - Add <display-name> to .mokogitea/manifest.xml per moko-platform schema - Update pkg_mokoog.xml <name> to "Package - MokoJoomOpenGraph" (Joomla convention) - Update all update server URLs to new repo path - Add CONTRIBUTING.md and CODE_OF_CONDUCT.md (required by repo-health workflow) - Add .gitattributes for line-ending normalization and export-ignore rules - Add .gitignore Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
204 lines
6.7 KiB
Makefile
204 lines
6.7 KiB
Makefile
# Makefile for Joomla Extensions
|
|
# Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
#
|
|
# MokoJoomOpenGraph — Open Graph & social sharing meta tag management
|
|
|
|
# ==============================================================================
|
|
# CONFIGURATION - Customize these for your extension
|
|
# ==============================================================================
|
|
|
|
# Extension Configuration
|
|
EXTENSION_NAME := mokoog
|
|
EXTENSION_TYPE := package
|
|
# Options: module, plugin, component, package, template
|
|
EXTENSION_VERSION := 1.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
|
|
BUILD_DIR := build
|
|
DIST_DIR := dist
|
|
DOCS_DIR := docs
|
|
|
|
# Joomla Installation (for local testing - customize paths)
|
|
JOOMLA_ROOT := /var/www/html/joomla
|
|
JOOMLA_VERSION := 4
|
|
|
|
# Tools
|
|
PHP := php
|
|
COMPOSER := composer
|
|
NPM := npm
|
|
PHPCS := vendor/bin/phpcs
|
|
PHPCBF := vendor/bin/phpcbf
|
|
PHPUNIT := vendor/bin/phpunit
|
|
ZIP := zip
|
|
|
|
# Coding Standards
|
|
PHPCS_STANDARD := Joomla
|
|
|
|
# Colors for output
|
|
COLOR_RESET := \033[0m
|
|
COLOR_GREEN := \033[32m
|
|
COLOR_YELLOW := \033[33m
|
|
COLOR_BLUE := \033[34m
|
|
COLOR_RED := \033[31m
|
|
|
|
# ==============================================================================
|
|
# TARGETS
|
|
# ==============================================================================
|
|
|
|
.PHONY: help
|
|
help: ## Show this help message
|
|
@echo "$(COLOR_BLUE)╔════════════════════════════════════════════════════════════╗$(COLOR_RESET)"
|
|
@echo "$(COLOR_BLUE)║ Joomla Extension Makefile ║$(COLOR_RESET)"
|
|
@echo "$(COLOR_BLUE)╚════════════════════════════════════════════════════════════╝$(COLOR_RESET)"
|
|
@echo ""
|
|
@echo "Extension: $(EXTENSION_NAME) ($(EXTENSION_TYPE)) v$(EXTENSION_VERSION)"
|
|
@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 ""
|
|
|
|
.PHONY: install-deps
|
|
install-deps: ## Install all dependencies (Composer + npm)
|
|
@echo "$(COLOR_BLUE)Installing dependencies...$(COLOR_RESET)"
|
|
@if [ -f "composer.json" ]; then \
|
|
$(COMPOSER) install; \
|
|
echo "$(COLOR_GREEN)✓ Composer dependencies installed$(COLOR_RESET)"; \
|
|
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)"
|
|
|
|
.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: validate
|
|
validate: lint phpcs ## Run all validation checks
|
|
@echo "$(COLOR_GREEN)✓ All validation checks passed$(COLOR_RESET)"
|
|
|
|
.PHONY: clean
|
|
clean: ## Clean build artifacts
|
|
@echo "$(COLOR_BLUE)Cleaning build artifacts...$(COLOR_RESET)"
|
|
@rm -rf $(BUILD_DIR) $(DIST_DIR)
|
|
@echo "$(COLOR_GREEN)✓ Build artifacts cleaned$(COLOR_RESET)"
|
|
|
|
MOKO_PLATFORM ?= $(or $(wildcard ../moko-platform),$(wildcard $(HOME)/moko-platform),$(wildcard /opt/moko-platform))
|
|
MINIFY_SCRIPT := $(MOKO_PLATFORM)/build/minify.js
|
|
|
|
.PHONY: minify
|
|
minify: ## Minify CSS/JS assets
|
|
@echo "Minifying assets..."
|
|
@if [ -f "$(MINIFY_SCRIPT)" ]; then \
|
|
node "$(MINIFY_SCRIPT)" $(SRC_DIR); \
|
|
elif [ -f "scripts/minify.js" ]; then \
|
|
node scripts/minify.js; \
|
|
else \
|
|
echo "No minify script found"; \
|
|
fi
|
|
|
|
.PHONY: build
|
|
build: clean validate minify ## 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)"; \
|
|
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)"
|
|
|
|
.PHONY: package
|
|
package: build ## Alias for build
|
|
@echo "$(COLOR_GREEN)✓ Package ready for distribution$(COLOR_RESET)"
|
|
|
|
.PHONY: release
|
|
release: validate build ## Create a release (validate + build)
|
|
@echo "$(COLOR_GREEN)✓ Release package ready$(COLOR_RESET)"
|
|
|
|
.PHONY: version
|
|
version: ## Display version information
|
|
@echo "$(COLOR_BLUE)Extension Information:$(COLOR_RESET)"
|
|
@echo " Name: $(EXTENSION_NAME)"
|
|
@echo " Type: $(EXTENSION_TYPE)"
|
|
@echo " Version: $(EXTENSION_VERSION)"
|
|
|
|
.PHONY: security-check
|
|
security-check: ## Run security checks on dependencies
|
|
@echo "$(COLOR_BLUE)Running security checks...$(COLOR_RESET)"
|
|
@if [ -f "composer.json" ]; then \
|
|
$(COMPOSER) audit || echo "$(COLOR_YELLOW)⚠ Vulnerabilities found$(COLOR_RESET)"; \
|
|
fi
|
|
|
|
.PHONY: all
|
|
all: install-deps validate build ## Run complete build pipeline
|
|
@echo "$(COLOR_GREEN)✓ Complete build pipeline finished$(COLOR_RESET)"
|
|
|
|
# Default target
|
|
.DEFAULT_GOAL := help
|