fix(ci): strip non-ASCII from all workflow YAML files #59

Merged
jmiller merged 2 commits from dev into main 2026-05-24 04:36:25 +00:00
7 changed files with 62 additions and 62 deletions
+25 -25
View File
@@ -8,21 +8,21 @@
# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/moko-platform
# PATH: /templates/workflows/cascade-dev.yml.template
# VERSION: 02.00.00
# BRIEF: Forward-merge main all open branches after every push to main
# BRIEF: Forward-merge main -> all open branches after every push to main
#
# +========================================================================+
# | CASCADE MAIN ALL BRANCHES |
# | CASCADE MAIN -> ALL BRANCHES |
# +========================================================================+
# | |
# | Triggers on every push to main (PR merges, bot commits, etc.) |
# | |
# | 1. List all branches matching: dev, rc/*, beta/*, alpha/* |
# | 2. For each: create PR (main branch), auto-merge if clean |
# | 2. For each: create PR (main -> branch), auto-merge if clean |
# | 3. On conflict: leave PR open for manual resolution |
# | |
# +========================================================================+
name: "Universal: Cascade Main Dev"
name: "Universal: Cascade Main -> Dev"
on:
push:
@@ -42,7 +42,7 @@ permissions:
jobs:
cascade:
name: Cascade main branches
name: Cascade main -> branches
runs-on: ubuntu-latest
if: >-
!contains(github.event.head_commit.message, '[skip ci]') &&
@@ -83,11 +83,11 @@ jobs:
if [ -z "$TARGETS" ]; then
echo "targets=" >> "$GITHUB_OUTPUT"
echo " No cascade target branches found"
echo " No cascade target branches found"
else
echo "targets=$TARGETS" >> "$GITHUB_OUTPUT"
COUNT=$(echo "$TARGETS" | wc -w)
echo "📋 Found ${COUNT} target branch(es): ${TARGETS}"
echo " Found ${COUNT} target branch(es): ${TARGETS}"
fi
- name: Cascade to all target branches
@@ -106,7 +106,7 @@ jobs:
for BRANCH in $TARGETS; do
echo ""
echo "═══ main ${BRANCH} ═══"
echo " main -> ${BRANCH} "
# Check if branch is already up to date
ENCODED_BRANCH=$(echo "$BRANCH" | sed 's|/|%2F|g')
@@ -117,12 +117,12 @@ jobs:
AHEAD=$(echo "$RESPONSE" | jq '.total_commits // 0')
if [ "$AHEAD" -eq 0 ]; then
echo " Already up to date"
echo " Already up to date"
SKIPPED=$((SKIPPED + 1))
continue
fi
echo " main is ${AHEAD} commit(s) ahead"
echo " main is ${AHEAD} commit(s) ahead"
# Check for existing cascade PR
EXISTING=$(curl -sS \
@@ -134,7 +134,7 @@ jobs:
if [ "$EXISTING_COUNT" -gt 0 ]; then
PR_NUMBER=$(echo "$EXISTING" | jq -r '.[0].number')
echo " Reusing existing PR #${PR_NUMBER}"
echo " Reusing existing PR #${PR_NUMBER}"
else
# Create cascade PR
PR_RESPONSE=$(curl -sS -w "\n%{http_code}" \
@@ -142,8 +142,8 @@ jobs:
-H "Authorization: token ${GA_TOKEN}" \
-H "Content-Type: application/json" \
-d "{
\"title\": \"chore: cascade main ${BRANCH} (${SHORT_SHA}) [skip ci]\",
\"body\": \"## Automatic cascade\\n\\nForward-merging \`main\` (${SHORT_SHA}) into \`${BRANCH}\`.\\n\\nIf conflicts exist, resolve manually and merge.\\n\\n> Auto-created by **Cascade Main Dev**.\",
\"title\": \"chore: cascade main -> ${BRANCH} (${SHORT_SHA}) [skip ci]\",
\"body\": \"## Automatic cascade\\n\\nForward-merging \`main\` (${SHORT_SHA}) into \`${BRANCH}\`.\\n\\nIf conflicts exist, resolve manually and merge.\\n\\n> Auto-created by **Cascade Main -> Dev**.\",
\"head\": \"main\",
\"base\": \"${BRANCH}\"
}" \
@@ -155,12 +155,12 @@ jobs:
if [ "$HTTP_CODE" != "201" ] || [ -z "$PR_NUMBER" ]; then
MSG=$(echo "$BODY" | jq -r '.message // .' 2>/dev/null | head -1)
echo " Failed to create PR (HTTP ${HTTP_CODE}): ${MSG}"
echo " Failed to create PR (HTTP ${HTTP_CODE}): ${MSG}"
FAILED=$((FAILED + 1))
continue
fi
echo " Created PR #${PR_NUMBER}"
echo " Created PR #${PR_NUMBER}"
fi
# Try auto-merge
@@ -171,7 +171,7 @@ jobs:
MERGEABLE=$(echo "$PR_DATA" | jq -r '.mergeable // false')
if [ "$MERGEABLE" != "true" ]; then
echo " ⚠️ Conflicts PR #${PR_NUMBER} left open"
echo " Conflicts -- PR #${PR_NUMBER} left open"
CONFLICTS=$((CONFLICTS + 1))
continue
fi
@@ -182,7 +182,7 @@ jobs:
-H "Content-Type: application/json" \
-d "{
\"Do\": \"merge\",
\"merge_message_field\": \"chore: cascade main ${BRANCH} [skip ci]\",
\"merge_message_field\": \"chore: cascade main -> ${BRANCH} [skip ci]\",
\"delete_branch_after_merge\": false
}" \
"${API}/pulls/${PR_NUMBER}/merge")
@@ -190,23 +190,23 @@ jobs:
MERGE_HTTP=$(echo "$MERGE_RESPONSE" | tail -1)
if [ "$MERGE_HTTP" = "200" ] || [ "$MERGE_HTTP" = "204" ]; then
echo " Merged ${BRANCH} is in sync"
echo " Merged -- ${BRANCH} is in sync"
SUCCESS=$((SUCCESS + 1))
else
MERGE_BODY=$(echo "$MERGE_RESPONSE" | sed '$d')
echo " ⚠️ Merge failed (HTTP ${MERGE_HTTP}) PR #${PR_NUMBER} left open"
echo " Merge failed (HTTP ${MERGE_HTTP}) -- PR #${PR_NUMBER} left open"
CONFLICTS=$((CONFLICTS + 1))
fi
done
# Summary
echo ""
echo "════════════════════════════════════════"
echo " Merged: ${SUCCESS}"
echo " ⚠️ Conflicts: ${CONFLICTS}"
echo " ⏭️ Up to date: ${SKIPPED}"
echo " Failed: ${FAILED}"
echo "════════════════════════════════════════"
echo ""
echo " Merged: ${SUCCESS}"
echo " Conflicts: ${CONFLICTS}"
echo " Up to date: ${SKIPPED}"
echo " Failed: ${FAILED}"
echo ""
if [ "$FAILED" -gt 0 ]; then
exit 1
+10 -10
View File
@@ -10,7 +10,7 @@
# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/MokoStandards-API
# PATH: /templates/workflows/joomla/ci-joomla.yml.template
# VERSION: 04.06.00
# BRIEF: CI workflow for Joomla extensions lint, validate, test
# BRIEF: CI workflow for Joomla extensions -- lint, validate, test
name: "Joomla: Extension CI"
@@ -61,7 +61,7 @@ jobs:
--prefer-dist \
--optimize-autoloader
else
echo "No composer.json found skipping dependency install"
echo "No composer.json found -- skipping dependency install"
fi
- name: PHP syntax check
@@ -161,7 +161,7 @@ jobs:
# Extract language file references from manifest
LANG_FILES=$(grep -oP 'language\s+tag="[^"]*"[^>]*>\K[^<]+' "$MANIFEST" 2>/dev/null || true)
if [ -z "$LANG_FILES" ]; then
echo "No language file references found in manifest skipping." >> $GITHUB_STEP_SUMMARY
echo "No language file references found in manifest -- skipping." >> $GITHUB_STEP_SUMMARY
else
while IFS= read -r LANG_FILE; do
LANG_FILE=$(echo "$LANG_FILE" | xargs)
@@ -185,7 +185,7 @@ jobs:
done <<< "$LANG_FILES"
fi
else
echo "No manifest found skipping language check." >> $GITHUB_STEP_SUMMARY
echo "No manifest found -- skipping language check." >> $GITHUB_STEP_SUMMARY
fi
if [ "${ERRORS}" -gt 0 ]; then
@@ -216,7 +216,7 @@ jobs:
done
if [ "${CHECKED}" -eq 0 ]; then
echo "No src/ or htdocs/ directories found skipping." >> $GITHUB_STEP_SUMMARY
echo "No src/ or htdocs/ directories found -- skipping." >> $GITHUB_STEP_SUMMARY
elif [ "${MISSING}" -gt 0 ]; then
echo "" >> $GITHUB_STEP_SUMMARY
echo "**${MISSING} director(ies) missing index.html out of ${CHECKED} checked.**" >> $GITHUB_STEP_SUMMARY
@@ -354,7 +354,7 @@ jobs:
--prefer-dist \
--optimize-autoloader
else
echo "No composer.json found skipping dependency install"
echo "No composer.json found -- skipping dependency install"
fi
- name: Run tests
@@ -366,14 +366,14 @@ jobs:
if [ $EXIT -eq 0 ]; then
echo "All tests passed." >> $GITHUB_STEP_SUMMARY
else
echo "Test failures detected see log." >> $GITHUB_STEP_SUMMARY
echo "Test failures detected -- see log." >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
cat /tmp/test-output.log >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
fi
exit $EXIT
else
echo "No phpunit.xml found skipping tests." >> $GITHUB_STEP_SUMMARY
echo "No phpunit.xml found -- skipping tests." >> $GITHUB_STEP_SUMMARY
fi
static-analysis:
@@ -422,7 +422,7 @@ jobs:
done
if [ -z "$SRC_DIR" ]; then
echo "No source directory found (src/, htdocs/, lib/) skipping." >> $GITHUB_STEP_SUMMARY
echo "No source directory found (src/, htdocs/, lib/) -- skipping." >> $GITHUB_STEP_SUMMARY
exit 0
fi
@@ -432,7 +432,7 @@ jobs:
echo "Using project PHPStan config." >> $GITHUB_STEP_SUMMARY
else
ARGS="$ARGS --level=3"
echo "No phpstan.neon found using level 3 (type inference)." >> $GITHUB_STEP_SUMMARY
echo "No phpstan.neon found -- using level 3 (type inference)." >> $GITHUB_STEP_SUMMARY
fi
$PHPSTAN $ARGS 2>&1 | tee /tmp/phpstan-output.txt
+1 -1
View File
@@ -8,7 +8,7 @@
# REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-platform
# PATH: /.gitea/workflows/cleanup.yml
# VERSION: 01.00.00
# BRIEF: Scheduled cleanup delete merged branches and old workflow runs
# BRIEF: Scheduled cleanup -- delete merged branches and old workflow runs
name: "Universal: Repository Cleanup"
+2 -2
View File
@@ -8,7 +8,7 @@
# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/moko-platform
# PATH: /templates/workflows/gitleaks.yml.template
# VERSION: 01.00.00
# BRIEF: Secret scanning detect leaked credentials, API keys, and tokens
# BRIEF: Secret scanning -- detect leaked credentials, API keys, and tokens
#
# +========================================================================+
# | SECRET SCANNING |
@@ -89,7 +89,7 @@ jobs:
run: |
REPO="${{ github.event.repository.name }}"
curl -sS \
-H "Title: ${REPO} secrets detected in code" \
-H "Title: ${REPO} -- secrets detected in code" \
-H "Tags: rotating_light,key" \
-H "Priority: urgent" \
-d "Gitleaks found potential secrets. Review and rotate credentials immediately." \
+11 -11
View File
@@ -8,7 +8,7 @@
# REPO: https://git.mokoconsulting.tech/mokoconsulting-tech/moko-platform
# PATH: /templates/workflows/universal/pr-check.yml.template
# VERSION: 05.00.00
# BRIEF: PR gate branch policy + code validation before merge
# BRIEF: PR gate -- branch policy + code validation before merge
name: "Universal: PR Check"
@@ -24,7 +24,7 @@ env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
jobs:
# ── Branch Policy ──────────────────────────────────────────────────────
# Branch Policy
branch-policy:
name: Branch Policy
runs-on: ubuntu-latest
@@ -34,7 +34,7 @@ jobs:
HEAD="${{ github.head_ref }}"
BASE="${{ github.base_ref }}"
echo "PR: ${HEAD} ${BASE}"
echo "PR: ${HEAD} -> ${BASE}"
ALLOWED=true
REASON=""
@@ -85,18 +85,18 @@ jobs:
echo "${REASON}" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Allowed merge paths:" >> $GITHUB_STEP_SUMMARY
echo "- \`feature/*\` \`dev\`" >> $GITHUB_STEP_SUMMARY
echo "- \`fix/*\` \`dev\`" >> $GITHUB_STEP_SUMMARY
echo "- \`hotfix/*\` \`dev\` or \`main\`" >> $GITHUB_STEP_SUMMARY
echo "- \`dev\` \`main\`" >> $GITHUB_STEP_SUMMARY
echo "- \`rc/*\` \`main\`" >> $GITHUB_STEP_SUMMARY
echo "- \`feature/*\` -> \`dev\`" >> $GITHUB_STEP_SUMMARY
echo "- \`fix/*\` -> \`dev\`" >> $GITHUB_STEP_SUMMARY
echo "- \`hotfix/*\` -> \`dev\` or \`main\`" >> $GITHUB_STEP_SUMMARY
echo "- \`dev\` -> \`main\`" >> $GITHUB_STEP_SUMMARY
echo "- \`rc/*\` -> \`main\`" >> $GITHUB_STEP_SUMMARY
exit 1
fi
echo "Branch policy: OK (${HEAD} ${BASE})"
echo "Branch policy: OK (${HEAD} -> ${BASE})"
echo "## Branch Policy: Passed" >> $GITHUB_STEP_SUMMARY
# ── Code Validation ────────────────────────────────────────────────────
# Code Validation
validate:
name: Validate PR
runs-on: ubuntu-latest
@@ -162,7 +162,7 @@ jobs:
echo "Dolibarr module: ${MOD_FILE}"
;;
*)
echo "Generic platform no manifest validation"
echo "Generic platform -- no manifest validation"
;;
esac
+8 -8
View File
@@ -8,7 +8,7 @@
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
# PATH: /templates/workflows/universal/pre-release.yml.template
# VERSION: 05.00.00
# BRIEF: Manual pre-release builds dev/alpha/beta/rc packages from any branch
# BRIEF: Manual pre-release -- builds dev/alpha/beta/rc packages from any branch
name: "Universal: Pre-Release"
@@ -86,7 +86,7 @@ jobs:
MINOR=$(echo "$CURRENT" | cut -d. -f2)
PATCH=$(echo "$CURRENT" | cut -d. -f3)
# Patch bump with rollover: ZZ=99 bump minor, YY=99 bump major
# Patch bump with rollover: ZZ=99 -> bump minor, YY=99 -> bump major
NEW_PATCH=$((10#$PATCH + 1))
NEW_MINOR=$((10#$MINOR))
NEW_MAJOR=$((10#$MAJOR))
@@ -103,7 +103,7 @@ jobs:
VERSION=$(printf "%02d.%02d.%02d" $NEW_MAJOR $NEW_MINOR $NEW_PATCH)
TODAY=$(date +%Y-%m-%d)
echo "Bumping: ${CURRENT} ${VERSION} (patch)"
echo "Bumping: ${CURRENT} -> ${VERSION} (patch)"
# Update README.md
sed -i "s/VERSION:[[:space:]]*${CURRENT}/VERSION: ${VERSION}/" README.md
@@ -126,7 +126,7 @@ jobs:
if [ -n "$SUB_VER" ]; then
sed -i "s|<version>${SUB_VER}</version>|<version>${VERSION}</version>|" "$SUB_MANIFEST"
sed -i "s|<creationDate>[^<]*</creationDate>|<creationDate>${TODAY}</creationDate>|" "$SUB_MANIFEST"
echo " Bumped sub-extension: $(basename $SUB_MANIFEST) ${SUB_VER} ${VERSION}"
echo " Bumped sub-extension: $(basename $SUB_MANIFEST) ${SUB_VER} -> ${VERSION}"
fi
done
fi
@@ -145,7 +145,7 @@ jobs:
git remote set-url origin "https://jmiller:${{ secrets.GA_TOKEN }}@git.mokoconsulting.tech/${{ github.repository }}.git"
git add -A
git diff --cached --quiet || {
git commit -m "chore(version): bump ${CURRENT} ${VERSION} [skip ci]"
git commit -m "chore(version): bump ${CURRENT} -> ${VERSION} [skip ci]"
git push origin HEAD 2>&1
}
@@ -317,7 +317,7 @@ jobs:
DATE=$(date +%Y-%m-%d)
if [ ! -f "updates.xml" ]; then
echo "No updates.xml skipping"
echo "No updates.xml -- skipping"
exit 0
fi
@@ -384,7 +384,7 @@ jobs:
for BRANCH in main dev; do
[ "$BRANCH" = "$CURRENT_BRANCH" ] && continue
echo "Syncing updates.xml ${BRANCH}"
echo "Syncing updates.xml -> ${BRANCH}"
git fetch origin "${BRANCH}" 2>/dev/null || continue
git checkout "origin/${BRANCH}" -- . 2>/dev/null || continue
git checkout "${CURRENT_BRANCH}" -- updates.xml
@@ -403,7 +403,7 @@ jobs:
TOKEN="${{ secrets.GA_TOKEN }}"
STABILITY="${{ steps.meta.outputs.stability }}"
# Cascade: rc beta,alpha,dev | beta alpha,dev | alpha dev | dev nothing
# Cascade: rc -> beta,alpha,dev | beta -> alpha,dev | alpha -> dev | dev -> nothing
case "$STABILITY" in
release-candidate) TAGS_TO_DELETE="beta alpha development" ;;
beta) TAGS_TO_DELETE="alpha development" ;;
+5 -5
View File
@@ -54,7 +54,7 @@ env:
REPO_DISALLOWED_DIRS:
REPO_DISALLOWED_FILES: TODO.md,todo.md
# Wiki-preferred documentation wiki is full credit, repo file is advisory
# Wiki-preferred documentation -- wiki is full credit, repo file is advisory
# Format: filename:WikiPageName (Gitea wiki page slug)
WIKI_PREFERRED_DOCS: CONTRIBUTING.md:Contributing,CODE_OF_CONDUCT.md:Code-of-Conduct,GOVERNANCE.md:Governance
@@ -94,7 +94,7 @@ jobs:
PERMISSION=unknown
METHOD=""
# Hardcoded authorized users always allowed
# Hardcoded authorized users -- always allowed
case "$ACTOR" in
jmiller|gitea-actions[bot])
ALLOWED=true
@@ -558,7 +558,7 @@ jobs:
[ -f "${file}" ] && file_exists=true
if [ "${wiki_exists}" = true ]; then
wiki_ok+=("${file} wiki/${page}")
wiki_ok+=("${file} -> wiki/${page}")
elif [ "${file_exists}" = true ]; then
wiki_file_fallback+=("${file}")
content_warnings+=("${file} found in repo root (preferred location: wiki/${page})")
@@ -574,11 +574,11 @@ jobs:
printf '%s\n' '|---|---|---|'
for item in "${wiki_ok[@]:-}"; do
[ -z "${item}" ] && continue
printf '%s\n' "| ${item%%*}| Wiki | OK |"
printf '%s\n' "| ${item%%->*}| Wiki | OK |"
done
for item in "${wiki_file_fallback[@]:-}"; do
[ -z "${item}" ] && continue
printf '%s\n' "| ${item} | Repo file | Advisory migrate to wiki |"
printf '%s\n' "| ${item} | Repo file | Advisory -- migrate to wiki |"
done
for item in "${wiki_missing[@]:-}"; do
[ -z "${item}" ] && continue