|
|
|
@@ -4,8 +4,8 @@
|
|
|
|
|
#
|
|
|
|
|
# FILE INFORMATION
|
|
|
|
|
# DEFGROUP: Gitea.Workflow
|
|
|
|
|
# INGROUP: MokoStandards.Release
|
|
|
|
|
# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/MokoStandards-API
|
|
|
|
|
# INGROUP: moko-platform.Release
|
|
|
|
|
# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/moko-platform
|
|
|
|
|
# PATH: /templates/workflows/universal/auto-release.yml.template
|
|
|
|
|
# VERSION: 05.00.00
|
|
|
|
|
# BRIEF: Universal build & release � detects platform from manifest.xml
|
|
|
|
@@ -58,7 +58,7 @@ jobs:
|
|
|
|
|
token: ${{ secrets.GA_TOKEN }}
|
|
|
|
|
fetch-depth: 0
|
|
|
|
|
|
|
|
|
|
- name: Setup MokoStandards tools
|
|
|
|
|
- name: Setup moko-platform tools
|
|
|
|
|
env:
|
|
|
|
|
MOKO_CLONE_TOKEN: ${{ secrets.GA_TOKEN }}
|
|
|
|
|
MOKO_CLONE_HOST: git.mokoconsulting.tech/MokoConsulting
|
|
|
|
@@ -69,9 +69,9 @@ jobs:
|
|
|
|
|
sudo apt-get update -qq && sudo apt-get install -y -qq php-cli php-mbstring php-xml php-zip php-curl composer >/dev/null 2>&1
|
|
|
|
|
fi
|
|
|
|
|
git clone --depth 1 --branch main --quiet \
|
|
|
|
|
"https://x-access-token:${MOKO_CLONE_TOKEN}@${MOKO_CLONE_HOST}/MokoStandards-API.git" \
|
|
|
|
|
/tmp/mokostandards-api
|
|
|
|
|
cd /tmp/mokostandards-api
|
|
|
|
|
"https://x-access-token:${MOKO_CLONE_TOKEN}@${MOKO_CLONE_HOST}/moko-platform.git" \
|
|
|
|
|
/tmp/moko-platform-api
|
|
|
|
|
cd /tmp/moko-platform-api
|
|
|
|
|
composer install --no-dev --no-interaction --quiet
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -80,15 +80,15 @@ jobs:
|
|
|
|
|
id: platform
|
|
|
|
|
run: |
|
|
|
|
|
# Parse .manifest.xml via manifest_read.php — outputs all fields to GITHUB_OUTPUT
|
|
|
|
|
php /tmp/mokostandards-api/cli/manifest_read.php --path . --github-output 2>/dev/null || true
|
|
|
|
|
PLATFORM=$(php /tmp/mokostandards-api/cli/manifest_read.php --path . --field platform 2>/dev/null)
|
|
|
|
|
php /tmp/moko-platform-api/cli/manifest_read.php --path . --github-output 2>/dev/null || true
|
|
|
|
|
PLATFORM=$(php /tmp/moko-platform-api/cli/manifest_read.php --path . --field platform 2>/dev/null)
|
|
|
|
|
[ -z "$PLATFORM" ] && PLATFORM="generic"
|
|
|
|
|
echo "platform=$PLATFORM" >> "$GITHUB_OUTPUT"
|
|
|
|
|
echo "Platform detected: ${PLATFORM}"
|
|
|
|
|
# entry-point from manifest, find as fallback
|
|
|
|
|
MOD_FILE=$(php /tmp/mokostandards-api/cli/manifest_read.php --path . --field entry-point 2>/dev/null)
|
|
|
|
|
[ -z "$MOD_FILE" ] && MOD_FILE=$(find . -maxdepth 4 -name "mod*.class.php" ! -path "./.git/*" -exec grep -l 'extends DolibarrModules' {} \; 2>/dev/null | head -1)
|
|
|
|
|
MANIFEST=$(find . -maxdepth 3 -name "*.xml" ! -path "./.git/*" -exec grep -l '<extension' {} \; 2>/dev/null | head -1)
|
|
|
|
|
MOD_FILE=$(php /tmp/moko-platform-api/cli/manifest_read.php --path . --field entry-point 2>/dev/null)
|
|
|
|
|
[ -z "$MOD_FILE" ] && MOD_FILE=$(find . -maxdepth 4 -name "mod*.class.php" ! -path "./.git/*" -exec grep -l 'extends DolibarrModules' {} \; 2>/dev/null | head -1 || true)
|
|
|
|
|
MANIFEST=$(find . -maxdepth 3 -name "*.xml" ! -path "./.git/*" -exec grep -l '<extension' {} \; 2>/dev/null | head -1 || true)
|
|
|
|
|
echo "manifest=${MANIFEST}" >> "$GITHUB_OUTPUT"
|
|
|
|
|
echo "mod_file=${MOD_FILE}" >> "$GITHUB_OUTPUT"
|
|
|
|
|
|
|
|
|
@@ -96,7 +96,7 @@ jobs:
|
|
|
|
|
- name: "Step 1: Read version from README.md"
|
|
|
|
|
id: version
|
|
|
|
|
run: |
|
|
|
|
|
VERSION=$(php /tmp/mokostandards-api/cli/version_read.php --path . 2>/dev/null)
|
|
|
|
|
VERSION=$(php /tmp/moko-platform-api/cli/version_read.php --path . 2>/dev/null)
|
|
|
|
|
if [ -z "$VERSION" ]; then
|
|
|
|
|
echo "No VERSION in README.md — skipping release"
|
|
|
|
|
echo "skip=true" >> "$GITHUB_OUTPUT"
|
|
|
|
@@ -129,7 +129,7 @@ jobs:
|
|
|
|
|
if: steps.version.outputs.skip != 'true'
|
|
|
|
|
id: bump
|
|
|
|
|
run: |
|
|
|
|
|
CURRENT=$(sed -n 's/.*VERSION:[[:space:]]*\([0-9][0-9]\.[0-9][0-9]\.[0-9][0-9]\).*/\1/p' README.md 2>/dev/null | head -1)
|
|
|
|
|
CURRENT=$(sed -n 's/.*VERSION:[[:space:]]*\([0-9][0-9]\.[0-9][0-9]\.[0-9][0-9]\).*/\1/p' README.md 2>/dev/null | head -1 || true)
|
|
|
|
|
[ -z "$CURRENT" ] && { echo "skip=true" >> "$GITHUB_OUTPUT"; exit 0; }
|
|
|
|
|
|
|
|
|
|
MAJOR=$((10#$(echo "$CURRENT" | cut -d. -f1)))
|
|
|
|
@@ -157,7 +157,7 @@ jobs:
|
|
|
|
|
case "$PLATFORM" in
|
|
|
|
|
joomla)
|
|
|
|
|
if [ -n "$MANIFEST" ]; then
|
|
|
|
|
MANIFEST_VER=$(sed -n 's/.*<version>\([^<]*\)<\/version>.*/\1/p' "$MANIFEST" | head -1)
|
|
|
|
|
MANIFEST_VER=$(sed -n 's/.*<version>\([^<]*\)<\/version>.*/\1/p' "$MANIFEST" | head -1 || true)
|
|
|
|
|
[ -n "$MANIFEST_VER" ] && sed -i "s|<version>${MANIFEST_VER}</version>|<version>${VERSION}</version>|" "$MANIFEST"
|
|
|
|
|
sed -i "s|<creationDate>[^<]*</creationDate>|<creationDate>${TODAY}</creationDate>|" "$MANIFEST"
|
|
|
|
|
fi
|
|
|
|
@@ -229,7 +229,7 @@ jobs:
|
|
|
|
|
echo "" >> $GITHUB_STEP_SUMMARY
|
|
|
|
|
|
|
|
|
|
# -- Version drift check (must pass before release) --------
|
|
|
|
|
README_VER=$(sed -n 's/.*VERSION:[[:space:]]*\([0-9][0-9]\.[0-9][0-9]\.[0-9][0-9]\).*/\1/p' README.md 2>/dev/null | head -1)
|
|
|
|
|
README_VER=$(sed -n 's/.*VERSION:[[:space:]]*\([0-9][0-9]\.[0-9][0-9]\.[0-9][0-9]\).*/\1/p' README.md 2>/dev/null | head -1 || true)
|
|
|
|
|
if [ "$README_VER" != "$VERSION" ]; then
|
|
|
|
|
echo "- Version drift: README says \`${README_VER}\` but releasing \`${VERSION}\`" >> $GITHUB_STEP_SUMMARY
|
|
|
|
|
ERRORS=$((ERRORS+1))
|
|
|
|
@@ -238,7 +238,7 @@ jobs:
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Check CHANGELOG version matches
|
|
|
|
|
CL_VER=$(sed -n 's/.*VERSION:[[:space:]]*\([0-9][0-9]\.[0-9][0-9]\.[0-9][0-9]\).*/\1/p' CHANGELOG.md 2>/dev/null | head -1)
|
|
|
|
|
CL_VER=$(sed -n 's/.*VERSION:[[:space:]]*\([0-9][0-9]\.[0-9][0-9]\.[0-9][0-9]\).*/\1/p' CHANGELOG.md 2>/dev/null | head -1 || true)
|
|
|
|
|
if [ -n "$CL_VER" ] && [ "$CL_VER" != "$VERSION" ]; then
|
|
|
|
|
echo "- CHANGELOG drift: \`${CL_VER}\` != \`${VERSION}\`" >> $GITHUB_STEP_SUMMARY
|
|
|
|
|
ERRORS=$((ERRORS+1))
|
|
|
|
@@ -246,7 +246,7 @@ jobs:
|
|
|
|
|
|
|
|
|
|
# Check composer.json version if present
|
|
|
|
|
if [ -f "composer.json" ]; then
|
|
|
|
|
COMP_VER=$(sed -n 's/.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' composer.json 2>/dev/null | head -1)
|
|
|
|
|
COMP_VER=$(sed -n 's/.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' composer.json 2>/dev/null | head -1 || true)
|
|
|
|
|
if [ -n "$COMP_VER" ] && [ "$COMP_VER" != "$VERSION" ]; then
|
|
|
|
|
echo "- composer.json drift: \`${COMP_VER}\` != \`${VERSION}\`" >> $GITHUB_STEP_SUMMARY
|
|
|
|
|
ERRORS=$((ERRORS+1))
|
|
|
|
@@ -271,7 +271,7 @@ jobs:
|
|
|
|
|
case "$PLATFORM" in
|
|
|
|
|
joomla)
|
|
|
|
|
if [ -n "$MANIFEST" ]; then
|
|
|
|
|
XML_VER=$(sed -n 's/.*<version>\([^<]*\)<\/version>.*/\1/p' "$MANIFEST" 2>/dev/null | head -1)
|
|
|
|
|
XML_VER=$(sed -n 's/.*<version>\([^<]*\)<\/version>.*/\1/p' "$MANIFEST" 2>/dev/null | head -1 || true)
|
|
|
|
|
if [ -n "$XML_VER" ] && [ "$XML_VER" != "$VERSION" ]; then
|
|
|
|
|
echo "- Manifest drift: \`${XML_VER}\` != \`${VERSION}\`" >> $GITHUB_STEP_SUMMARY
|
|
|
|
|
ERRORS=$((ERRORS+1))
|
|
|
|
@@ -285,7 +285,7 @@ jobs:
|
|
|
|
|
fi ;;
|
|
|
|
|
dolibarr)
|
|
|
|
|
if [ -n "$MOD_FILE" ]; then
|
|
|
|
|
MOD_VER=$(sed -n "s/.*\\\$this->version = '\([^']*\)'.*/\1/p" "$MOD_FILE" 2>/dev/null | head -1)
|
|
|
|
|
MOD_VER=$(sed -n "s/.*\\\$this->version = '\([^']*\)'.*/\1/p" "$MOD_FILE" 2>/dev/null | head -1 || true)
|
|
|
|
|
if [ -n "$MOD_VER" ] && [ "$MOD_VER" != "$VERSION" ]; then
|
|
|
|
|
echo "- Module drift: \`${MOD_VER}\` != \`${VERSION}\`" >> $GITHUB_STEP_SUMMARY
|
|
|
|
|
ERRORS=$((ERRORS+1))
|
|
|
|
@@ -337,7 +337,7 @@ jobs:
|
|
|
|
|
steps.check.outputs.already_released != 'true'
|
|
|
|
|
run: |
|
|
|
|
|
VERSION="${{ steps.bump.outputs.version || steps.version.outputs.version }}"
|
|
|
|
|
php /tmp/mokostandards-api/cli/version_set_platform.php \
|
|
|
|
|
php /tmp/moko-platform-api/cli/version_set_platform.php \
|
|
|
|
|
--path . --version "$VERSION" --branch main
|
|
|
|
|
|
|
|
|
|
# -- STEP 4: Update version badges ----------------------------------------
|
|
|
|
@@ -364,20 +364,20 @@ jobs:
|
|
|
|
|
REPO="${{ github.repository }}"
|
|
|
|
|
|
|
|
|
|
# -- Parse extension metadata from XML manifest ----------------
|
|
|
|
|
MANIFEST=$(find . -maxdepth 2 -name "*.xml" -exec grep -l '<extension' {} \; 2>/dev/null | head -1)
|
|
|
|
|
MANIFEST=$(find . -maxdepth 2 -name "*.xml" -exec grep -l '<extension' {} \; 2>/dev/null | head -1 || true)
|
|
|
|
|
if [ -z "$MANIFEST" ]; then
|
|
|
|
|
echo "Warning: No Joomla XML manifest found — skipping updates.xml" >> $GITHUB_STEP_SUMMARY
|
|
|
|
|
exit 0
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Extract fields using sed (portable — no grep -P)
|
|
|
|
|
EXT_NAME=$(sed -n 's/.*<name>\([^<]*\)<\/name>.*/\1/p' "$MANIFEST" | head -1)
|
|
|
|
|
EXT_TYPE=$(sed -n 's/.*<extension[^>]*type="\([^"]*\)".*/\1/p' "$MANIFEST" | head -1)
|
|
|
|
|
EXT_ELEMENT=$(sed -n 's/.*<element>\([^<]*\)<\/element>.*/\1/p' "$MANIFEST" | head -1)
|
|
|
|
|
EXT_CLIENT=$(sed -n 's/.*<extension[^>]*client="\([^"]*\)".*/\1/p' "$MANIFEST" | head -1)
|
|
|
|
|
EXT_FOLDER=$(sed -n 's/.*<extension[^>]*group="\([^"]*\)".*/\1/p' "$MANIFEST" | head -1)
|
|
|
|
|
TARGET_PLATFORM=$(sed -n 's/.*\(<targetplatform[^/]*\/>\).*/\1/p' "$MANIFEST" | head -1)
|
|
|
|
|
PHP_MINIMUM=$(sed -n 's/.*<php_minimum>\([^<]*\)<\/php_minimum>.*/\1/p' "$MANIFEST" | head -1)
|
|
|
|
|
EXT_NAME=$(sed -n 's/.*<name>\([^<]*\)<\/name>.*/\1/p' "$MANIFEST" | head -1 || true)
|
|
|
|
|
EXT_TYPE=$(sed -n 's/.*<extension[^>]*type="\([^"]*\)".*/\1/p' "$MANIFEST" | head -1 || true)
|
|
|
|
|
EXT_ELEMENT=$(sed -n 's/.*<element>\([^<]*\)<\/element>.*/\1/p' "$MANIFEST" | head -1 || true)
|
|
|
|
|
EXT_CLIENT=$(sed -n 's/.*<extension[^>]*client="\([^"]*\)".*/\1/p' "$MANIFEST" | head -1 || true)
|
|
|
|
|
EXT_FOLDER=$(sed -n 's/.*<extension[^>]*group="\([^"]*\)".*/\1/p' "$MANIFEST" | head -1 || true)
|
|
|
|
|
TARGET_PLATFORM=$(sed -n 's/.*\(<targetplatform[^/]*\/>\).*/\1/p' "$MANIFEST" | head -1 || true)
|
|
|
|
|
PHP_MINIMUM=$(sed -n 's/.*<php_minimum>\([^<]*\)<\/php_minimum>.*/\1/p' "$MANIFEST" | head -1 || true)
|
|
|
|
|
|
|
|
|
|
# If EXT_NAME is a language key (e.g. PLG_SYSTEM_MOKOJGDPC), resolve from .ini
|
|
|
|
|
if echo "$EXT_NAME" | grep -qE '^[A-Z_]+$'; then
|
|
|
|
@@ -396,10 +396,10 @@ jobs:
|
|
|
|
|
# 3. XML filename (components, packages)
|
|
|
|
|
# 4. Repo name fallback (templates, anything else)
|
|
|
|
|
if [ -z "$EXT_ELEMENT" ]; then
|
|
|
|
|
EXT_ELEMENT=$(sed -n 's/.*plugin="\([^"]*\)".*/\1/p' "$MANIFEST" | head -1)
|
|
|
|
|
EXT_ELEMENT=$(sed -n 's/.*plugin="\([^"]*\)".*/\1/p' "$MANIFEST" | head -1 || true)
|
|
|
|
|
fi
|
|
|
|
|
if [ -z "$EXT_ELEMENT" ]; then
|
|
|
|
|
EXT_ELEMENT=$(sed -n 's/.*module="\([^"]*\)".*/\1/p' "$MANIFEST" | head -1)
|
|
|
|
|
EXT_ELEMENT=$(sed -n 's/.*module="\([^"]*\)".*/\1/p' "$MANIFEST" | head -1 || true)
|
|
|
|
|
fi
|
|
|
|
|
if [ -z "$EXT_ELEMENT" ]; then
|
|
|
|
|
FNAME=$(basename "$MANIFEST" .xml | tr '[:upper:]' '[:lower:]')
|
|
|
|
@@ -561,7 +561,7 @@ jobs:
|
|
|
|
|
fi
|
|
|
|
|
[ -z "$EXT_NAME" ] && EXT_NAME="${GITEA_REPO}"
|
|
|
|
|
|
|
|
|
|
NOTES=$(php /tmp/mokostandards-api/cli/release_notes.php --path . --version "$VERSION" 2>/dev/null)
|
|
|
|
|
NOTES=$(php /tmp/moko-platform-api/cli/release_notes.php --path . --version "$VERSION" 2>/dev/null)
|
|
|
|
|
[ -z "$NOTES" ] && NOTES="Release ${VERSION}"
|
|
|
|
|
|
|
|
|
|
# Build release name: "Pretty Name VERSION (type_element-VERSION)"
|
|
|
|
@@ -627,14 +627,14 @@ jobs:
|
|
|
|
|
# Reuse element from Step 5, with same fallback chain
|
|
|
|
|
EXT_ELEMENT="${{ steps.updates.outputs.ext_element }}"
|
|
|
|
|
if [ -z "$EXT_ELEMENT" ]; then
|
|
|
|
|
EXT_ELEMENT=$(sed -n 's/.*<element>\([^<]*\)<\/element>.*/\1/p' "$MANIFEST" 2>/dev/null | head -1)
|
|
|
|
|
[ -z "$EXT_ELEMENT" ] && EXT_ELEMENT=$(sed -n 's/.*plugin="\([^"]*\)".*/\1/p' "$MANIFEST" 2>/dev/null | head -1)
|
|
|
|
|
EXT_ELEMENT=$(sed -n 's/.*<element>\([^<]*\)<\/element>.*/\1/p' "$MANIFEST" 2>/dev/null | head -1 || true)
|
|
|
|
|
[ -z "$EXT_ELEMENT" ] && EXT_ELEMENT=$(sed -n 's/.*plugin="\([^"]*\)".*/\1/p' "$MANIFEST" 2>/dev/null | head -1 || true)
|
|
|
|
|
[ -z "$EXT_ELEMENT" ] && EXT_ELEMENT=$(basename "$MANIFEST" .xml | tr '[:upper:]' '[:lower:]')
|
|
|
|
|
[ -z "$EXT_ELEMENT" ] && EXT_ELEMENT=$(echo "${GITEA_REPO}" | tr '[:upper:]' '[:lower:]' | tr -d ' -')
|
|
|
|
|
fi
|
|
|
|
|
# ZIP name: type_folder_element-VERSION (e.g. plg_system_mokojgdpc-01.01.00.zip)
|
|
|
|
|
EXT_TYPE=$(sed -n 's/.*<extension[^>]*type="\([^"]*\)".*/\1/p' "$MANIFEST" | head -1)
|
|
|
|
|
EXT_FOLDER=$(sed -n 's/.*<extension[^>]*group="\([^"]*\)".*/\1/p' "$MANIFEST" | head -1)
|
|
|
|
|
EXT_TYPE=$(sed -n 's/.*<extension[^>]*type="\([^"]*\)".*/\1/p' "$MANIFEST" | head -1 || true)
|
|
|
|
|
EXT_FOLDER=$(sed -n 's/.*<extension[^>]*group="\([^"]*\)".*/\1/p' "$MANIFEST" | head -1 || true)
|
|
|
|
|
TYPE_PREFIX=""
|
|
|
|
|
case "${EXT_TYPE}" in
|
|
|
|
|
plugin) TYPE_PREFIX="plg_${EXT_FOLDER}_" ;;
|
|
|
|
@@ -868,7 +868,7 @@ jobs:
|
|
|
|
|
BRANCH="${{ steps.version.outputs.branch }}"
|
|
|
|
|
GH_REPO="${{ vars.GH_MIRROR_REPO || github.repository }}"
|
|
|
|
|
|
|
|
|
|
NOTES=$(php /tmp/mokostandards-api/cli/release_notes.php --path . --version "$VERSION" 2>/dev/null || true)
|
|
|
|
|
NOTES=$(php /tmp/moko-platform-api/cli/release_notes.php --path . --version "$VERSION" 2>/dev/null || true)
|
|
|
|
|
[ -z "$NOTES" ] && NOTES="Release ${VERSION}"
|
|
|
|
|
echo "$NOTES" > /tmp/release_notes.md
|
|
|
|
|
|