c5d4445bc1
Joomla: Extension CI / Tests (PHP 8.2) (pull_request) Blocked by required conditions
Joomla: Extension CI / Tests (PHP 8.3) (pull_request) Blocked by required conditions
Joomla: Extension CI / PHPStan Analysis (pull_request) Blocked by required conditions
Universal: PR Check / Build RC Package (pull_request) Blocked by required conditions
Universal: PR Check / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Release configuration (pull_request) Blocked by required conditions
Generic: Repo Health / Scripts governance (pull_request) Blocked by required conditions
Generic: Repo Health / Repository health (pull_request) Blocked by required conditions
Generic: Repo Health / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Site Health (pull_request) Has been skipped
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Generic: Repo Health / Access control (pull_request) Successful in 1s
Joomla: Extension CI / Release Readiness Check (pull_request) Failing after 4s
Universal: Secret Scanning / Gitleaks Secret Scan (pull_request) Successful in 4s
Joomla: Extension CI / Lint & Validate (pull_request) Failing after 5s
Universal: Auto Version Bump / Version Bump (push) Failing after 3s
Universal: PR Check / Validate PR (pull_request) Failing after 5s
Generic: Repo Health / Release configuration (push) Blocked by required conditions
Generic: Repo Health / Scripts governance (push) Blocked by required conditions
Generic: Repo Health / Repository health (push) Blocked by required conditions
Generic: Repo Health / Report Issues (push) Blocked by required conditions
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 2s
Remove local build/package targets — all packaging is handled by the pre-release and auto-release CI workflows. The release target now dispatches the pre-release workflow via Gitea API. Added release-rc target and validate-xml check. Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
166 lines
6.7 KiB
Makefile
166 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
|
|
#
|
|
# MokoJoomBackup — Full-site backup and restore for Joomla
|
|
#
|
|
# Builds and releases are handled by CI workflows (pre-release.yml,
|
|
# auto-release.yml). This Makefile provides local validation helpers
|
|
# and workflow dispatch shortcuts.
|
|
|
|
# ==============================================================================
|
|
# CONFIGURATION
|
|
# ==============================================================================
|
|
|
|
EXTENSION_NAME := mokobackup
|
|
EXTENSION_TYPE := package
|
|
|
|
SRC_DIR := src
|
|
|
|
# Gitea
|
|
GITEA_URL := https://git.mokoconsulting.tech
|
|
GITEA_ORG := MokoConsulting
|
|
GITEA_REPO := MokoJoomBackup
|
|
|
|
# Tools
|
|
PHP := php
|
|
COMPOSER := composer
|
|
PHPCS := vendor/bin/phpcs
|
|
|
|
# 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)║ MokoJoomBackup Makefile ║$(COLOR_RESET)"
|
|
@echo "$(COLOR_BLUE)╚════════════════════════════════════════════════════════════╝$(COLOR_RESET)"
|
|
@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 ""
|
|
|
|
# -- Validation ----------------------------------------------------------------
|
|
|
|
.PHONY: lint
|
|
lint: ## Run PHP syntax check on all source files
|
|
@echo "$(COLOR_BLUE)Running PHP linter...$(COLOR_RESET)"
|
|
@ERROR=0; \
|
|
find $(SRC_DIR) -name "*.php" -exec $(PHP) -l {} \; 2>&1 | grep -v "No syntax errors" || true; \
|
|
if find $(SRC_DIR) -name "*.php" -exec $(PHP) -l {} \; 2>&1 | grep -q "Parse error"; then \
|
|
echo "$(COLOR_RED)✗ Syntax errors found$(COLOR_RESET)"; exit 1; \
|
|
fi
|
|
@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 $(SRC_DIR); \
|
|
else \
|
|
echo "$(COLOR_YELLOW)⚠ PHP CodeSniffer not installed. Run: composer install$(COLOR_RESET)"; \
|
|
fi
|
|
|
|
.PHONY: validate
|
|
validate: lint ## Run all local validation checks
|
|
@echo "$(COLOR_GREEN)✓ Validation passed$(COLOR_RESET)"
|
|
|
|
.PHONY: validate-xml
|
|
validate-xml: ## Validate all XML manifests are well-formed
|
|
@echo "$(COLOR_BLUE)Validating XML manifests...$(COLOR_RESET)"
|
|
@ERROR=0; \
|
|
for f in $$(find $(SRC_DIR) -name "*.xml"); do \
|
|
$(PHP) -r "new SimpleXMLElement(file_get_contents('$$f'));" 2>/dev/null \
|
|
|| { echo "$(COLOR_RED)✗ Invalid XML: $$f$(COLOR_RESET)"; ERROR=1; }; \
|
|
done; \
|
|
[ $$ERROR -eq 0 ] && echo "$(COLOR_GREEN)✓ All XML manifests valid$(COLOR_RESET)" || exit 1
|
|
|
|
# -- Dependencies --------------------------------------------------------------
|
|
|
|
.PHONY: install-deps
|
|
install-deps: ## Install PHP dependencies via Composer
|
|
@echo "$(COLOR_BLUE)Installing dependencies...$(COLOR_RESET)"
|
|
@if [ -f "composer.json" ]; then \
|
|
$(COMPOSER) install; \
|
|
echo "$(COLOR_GREEN)✓ Composer dependencies installed$(COLOR_RESET)"; \
|
|
fi
|
|
|
|
.PHONY: security-check
|
|
security-check: ## Run security audit 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
|
|
|
|
# -- Minify --------------------------------------------------------------------
|
|
|
|
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 "$(COLOR_BLUE)Minifying assets...$(COLOR_RESET)"
|
|
@if [ -f "$(MINIFY_SCRIPT)" ]; then \
|
|
node "$(MINIFY_SCRIPT)" $(SRC_DIR); \
|
|
elif [ -f "scripts/minify.js" ]; then \
|
|
node scripts/minify.js; \
|
|
else \
|
|
echo "$(COLOR_YELLOW)⚠ No minify script found$(COLOR_RESET)"; \
|
|
fi
|
|
|
|
# -- Release (CI workflow dispatch) --------------------------------------------
|
|
|
|
.PHONY: release
|
|
release: validate validate-xml ## Trigger pre-release build via CI workflow
|
|
@echo "$(COLOR_BLUE)Triggering pre-release workflow...$(COLOR_RESET)"
|
|
@if ! command -v curl >/dev/null 2>&1; then \
|
|
echo "$(COLOR_RED)✗ curl required$(COLOR_RESET)"; exit 1; \
|
|
fi
|
|
@if [ -z "$$MOKOGITEA_TOKEN" ]; then \
|
|
echo "$(COLOR_RED)✗ MOKOGITEA_TOKEN not set$(COLOR_RESET)"; exit 1; \
|
|
fi
|
|
@BRANCH=$$(git rev-parse --abbrev-ref HEAD); \
|
|
curl -sf -X POST \
|
|
-H "Authorization: token $$MOKOGITEA_TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
"$(GITEA_URL)/api/v1/repos/$(GITEA_ORG)/$(GITEA_REPO)/actions/workflows/pre-release.yml/dispatches" \
|
|
-d "{\"ref\":\"$$BRANCH\",\"inputs\":{\"stability\":\"development\"}}" \
|
|
&& echo "$(COLOR_GREEN)✓ Pre-release dispatched on $$BRANCH (development channel)$(COLOR_RESET)" \
|
|
|| { echo "$(COLOR_RED)✗ Dispatch failed$(COLOR_RESET)"; exit 1; }
|
|
|
|
.PHONY: release-rc
|
|
release-rc: validate validate-xml ## Trigger release-candidate build via CI workflow
|
|
@echo "$(COLOR_BLUE)Triggering RC pre-release workflow...$(COLOR_RESET)"
|
|
@if [ -z "$$MOKOGITEA_TOKEN" ]; then \
|
|
echo "$(COLOR_RED)✗ MOKOGITEA_TOKEN not set$(COLOR_RESET)"; exit 1; \
|
|
fi
|
|
@BRANCH=$$(git rev-parse --abbrev-ref HEAD); \
|
|
curl -sf -X POST \
|
|
-H "Authorization: token $$MOKOGITEA_TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
"$(GITEA_URL)/api/v1/repos/$(GITEA_ORG)/$(GITEA_REPO)/actions/workflows/pre-release.yml/dispatches" \
|
|
-d "{\"ref\":\"$$BRANCH\",\"inputs\":{\"stability\":\"release-candidate\"}}" \
|
|
&& echo "$(COLOR_GREEN)✓ Pre-release dispatched on $$BRANCH (release-candidate channel)$(COLOR_RESET)" \
|
|
|| { echo "$(COLOR_RED)✗ Dispatch failed$(COLOR_RESET)"; exit 1; }
|
|
|
|
# -- Info ----------------------------------------------------------------------
|
|
|
|
.PHONY: version
|
|
version: ## Display version from package manifest
|
|
@VERSION=$$(grep '<version>' $(SRC_DIR)/pkg_mokobackup.xml | sed 's/.*<version>\(.*\)<\/version>.*/\1/'); \
|
|
echo "$(COLOR_BLUE)$(EXTENSION_NAME)$(COLOR_RESET) v$$VERSION ($(EXTENSION_TYPE))"
|
|
|
|
# Default target
|
|
.DEFAULT_GOAL := help
|