diff --git a/.github/workflows/auto-release.yml b/.github/workflows/auto-release.yml index 5462926..bc1291c 100644 --- a/.github/workflows/auto-release.yml +++ b/.github/workflows/auto-release.yml @@ -266,9 +266,10 @@ jobs: TARGET_PLATFORM=$(grep -oP '' "$MANIFEST" 2>/dev/null | head -1 || echo "") PHP_MINIMUM=$(grep -oP '\K[^<]+' "$MANIFEST" 2>/dev/null | head -1 || echo "") - # Derive element from manifest filename if not in XML + # Derive element: for templates use lowercased, fallback to manifest filename if [ -z "$EXT_ELEMENT" ]; then - EXT_ELEMENT=$(basename "$MANIFEST" .xml) + EXT_ELEMENT=$(grep -oP '\K[^<]+' "$MANIFEST" 2>/dev/null | head -1 | tr '[:upper:]' '[:lower:]' | tr -d ' ' || true) + [ -z "$EXT_ELEMENT" ] && EXT_ELEMENT=$(basename "$MANIFEST" .xml) fi # Build client tag: plugins and frontend modules need site @@ -359,6 +360,66 @@ jobs: git push origin "$TAG" echo "🏷️ Tag: ${TAG}" >> $GITHUB_STEP_SUMMARY + # ── STEP 6b: Build release ZIP + SHA-256 (Joomla) ────────────────── + - name: "Step 6b: Build Joomla release ZIP" + if: >- + steps.version.outputs.skip != 'true' && + steps.check.outputs.already_released != 'true' + id: zip + run: | + PLATFORM=$(php /tmp/mokostandards/api/cli/platform_detect.php --path . 2>/dev/null || true) + VERSION="${{ steps.version.outputs.version }}" + + if [ "$PLATFORM" != "waas-component" ]; then + echo "skip=true" >> "$GITHUB_OUTPUT" + exit 0 + fi + + # Resolve source directory + if [ -d "src" ]; then + SRC="src" + elif [ -d "htdocs" ]; then + SRC="htdocs" + else + echo "⚠️ No src/ or htdocs/ directory — skipping ZIP" >> "$GITHUB_STEP_SUMMARY" + echo "skip=true" >> "$GITHUB_OUTPUT" + exit 0 + fi + + # Derive element name from template/extension name (lowercase, no spaces) + MANIFEST=$(find . -maxdepth 2 -name "*.xml" -exec grep -l '/dev/null | head -1 || true) + EXT_ELEMENT="" + if [ -n "$MANIFEST" ]; then + EXT_ELEMENT=$(grep -oP '\K[^<]+' "$MANIFEST" 2>/dev/null | head -1 || true) + if [ -z "$EXT_ELEMENT" ]; then + # For templates: use tag lowercased + EXT_ELEMENT=$(grep -oP '\K[^<]+' "$MANIFEST" 2>/dev/null | head -1 | tr '[:upper:]' '[:lower:]' | tr -d ' ' || true) + fi + fi + [ -z "$EXT_ELEMENT" ] && EXT_ELEMENT=$(basename "$(pwd)" | tr '[:upper:]' '[:lower:]') + + ZIP_NAME="${EXT_ELEMENT}-${VERSION}.zip" + ZIP_PATH="/tmp/${ZIP_NAME}" + + # Build ZIP from src/ contents (cd into src so paths are root-relative) + (cd "$SRC" && zip -r "$ZIP_PATH" .) + SHA256=$(sha256sum "$ZIP_PATH" | awk '{print $1}') + + echo "zip_path=${ZIP_PATH}" >> "$GITHUB_OUTPUT" + echo "zip_name=${ZIP_NAME}" >> "$GITHUB_OUTPUT" + echo "sha256=${SHA256}" >> "$GITHUB_OUTPUT" + echo "ext_element=${EXT_ELEMENT}" >> "$GITHUB_OUTPUT" + echo "skip=false" >> "$GITHUB_OUTPUT" + + { + echo "### 📦 Release ZIP" + echo "| Field | Value |" + echo "|-------|-------|" + echo "| File | \`${ZIP_NAME}\` |" + echo "| SHA-256 | \`${SHA256}\` |" + echo "| Source | \`${SRC}/\` |" + } >> "$GITHUB_STEP_SUMMARY" + # ── STEP 7: Create or update GitHub Release ────────────────────────── - name: "Step 7: GitHub Release" if: >- @@ -371,6 +432,8 @@ jobs: TAG="${{ steps.version.outputs.tag }}" BRANCH="${{ steps.version.outputs.branch }}" IS_MINOR="${{ steps.version.outputs.is_minor }}" + ZIP_PATH="${{ steps.zip.outputs.zip_path }}" + ZIP_SKIP="${{ steps.zip.outputs.skip }}" # Derive the minor version base (XX.YY.00) MINOR_BASE=$(echo "$VERSION" | sed 's/\.[0-9]*$/.00/') @@ -380,16 +443,22 @@ jobs: [ -z "$NOTES" ] && NOTES="Release ${VERSION}" echo "$NOTES" > /tmp/release_notes.md + # Build release command args — include ZIP if built + UPLOAD_ARGS="" + if [ "$ZIP_SKIP" != "true" ] && [ -f "$ZIP_PATH" ]; then + UPLOAD_ARGS="$ZIP_PATH" + fi + if [ "$IS_MINOR" = "true" ]; then # Minor release: create new GitHub Release gh release create "$TAG" \ --title "${VERSION}" \ --notes-file /tmp/release_notes.md \ - --target "$BRANCH" + --target "$BRANCH" \ + $UPLOAD_ARGS echo "🚀 Release created: ${VERSION}" >> $GITHUB_STEP_SUMMARY else # Patch release: update the existing minor release with new tag - # Find the latest release for this minor version EXISTING=$(gh release view "$MINOR_TAG" --json tagName -q .tagName 2>/dev/null || true) if [ -n "$EXISTING" ]; then # Update existing release body with patch info @@ -406,12 +475,19 @@ jobs: gh release edit "$MINOR_TAG" \ --title "${MINOR_BASE} (latest: ${VERSION})" \ --notes-file /tmp/updated_notes.md + + # Upload ZIP to existing release + if [ "$ZIP_SKIP" != "true" ] && [ -f "$ZIP_PATH" ]; then + gh release upload "$MINOR_TAG" "$ZIP_PATH" --clobber + fi + echo "📝 Release updated: ${MINOR_BASE} → patch ${VERSION}" >> $GITHUB_STEP_SUMMARY else # No existing minor release found — create one for this patch gh release create "$TAG" \ --title "${VERSION}" \ - --notes-file /tmp/release_notes.md + --notes-file /tmp/release_notes.md \ + $UPLOAD_ARGS echo "🚀 Release created: ${VERSION} (no minor release found)" >> $GITHUB_STEP_SUMMARY fi fi