Fix PHP CodeSniffer dependency conflict, add dev tools, implement platform-aware build system, and prepare dual-repository CI/CD migration #33

Merged
Copilot merged 10 commits from copilot/fix-composer-dependency-issue into main 2026-01-05 07:56:30 +00:00
3 changed files with 16 additions and 12 deletions
Showing only changes of commit 52a7d341ef - Show all commits

View File

@@ -658,13 +658,16 @@ else:
mkdir -p "${DIST_DIR}" mkdir -p "${DIST_DIR}"
# Detect platform and extension type using dedicated script # Detect platform and extension type using dedicated script
PLATFORM_INFO=$(python3 "${GITHUB_WORKSPACE}/scripts/release/detect_platform.py" "${GITHUB_WORKSPACE}/src") if ! PLATFORM_INFO=$(python3 "${GITHUB_WORKSPACE}/scripts/release/detect_platform.py" "${GITHUB_WORKSPACE}/src"); then
if [ $? -ne 0 ] || [ -z "${PLATFORM_INFO}" ]; then
echo "ERROR: Could not detect extension platform and type" >> "${GITHUB_STEP_SUMMARY}" echo "ERROR: Could not detect extension platform and type" >> "${GITHUB_STEP_SUMMARY}"
exit 1 exit 1
fi fi
if [ -z "${PLATFORM_INFO}" ]; then
echo "ERROR: Platform detection returned empty result" >> "${GITHUB_STEP_SUMMARY}"
exit 1
fi
PLATFORM="${PLATFORM_INFO%%|*}" PLATFORM="${PLATFORM_INFO%%|*}"
EXT_TYPE="${PLATFORM_INFO##*|}" EXT_TYPE="${PLATFORM_INFO##*|}"

View File

@@ -26,7 +26,6 @@ install:
@command -v composer >/dev/null 2>&1 || { echo "Error: composer not found. Please install composer first."; exit 1; } @command -v composer >/dev/null 2>&1 || { echo "Error: composer not found. Please install composer first."; exit 1; }
composer global require "squizlabs/php_codesniffer:^3.0" --with-all-dependencies composer global require "squizlabs/php_codesniffer:^3.0" --with-all-dependencies
composer global require "phpstan/phpstan:^1.0" --with-all-dependencies composer global require "phpstan/phpstan:^1.0" --with-all-dependencies
composer global require "phpstan/extension-installer:^1.0" --with-all-dependencies
composer global require "phpcompatibility/php-compatibility:^9.0" --with-all-dependencies composer global require "phpcompatibility/php-compatibility:^9.0" --with-all-dependencies
composer global require "codeception/codeception" --with-all-dependencies composer global require "codeception/codeception" --with-all-dependencies
composer global require "vimeo/psalm:^5.0" --with-all-dependencies composer global require "vimeo/psalm:^5.0" --with-all-dependencies

View File

@@ -134,10 +134,12 @@ def detect_dolibarr_manifest(src_dir: Union[str, Path]) -> Optional[Path]:
matches = list(src_path.glob(pattern)) matches = list(src_path.glob(pattern))
if matches: if matches:
# Verify it's actually a Dolibarr module descriptor # Verify it's actually a Dolibarr module descriptor
# Look for extends DolibarrModules pattern
for match in matches: for match in matches:
try: try:
content = match.read_text(encoding="utf-8") content = match.read_text(encoding="utf-8")
if "extends DolibarrModules" in content or "class Mod" in content: # Check for Dolibarr module inheritance pattern
if re.search(r'extends\s+DolibarrModules', content):
return match return match
except Exception: except Exception:
continue continue
copilot-pull-request-reviewer[bot] commented 2026-01-05 08:02:00 +00:00 (Migrated from github.com)
Review

Same issue as line 108-109: bare exception handler without logging. When file reading or regex matching fails, the error is silently swallowed, making it difficult to diagnose issues with Dolibarr module detection.

Same issue as line 108-109: bare exception handler without logging. When file reading or regex matching fails, the error is silently swallowed, making it difficult to diagnose issues with Dolibarr module detection.
@@ -218,14 +220,14 @@ def parse_dolibarr_descriptor(descriptor_path: Path) -> Optional[ExtensionInfo]:
try: try:
content = descriptor_path.read_text(encoding="utf-8") content = descriptor_path.read_text(encoding="utf-8")
# Extract module name from class name (try multiple patterns) # Extract module name from class that extends DolibarrModules
# Pattern 1: class ModMyModule # Pattern: class ModMyModule extends DolibarrModules
name_match = re.search(r'class\s+(Mod\w+)', content) class_match = re.search(r'class\s+(\w+)\s+extends\s+DolibarrModules', content)
if not name_match: if not class_match:
# Pattern 2: class mod_mymodule (lowercase) # Fallback: try to find any class definition
name_match = re.search(r'class\s+(mod_\w+)', content, re.IGNORECASE) class_match = re.search(r'class\s+(\w+)', content)
name = name_match.group(1) if name_match else "unknown" name = class_match.group(1) if class_match else "unknown"
# Extract version # Extract version
version_match = re.search(r'\$this->version\s*=\s*[\'"]([^\'"]+)[\'"]', content) version_match = re.search(r'\$this->version\s*=\s*[\'"]([^\'"]+)[\'"]', content)