diff --git a/.github/workflows/deploy-dev.yml b/.github/workflows/deploy-dev.yml index 5fa6a23..a956ec3 100644 --- a/.github/workflows/deploy-dev.yml +++ b/.github/workflows/deploy-dev.yml @@ -22,7 +22,7 @@ # INGROUP: MokoStandards.Deploy # REPO: https://github.com/mokoconsulting-tech/MokoStandards # PATH: /templates/workflows/shared/deploy-dev.yml -# VERSION: 04.01.00 +# VERSION: 04.04.00 # BRIEF: SFTP deployment workflow for development server — synced to all governed repos # NOTE: Synced via bulk-repo-sync to .github/workflows/deploy-dev.yml in all governed repos. # Port is resolved in order: DEV_FTP_PORT variable → :port suffix in DEV_FTP_HOST → 22. @@ -49,6 +49,7 @@ on: push: branches: - 'dev/**' + - 'rc/**' - develop - development paths: @@ -57,6 +58,7 @@ on: types: [opened, synchronize, reopened, closed] branches: - 'dev/**' + - 'rc/**' - develop - development paths: @@ -73,6 +75,9 @@ permissions: contents: read pull-requests: write +env: + FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true + jobs: check-permission: name: Verify Deployment Permission @@ -347,8 +352,8 @@ jobs: # ── Platform-specific path safety guards ────────────────────────────── PLATFORM="" - if [ -f ".moko-standards" ]; then - PLATFORM=$(grep -E '^platform:' .moko-standards | sed 's/.*:[[:space:]]*//' | tr -d '"') + MOKO_FILE=".github/.mokostandards"; [ ! -f "$MOKO_FILE" ] && MOKO_FILE=".mokostandards"; if [ -f "$MOKO_FILE" ]; then + PLATFORM=$(grep -oP '^platform:.*' "$MOKO_FILE" 2>/dev/null || true) fi if [ "$PLATFORM" = "crm-module" ]; then @@ -409,7 +414,7 @@ jobs: - name: Setup PHP if: steps.source.outputs.skip == 'false' && steps.remote.outputs.skip != 'true' - uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 # v2.31.0 + uses: shivammathur/setup-php@fcafdd6392932010c2bd5094439b8e33be2a8a09 # v2.37.0 with: php-version: '8.1' tools: composer @@ -420,14 +425,17 @@ jobs: GH_TOKEN: ${{ secrets.GH_TOKEN || github.token }} COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_TOKEN || github.token }}"}}' run: | - git clone --depth 1 --quiet \ + git clone --depth 1 --branch version/04.04.00 --quiet \ "https://x-access-token:${GH_TOKEN}@github.com/mokoconsulting-tech/MokoStandards.git" \ /tmp/mokostandards cd /tmp/mokostandards composer install --no-dev --no-interaction --quiet - - name: Clear remote destination folder - if: steps.source.outputs.skip == 'false' && steps.remote.outputs.skip != 'true' + - name: Clear remote destination folder (manual only) + if: >- + steps.source.outputs.skip == 'false' && + steps.remote.outputs.skip != 'true' && + inputs.clear_remote == true env: SFTP_HOST: ${{ steps.conn.outputs.host }} SFTP_PORT: ${{ steps.conn.outputs.port }} @@ -574,23 +582,87 @@ jobs: DEPLOY_ARGS+=(--key-passphrase "$SFTP_PASSWORD") fi - # ── For Dolibarr (crm-module): set version to "development" before deploy ─ - PLATFORM="" - if [ -f ".moko-standards" ]; then - PLATFORM=$(grep -E '^platform:' .moko-standards | sed 's/.*:[[:space:]]*//' | tr -d '"') + # Set platform version to "development" before deploy (Dolibarr + Joomla) + php /tmp/mokostandards/api/cli/version_set_platform.php --path . --version development + + # Write update files — dev/** = development, rc/** = rc + PLATFORM=$(php /tmp/mokostandards/api/cli/platform_detect.php --path . 2>/dev/null || true) + REPO="${{ github.repository }}" + BRANCH="${{ github.ref_name }}" + + # Determine stability tag from branch prefix + STABILITY="development" + VERSION_LABEL="development" + if [[ "$BRANCH" == rc/* ]]; then + STABILITY="rc" + VERSION_LABEL=$(php /tmp/mokostandards/api/cli/version_read.php --path . 2>/dev/null || echo "${BRANCH#rc/}")-rc fi if [ "$PLATFORM" = "crm-module" ]; then - echo "📦 Dolibarr dev deploy — setting module version to 'development'" - find "$SOURCE_DIR" -path "*/core/modules/mod*.class.php" -exec \ - sed -i "s/\(\$this->version\s*=\s*\)['\"][^'\"]*['\"]/\1'development'/" {} + 2>/dev/null || true + printf '%s' "$VERSION_LABEL" > update.txt fi if [ "$PLATFORM" = "waas-component" ]; then - echo "📦 Joomla dev deploy — setting manifest version to 'development'" - find "$SOURCE_DIR" -maxdepth 2 -name "*.xml" -exec grep -l '/dev/null | while read -r manifest; do - sed -i "s|[^<]*|development|" "$manifest" 2>/dev/null || true - done + MANIFEST=$(find . -maxdepth 2 -name "*.xml" -exec grep -l '/dev/null | head -1 || true) + if [ -n "$MANIFEST" ]; then + EXT_NAME=$(grep -oP '\K[^<]+' "$MANIFEST" 2>/dev/null | head -1 || echo "${{ github.event.repository.name }}") + EXT_TYPE=$(grep -oP ']+type="\K[^"]+' "$MANIFEST" 2>/dev/null || echo "component") + EXT_ELEMENT=$(grep -oP '\K[^<]+' "$MANIFEST" 2>/dev/null | head -1 || basename "$MANIFEST" .xml) + EXT_CLIENT=$(grep -oP ']+client="\K[^"]+' "$MANIFEST" 2>/dev/null || echo "") + EXT_FOLDER=$(grep -oP ']+group="\K[^"]+' "$MANIFEST" 2>/dev/null || echo "") + TARGET_PLATFORM=$(grep -oP '' "$MANIFEST" 2>/dev/null | head -1 || echo '') + + CLIENT_TAG="" + if [ -n "$EXT_CLIENT" ]; then + CLIENT_TAG="${EXT_CLIENT}" + elif [ "$EXT_TYPE" = "module" ] || [ "$EXT_TYPE" = "plugin" ]; then + CLIENT_TAG="site" + fi + + FOLDER_TAG="" + if [ -n "$EXT_FOLDER" ] && [ "$EXT_TYPE" = "plugin" ]; then + FOLDER_TAG="${EXT_FOLDER}" + fi + + DOWNLOAD_URL="https://github.com/${REPO}/archive/refs/heads/${BRANCH}.zip" + + cat > update.xml << 'DEVXML' + + + + EXT_NAME_PH + EXT_NAME_PH STABILITY_PH build + EXT_ELEMENT_PH + EXT_TYPE_PH + VERSION_LABEL_PH + CLIENT_TAG_PH + FOLDER_TAG_PH + + STABILITY_PH + + https://github.com/REPO_PH/tree/BRANCH_PH + + DOWNLOAD_URL_PH + + TARGET_PLATFORM_PH + Moko Consulting + https://mokoconsulting.tech + + +DEVXML + sed -i "s|EXT_NAME_PH|${EXT_NAME}|g" update.xml + sed -i "s|EXT_ELEMENT_PH|${EXT_ELEMENT}|g" update.xml + sed -i "s|EXT_TYPE_PH|${EXT_TYPE}|g" update.xml + sed -i "s|CLIENT_TAG_PH|${CLIENT_TAG}|g" update.xml + sed -i "s|FOLDER_TAG_PH|${FOLDER_TAG}|g" update.xml + sed -i "s|REPO_PH|${REPO}|g" update.xml + sed -i "s|BRANCH_PH|${BRANCH}|g" update.xml + sed -i "s|DOWNLOAD_URL_PH|${DOWNLOAD_URL}|g" update.xml + sed -i "s|TARGET_PLATFORM_PH|${TARGET_PLATFORM}|g" update.xml + sed -i "s|VERSION_LABEL_PH|${VERSION_LABEL}|g" update.xml + sed -i "s|STABILITY_PH|${STABILITY}|g" update.xml + sed -i '/^[[:space:]]*$/d' update.xml + fi fi php /tmp/mokostandards/api/deploy/deploy-sftp.php "${DEPLOY_ARGS[@]}" @@ -641,22 +713,22 @@ jobs: --force 2>/dev/null || true # Look for an existing open deploy-failure issue - EXISTING=$(gh api "repos/${REPO}/issues?labels=${LABEL}&state=open&per_page=1" \ + EXISTING=$(gh api "repos/${REPO}/issues?labels=${LABEL}&state=all&per_page=1&sort=created&direction=desc" \ --jq '.[0].number' 2>/dev/null) if [ -n "$EXISTING" ] && [ "$EXISTING" != "null" ]; then gh api "repos/${REPO}/issues/${EXISTING}" \ -X PATCH \ -f title="$TITLE" \ - -f body="$BODY" \ + -f body="$BODY" \n -f state="open" \ --silent - echo "📋 Failure issue #${EXISTING} updated: ${REPO}" >> "$GITHUB_STEP_SUMMARY" + echo "📋 Failure issue #${EXISTING} updated/reopened: ${REPO}" >> "$GITHUB_STEP_SUMMARY" else gh issue create \ --repo "$REPO" \ --title "$TITLE" \ --body "$BODY" \ - --label "$LABEL" \ + --label "$LABEL" \n --assignee "jmiller-moko" \ | tee -a "$GITHUB_STEP_SUMMARY" fi