Compare commits
18 Commits
v03
...
release-ca
| Author | SHA1 | Date | |
|---|---|---|---|
| 8c25461f15 | |||
| 8a02eb127d | |||
| 095b9412ff | |||
| b9de0ef88a | |||
| 2c2ae1c02f | |||
|
|
5b4151310a | ||
|
|
0a920d1606 | ||
|
|
b02181ebd0 | ||
|
|
bf883a0770 | ||
|
|
e24e712e7e | ||
|
|
eed04e417f | ||
|
|
2862d2530e | ||
|
|
7969dd1282 | ||
| 9ec2728796 | |||
|
|
7b73aad3f8 | ||
|
|
d01db8bc0d | ||
| 8eb0d2e106 | |||
| 0a53acbed5 |
14
.github/workflows/auto-assign.yml
vendored
14
.github/workflows/auto-assign.yml
vendored
@@ -2,7 +2,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
#
|
#
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: GitHub.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
# INGROUP: MokoStandards.Workflows.Shared
|
# INGROUP: MokoStandards.Workflows.Shared
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||||
# PATH: /.github/workflows/auto-assign.yml
|
# PATH: /.github/workflows/auto-assign.yml
|
||||||
@@ -32,7 +32,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Assign unassigned issues
|
- name: Assign unassigned issues
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GH_TOKEN || github.token }}
|
GH_TOKEN: ${{ secrets.GA_TOKEN || github.token }}
|
||||||
run: |
|
run: |
|
||||||
REPO="${{ github.repository }}"
|
REPO="${{ github.repository }}"
|
||||||
ASSIGNEE="jmiller-moko"
|
ASSIGNEE="jmiller-moko"
|
||||||
@@ -44,12 +44,12 @@ jobs:
|
|||||||
ASSIGNED_PRS=0
|
ASSIGNED_PRS=0
|
||||||
|
|
||||||
# Assign unassigned open issues
|
# Assign unassigned open issues
|
||||||
ISSUES=$(gh api "repos/$REPO/issues?state=open&per_page=100&assignee=none" --jq '.[].number' 2>/dev/null || true)
|
ISSUES=$(curl -sf -H "Authorization: token ${{ secrets.GA_TOKEN }}" "${{GITEA_URL:-https://git.mokoconsulting.tech}}/api/v1/repos/${{ github.repository }}/issues?state=open&per_page=100&assignee=none" | jq -r '.[].number' 2>/dev/null || true)
|
||||||
for NUM in $ISSUES; do
|
for NUM in $ISSUES; do
|
||||||
# Skip PRs (the issues endpoint returns PRs too)
|
# Skip PRs (the issues endpoint returns PRs too)
|
||||||
IS_PR=$(gh api "repos/$REPO/issues/$NUM" --jq '.pull_request // empty' 2>/dev/null || true)
|
IS_PR=$(curl -sf -H "Authorization: token ${{ secrets.GA_TOKEN }}" "${{GITEA_URL:-https://git.mokoconsulting.tech}}/api/v1/repos/${{ github.repository }}/issues/$NUM" | jq -r '.pull_request // empty' 2>/dev/null || true)
|
||||||
if [ -z "$IS_PR" ]; then
|
if [ -z "$IS_PR" ]; then
|
||||||
gh api "repos/$REPO/issues/$NUM/assignees" -X POST -f "assignees[]=$ASSIGNEE" --silent 2>/dev/null && {
|
curl -sf -H "Authorization: token ${{ secrets.GA_TOKEN }}" "${{GITEA_URL:-https://git.mokoconsulting.tech}}/api/v1/repos/${{ github.repository }}/issues/$NUM/assignees" 2>/dev/null -X POST -f "assignees[]=$ASSIGNEE" --silent 2>/dev/null && {
|
||||||
ASSIGNED_ISSUES=$((ASSIGNED_ISSUES + 1))
|
ASSIGNED_ISSUES=$((ASSIGNED_ISSUES + 1))
|
||||||
echo " Assigned issue #$NUM"
|
echo " Assigned issue #$NUM"
|
||||||
} || true
|
} || true
|
||||||
@@ -57,9 +57,9 @@ jobs:
|
|||||||
done
|
done
|
||||||
|
|
||||||
# Assign unassigned open PRs
|
# Assign unassigned open PRs
|
||||||
PRS=$(gh api "repos/$REPO/pulls?state=open&per_page=100" --jq '.[] | select(.assignees | length == 0) | .number' 2>/dev/null || true)
|
PRS=$(curl -sf -H "Authorization: token ${{ secrets.GA_TOKEN }}" "${{GITEA_URL:-https://git.mokoconsulting.tech}}/api/v1/repos/${{ github.repository }}/pulls?state=open&per_page=100" | jq -r '.[] | select(.assignees | length == 0) | .number' 2>/dev/null || true)
|
||||||
for NUM in $PRS; do
|
for NUM in $PRS; do
|
||||||
gh api "repos/$REPO/issues/$NUM/assignees" -X POST -f "assignees[]=$ASSIGNEE" --silent 2>/dev/null && {
|
curl -sf -H "Authorization: token ${{ secrets.GA_TOKEN }}" "${{GITEA_URL:-https://git.mokoconsulting.tech}}/api/v1/repos/${{ github.repository }}/issues/$NUM/assignees" 2>/dev/null -X POST -f "assignees[]=$ASSIGNEE" --silent 2>/dev/null && {
|
||||||
ASSIGNED_PRS=$((ASSIGNED_PRS + 1))
|
ASSIGNED_PRS=$((ASSIGNED_PRS + 1))
|
||||||
echo " Assigned PR #$NUM"
|
echo " Assigned PR #$NUM"
|
||||||
} || true
|
} || true
|
||||||
|
|||||||
12
.github/workflows/auto-dev-issue.yml
vendored
12
.github/workflows/auto-dev-issue.yml
vendored
@@ -5,7 +5,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
#
|
#
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: GitHub.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
# INGROUP: MokoStandards.Automation
|
# INGROUP: MokoStandards.Automation
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||||
# PATH: /templates/workflows/shared/auto-dev-issue.yml.template
|
# PATH: /templates/workflows/shared/auto-dev-issue.yml.template
|
||||||
@@ -47,7 +47,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Create tracking issue and sub-issues
|
- name: Create tracking issue and sub-issues
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GH_TOKEN || github.token }}
|
GH_TOKEN: ${{ secrets.GA_TOKEN || github.token }}
|
||||||
run: |
|
run: |
|
||||||
# For manual dispatch, use input; for auto, use event ref
|
# For manual dispatch, use input; for auto, use event ref
|
||||||
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
||||||
@@ -85,7 +85,7 @@ jobs:
|
|||||||
TITLE="${TITLE_PREFIX}(${VERSION}): ${BRANCH_TYPE} tracking for ${BRANCH}"
|
TITLE="${TITLE_PREFIX}(${VERSION}): ${BRANCH_TYPE} tracking for ${BRANCH}"
|
||||||
|
|
||||||
# Check for existing issue with same title prefix
|
# Check for existing issue with same title prefix
|
||||||
EXISTING=$(gh api "repos/${REPO}/issues?state=open&per_page=10" \
|
EXISTING=$(curl -sf -H "Authorization: token ${{ secrets.GA_TOKEN }}" "${{GITEA_URL:-https://git.mokoconsulting.tech}}/api/v1/repos/${{ github.repository }}/issues?state=open&per_page=10" 2>/dev/null \
|
||||||
--jq ".[] | select(.title | startswith(\"${TITLE_PREFIX}(${VERSION})\")) | .number" 2>/dev/null | head -1)
|
--jq ".[] | select(.title | startswith(\"${TITLE_PREFIX}(${VERSION})\")) | .number" 2>/dev/null | head -1)
|
||||||
|
|
||||||
if [ -n "$EXISTING" ]; then
|
if [ -n "$EXISTING" ]; then
|
||||||
@@ -163,11 +163,11 @@ jobs:
|
|||||||
for SUB in "${SUB_ISSUES[@]}"; do
|
for SUB in "${SUB_ISSUES[@]}"; do
|
||||||
IFS='|' read -r SUB_TITLE _ _ <<< "$SUB"
|
IFS='|' read -r SUB_TITLE _ _ <<< "$SUB"
|
||||||
SUB_FULL_TITLE="${TITLE_PREFIX}(${VERSION}): ${SUB_TITLE}"
|
SUB_FULL_TITLE="${TITLE_PREFIX}(${VERSION}): ${SUB_TITLE}"
|
||||||
SUB_NUM=$(gh api "repos/${REPO}/issues?state=open&per_page=20" \
|
SUB_NUM=$(curl -sf -H "Authorization: token ${{ secrets.GA_TOKEN }}" "${{GITEA_URL:-https://git.mokoconsulting.tech}}/api/v1/repos/${{ github.repository }}/issues?state=open&per_page=20" 2>/dev/null \
|
||||||
--jq ".[] | select(.title == \"${SUB_FULL_TITLE}\") | .number" 2>/dev/null | head -1)
|
--jq ".[] | select(.title == \"${SUB_FULL_TITLE}\") | .number" 2>/dev/null | head -1)
|
||||||
if [ -n "$SUB_NUM" ]; then
|
if [ -n "$SUB_NUM" ]; then
|
||||||
gh api "repos/${REPO}/issues/${SUB_NUM}" -X PATCH \
|
curl -sf -H "Authorization: token ${{ secrets.GA_TOKEN }}" "${{GITEA_URL:-https://git.mokoconsulting.tech}}/api/v1/repos/${{ github.repository }}/issues/${SUB_NUM}" 2>/dev/null -X PATCH \
|
||||||
-f body="$(gh api "repos/${REPO}/issues/${SUB_NUM}" --jq '.body' 2>/dev/null)
|
-f body="$(curl -sf -H "Authorization: token ${{ secrets.GA_TOKEN }}" "${{GITEA_URL:-https://git.mokoconsulting.tech}}/api/v1/repos/${{ github.repository }}/issues/${SUB_NUM}" | jq -r '.body' 2>/dev/null)
|
||||||
|
|
||||||
> **Parent Issue:** #${PARENT_NUM}" --silent 2>/dev/null || true
|
> **Parent Issue:** #${PARENT_NUM}" --silent 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
|
|||||||
42
.github/workflows/auto-release.yml
vendored
42
.github/workflows/auto-release.yml
vendored
@@ -3,7 +3,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
#
|
#
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: GitHub.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
# INGROUP: MokoStandards.Release
|
# INGROUP: MokoStandards.Release
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||||
# PATH: /templates/workflows/joomla/auto-release.yml.template
|
# PATH: /templates/workflows/joomla/auto-release.yml.template
|
||||||
@@ -61,25 +61,25 @@ jobs:
|
|||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.GH_TOKEN || github.token }}
|
token: ${{ secrets.GA_TOKEN || github.token }}
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Setup MokoStandards tools
|
- name: Setup MokoStandards tools
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GH_TOKEN || github.token }}
|
GH_TOKEN: ${{ secrets.GA_TOKEN || github.token }}
|
||||||
COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_TOKEN || github.token }}"}}'
|
COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GA_TOKEN || github.token }}"}}'
|
||||||
run: |
|
run: |
|
||||||
git clone --depth 1 --branch version/04 --quiet \
|
git clone --depth 1 --branch version/04 --quiet \
|
||||||
"https://x-access-token:${GH_TOKEN}@git.mokoconsulting.tech/MokoConsulting/MokoStandards.git" \
|
"https://x-access-token:${GH_TOKEN}@git.mokoconsulting.tech/MokoConsulting/MokoStandards-API.git" \
|
||||||
/tmp/mokostandards
|
/tmp/mokostandards-api
|
||||||
cd /tmp/mokostandards
|
cd /tmp/mokostandards-api
|
||||||
composer install --no-dev --no-interaction --quiet
|
composer install --no-dev --no-interaction --quiet
|
||||||
|
|
||||||
# -- STEP 1: Read version -----------------------------------------------
|
# -- STEP 1: Read version -----------------------------------------------
|
||||||
- name: "Step 1: Read version from README.md"
|
- name: "Step 1: Read version from README.md"
|
||||||
id: version
|
id: version
|
||||||
run: |
|
run: |
|
||||||
VERSION=$(php /tmp/mokostandards/api/cli/version_read.php --path . 2>/dev/null)
|
VERSION=$(php /tmp/mokostandards-api/cli/version_read.php --path . 2>/dev/null)
|
||||||
if [ -z "$VERSION" ]; then
|
if [ -z "$VERSION" ]; then
|
||||||
echo "No VERSION in README.md — skipping release"
|
echo "No VERSION in README.md — skipping release"
|
||||||
echo "skip=true" >> "$GITHUB_OUTPUT"
|
echo "skip=true" >> "$GITHUB_OUTPUT"
|
||||||
@@ -243,7 +243,7 @@ jobs:
|
|||||||
steps.check.outputs.already_released != 'true'
|
steps.check.outputs.already_released != 'true'
|
||||||
run: |
|
run: |
|
||||||
VERSION="${{ steps.version.outputs.version }}"
|
VERSION="${{ steps.version.outputs.version }}"
|
||||||
php /tmp/mokostandards/api/cli/version_set_platform.php \
|
php /tmp/mokostandards-api/cli/version_set_platform.php \
|
||||||
--path . --version "$VERSION" --branch main
|
--path . --version "$VERSION" --branch main
|
||||||
|
|
||||||
# -- STEP 4: Update version badges ----------------------------------------
|
# -- STEP 4: Update version badges ----------------------------------------
|
||||||
@@ -318,8 +318,8 @@ jobs:
|
|||||||
PHP_TAG="<php_minimum>${PHP_MINIMUM}</php_minimum>"
|
PHP_TAG="<php_minimum>${PHP_MINIMUM}</php_minimum>"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
DOWNLOAD_URL="https://github.com/${REPO}/releases/download/v${VERSION}/${EXT_ELEMENT}-${VERSION}.zip"
|
DOWNLOAD_URL="https://git.mokoconsulting.tech/${{ github.repository }}/releases/download/v${VERSION}/${EXT_ELEMENT}-${VERSION}.zip"
|
||||||
INFO_URL="https://github.com/${REPO}/releases/tag/v${VERSION}"
|
INFO_URL="https://git.mokoconsulting.tech/${{ github.repository }}/releases/tag/v${VERSION}"
|
||||||
|
|
||||||
# -- Build stable entry to temp file ─────────────────────────
|
# -- Build stable entry to temp file ─────────────────────────
|
||||||
{
|
{
|
||||||
@@ -384,11 +384,11 @@ jobs:
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
VERSION="${{ steps.version.outputs.version }}"
|
VERSION="${{ steps.version.outputs.version }}"
|
||||||
git config --local user.email "github-actions[bot]@users.noreply.github.com"
|
git config --local user.email "gitea-actions[bot]@mokoconsulting.tech"
|
||||||
git config --local user.name "github-actions[bot]"
|
git config --local user.name "gitea-actions[bot]"
|
||||||
git add -A
|
git add -A
|
||||||
git commit -m "chore(release): build ${VERSION} [skip ci]" \
|
git commit -m "chore(release): build ${VERSION} [skip ci]" \
|
||||||
--author="github-actions[bot] <github-actions[bot]@users.noreply.github.com>"
|
--author="gitea-actions[bot] <gitea-actions[bot]@mokoconsulting.tech>"
|
||||||
git push
|
git push
|
||||||
|
|
||||||
# -- STEP 6: Create tag ---------------------------------------------------
|
# -- STEP 6: Create tag ---------------------------------------------------
|
||||||
@@ -415,14 +415,14 @@ jobs:
|
|||||||
steps.version.outputs.skip != 'true' &&
|
steps.version.outputs.skip != 'true' &&
|
||||||
steps.check.outputs.tag_exists != 'true'
|
steps.check.outputs.tag_exists != 'true'
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GH_TOKEN || github.token }}
|
GH_TOKEN: ${{ secrets.GA_TOKEN || github.token }}
|
||||||
run: |
|
run: |
|
||||||
VERSION="${{ steps.version.outputs.version }}"
|
VERSION="${{ steps.version.outputs.version }}"
|
||||||
RELEASE_TAG="${{ steps.version.outputs.release_tag }}"
|
RELEASE_TAG="${{ steps.version.outputs.release_tag }}"
|
||||||
BRANCH="${{ steps.version.outputs.branch }}"
|
BRANCH="${{ steps.version.outputs.branch }}"
|
||||||
MAJOR="${{ steps.version.outputs.major }}"
|
MAJOR="${{ steps.version.outputs.major }}"
|
||||||
|
|
||||||
NOTES=$(php /tmp/mokostandards/api/cli/release_notes.php --path . --version "$VERSION" 2>/dev/null)
|
NOTES=$(php /tmp/mokostandards-api/cli/release_notes.php --path . --version "$VERSION" 2>/dev/null)
|
||||||
[ -z "$NOTES" ] && NOTES="Release ${VERSION}"
|
[ -z "$NOTES" ] && NOTES="Release ${VERSION}"
|
||||||
echo "$NOTES" > /tmp/release_notes.md
|
echo "$NOTES" > /tmp/release_notes.md
|
||||||
|
|
||||||
@@ -461,7 +461,7 @@ jobs:
|
|||||||
if: >-
|
if: >-
|
||||||
steps.version.outputs.skip != 'true'
|
steps.version.outputs.skip != 'true'
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GH_TOKEN || github.token }}
|
GH_TOKEN: ${{ secrets.GA_TOKEN || github.token }}
|
||||||
run: |
|
run: |
|
||||||
VERSION="${{ steps.version.outputs.version }}"
|
VERSION="${{ steps.version.outputs.version }}"
|
||||||
RELEASE_TAG="${{ steps.version.outputs.release_tag }}"
|
RELEASE_TAG="${{ steps.version.outputs.release_tag }}"
|
||||||
@@ -511,8 +511,8 @@ jobs:
|
|||||||
|
|
||||||
# -- Update updates.xml with both download formats ---------------
|
# -- Update updates.xml with both download formats ---------------
|
||||||
if [ -f "updates.xml" ]; then
|
if [ -f "updates.xml" ]; then
|
||||||
ZIP_URL="https://github.com/${REPO}/releases/download/${RELEASE_TAG}/${ZIP_NAME}"
|
ZIP_URL="https://git.mokoconsulting.tech/${{ github.repository }}/releases/download/${RELEASE_TAG}/${ZIP_NAME}"
|
||||||
TAR_URL="https://github.com/${REPO}/releases/download/${RELEASE_TAG}/${TAR_NAME}"
|
TAR_URL="https://git.mokoconsulting.tech/${{ github.repository }}/releases/download/${RELEASE_TAG}/${TAR_NAME}"
|
||||||
|
|
||||||
# Replace downloads block with both formats + SHA
|
# Replace downloads block with both formats + SHA
|
||||||
sed -i "s|<downloads>.*</downloads>|<downloads>\n <downloadurl type=\"full\" format=\"zip\">${ZIP_URL}</downloadurl>\n <downloadurl type=\"full\" format=\"tar.gz\">${TAR_URL}</downloadurl>\n </downloads>|" updates.xml 2>/dev/null || true
|
sed -i "s|<downloads>.*</downloads>|<downloads>\n <downloadurl type=\"full\" format=\"zip\">${ZIP_URL}</downloadurl>\n <downloadurl type=\"full\" format=\"tar.gz\">${TAR_URL}</downloadurl>\n </downloads>|" updates.xml 2>/dev/null || true
|
||||||
@@ -524,7 +524,7 @@ jobs:
|
|||||||
|
|
||||||
git add updates.xml
|
git add updates.xml
|
||||||
git commit -m "chore(release): ZIP + tar.gz for ${VERSION} [skip ci]" \
|
git commit -m "chore(release): ZIP + tar.gz for ${VERSION} [skip ci]" \
|
||||||
--author="github-actions[bot] <github-actions[bot]@users.noreply.github.com>" || true
|
--author="gitea-actions[bot] <gitea-actions[bot]@mokoconsulting.tech>" || true
|
||||||
git push || true
|
git push || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -535,7 +535,7 @@ jobs:
|
|||||||
echo "| \`${ZIP_NAME}\` | ${ZIP_SIZE} | \`${SHA256_ZIP}\` |" >> $GITHUB_STEP_SUMMARY
|
echo "| \`${ZIP_NAME}\` | ${ZIP_SIZE} | \`${SHA256_ZIP}\` |" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "| \`${TAR_NAME}\` | ${TAR_SIZE} | \`${SHA256_TAR}\` |" >> $GITHUB_STEP_SUMMARY
|
echo "| \`${TAR_NAME}\` | ${TAR_SIZE} | \`${SHA256_TAR}\` |" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "| Release | \`${RELEASE_TAG}\` | |" >> $GITHUB_STEP_SUMMARY
|
echo "| Release | \`${RELEASE_TAG}\` | |" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "| Download | [${PACKAGE_NAME}](https://github.com/${REPO}/releases/download/${RELEASE_TAG}/${PACKAGE_NAME}) |" >> $GITHUB_STEP_SUMMARY
|
echo "| Download | [${PACKAGE_NAME}](https://git.mokoconsulting.tech/${{ github.repository }}/releases/download/${RELEASE_TAG}/${PACKAGE_NAME}) |" >> $GITHUB_STEP_SUMMARY
|
||||||
|
|
||||||
# -- Summary --------------------------------------------------------------
|
# -- Summary --------------------------------------------------------------
|
||||||
- name: Pipeline Summary
|
- name: Pipeline Summary
|
||||||
|
|||||||
6
.github/workflows/auto-update-sha.yml
vendored
6
.github/workflows/auto-update-sha.yml
vendored
@@ -1,7 +1,7 @@
|
|||||||
# Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
# Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: GitHub.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
# INGROUP: MokoCassiopeia.Automation
|
# INGROUP: MokoCassiopeia.Automation
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia
|
||||||
# PATH: /.github/workflows/auto-update-sha.yml
|
# PATH: /.github/workflows/auto-update-sha.yml
|
||||||
@@ -115,8 +115,8 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
TAG="${{ steps.tag.outputs.tag }}"
|
TAG="${{ steps.tag.outputs.tag }}"
|
||||||
|
|
||||||
git config --local user.email "github-actions[bot]@users.noreply.github.com"
|
git config --local user.email "gitea-actions[bot]@mokoconsulting.tech"
|
||||||
git config --local user.name "github-actions[bot]"
|
git config --local user.name "gitea-actions[bot]"
|
||||||
|
|
||||||
git add updates.xml
|
git add updates.xml
|
||||||
git commit -m "chore: Update SHA-256 hash for release ${TAG} - SHA: ${{ steps.sha.outputs.sha256 }}"
|
git commit -m "chore: Update SHA-256 hash for release ${TAG} - SHA: ${{ steps.sha.outputs.sha256 }}"
|
||||||
|
|||||||
16
.github/workflows/branch-freeze.yml
vendored
16
.github/workflows/branch-freeze.yml
vendored
@@ -3,7 +3,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
#
|
#
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: GitHub.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
# INGROUP: MokoStandards.Automation
|
# INGROUP: MokoStandards.Automation
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||||
# PATH: /templates/workflows/shared/branch-freeze.yml.template
|
# PATH: /templates/workflows/shared/branch-freeze.yml.template
|
||||||
@@ -41,11 +41,11 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Check permissions
|
- name: Check permissions
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GH_TOKEN || github.token }}
|
GH_TOKEN: ${{ secrets.GA_TOKEN || github.token }}
|
||||||
run: |
|
run: |
|
||||||
ACTOR="${{ github.actor }}"
|
ACTOR="${{ github.actor }}"
|
||||||
REPO="${{ github.repository }}"
|
REPO="${{ github.repository }}"
|
||||||
PERMISSION=$(gh api "repos/${REPO}/collaborators/${ACTOR}/permission" \
|
PERMISSION=$(curl -sf -H "Authorization: token ${{ secrets.GA_TOKEN }}" "${{GITEA_URL:-https://git.mokoconsulting.tech}}/api/v1/repos/${{ github.repository }}/collaborators/${ACTOR}/permission" 2>/dev/null \
|
||||||
--jq '.permission' 2>/dev/null || echo "read")
|
--jq '.permission' 2>/dev/null || echo "read")
|
||||||
if [ "$PERMISSION" != "admin" ]; then
|
if [ "$PERMISSION" != "admin" ]; then
|
||||||
echo "Denied: only admins can freeze/unfreeze branches (${ACTOR} has ${PERMISSION})"
|
echo "Denied: only admins can freeze/unfreeze branches (${ACTOR} has ${PERMISSION})"
|
||||||
@@ -54,7 +54,7 @@ jobs:
|
|||||||
|
|
||||||
- name: "${{ inputs.action }} branch"
|
- name: "${{ inputs.action }} branch"
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GH_TOKEN || github.token }}
|
GH_TOKEN: ${{ secrets.GA_TOKEN || github.token }}
|
||||||
run: |
|
run: |
|
||||||
BRANCH="${{ inputs.branch }}"
|
BRANCH="${{ inputs.branch }}"
|
||||||
ACTION="${{ inputs.action }}"
|
ACTION="${{ inputs.action }}"
|
||||||
@@ -66,7 +66,7 @@ jobs:
|
|||||||
|
|
||||||
if [ "$ACTION" = "freeze" ]; then
|
if [ "$ACTION" = "freeze" ]; then
|
||||||
# Check if ruleset already exists
|
# Check if ruleset already exists
|
||||||
EXISTING=$(gh api "repos/${REPO}/rulesets" \
|
EXISTING=$(curl -sf -H "Authorization: token ${{ secrets.GA_TOKEN }}" "${{GITEA_URL:-https://git.mokoconsulting.tech}}/api/v1/repos/${{ github.repository }}/rulesets" 2>/dev/null \
|
||||||
--jq ".[] | select(.name == \"${RULESET_NAME}\") | .id" 2>/dev/null || true)
|
--jq ".[] | select(.name == \"${RULESET_NAME}\") | .id" 2>/dev/null || true)
|
||||||
|
|
||||||
if [ -n "$EXISTING" ]; then
|
if [ -n "$EXISTING" ]; then
|
||||||
@@ -80,7 +80,7 @@ jobs:
|
|||||||
printf '"conditions":{"ref_name":{"include":["refs/heads/%s"],"exclude":[]}},' "${BRANCH}" >> /tmp/ruleset.json
|
printf '"conditions":{"ref_name":{"include":["refs/heads/%s"],"exclude":[]}},' "${BRANCH}" >> /tmp/ruleset.json
|
||||||
printf '"rules":[{"type":"update"},{"type":"deletion"},{"type":"non_fast_forward"}]}' >> /tmp/ruleset.json
|
printf '"rules":[{"type":"update"},{"type":"deletion"},{"type":"non_fast_forward"}]}' >> /tmp/ruleset.json
|
||||||
|
|
||||||
RESULT=$(gh api "repos/${REPO}/rulesets" -X POST --input /tmp/ruleset.json --jq '.id' 2>&1) || true
|
RESULT=$(curl -sf -H "Authorization: token ${{ secrets.GA_TOKEN }}" "${{GITEA_URL:-https://git.mokoconsulting.tech}}/api/v1/repos/${{ github.repository }}/rulesets" 2>/dev/null -X POST --input /tmp/ruleset.json --jq '.id' 2>&1) || true
|
||||||
|
|
||||||
if echo "$RESULT" | grep -qE '^[0-9]+$'; then
|
if echo "$RESULT" | grep -qE '^[0-9]+$'; then
|
||||||
echo "Frozen \`${BRANCH}\` — ruleset #${RESULT}" >> $GITHUB_STEP_SUMMARY
|
echo "Frozen \`${BRANCH}\` — ruleset #${RESULT}" >> $GITHUB_STEP_SUMMARY
|
||||||
@@ -98,7 +98,7 @@ jobs:
|
|||||||
|
|
||||||
elif [ "$ACTION" = "unfreeze" ]; then
|
elif [ "$ACTION" = "unfreeze" ]; then
|
||||||
# Find and delete the freeze ruleset
|
# Find and delete the freeze ruleset
|
||||||
RULESET_ID=$(gh api "repos/${REPO}/rulesets" \
|
RULESET_ID=$(curl -sf -H "Authorization: token ${{ secrets.GA_TOKEN }}" "${{GITEA_URL:-https://git.mokoconsulting.tech}}/api/v1/repos/${{ github.repository }}/rulesets" 2>/dev/null \
|
||||||
--jq ".[] | select(.name == \"${RULESET_NAME}\") | .id" 2>/dev/null || true)
|
--jq ".[] | select(.name == \"${RULESET_NAME}\") | .id" 2>/dev/null || true)
|
||||||
|
|
||||||
if [ -z "$RULESET_ID" ]; then
|
if [ -z "$RULESET_ID" ]; then
|
||||||
@@ -106,7 +106,7 @@ jobs:
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
gh api "repos/${REPO}/rulesets/${RULESET_ID}" -X DELETE --silent 2>/dev/null
|
curl -sf -H "Authorization: token ${{ secrets.GA_TOKEN }}" "${{GITEA_URL:-https://git.mokoconsulting.tech}}/api/v1/repos/${{ github.repository }}/rulesets/${RULESET_ID}" 2>/dev/null -X DELETE --silent 2>/dev/null
|
||||||
|
|
||||||
echo "Unfrozen \`${BRANCH}\` — ruleset #${RULESET_ID} deleted" >> $GITHUB_STEP_SUMMARY
|
echo "Unfrozen \`${BRANCH}\` — ruleset #${RULESET_ID} deleted" >> $GITHUB_STEP_SUMMARY
|
||||||
fi
|
fi
|
||||||
|
|||||||
2
.github/workflows/changelog-validation.yml
vendored
2
.github/workflows/changelog-validation.yml
vendored
@@ -5,7 +5,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
#
|
#
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: GitHub.Workflow.Template
|
# DEFGROUP: Gitea.Workflow.Template
|
||||||
# INGROUP: MokoStandards.CI
|
# INGROUP: MokoStandards.CI
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||||
# PATH: /templates/workflows/shared/changelog-validation.yml.template
|
# PATH: /templates/workflows/shared/changelog-validation.yml.template
|
||||||
|
|||||||
24
.github/workflows/ci-joomla.yml
vendored
24
.github/workflows/ci-joomla.yml
vendored
@@ -5,7 +5,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
#
|
#
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: GitHub.Workflow.Template
|
# DEFGROUP: Gitea.Workflow.Template
|
||||||
# INGROUP: MokoStandards.CI
|
# INGROUP: MokoStandards.CI
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||||
# PATH: /templates/workflows/joomla/ci-joomla.yml.template
|
# PATH: /templates/workflows/joomla/ci-joomla.yml.template
|
||||||
@@ -39,16 +39,12 @@ jobs:
|
|||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
||||||
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.31.0
|
run: |
|
||||||
with:
|
php -v && composer --version
|
||||||
php-version: '8.2'
|
|
||||||
extensions: mbstring, xml, zip, gd, curl, json, simplexml
|
|
||||||
tools: composer:v2
|
|
||||||
coverage: none
|
|
||||||
|
|
||||||
- name: Clone MokoStandards
|
- name: Clone MokoStandards
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GH_TOKEN || github.token }}
|
GH_TOKEN: ${{ secrets.GA_TOKEN || github.token }}
|
||||||
run: |
|
run: |
|
||||||
git clone --depth 1 --branch version/04 --quiet \
|
git clone --depth 1 --branch version/04 --quiet \
|
||||||
"https://x-access-token:${GH_TOKEN}@git.mokoconsulting.tech/MokoConsulting/MokoStandards.git" \
|
"https://x-access-token:${GH_TOKEN}@git.mokoconsulting.tech/MokoConsulting/MokoStandards.git" \
|
||||||
@@ -56,7 +52,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
env:
|
env:
|
||||||
COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_TOKEN || github.token }}"}}'
|
COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GA_TOKEN || github.token }}"}}'
|
||||||
run: |
|
run: |
|
||||||
if [ -f "composer.json" ]; then
|
if [ -f "composer.json" ]; then
|
||||||
composer install \
|
composer install \
|
||||||
@@ -344,16 +340,12 @@ jobs:
|
|||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
||||||
|
|
||||||
- name: Setup PHP ${{ matrix.php }}
|
- name: Setup PHP ${{ matrix.php }}
|
||||||
uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.31.0
|
run: |
|
||||||
with:
|
php -v && composer --version
|
||||||
php-version: ${{ matrix.php }}
|
|
||||||
extensions: mbstring, xml, zip, gd, curl, json, simplexml
|
|
||||||
tools: composer:v2
|
|
||||||
coverage: none
|
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
env:
|
env:
|
||||||
COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_TOKEN || github.token }}"}}'
|
COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GA_TOKEN || github.token }}"}}'
|
||||||
run: |
|
run: |
|
||||||
if [ -f "composer.json" ]; then
|
if [ -f "composer.json" ]; then
|
||||||
composer install \
|
composer install \
|
||||||
|
|||||||
2
.github/workflows/codeql-analysis.yml
vendored
2
.github/workflows/codeql-analysis.yml
vendored
@@ -5,7 +5,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
#
|
#
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: GitHub.Workflow.Template
|
# DEFGROUP: Gitea.Workflow.Template
|
||||||
# INGROUP: MokoStandards.Security
|
# INGROUP: MokoStandards.Security
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||||
# PATH: /templates/workflows/generic/codeql-analysis.yml.template
|
# PATH: /templates/workflows/generic/codeql-analysis.yml.template
|
||||||
|
|||||||
14
.github/workflows/deploy-manual.yml
vendored
14
.github/workflows/deploy-manual.yml
vendored
@@ -3,7 +3,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
#
|
#
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: GitHub.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
# INGROUP: MokoStandards.Deploy
|
# INGROUP: MokoStandards.Deploy
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||||
# PATH: /templates/workflows/joomla/deploy-manual.yml.template
|
# PATH: /templates/workflows/joomla/deploy-manual.yml.template
|
||||||
@@ -39,17 +39,13 @@ jobs:
|
|||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
||||||
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.31.0
|
run: |
|
||||||
with:
|
php -v && composer --version
|
||||||
php-version: '8.2'
|
|
||||||
extensions: json, ssh2
|
|
||||||
tools: composer
|
|
||||||
coverage: none
|
|
||||||
|
|
||||||
- name: Setup MokoStandards tools
|
- name: Setup MokoStandards tools
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GH_TOKEN || github.token }}
|
GH_TOKEN: ${{ secrets.GA_TOKEN || github.token }}
|
||||||
COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_TOKEN || github.token }}"}}'
|
COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GA_TOKEN || github.token }}"}}'
|
||||||
run: |
|
run: |
|
||||||
git clone --depth 1 --branch version/04 --quiet \
|
git clone --depth 1 --branch version/04 --quiet \
|
||||||
"https://x-access-token:${GH_TOKEN}@git.mokoconsulting.tech/MokoConsulting/MokoStandards.git" \
|
"https://x-access-token:${GH_TOKEN}@git.mokoconsulting.tech/MokoConsulting/MokoStandards.git" \
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: GitHub.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
# INGROUP: MokoStandards.Firewall
|
# INGROUP: MokoStandards.Firewall
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||||
# PATH: /templates/workflows/shared/enterprise-firewall-setup.yml.template
|
# PATH: /templates/workflows/shared/enterprise-firewall-setup.yml.template
|
||||||
|
|||||||
456
.github/workflows/release.yml
vendored
456
.github/workflows/release.yml
vendored
@@ -4,27 +4,13 @@
|
|||||||
#
|
#
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: GitHub.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
# INGROUP: MokoCassiopeia.Release
|
# INGROUP: MokoCassiopeia.Release
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia
|
||||||
# PATH: /.github/workflows/release.yml
|
# PATH: /.github/workflows/release.yml
|
||||||
# VERSION: 03.09.03
|
# VERSION: 03.09.16
|
||||||
# BRIEF: Automated release workflow for MokoCassiopeia Joomla template
|
# BRIEF: Joomla release — build ZIP, publish to Gitea, mirror to GitHub
|
||||||
# NOTE: Creates release packages and publishes to GitHub Releases
|
|
||||||
|
|
||||||
name: Create Release
|
name: Create Release
|
||||||
|
|
||||||
@@ -35,7 +21,7 @@ on:
|
|||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
version:
|
version:
|
||||||
description: 'Release version (e.g., 03.08.03)'
|
description: 'Release version (e.g., 03.09.16)'
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
prerelease:
|
prerelease:
|
||||||
@@ -43,10 +29,21 @@ on:
|
|||||||
required: false
|
required: false
|
||||||
type: boolean
|
type: boolean
|
||||||
default: false
|
default: false
|
||||||
|
stability:
|
||||||
|
description: 'Stability tag (development, alpha, beta, rc, stable)'
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
default: 'development'
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
|
|
||||||
|
env:
|
||||||
|
GITEA_URL: https://git.mokoconsulting.tech
|
||||||
|
GITEA_ORG: MokoConsulting
|
||||||
|
GITEA_REPO: MokoCassiopeia
|
||||||
|
EXT_ELEMENT: mokocassiopeia
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: Build Release Package
|
name: Build Release Package
|
||||||
@@ -59,152 +56,345 @@ jobs:
|
|||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v2
|
run: |
|
||||||
with:
|
sudo apt-get update -qq
|
||||||
php-version: '8.1'
|
sudo apt-get install -y -qq php-cli php-mbstring php-xml php-zip php-curl composer >/dev/null 2>&1
|
||||||
extensions: mbstring, xml, zip
|
php -v
|
||||||
tools: composer:v2
|
composer --version
|
||||||
|
|
||||||
- name: Get version
|
- name: Get version and stability
|
||||||
id: version
|
id: meta
|
||||||
run: |
|
run: |
|
||||||
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
|
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
|
||||||
VERSION="${{ inputs.version }}"
|
VERSION="${{ inputs.version }}"
|
||||||
|
STABILITY="${{ inputs.stability }}"
|
||||||
|
PRERELEASE="${{ inputs.prerelease }}"
|
||||||
else
|
else
|
||||||
VERSION=${GITHUB_REF#refs/tags/}
|
VERSION=${GITHUB_REF#refs/tags/}
|
||||||
|
STABILITY="stable"
|
||||||
|
PRERELEASE="false"
|
||||||
fi
|
fi
|
||||||
echo "version=${VERSION}" >> $GITHUB_OUTPUT
|
|
||||||
echo "Building version: ${VERSION}"
|
# Derive suffix and tag from stability
|
||||||
|
case "$STABILITY" in
|
||||||
|
development) SUFFIX="-dev"; TAG_NAME="development" ;;
|
||||||
|
alpha) SUFFIX="-alpha"; TAG_NAME="alpha" ;;
|
||||||
|
beta) SUFFIX="-beta"; TAG_NAME="beta" ;;
|
||||||
|
rc) SUFFIX="-rc"; TAG_NAME="release-candidate" ;;
|
||||||
|
stable) SUFFIX=""; TAG_NAME="v${VERSION%%.*}" ;;
|
||||||
|
*) SUFFIX="-dev"; TAG_NAME="development" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
ZIP_NAME="${EXT_ELEMENT}-${VERSION}${SUFFIX}.zip"
|
||||||
|
|
||||||
|
echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "stability=${STABILITY}" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "prerelease=${PRERELEASE}" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "suffix=${SUFFIX}" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "tag_name=${TAG_NAME}" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "zip_name=${ZIP_NAME}" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "Building: ${ZIP_NAME} (${STABILITY})"
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
|
env:
|
||||||
|
COMPOSER_AUTH: '{"http-basic":{"git.mokoconsulting.tech":{"username":"token","password":"${{ secrets.GA_TOKEN }}"}}}'
|
||||||
run: |
|
run: |
|
||||||
if [ -f "composer.json" ]; then
|
if [ -f "composer.json" ]; then
|
||||||
composer install --no-dev --optimize-autoloader
|
composer install --no-dev --optimize-autoloader --no-interaction
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Update version in manifest files
|
- name: Create package
|
||||||
run: |
|
|
||||||
VERSION="${{ steps.version.outputs.version }}"
|
|
||||||
# Update version in templateDetails.xml
|
|
||||||
sed -i "s/<version>.*<\/version>/<version>${VERSION}<\/version>/g" src/templateDetails.xml
|
|
||||||
# Update version in updates.xml
|
|
||||||
sed -i "s/<version>.*<\/version>/<version>${VERSION}<\/version>/g" updates.xml
|
|
||||||
# Update creation date to today
|
|
||||||
DATE=$(date +%Y-%m-%d)
|
|
||||||
sed -i "s/<creationDate>.*<\/creationDate>/<creationDate>${DATE}<\/creationDate>/g" src/templateDetails.xml
|
|
||||||
sed -i "s/<creationDate>.*<\/creationDate>/<creationDate>${DATE}<\/creationDate>/g" updates.xml
|
|
||||||
|
|
||||||
- name: Create package structure
|
|
||||||
run: |
|
run: |
|
||||||
mkdir -p build/package
|
mkdir -p build/package
|
||||||
|
rsync -av \
|
||||||
|
--exclude='sftp-config*' \
|
||||||
|
--exclude='.ftpignore' \
|
||||||
|
--exclude='*.ppk' \
|
||||||
|
--exclude='*.pem' \
|
||||||
|
--exclude='*.key' \
|
||||||
|
--exclude='.env*' \
|
||||||
|
--exclude='*.local' \
|
||||||
|
src/ build/package/
|
||||||
|
|
||||||
# Copy template files from src (excluding media directory)
|
- name: Build ZIP
|
||||||
rsync -av --exclude='media' src/ build/package/
|
id: zip
|
||||||
|
|
||||||
# Copy media files from src/media to package/media directory
|
|
||||||
mkdir -p build/package/media
|
|
||||||
rsync -av src/media/ build/package/media/
|
|
||||||
|
|
||||||
- name: Create source ZIP package
|
|
||||||
run: |
|
run: |
|
||||||
|
ZIP_NAME="${{ steps.meta.outputs.zip_name }}"
|
||||||
cd build/package
|
cd build/package
|
||||||
VERSION="${{ steps.version.outputs.version }}"
|
|
||||||
ZIP_NAME="mokocassiopeia-src-${VERSION}.zip"
|
|
||||||
zip -r "../${ZIP_NAME}" .
|
zip -r "../${ZIP_NAME}" .
|
||||||
cd ../..
|
cd ..
|
||||||
echo "ZIP_NAME=${ZIP_NAME}" >> $GITHUB_ENV
|
|
||||||
echo "Created package: ${ZIP_NAME}"
|
|
||||||
|
|
||||||
- name: Generate checksums
|
SHA256=$(sha256sum "${ZIP_NAME}" | cut -d' ' -f1)
|
||||||
|
SIZE=$(stat -c%s "${ZIP_NAME}")
|
||||||
|
|
||||||
|
echo "sha256=${SHA256}" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "size=${SIZE}" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "SHA-256: ${SHA256}"
|
||||||
|
echo "Size: ${SIZE} bytes"
|
||||||
|
|
||||||
|
# ── Gitea Release (PRIMARY) ──────────────────────────────────────
|
||||||
|
- name: "Gitea: Delete existing release"
|
||||||
run: |
|
run: |
|
||||||
cd build
|
TAG="${{ steps.meta.outputs.tag_name }}"
|
||||||
sha256sum "${ZIP_NAME}" > "${ZIP_NAME}.sha256"
|
TOKEN="${{ secrets.GA_TOKEN }}"
|
||||||
md5sum "${ZIP_NAME}" > "${ZIP_NAME}.md5"
|
API="${GITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}"
|
||||||
|
|
||||||
# Extract just the hash for updates.xml
|
# Find and delete existing release by tag
|
||||||
SHA256_HASH=$(sha256sum "${ZIP_NAME}" | cut -d' ' -f1)
|
RELEASE_ID=$(curl -sf -H "Authorization: token ${TOKEN}" \
|
||||||
echo "SHA256_HASH=${SHA256_HASH}" >> $GITHUB_ENV
|
"${API}/releases/tags/${TAG}" 2>/dev/null | jq -r '.id // empty')
|
||||||
echo "SHA-256: ${SHA256_HASH}"
|
|
||||||
|
|
||||||
- name: Upload build artifacts
|
if [ -n "$RELEASE_ID" ]; then
|
||||||
uses: actions/upload-artifact@v4
|
curl -sf -X DELETE -H "Authorization: token ${TOKEN}" \
|
||||||
with:
|
"${API}/releases/${RELEASE_ID}" || true
|
||||||
name: release-package
|
echo "Deleted existing release id=${RELEASE_ID}"
|
||||||
path: |
|
|
||||||
build/*.zip
|
|
||||||
build/*.sha256
|
|
||||||
build/*.md5
|
|
||||||
|
|
||||||
release:
|
|
||||||
name: Create GitHub Release
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: build
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Download build artifacts
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
name: release-package
|
|
||||||
path: ./artifacts
|
|
||||||
|
|
||||||
- name: Get version
|
|
||||||
id: version
|
|
||||||
run: |
|
|
||||||
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
|
|
||||||
VERSION="${{ inputs.version }}"
|
|
||||||
else
|
|
||||||
VERSION=${GITHUB_REF#refs/tags/}
|
|
||||||
fi
|
fi
|
||||||
echo "version=${VERSION}" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Extract changelog
|
# Delete existing tag
|
||||||
id: changelog
|
curl -sf -X DELETE -H "Authorization: token ${TOKEN}" \
|
||||||
|
"${API}/tags/${TAG}" 2>/dev/null || true
|
||||||
|
|
||||||
|
- name: "Gitea: Create release"
|
||||||
|
id: gitea_release
|
||||||
run: |
|
run: |
|
||||||
|
TAG="${{ steps.meta.outputs.tag_name }}"
|
||||||
|
VERSION="${{ steps.meta.outputs.version }}"
|
||||||
|
STABILITY="${{ steps.meta.outputs.stability }}"
|
||||||
|
PRERELEASE="${{ steps.meta.outputs.prerelease }}"
|
||||||
|
SHA256="${{ steps.zip.outputs.sha256 }}"
|
||||||
|
TOKEN="${{ secrets.GA_TOKEN }}"
|
||||||
|
API="${GITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}"
|
||||||
|
|
||||||
|
# Build release body
|
||||||
|
BODY="## ${EXT_ELEMENT} ${VERSION} (${STABILITY})
|
||||||
|
|
||||||
|
### SHA-256
|
||||||
|
\`${SHA256}\`"
|
||||||
|
|
||||||
|
# Extract changelog if available
|
||||||
if [ -f "CHANGELOG.md" ]; then
|
if [ -f "CHANGELOG.md" ]; then
|
||||||
# Extract changelog for this version
|
NOTES=$(awk "/## \[${VERSION}\]/,/## \[/{if(/## \[${VERSION}\]/)next;if(/## \[/)exit;print}" CHANGELOG.md)
|
||||||
VERSION="${{ steps.version.outputs.version }}"
|
if [ -n "$NOTES" ]; then
|
||||||
awk "/## \[${VERSION}\]/,/## \[/{if(/## \[${VERSION}\]/)print;else if(/## \[/)exit;else print}" CHANGELOG.md > release_notes.md
|
BODY="## ${EXT_ELEMENT} ${VERSION} (${STABILITY})
|
||||||
|
|
||||||
if [ ! -s release_notes.md ]; then
|
${NOTES}
|
||||||
echo "No specific changelog found for version ${VERSION}" > release_notes.md
|
|
||||||
echo "" >> release_notes.md
|
### SHA-256
|
||||||
echo "Please refer to the full CHANGELOG.md for details." >> release_notes.md
|
\`${SHA256}\`"
|
||||||
fi
|
fi
|
||||||
else
|
|
||||||
echo "Release version ${{ steps.version.outputs.version }}" > release_notes.md
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Create Release
|
IS_PRE="true"
|
||||||
uses: softprops/action-gh-release@v1
|
if [ "$STABILITY" = "stable" ]; then
|
||||||
with:
|
IS_PRE="false"
|
||||||
tag_name: ${{ steps.version.outputs.version }}
|
fi
|
||||||
name: Release ${{ steps.version.outputs.version }}
|
|
||||||
body_path: release_notes.md
|
|
||||||
draft: false
|
|
||||||
prerelease: ${{ inputs.prerelease || false }}
|
|
||||||
files: |
|
|
||||||
artifacts/*.zip
|
|
||||||
artifacts/*.sha256
|
|
||||||
artifacts/*.md5
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Release summary
|
RESULT=$(curl -sf -X POST -H "Authorization: token ${TOKEN}" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
"${API}/releases" \
|
||||||
|
-d "$(jq -n \
|
||||||
|
--arg tag "$TAG" \
|
||||||
|
--arg target "${{ github.ref_name }}" \
|
||||||
|
--arg name "${EXT_ELEMENT} ${VERSION} ${STABILITY^}" \
|
||||||
|
--arg body "$BODY" \
|
||||||
|
--argjson pre "$IS_PRE" \
|
||||||
|
'{tag_name: $tag, target_commitish: $target, name: $name, body: $body, prerelease: $pre}'
|
||||||
|
)")
|
||||||
|
|
||||||
|
RELEASE_ID=$(echo "$RESULT" | jq -r '.id')
|
||||||
|
echo "release_id=${RELEASE_ID}" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "Gitea release created: id=${RELEASE_ID}, tag=${TAG}"
|
||||||
|
|
||||||
|
- name: "Gitea: Upload ZIP"
|
||||||
run: |
|
run: |
|
||||||
echo "### Release Created Successfully" >> $GITHUB_STEP_SUMMARY
|
RELEASE_ID="${{ steps.gitea_release.outputs.release_id }}"
|
||||||
|
ZIP_NAME="${{ steps.meta.outputs.zip_name }}"
|
||||||
|
TOKEN="${{ secrets.GA_TOKEN }}"
|
||||||
|
API="${GITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}"
|
||||||
|
|
||||||
|
curl -sf -X POST \
|
||||||
|
-H "Authorization: token ${TOKEN}" \
|
||||||
|
-H "Content-Type: application/octet-stream" \
|
||||||
|
"${API}/releases/${RELEASE_ID}/assets?name=${ZIP_NAME}" \
|
||||||
|
--data-binary "@build/${ZIP_NAME}"
|
||||||
|
|
||||||
|
echo "Uploaded ${ZIP_NAME} to Gitea release ${RELEASE_ID}"
|
||||||
|
|
||||||
|
# ── GitHub Mirror (BACKUP) ───────────────────────────────────────
|
||||||
|
- name: "GitHub: Mirror release (stable/rc only)"
|
||||||
|
if: ${{ steps.meta.outputs.stability == 'stable' || steps.meta.outputs.stability == 'rc' }}
|
||||||
|
continue-on-error: true
|
||||||
|
run: |
|
||||||
|
TAG="${{ steps.meta.outputs.tag_name }}"
|
||||||
|
VERSION="${{ steps.meta.outputs.version }}"
|
||||||
|
STABILITY="${{ steps.meta.outputs.stability }}"
|
||||||
|
ZIP_NAME="${{ steps.meta.outputs.zip_name }}"
|
||||||
|
SHA256="${{ steps.zip.outputs.sha256 }}"
|
||||||
|
TOKEN="${{ secrets.GH_TOKEN }}"
|
||||||
|
GH_REPO="mokoconsulting-tech/${GITEA_REPO}"
|
||||||
|
GH_API="https://api.github.com/repos/${GH_REPO}"
|
||||||
|
|
||||||
|
IS_PRE="true"
|
||||||
|
[ "$STABILITY" = "stable" ] && IS_PRE="false"
|
||||||
|
|
||||||
|
# Delete existing release by tag
|
||||||
|
EXISTING=$(curl -sf -H "Authorization: token ${TOKEN}" \
|
||||||
|
"${GH_API}/releases/tags/${TAG}" 2>/dev/null | jq -r '.id // empty')
|
||||||
|
if [ -n "$EXISTING" ]; then
|
||||||
|
curl -sf -X DELETE -H "Authorization: token ${TOKEN}" \
|
||||||
|
"${GH_API}/releases/${EXISTING}" || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Delete tag
|
||||||
|
curl -sf -X DELETE -H "Authorization: token ${TOKEN}" \
|
||||||
|
"${GH_API}/git/refs/tags/${TAG}" 2>/dev/null || true
|
||||||
|
|
||||||
|
# Create release
|
||||||
|
RELEASE_ID=$(curl -sf -X POST -H "Authorization: token ${TOKEN}" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
"${GH_API}/releases" \
|
||||||
|
-d "$(jq -n \
|
||||||
|
--arg tag "$TAG" \
|
||||||
|
--arg target "${{ github.sha }}" \
|
||||||
|
--arg name "${EXT_ELEMENT} ${VERSION} ${STABILITY^} (mirror)" \
|
||||||
|
--arg body "Mirror of Gitea release. SHA-256: \`${SHA256}\`" \
|
||||||
|
--argjson pre "$IS_PRE" \
|
||||||
|
'{tag_name: $tag, target_commitish: $target, name: $name, body: $body, prerelease: $pre}'
|
||||||
|
)" | jq -r '.id')
|
||||||
|
|
||||||
|
# Upload ZIP
|
||||||
|
if [ -n "$RELEASE_ID" ] && [ "$RELEASE_ID" != "null" ]; then
|
||||||
|
curl -sf -X POST \
|
||||||
|
-H "Authorization: token ${TOKEN}" \
|
||||||
|
-H "Content-Type: application/octet-stream" \
|
||||||
|
"https://uploads.github.com/repos/${GH_REPO}/releases/${RELEASE_ID}/assets?name=${ZIP_NAME}" \
|
||||||
|
--data-binary "@build/${ZIP_NAME}"
|
||||||
|
echo "GitHub mirror: uploaded ${ZIP_NAME}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ── Update updates.xml ──────────────────────────────────────────
|
||||||
|
- name: "Update updates.xml for this channel"
|
||||||
|
run: |
|
||||||
|
STABILITY="${{ steps.meta.outputs.stability }}"
|
||||||
|
VERSION="${{ steps.meta.outputs.version }}"
|
||||||
|
SHA256="${{ steps.zip.outputs.sha256 }}"
|
||||||
|
ZIP_NAME="${{ steps.meta.outputs.zip_name }}"
|
||||||
|
TAG="${{ steps.meta.outputs.tag_name }}"
|
||||||
|
DATE=$(date +%Y-%m-%d)
|
||||||
|
|
||||||
|
if [ ! -f "updates.xml" ] || [ -z "$SHA256" ]; then
|
||||||
|
echo "No updates.xml or no SHA — skipping"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
export PY_STABILITY="$STABILITY" PY_VERSION="$VERSION" PY_SHA256="$SHA256" \
|
||||||
|
PY_ZIP_NAME="$ZIP_NAME" PY_TAG="$TAG" PY_DATE="$DATE" \
|
||||||
|
PY_GITEA_ORG="$GITEA_ORG" PY_GITEA_REPO="$GITEA_REPO"
|
||||||
|
python3 << 'PYEOF'
|
||||||
|
import re, os
|
||||||
|
|
||||||
|
stability = os.environ["PY_STABILITY"]
|
||||||
|
version = os.environ["PY_VERSION"]
|
||||||
|
sha256 = os.environ["PY_SHA256"]
|
||||||
|
zip_name = os.environ["PY_ZIP_NAME"]
|
||||||
|
tag = os.environ["PY_TAG"]
|
||||||
|
date = os.environ["PY_DATE"]
|
||||||
|
gitea_org = os.environ["PY_GITEA_ORG"]
|
||||||
|
gitea_repo = os.environ["PY_GITEA_REPO"]
|
||||||
|
|
||||||
|
# Map stability to the <tag> value in updates.xml
|
||||||
|
tag_map = {
|
||||||
|
"development": "development",
|
||||||
|
"alpha": "alpha",
|
||||||
|
"beta": "beta",
|
||||||
|
"rc": "rc",
|
||||||
|
"stable": "stable",
|
||||||
|
}
|
||||||
|
xml_tag = tag_map.get(stability, "development")
|
||||||
|
|
||||||
|
with open("updates.xml", "r") as f:
|
||||||
|
content = f.read()
|
||||||
|
|
||||||
|
# Build regex to find the <update> block containing this stability tag
|
||||||
|
# Match from <update> to </update> that contains <tag>xml_tag</tag>
|
||||||
|
block_pattern = r"(<update>.*?<tag>" + re.escape(xml_tag) + r"</tag>.*?</update>)"
|
||||||
|
match = re.search(block_pattern, content, re.DOTALL)
|
||||||
|
|
||||||
|
if not match:
|
||||||
|
print(f"No <update> block found for <tag>{xml_tag}</tag>")
|
||||||
|
exit(0)
|
||||||
|
|
||||||
|
block = match.group(1)
|
||||||
|
original_block = block
|
||||||
|
|
||||||
|
# Update version
|
||||||
|
block = re.sub(r"<version>[^<]*</version>", f"<version>{version}</version>", block)
|
||||||
|
|
||||||
|
# Update creation date
|
||||||
|
block = re.sub(r"<creationDate>[^<]*</creationDate>", f"<creationDate>{date}</creationDate>", block)
|
||||||
|
|
||||||
|
# Update SHA-256
|
||||||
|
block = re.sub(r"<sha256>[^<]*</sha256>", f"<sha256>sha256:{sha256}</sha256>", block)
|
||||||
|
|
||||||
|
# Update Gitea download URL
|
||||||
|
gitea_url = f"https://git.mokoconsulting.tech/{gitea_org}/{gitea_repo}/releases/download/{tag}/{zip_name}"
|
||||||
|
block = re.sub(
|
||||||
|
r"(<downloadurl[^>]*>)https://git\.mokoconsulting\.tech/[^<]*(</downloadurl>)",
|
||||||
|
rf"\g<1>{gitea_url}\g<2>",
|
||||||
|
block
|
||||||
|
)
|
||||||
|
|
||||||
|
# Update GitHub download URL only for RC and stable (others are Gitea-only)
|
||||||
|
if stability in ("rc", "stable"):
|
||||||
|
gh_url = f"https://github.com/mokoconsulting-tech/{gitea_repo}/releases/download/{tag}/{zip_name}"
|
||||||
|
block = re.sub(
|
||||||
|
r"(<downloadurl[^>]*>)https://github\.com/[^<]*(</downloadurl>)",
|
||||||
|
rf"\g<1>{gh_url}\g<2>",
|
||||||
|
block
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
# Remove any GitHub download URL for dev/alpha/beta
|
||||||
|
block = re.sub(
|
||||||
|
r"\n\s*<downloadurl[^>]*>https://github\.com/[^<]*</downloadurl>",
|
||||||
|
"",
|
||||||
|
block
|
||||||
|
)
|
||||||
|
|
||||||
|
content = content.replace(original_block, block)
|
||||||
|
|
||||||
|
with open("updates.xml", "w") as f:
|
||||||
|
f.write(content)
|
||||||
|
|
||||||
|
print(f"Updated {xml_tag} channel: version={version}, sha={sha256[:16]}..., date={date}")
|
||||||
|
PYEOF
|
||||||
|
|
||||||
|
- name: "Commit updates.xml"
|
||||||
|
run: |
|
||||||
|
if git diff --quiet updates.xml 2>/dev/null; then
|
||||||
|
echo "No changes to updates.xml"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
git config --local user.email "gitea-actions[bot]@mokoconsulting.tech"
|
||||||
|
git config --local user.name "gitea-actions[bot]"
|
||||||
|
git add updates.xml
|
||||||
|
git commit -m "chore: update ${STABILITY} SHA-256 for ${{ steps.meta.outputs.version }} [skip ci]" \
|
||||||
|
--author="gitea-actions[bot] <gitea-actions[bot]@mokoconsulting.tech>"
|
||||||
|
git push || true
|
||||||
|
|
||||||
|
- name: Summary
|
||||||
|
run: |
|
||||||
|
VERSION="${{ steps.meta.outputs.version }}"
|
||||||
|
STABILITY="${{ steps.meta.outputs.stability }}"
|
||||||
|
ZIP_NAME="${{ steps.meta.outputs.zip_name }}"
|
||||||
|
SHA256="${{ steps.zip.outputs.sha256 }}"
|
||||||
|
TAG="${{ steps.meta.outputs.tag_name }}"
|
||||||
|
|
||||||
|
echo "### Release Created" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "- Version: ${{ steps.version.outputs.version }}" >> $GITHUB_STEP_SUMMARY
|
echo "| Field | Value |" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "- Repository: $GITHUB_REPOSITORY" >> $GITHUB_STEP_SUMMARY
|
echo "|-------|-------|" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "- Tag: ${{ steps.version.outputs.version }}" >> $GITHUB_STEP_SUMMARY
|
echo "| Version | \`${VERSION}\` |" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "- Pre-release: ${{ inputs.prerelease || false }}" >> $GITHUB_STEP_SUMMARY
|
echo "| Stability | ${STABILITY} |" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
echo "| Tag | \`${TAG}\` |" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "Package files:" >> $GITHUB_STEP_SUMMARY
|
echo "| Package | \`${ZIP_NAME}\` |" >> $GITHUB_STEP_SUMMARY
|
||||||
ls -lh artifacts/ >> $GITHUB_STEP_SUMMARY
|
echo "| SHA-256 | \`${SHA256}\` |" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
echo "| Gitea | [Release](${GITEA_URL}/${GITEA_ORG}/${GITEA_REPO}/releases/tag/${TAG}) |" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "### Next Steps" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "1. Verify the release at: https://github.com/$GITHUB_REPOSITORY/releases/tag/${{ steps.version.outputs.version }}" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "2. Update updates.xml with the SHA-256 hash from the .sha256 file" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "3. Test the installation package" >> $GITHUB_STEP_SUMMARY
|
|
||||||
|
|||||||
4
.github/workflows/repo_health.yml
vendored
4
.github/workflows/repo_health.yml
vendored
@@ -6,7 +6,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
#
|
#
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: GitHub.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
# INGROUP: MokoStandards.Validation
|
# INGROUP: MokoStandards.Validation
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||||
# PATH: /.github/workflows/repo_health.yml
|
# PATH: /.github/workflows/repo_health.yml
|
||||||
@@ -97,7 +97,7 @@ jobs:
|
|||||||
let method = "";
|
let method = "";
|
||||||
|
|
||||||
// Hardcoded authorized users — always allowed
|
// Hardcoded authorized users — always allowed
|
||||||
const authorizedUsers = ["jmiller-moko", "github-actions[bot]"];
|
const authorizedUsers = ["jmiller-moko", "gitea-actions[bot]"];
|
||||||
if (authorizedUsers.includes(actor)) {
|
if (authorizedUsers.includes(actor)) {
|
||||||
allowed = true;
|
allowed = true;
|
||||||
permission = "admin";
|
permission = "admin";
|
||||||
|
|||||||
58
.github/workflows/repository-cleanup.yml
vendored
58
.github/workflows/repository-cleanup.yml
vendored
@@ -5,7 +5,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
#
|
#
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: GitHub.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
# INGROUP: MokoStandards.Maintenance
|
# INGROUP: MokoStandards.Maintenance
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||||
# PATH: /templates/workflows/shared/repository-cleanup.yml.template
|
# PATH: /templates/workflows/shared/repository-cleanup.yml.template
|
||||||
@@ -67,20 +67,20 @@ jobs:
|
|||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.GH_TOKEN || github.token }}
|
token: ${{ secrets.GA_TOKEN || github.token }}
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Check actor permission
|
- name: Check actor permission
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GH_TOKEN || github.token }}
|
GH_TOKEN: ${{ secrets.GA_TOKEN || github.token }}
|
||||||
run: |
|
run: |
|
||||||
ACTOR="${{ github.actor }}"
|
ACTOR="${{ github.actor }}"
|
||||||
# Schedule triggers use github-actions[bot]
|
# Schedule triggers use gitea-actions[bot]
|
||||||
if [ "${{ github.event_name }}" = "schedule" ]; then
|
if [ "${{ github.event_name }}" = "schedule" ]; then
|
||||||
echo "✅ Scheduled run — authorized"
|
echo "✅ Scheduled run — authorized"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
AUTHORIZED_USERS="jmiller-moko github-actions[bot]"
|
AUTHORIZED_USERS="jmiller-moko gitea-actions[bot]"
|
||||||
for user in $AUTHORIZED_USERS; do
|
for user in $AUTHORIZED_USERS; do
|
||||||
if [ "$ACTOR" = "$user" ]; then
|
if [ "$ACTOR" = "$user" ]; then
|
||||||
echo "✅ ${ACTOR} authorized"
|
echo "✅ ${ACTOR} authorized"
|
||||||
@@ -170,11 +170,11 @@ jobs:
|
|||||||
done
|
done
|
||||||
|
|
||||||
if [ "$DELETED" -gt 0 ]; then
|
if [ "$DELETED" -gt 0 ]; then
|
||||||
git config --local user.email "github-actions[bot]@users.noreply.github.com"
|
git config --local user.email "gitea-actions[bot]@mokoconsulting.tech"
|
||||||
git config --local user.name "github-actions[bot]"
|
git config --local user.name "gitea-actions[bot]"
|
||||||
git add -A
|
git add -A
|
||||||
git commit -m "chore: delete ${DELETED} retired workflow file(s) [skip ci]" \
|
git commit -m "chore: delete ${DELETED} retired workflow file(s) [skip ci]" \
|
||||||
--author="github-actions[bot] <github-actions[bot]@users.noreply.github.com>"
|
--author="gitea-actions[bot] <gitea-actions[bot]@mokoconsulting.tech>"
|
||||||
git push
|
git push
|
||||||
echo "✅ ${DELETED} retired workflow(s) deleted" >> $GITHUB_STEP_SUMMARY
|
echo "✅ ${DELETED} retired workflow(s) deleted" >> $GITHUB_STEP_SUMMARY
|
||||||
else
|
else
|
||||||
@@ -185,20 +185,20 @@ jobs:
|
|||||||
- name: Reset labels to standard set
|
- name: Reset labels to standard set
|
||||||
if: steps.tasks.outputs.reset_labels == 'true'
|
if: steps.tasks.outputs.reset_labels == 'true'
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GH_TOKEN || github.token }}
|
GH_TOKEN: ${{ secrets.GA_TOKEN || github.token }}
|
||||||
run: |
|
run: |
|
||||||
REPO="${{ github.repository }}"
|
REPO="${{ github.repository }}"
|
||||||
echo "## 🏷️ Label Reset" >> $GITHUB_STEP_SUMMARY
|
echo "## 🏷️ Label Reset" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||||||
|
|
||||||
gh api "repos/${REPO}/labels?per_page=100" --paginate --jq '.[].name' | while read -r label; do
|
curl -sf -H "Authorization: token ${{ secrets.GA_TOKEN }}" "${{GITEA_URL:-https://git.mokoconsulting.tech}}/api/v1/repos/${{ github.repository }}/labels?per_page=100" 2>/dev/null --paginate --jq '.[].name' | while read -r label; do
|
||||||
ENCODED=$(python3 -c "import urllib.parse; print(urllib.parse.quote('$label', safe=''))")
|
ENCODED=$(python3 -c "import urllib.parse; print(urllib.parse.quote('$label', safe=''))")
|
||||||
gh api -X DELETE "repos/${REPO}/labels/${ENCODED}" --silent 2>/dev/null || true
|
gh api -X DELETE "repos/${REPO}/labels/${ENCODED}" --silent 2>/dev/null || true
|
||||||
done
|
done
|
||||||
|
|
||||||
while IFS='|' read -r name color description; do
|
while IFS='|' read -r name color description; do
|
||||||
[ -z "$name" ] && continue
|
[ -z "$name" ] && continue
|
||||||
gh api "repos/${REPO}/labels" \
|
curl -sf -H "Authorization: token ${{ secrets.GA_TOKEN }}" "${{GITEA_URL:-https://git.mokoconsulting.tech}}/api/v1/repos/${{ github.repository }}/labels" 2>/dev/null \
|
||||||
-f name="$name" -f color="$color" -f description="$description" \
|
-f name="$name" -f color="$color" -f description="$description" \
|
||||||
--silent 2>/dev/null || true
|
--silent 2>/dev/null || true
|
||||||
done << 'LABELS'
|
done << 'LABELS'
|
||||||
@@ -267,7 +267,7 @@ jobs:
|
|||||||
- name: Delete old sync branches
|
- name: Delete old sync branches
|
||||||
if: steps.tasks.outputs.clean_branches == 'true'
|
if: steps.tasks.outputs.clean_branches == 'true'
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GH_TOKEN || github.token }}
|
GH_TOKEN: ${{ secrets.GA_TOKEN || github.token }}
|
||||||
run: |
|
run: |
|
||||||
REPO="${{ github.repository }}"
|
REPO="${{ github.repository }}"
|
||||||
CURRENT="chore/sync-mokostandards-v04.05"
|
CURRENT="chore/sync-mokostandards-v04.05"
|
||||||
@@ -275,7 +275,7 @@ jobs:
|
|||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||||||
|
|
||||||
FOUND=false
|
FOUND=false
|
||||||
gh api "repos/${REPO}/branches?per_page=100" --jq '.[].name' | \
|
curl -sf -H "Authorization: token ${{ secrets.GA_TOKEN }}" "${{GITEA_URL:-https://git.mokoconsulting.tech}}/api/v1/repos/${{ github.repository }}/branches?per_page=100" | jq -r '.[].name' 2>/dev/null | \
|
||||||
grep "^chore/sync-mokostandards" | \
|
grep "^chore/sync-mokostandards" | \
|
||||||
grep -v "^${CURRENT}$" | while read -r branch; do
|
grep -v "^${CURRENT}$" | while read -r branch; do
|
||||||
gh pr list --repo "$REPO" --head "$branch" --state open --json number --jq '.[].number' 2>/dev/null | while read -r pr; do
|
gh pr list --repo "$REPO" --head "$branch" --state open --json number --jq '.[].number' 2>/dev/null | while read -r pr; do
|
||||||
@@ -295,7 +295,7 @@ jobs:
|
|||||||
- name: Clean up workflow runs
|
- name: Clean up workflow runs
|
||||||
if: steps.tasks.outputs.clean_workflows == 'true'
|
if: steps.tasks.outputs.clean_workflows == 'true'
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GH_TOKEN || github.token }}
|
GH_TOKEN: ${{ secrets.GA_TOKEN || github.token }}
|
||||||
run: |
|
run: |
|
||||||
REPO="${{ github.repository }}"
|
REPO="${{ github.repository }}"
|
||||||
echo "## 🔄 Workflow Run Cleanup" >> $GITHUB_STEP_SUMMARY
|
echo "## 🔄 Workflow Run Cleanup" >> $GITHUB_STEP_SUMMARY
|
||||||
@@ -304,7 +304,7 @@ jobs:
|
|||||||
DELETED=0
|
DELETED=0
|
||||||
# Delete cancelled and stale workflow runs
|
# Delete cancelled and stale workflow runs
|
||||||
for status in cancelled stale; do
|
for status in cancelled stale; do
|
||||||
gh api "repos/${REPO}/actions/runs?status=${status}&per_page=100" \
|
curl -sf -H "Authorization: token ${{ secrets.GA_TOKEN }}" "${{GITEA_URL:-https://git.mokoconsulting.tech}}/api/v1/repos/${{ github.repository }}/actions/runs?status=${status}&per_page=100" 2>/dev/null \
|
||||||
--jq '.workflow_runs[].id' 2>/dev/null | while read -r run_id; do
|
--jq '.workflow_runs[].id' 2>/dev/null | while read -r run_id; do
|
||||||
gh api -X DELETE "repos/${REPO}/actions/runs/${run_id}" --silent 2>/dev/null || true
|
gh api -X DELETE "repos/${REPO}/actions/runs/${run_id}" --silent 2>/dev/null || true
|
||||||
DELETED=$((DELETED+1))
|
DELETED=$((DELETED+1))
|
||||||
@@ -317,7 +317,7 @@ jobs:
|
|||||||
- name: Delete old workflow run logs
|
- name: Delete old workflow run logs
|
||||||
if: steps.tasks.outputs.clean_logs == 'true'
|
if: steps.tasks.outputs.clean_logs == 'true'
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GH_TOKEN || github.token }}
|
GH_TOKEN: ${{ secrets.GA_TOKEN || github.token }}
|
||||||
run: |
|
run: |
|
||||||
REPO="${{ github.repository }}"
|
REPO="${{ github.repository }}"
|
||||||
CUTOFF=$(date -u -d '30 days ago' +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -v-30d +%Y-%m-%dT%H:%M:%SZ)
|
CUTOFF=$(date -u -d '30 days ago' +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -v-30d +%Y-%m-%dT%H:%M:%SZ)
|
||||||
@@ -326,7 +326,7 @@ jobs:
|
|||||||
echo "Deleting logs older than: ${CUTOFF}" >> $GITHUB_STEP_SUMMARY
|
echo "Deleting logs older than: ${CUTOFF}" >> $GITHUB_STEP_SUMMARY
|
||||||
|
|
||||||
DELETED=0
|
DELETED=0
|
||||||
gh api "repos/${REPO}/actions/runs?created=<${CUTOFF}&per_page=100" \
|
curl -sf -H "Authorization: token ${{ secrets.GA_TOKEN }}" "${{GITEA_URL:-https://git.mokoconsulting.tech}}/api/v1/repos/${{ github.repository }}/actions/runs?created=<${CUTOFF}&per_page=100" 2>/dev/null \
|
||||||
--jq '.workflow_runs[].id' 2>/dev/null | while read -r run_id; do
|
--jq '.workflow_runs[].id' 2>/dev/null | while read -r run_id; do
|
||||||
gh api -X DELETE "repos/${REPO}/actions/runs/${run_id}/logs" --silent 2>/dev/null || true
|
gh api -X DELETE "repos/${REPO}/actions/runs/${run_id}/logs" --silent 2>/dev/null || true
|
||||||
DELETED=$((DELETED+1))
|
DELETED=$((DELETED+1))
|
||||||
@@ -352,11 +352,11 @@ jobs:
|
|||||||
done
|
done
|
||||||
|
|
||||||
if [ "$FIXED" -gt 0 ]; then
|
if [ "$FIXED" -gt 0 ]; then
|
||||||
git config --local user.email "github-actions[bot]@users.noreply.github.com"
|
git config --local user.email "gitea-actions[bot]@mokoconsulting.tech"
|
||||||
git config --local user.name "github-actions[bot]"
|
git config --local user.name "gitea-actions[bot]"
|
||||||
git add .github/ISSUE_TEMPLATE/
|
git add .github/ISSUE_TEMPLATE/
|
||||||
git commit -m "fix: strip copyright comment blocks from issue templates [skip ci]" \
|
git commit -m "fix: strip copyright comment blocks from issue templates [skip ci]" \
|
||||||
--author="github-actions[bot] <github-actions[bot]@users.noreply.github.com>"
|
--author="gitea-actions[bot] <gitea-actions[bot]@mokoconsulting.tech>"
|
||||||
git push
|
git push
|
||||||
echo "✅ ${FIXED} template(s) cleaned and committed" >> $GITHUB_STEP_SUMMARY
|
echo "✅ ${FIXED} template(s) cleaned and committed" >> $GITHUB_STEP_SUMMARY
|
||||||
else
|
else
|
||||||
@@ -400,12 +400,12 @@ jobs:
|
|||||||
done
|
done
|
||||||
|
|
||||||
if [ "$UPDATED" -gt 0 ]; then
|
if [ "$UPDATED" -gt 0 ]; then
|
||||||
git config --local user.email "github-actions[bot]@users.noreply.github.com"
|
git config --local user.email "gitea-actions[bot]@mokoconsulting.tech"
|
||||||
git config --local user.name "github-actions[bot]"
|
git config --local user.name "gitea-actions[bot]"
|
||||||
git add docs/
|
git add docs/
|
||||||
if ! git diff --cached --quiet; then
|
if ! git diff --cached --quiet; then
|
||||||
git commit -m "docs: rebuild documentation indexes [skip ci]" \
|
git commit -m "docs: rebuild documentation indexes [skip ci]" \
|
||||||
--author="github-actions[bot] <github-actions[bot]@users.noreply.github.com>"
|
--author="gitea-actions[bot] <gitea-actions[bot]@mokoconsulting.tech>"
|
||||||
git push
|
git push
|
||||||
echo "✅ ${UPDATED} index file(s) rebuilt and committed" >> $GITHUB_STEP_SUMMARY
|
echo "✅ ${UPDATED} index file(s) rebuilt and committed" >> $GITHUB_STEP_SUMMARY
|
||||||
else
|
else
|
||||||
@@ -476,12 +476,12 @@ jobs:
|
|||||||
Synced workflows live in `.github/workflows/` (parent directory).
|
Synced workflows live in `.github/workflows/` (parent directory).
|
||||||
CWEOF
|
CWEOF
|
||||||
sed -i 's/^ //' .github/workflows/custom/README.md
|
sed -i 's/^ //' .github/workflows/custom/README.md
|
||||||
git config --local user.email "github-actions[bot]@users.noreply.github.com"
|
git config --local user.email "gitea-actions[bot]@mokoconsulting.tech"
|
||||||
git config --local user.name "github-actions[bot]"
|
git config --local user.name "gitea-actions[bot]"
|
||||||
git add .github/workflows/custom/
|
git add .github/workflows/custom/
|
||||||
if ! git diff --cached --quiet; then
|
if ! git diff --cached --quiet; then
|
||||||
git commit -m "chore: create .github/workflows/custom/ for repo-specific workflows [skip ci]" \
|
git commit -m "chore: create .github/workflows/custom/ for repo-specific workflows [skip ci]" \
|
||||||
--author="github-actions[bot] <github-actions[bot]@users.noreply.github.com>"
|
--author="gitea-actions[bot] <gitea-actions[bot]@mokoconsulting.tech>"
|
||||||
git push
|
git push
|
||||||
echo "✅ Created \`.github/workflows/custom/\` directory" >> $GITHUB_STEP_SUMMARY
|
echo "✅ Created \`.github/workflows/custom/\` directory" >> $GITHUB_STEP_SUMMARY
|
||||||
fi
|
fi
|
||||||
@@ -494,7 +494,7 @@ jobs:
|
|||||||
- name: Delete old closed issues
|
- name: Delete old closed issues
|
||||||
if: steps.tasks.outputs.delete_closed_issues == 'true'
|
if: steps.tasks.outputs.delete_closed_issues == 'true'
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GH_TOKEN || github.token }}
|
GH_TOKEN: ${{ secrets.GA_TOKEN || github.token }}
|
||||||
run: |
|
run: |
|
||||||
REPO="${{ github.repository }}"
|
REPO="${{ github.repository }}"
|
||||||
CUTOFF=$(date -u -d '30 days ago' +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -v-30d +%Y-%m-%dT%H:%M:%SZ)
|
CUTOFF=$(date -u -d '30 days ago' +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -v-30d +%Y-%m-%dT%H:%M:%SZ)
|
||||||
@@ -503,10 +503,10 @@ jobs:
|
|||||||
echo "Deleting issues closed before: ${CUTOFF}" >> $GITHUB_STEP_SUMMARY
|
echo "Deleting issues closed before: ${CUTOFF}" >> $GITHUB_STEP_SUMMARY
|
||||||
|
|
||||||
DELETED=0
|
DELETED=0
|
||||||
gh api "repos/${REPO}/issues?state=closed&since=1970-01-01T00:00:00Z&per_page=100&sort=updated&direction=asc" \
|
curl -sf -H "Authorization: token ${{ secrets.GA_TOKEN }}" "${{GITEA_URL:-https://git.mokoconsulting.tech}}/api/v1/repos/${{ github.repository }}/issues?state=closed&since=1970-01-01T00:00:00Z&per_page=100&sort=updated&direction=asc" 2>/dev/null \
|
||||||
--jq ".[] | select(.closed_at < \"${CUTOFF}\") | .number" 2>/dev/null | while read -r num; do
|
--jq ".[] | select(.closed_at < \"${CUTOFF}\") | .number" 2>/dev/null | while read -r num; do
|
||||||
# Lock and close with "not_planned" to mark as cleaned up
|
# Lock and close with "not_planned" to mark as cleaned up
|
||||||
gh api "repos/${REPO}/issues/${num}/lock" -X PUT -f lock_reason="resolved" --silent 2>/dev/null || true
|
curl -sf -H "Authorization: token ${{ secrets.GA_TOKEN }}" "${{GITEA_URL:-https://git.mokoconsulting.tech}}/api/v1/repos/${{ github.repository }}/issues/${num}/lock" 2>/dev/null -X PUT -f lock_reason="resolved" --silent 2>/dev/null || true
|
||||||
echo " Locked issue #${num}" >> $GITHUB_STEP_SUMMARY
|
echo " Locked issue #${num}" >> $GITHUB_STEP_SUMMARY
|
||||||
DELETED=$((DELETED+1))
|
DELETED=$((DELETED+1))
|
||||||
done
|
done
|
||||||
|
|||||||
64
.github/workflows/standards-compliance.yml
vendored
64
.github/workflows/standards-compliance.yml
vendored
@@ -1,7 +1,7 @@
|
|||||||
# Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
# Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: GitHub.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
# INGROUP: MokoStandards.Compliance
|
# INGROUP: MokoStandards.Compliance
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||||
# PATH: /.github/workflows/standards-compliance.yml
|
# PATH: /.github/workflows/standards-compliance.yml
|
||||||
@@ -497,17 +497,13 @@ jobs:
|
|||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
||||||
|
|
||||||
- name: Set up PHP
|
- name: Set up PHP
|
||||||
uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.31.0
|
run: |
|
||||||
with:
|
php -v && composer --version
|
||||||
php-version: '8.1'
|
|
||||||
extensions: json
|
|
||||||
tools: composer
|
|
||||||
coverage: none
|
|
||||||
|
|
||||||
- name: Setup MokoStandards tools
|
- name: Setup MokoStandards tools
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GH_TOKEN || github.token }}
|
GH_TOKEN: ${{ secrets.GA_TOKEN || github.token }}
|
||||||
COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_TOKEN || github.token }}"}}'
|
COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GA_TOKEN || github.token }}"}}'
|
||||||
run: |
|
run: |
|
||||||
git clone --depth 1 --branch version/04 --quiet \
|
git clone --depth 1 --branch version/04 --quiet \
|
||||||
"https://x-access-token:${GH_TOKEN}@git.mokoconsulting.tech/MokoConsulting/MokoStandards.git" \
|
"https://x-access-token:${GH_TOKEN}@git.mokoconsulting.tech/MokoConsulting/MokoStandards.git" \
|
||||||
@@ -1333,9 +1329,8 @@ jobs:
|
|||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
||||||
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.31.0
|
run: |
|
||||||
with:
|
php -v && composer --version
|
||||||
php-version: '8.1'
|
|
||||||
|
|
||||||
- name: Analyze Complexity
|
- name: Analyze Complexity
|
||||||
run: |
|
run: |
|
||||||
@@ -1376,9 +1371,8 @@ jobs:
|
|||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
||||||
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.31.0
|
run: |
|
||||||
with:
|
php -v && composer --version
|
||||||
php-version: '8.1'
|
|
||||||
|
|
||||||
- name: Detect Duplicates
|
- name: Detect Duplicates
|
||||||
run: |
|
run: |
|
||||||
@@ -1632,9 +1626,8 @@ jobs:
|
|||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
||||||
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.31.0
|
run: |
|
||||||
with:
|
php -v && composer --version
|
||||||
php-version: '8.1'
|
|
||||||
|
|
||||||
- name: Setup Python
|
- name: Setup Python
|
||||||
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
||||||
@@ -1707,9 +1700,8 @@ jobs:
|
|||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
||||||
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.31.0
|
run: |
|
||||||
with:
|
php -v && composer --version
|
||||||
php-version: '8.1'
|
|
||||||
|
|
||||||
- name: Check Unused Dependencies
|
- name: Check Unused Dependencies
|
||||||
run: |
|
run: |
|
||||||
@@ -1961,17 +1953,13 @@ jobs:
|
|||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
||||||
|
|
||||||
- name: Set up PHP
|
- name: Set up PHP
|
||||||
uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.31.0
|
run: |
|
||||||
with:
|
php -v && composer --version
|
||||||
php-version: '8.1'
|
|
||||||
extensions: json, mbstring
|
|
||||||
tools: composer
|
|
||||||
coverage: none
|
|
||||||
|
|
||||||
- name: Install API Package
|
- name: Install API Package
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GH_TOKEN || github.token }}
|
GH_TOKEN: ${{ secrets.GA_TOKEN || github.token }}
|
||||||
COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_TOKEN || github.token }}"}}'
|
COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GA_TOKEN || github.token }}"}}'
|
||||||
run: |
|
run: |
|
||||||
if [ -f "composer.json" ]; then
|
if [ -f "composer.json" ]; then
|
||||||
composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader
|
composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader
|
||||||
@@ -2033,17 +2021,13 @@ jobs:
|
|||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
||||||
|
|
||||||
- name: Set up PHP
|
- name: Set up PHP
|
||||||
uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.31.0
|
run: |
|
||||||
with:
|
php -v && composer --version
|
||||||
php-version: '8.1'
|
|
||||||
extensions: json, mbstring
|
|
||||||
tools: composer
|
|
||||||
coverage: none
|
|
||||||
|
|
||||||
- name: Install API Package
|
- name: Install API Package
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GH_TOKEN || github.token }}
|
GH_TOKEN: ${{ secrets.GA_TOKEN || github.token }}
|
||||||
COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_TOKEN || github.token }}"}}'
|
COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GA_TOKEN || github.token }}"}}'
|
||||||
run: |
|
run: |
|
||||||
if [ -f "composer.json" ]; then
|
if [ -f "composer.json" ]; then
|
||||||
composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader
|
composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader
|
||||||
@@ -2537,7 +2521,7 @@ jobs:
|
|||||||
- name: Create or reopen tracking issue for standards violations
|
- name: Create or reopen tracking issue for standards violations
|
||||||
if: failure()
|
if: failure()
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GH_TOKEN || github.token }}
|
GH_TOKEN: ${{ secrets.GA_TOKEN || github.token }}
|
||||||
run: |
|
run: |
|
||||||
REPO="${{ github.repository }}"
|
REPO="${{ github.repository }}"
|
||||||
RUN_URL="${{ github.server_url }}/${REPO}/actions/runs/${{ github.run_id }}"
|
RUN_URL="${{ github.server_url }}/${REPO}/actions/runs/${{ github.run_id }}"
|
||||||
@@ -2592,11 +2576,11 @@ jobs:
|
|||||||
|
|
||||||
gh label create "$LABEL" --repo "$REPO" --color "D73A4A" --description "Standards compliance failure" --force 2>/dev/null || true
|
gh label create "$LABEL" --repo "$REPO" --color "D73A4A" --description "Standards compliance failure" --force 2>/dev/null || true
|
||||||
|
|
||||||
EXISTING=$(gh api "repos/${REPO}/issues?labels=${LABEL}&state=all&per_page=1&sort=created&direction=desc" \
|
EXISTING=$(curl -sf -H "Authorization: token ${{ secrets.GA_TOKEN }}" "${{GITEA_URL:-https://git.mokoconsulting.tech}}/api/v1/repos/${{ github.repository }}/issues?labels=${LABEL}&state=all&per_page=1&sort=created&direction=desc" 2>/dev/null \
|
||||||
--jq '.[0].number' 2>/dev/null)
|
--jq '.[0].number' 2>/dev/null)
|
||||||
|
|
||||||
if [ -n "$EXISTING" ] && [ "$EXISTING" != "null" ]; then
|
if [ -n "$EXISTING" ] && [ "$EXISTING" != "null" ]; then
|
||||||
gh api "repos/${REPO}/issues/${EXISTING}" -X PATCH \
|
curl -sf -H "Authorization: token ${{ secrets.GA_TOKEN }}" "${{GITEA_URL:-https://git.mokoconsulting.tech}}/api/v1/repos/${{ github.repository }}/issues/${EXISTING}" 2>/dev/null -X PATCH \
|
||||||
-f title="$TITLE" -f body="$BODY" -f state="open" --silent
|
-f title="$TITLE" -f body="$BODY" -f state="open" --silent
|
||||||
echo "Updated issue #${EXISTING}"
|
echo "Updated issue #${EXISTING}"
|
||||||
else
|
else
|
||||||
|
|||||||
30
.github/workflows/sync-version-on-merge.yml
vendored
30
.github/workflows/sync-version-on-merge.yml
vendored
@@ -5,7 +5,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
#
|
#
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: GitHub.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
# INGROUP: MokoStandards.Automation
|
# INGROUP: MokoStandards.Automation
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||||
# PATH: /templates/workflows/shared/sync-version-on-merge.yml.template
|
# PATH: /templates/workflows/shared/sync-version-on-merge.yml.template
|
||||||
@@ -46,19 +46,17 @@ jobs:
|
|||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.GH_TOKEN || github.token }}
|
token: ${{ secrets.GA_TOKEN || github.token }}
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Set up PHP
|
- name: Set up PHP
|
||||||
uses: shivammathur/setup-php@fcafdd6392932010c2bd5094439b8e33be2a8a09 # v2.37.0
|
run: |
|
||||||
with:
|
php -v && composer --version
|
||||||
php-version: '8.1'
|
|
||||||
tools: composer
|
|
||||||
|
|
||||||
- name: Setup MokoStandards tools
|
- name: Setup MokoStandards tools
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GH_TOKEN || github.token }}
|
GH_TOKEN: ${{ secrets.GA_TOKEN || github.token }}
|
||||||
COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_TOKEN || github.token }}"}}'
|
COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GA_TOKEN || github.token }}"}}'
|
||||||
run: |
|
run: |
|
||||||
git clone --depth 1 --branch version/04 --quiet \
|
git clone --depth 1 --branch version/04 --quiet \
|
||||||
"https://x-access-token:${GH_TOKEN}@git.mokoconsulting.tech/MokoConsulting/MokoStandards.git" \
|
"https://x-access-token:${GH_TOKEN}@git.mokoconsulting.tech/MokoConsulting/MokoStandards.git" \
|
||||||
@@ -67,7 +65,7 @@ jobs:
|
|||||||
composer install --no-dev --no-interaction --quiet
|
composer install --no-dev --no-interaction --quiet
|
||||||
|
|
||||||
- name: Auto-bump patch version
|
- name: Auto-bump patch version
|
||||||
if: ${{ github.event_name != 'workflow_dispatch' && github.actor != 'github-actions[bot]' }}
|
if: ${{ github.event_name != 'workflow_dispatch' && github.actor != 'gitea-actions[bot]' }}
|
||||||
run: |
|
run: |
|
||||||
if git diff --name-only HEAD~1 HEAD 2>/dev/null | grep -q '^README\.md$'; then
|
if git diff --name-only HEAD~1 HEAD 2>/dev/null | grep -q '^README\.md$'; then
|
||||||
echo "README.md changed in this push — skipping auto-bump"
|
echo "README.md changed in this push — skipping auto-bump"
|
||||||
@@ -79,11 +77,11 @@ jobs:
|
|||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
echo "Auto-bumping patch: $RESULT"
|
echo "Auto-bumping patch: $RESULT"
|
||||||
git config --local user.email "github-actions[bot]@users.noreply.github.com"
|
git config --local user.email "gitea-actions[bot]@mokoconsulting.tech"
|
||||||
git config --local user.name "github-actions[bot]"
|
git config --local user.name "gitea-actions[bot]"
|
||||||
git add README.md
|
git add README.md
|
||||||
git commit -m "chore(version): auto-bump patch ${RESULT} [skip ci]" \
|
git commit -m "chore(version): auto-bump patch ${RESULT} [skip ci]" \
|
||||||
--author="github-actions[bot] <github-actions[bot]@users.noreply.github.com>"
|
--author="gitea-actions[bot] <gitea-actions[bot]@mokoconsulting.tech>"
|
||||||
git push
|
git push
|
||||||
|
|
||||||
- name: Extract version from README.md
|
- name: Extract version from README.md
|
||||||
@@ -108,7 +106,7 @@ jobs:
|
|||||||
--create-issue \
|
--create-issue \
|
||||||
--repo "${{ github.repository }}"
|
--repo "${{ github.repository }}"
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GH_TOKEN || github.token }}
|
GH_TOKEN: ${{ secrets.GA_TOKEN || github.token }}
|
||||||
|
|
||||||
- name: Commit updated files
|
- name: Commit updated files
|
||||||
if: ${{ steps.readme_version.outputs.skip != 'true' && inputs.dry_run != true }}
|
if: ${{ steps.readme_version.outputs.skip != 'true' && inputs.dry_run != true }}
|
||||||
@@ -119,11 +117,11 @@ jobs:
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
VERSION="${{ steps.readme_version.outputs.version }}"
|
VERSION="${{ steps.readme_version.outputs.version }}"
|
||||||
git config --local user.email "github-actions[bot]@users.noreply.github.com"
|
git config --local user.email "gitea-actions[bot]@mokoconsulting.tech"
|
||||||
git config --local user.name "github-actions[bot]"
|
git config --local user.name "gitea-actions[bot]"
|
||||||
git add -A
|
git add -A
|
||||||
git commit -m "chore(version): sync badges and headers to ${VERSION} [skip ci]" \
|
git commit -m "chore(version): sync badges and headers to ${VERSION} [skip ci]" \
|
||||||
--author="github-actions[bot] <github-actions[bot]@users.noreply.github.com>"
|
--author="gitea-actions[bot] <gitea-actions[bot]@mokoconsulting.tech>"
|
||||||
git push
|
git push
|
||||||
|
|
||||||
- name: Summary
|
- name: Summary
|
||||||
|
|||||||
30
.github/workflows/update-server.yml
vendored
30
.github/workflows/update-server.yml
vendored
@@ -3,7 +3,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
#
|
#
|
||||||
# FILE INFORMATION
|
# FILE INFORMATION
|
||||||
# DEFGROUP: GitHub.Workflow
|
# DEFGROUP: Gitea.Workflow
|
||||||
# INGROUP: MokoStandards.Joomla
|
# INGROUP: MokoStandards.Joomla
|
||||||
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
# REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoStandards
|
||||||
# PATH: /templates/workflows/joomla/update-server.yml.template
|
# PATH: /templates/workflows/joomla/update-server.yml.template
|
||||||
@@ -61,13 +61,13 @@ jobs:
|
|||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.GH_TOKEN || github.token }}
|
token: ${{ secrets.GA_TOKEN || github.token }}
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Setup MokoStandards tools
|
- name: Setup MokoStandards tools
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GH_TOKEN || github.token }}
|
GH_TOKEN: ${{ secrets.GA_TOKEN || github.token }}
|
||||||
COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_TOKEN || github.token }}"}}'
|
COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GA_TOKEN || github.token }}"}}'
|
||||||
run: |
|
run: |
|
||||||
git clone --depth 1 --branch version/04 --quiet \
|
git clone --depth 1 --branch version/04 --quiet \
|
||||||
"https://x-access-token:${GH_TOKEN}@git.mokoconsulting.tech/MokoConsulting/MokoStandards.git" \
|
"https://x-access-token:${GH_TOKEN}@git.mokoconsulting.tech/MokoConsulting/MokoStandards.git" \
|
||||||
@@ -84,14 +84,14 @@ jobs:
|
|||||||
|
|
||||||
# Auto-bump patch on alpha/beta/rc branches (not dev — dev bumps manually)
|
# Auto-bump patch on alpha/beta/rc branches (not dev — dev bumps manually)
|
||||||
if [[ "$BRANCH" != dev/* ]]; then
|
if [[ "$BRANCH" != dev/* ]]; then
|
||||||
git config --local user.email "github-actions[bot]@users.noreply.github.com"
|
git config --local user.email "gitea-actions[bot]@mokoconsulting.tech"
|
||||||
git config --local user.name "github-actions[bot]"
|
git config --local user.name "gitea-actions[bot]"
|
||||||
BUMPED=$(php /tmp/mokostandards/api/cli/version_bump.php --path . 2>/dev/null || true)
|
BUMPED=$(php /tmp/mokostandards/api/cli/version_bump.php --path . 2>/dev/null || true)
|
||||||
if [ -n "$BUMPED" ]; then
|
if [ -n "$BUMPED" ]; then
|
||||||
VERSION=$(php /tmp/mokostandards/api/cli/version_read.php --path . 2>/dev/null || echo "$VERSION")
|
VERSION=$(php /tmp/mokostandards/api/cli/version_read.php --path . 2>/dev/null || echo "$VERSION")
|
||||||
git add -A
|
git add -A
|
||||||
git commit -m "chore(version): auto-bump patch ${VERSION} [skip ci]" \
|
git commit -m "chore(version): auto-bump patch ${VERSION} [skip ci]" \
|
||||||
--author="github-actions[bot] <github-actions[bot]@users.noreply.github.com>" 2>/dev/null || true
|
--author="gitea-actions[bot] <gitea-actions[bot]@mokoconsulting.tech>" 2>/dev/null || true
|
||||||
git push 2>/dev/null || true
|
git push 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -173,7 +173,7 @@ jobs:
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
PACKAGE_NAME="${EXT_ELEMENT}-${DISPLAY_VERSION}.zip"
|
PACKAGE_NAME="${EXT_ELEMENT}-${DISPLAY_VERSION}.zip"
|
||||||
DOWNLOAD_URL="https://github.com/${REPO}/releases/download/${RELEASE_TAG}/${PACKAGE_NAME}"
|
DOWNLOAD_URL="https://git.mokoconsulting.tech/${{ github.repository }}/releases/download/${RELEASE_TAG}/${PACKAGE_NAME}"
|
||||||
INFO_URL="https://github.com/${REPO}"
|
INFO_URL="https://github.com/${REPO}"
|
||||||
|
|
||||||
# ── Build install packages (ZIP + tar.gz) ───────────────────
|
# ── Build install packages (ZIP + tar.gz) ───────────────────
|
||||||
@@ -220,7 +220,7 @@ jobs:
|
|||||||
NEW_ENTRY="${NEW_ENTRY} </tags>\n"
|
NEW_ENTRY="${NEW_ENTRY} </tags>\n"
|
||||||
NEW_ENTRY="${NEW_ENTRY} <infourl title=\"${EXT_NAME}\">${INFO_URL}</infourl>\n"
|
NEW_ENTRY="${NEW_ENTRY} <infourl title=\"${EXT_NAME}\">${INFO_URL}</infourl>\n"
|
||||||
NEW_ENTRY="${NEW_ENTRY} <downloads>\n"
|
NEW_ENTRY="${NEW_ENTRY} <downloads>\n"
|
||||||
TAR_URL="https://github.com/${REPO}/releases/download/${RELEASE_TAG}/${EXT_ELEMENT}-${DISPLAY_VERSION}.tar.gz"
|
TAR_URL="https://git.mokoconsulting.tech/${{ github.repository }}/releases/download/${RELEASE_TAG}/${EXT_ELEMENT}-${DISPLAY_VERSION}.tar.gz"
|
||||||
NEW_ENTRY="${NEW_ENTRY} <downloadurl type=\"full\" format=\"zip\">${DOWNLOAD_URL}</downloadurl>\n"
|
NEW_ENTRY="${NEW_ENTRY} <downloadurl type=\"full\" format=\"zip\">${DOWNLOAD_URL}</downloadurl>\n"
|
||||||
NEW_ENTRY="${NEW_ENTRY} <downloadurl type=\"full\" format=\"tar.gz\">${TAR_URL}</downloadurl>\n"
|
NEW_ENTRY="${NEW_ENTRY} <downloadurl type=\"full\" format=\"tar.gz\">${TAR_URL}</downloadurl>\n"
|
||||||
NEW_ENTRY="${NEW_ENTRY} </downloads>\n"
|
NEW_ENTRY="${NEW_ENTRY} </downloads>\n"
|
||||||
@@ -269,12 +269,12 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Commit
|
# Commit
|
||||||
git config --local user.email "github-actions[bot]@users.noreply.github.com"
|
git config --local user.email "gitea-actions[bot]@mokoconsulting.tech"
|
||||||
git config --local user.name "github-actions[bot]"
|
git config --local user.name "gitea-actions[bot]"
|
||||||
git add updates.xml
|
git add updates.xml
|
||||||
git diff --cached --quiet || {
|
git diff --cached --quiet || {
|
||||||
git commit -m "chore: update updates.xml (${STABILITY}: ${DISPLAY_VERSION}) [skip ci]" \
|
git commit -m "chore: update updates.xml (${STABILITY}: ${DISPLAY_VERSION}) [skip ci]" \
|
||||||
--author="github-actions[bot] <github-actions[bot]@users.noreply.github.com>"
|
--author="gitea-actions[bot] <gitea-actions[bot]@mokoconsulting.tech>"
|
||||||
git push
|
git push
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -288,14 +288,14 @@ jobs:
|
|||||||
DEV_PORT: ${{ vars.DEV_FTP_PORT }}
|
DEV_PORT: ${{ vars.DEV_FTP_PORT }}
|
||||||
DEV_KEY: ${{ secrets.DEV_FTP_KEY }}
|
DEV_KEY: ${{ secrets.DEV_FTP_KEY }}
|
||||||
DEV_PASS: ${{ secrets.DEV_FTP_PASSWORD }}
|
DEV_PASS: ${{ secrets.DEV_FTP_PASSWORD }}
|
||||||
GH_TOKEN: ${{ secrets.GH_TOKEN || github.token }}
|
GH_TOKEN: ${{ secrets.GA_TOKEN || github.token }}
|
||||||
run: |
|
run: |
|
||||||
# ── Permission check: admin or maintain role required ──────
|
# ── Permission check: admin or maintain role required ──────
|
||||||
ACTOR="${{ github.actor }}"
|
ACTOR="${{ github.actor }}"
|
||||||
REPO="${{ github.repository }}"
|
REPO="${{ github.repository }}"
|
||||||
PERMISSION=$(gh api "repos/${REPO}/collaborators/${ACTOR}/permission" \
|
PERMISSION=$(curl -sf -H "Authorization: token ${{ secrets.GA_TOKEN }}" "${{GITEA_URL:-https://git.mokoconsulting.tech}}/api/v1/repos/${{ github.repository }}/collaborators/${ACTOR}/permission" 2>/dev/null \
|
||||||
--jq '.permission' 2>/dev/null || \
|
--jq '.permission' 2>/dev/null || \
|
||||||
gh api "repos/${REPO}/collaborators/${ACTOR}" \
|
curl -sf -H "Authorization: token ${{ secrets.GA_TOKEN }}" "${{GITEA_URL:-https://git.mokoconsulting.tech}}/api/v1/repos/${{ github.repository }}/collaborators/${ACTOR}" 2>/dev/null \
|
||||||
--jq '.role' 2>/dev/null || echo "read")
|
--jq '.role' 2>/dev/null || echo "read")
|
||||||
case "$PERMISSION" in
|
case "$PERMISSION" in
|
||||||
admin|maintain|write) ;;
|
admin|maintain|write) ;;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "mokoconsulting/mokocassiopeia",
|
"name": "mokoconsulting/mokocassiopeia",
|
||||||
"description": "MokoCassiopeia — Joomla site template based on Cassiopeia",
|
"description": "MokoCassiopeia \u2014 Joomla site template based on Cassiopeia",
|
||||||
"type": "joomla-template",
|
"type": "joomla-template",
|
||||||
"license": "GPL-3.0-or-later",
|
"license": "GPL-3.0-or-later",
|
||||||
"authors": [
|
"authors": [
|
||||||
@@ -10,6 +10,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
|
"mokoconsulting-tech/enterprise": "dev-version/04",
|
||||||
"php": ">=8.1"
|
"php": ">=8.1"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
|
|||||||
39
update.xml
Normal file
39
update.xml
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
<!--
|
||||||
|
Joomla Extension Update Server XML
|
||||||
|
See: https://docs.joomla.org/Deploying_an_Update_Server
|
||||||
|
|
||||||
|
This file is the update server manifest for {{EXTENSION_NAME}}.
|
||||||
|
The Joomla installer polls this URL to check for new versions.
|
||||||
|
|
||||||
|
The manifest.xml in this repository must reference this file:
|
||||||
|
<updateservers>
|
||||||
|
<server type="extension" priority="1" name="{{EXTENSION_NAME}}">
|
||||||
|
https://git.mokoconsulting.tech/mokoconsulting-tech/MokoCassiopeia/raw/branch/main/update.xml
|
||||||
|
</server>
|
||||||
|
<server type="extension" priority="2" name="{{EXTENSION_NAME}}">
|
||||||
|
https://raw.githubusercontent.com/mokoconsulting-tech/MokoCassiopeia/main/update.xml
|
||||||
|
</server>
|
||||||
|
</updateservers>
|
||||||
|
|
||||||
|
When a new release is made, run `make release` or the release workflow to
|
||||||
|
prepend a new <update> entry to this file automatically.
|
||||||
|
-->
|
||||||
|
<updates>
|
||||||
|
<update>
|
||||||
|
<name>{{EXTENSION_NAME}}</name>
|
||||||
|
<description>MokoCassiopeia — Moko Consulting Joomla extension</description>
|
||||||
|
<element>{{EXTENSION_ELEMENT}}</element>
|
||||||
|
<type>{{EXTENSION_TYPE}}</type>
|
||||||
|
<version>{{VERSION}}</version>
|
||||||
|
<downloads>
|
||||||
|
<downloadurl type="full" format="zip">
|
||||||
|
https://git.mokoconsulting.tech/mokoconsulting-tech/MokoCassiopeia/releases/download/v{{VERSION}}/{{EXTENSION_ELEMENT}}.zip
|
||||||
|
</downloadurl>
|
||||||
|
<downloadurl type="full" format="zip">
|
||||||
|
https://github.com/mokoconsulting-tech/MokoCassiopeia/releases/download/v{{VERSION}}/{{EXTENSION_ELEMENT}}.zip
|
||||||
|
</downloadurl>
|
||||||
|
</downloads>
|
||||||
|
<targetplatform name="joomla" version="[56].*"/>
|
||||||
|
<php_minimum>8.1</php_minimum>
|
||||||
|
</update>
|
||||||
|
</updates>
|
||||||
33
updates.xml
33
updates.xml
@@ -1,7 +1,7 @@
|
|||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<!-- Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
<!-- Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||||
SPDX-License-Identifier: GPL-3.0-or-later
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
VERSION: 03.09.14
|
VERSION: 03.09.16
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<updates>
|
<updates>
|
||||||
@@ -13,14 +13,13 @@
|
|||||||
<element>mokocassiopeia</element>
|
<element>mokocassiopeia</element>
|
||||||
<type>template</type>
|
<type>template</type>
|
||||||
<client>site</client>
|
<client>site</client>
|
||||||
<version>03.09.14</version>
|
<version>03.09.16</version>
|
||||||
<creationDate>2026-04-14</creationDate>
|
<creationDate>2026-04-17</creationDate>
|
||||||
<infourl title='MokoCassiopeia Dev'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/development</infourl>
|
<infourl title='MokoCassiopeia Dev'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/development</infourl>
|
||||||
<downloads>
|
<downloads>
|
||||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/development/mokocassiopeia-03.09.14-dev.zip</downloadurl>
|
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/development/mokocassiopeia-03.09.16-dev.zip</downloadurl>
|
||||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/development/mokocassiopeia-03.09.14-dev.zip</downloadurl>
|
|
||||||
</downloads>
|
</downloads>
|
||||||
<sha256>4cbe4fc379182ef17580396e7d12ce4ce95a90017ef364b922bdc2d04b0b3d97</sha256>
|
<sha256>sha256:2986f08b59617a18d489e0d9e6e49d329ceb8297ae4755b6697f3326c2a41fc4</sha256>
|
||||||
<tags><tag>development</tag></tags>
|
<tags><tag>development</tag></tags>
|
||||||
<maintainer>Moko Consulting</maintainer>
|
<maintainer>Moko Consulting</maintainer>
|
||||||
<maintainerurl>https://mokoconsulting.tech</maintainerurl>
|
<maintainerurl>https://mokoconsulting.tech</maintainerurl>
|
||||||
@@ -35,12 +34,11 @@
|
|||||||
<element>mokocassiopeia</element>
|
<element>mokocassiopeia</element>
|
||||||
<type>template</type>
|
<type>template</type>
|
||||||
<client>site</client>
|
<client>site</client>
|
||||||
<version>03.09.14</version>
|
<version>03.09.16</version>
|
||||||
<creationDate>2026-04-14</creationDate>
|
<creationDate>2026-04-14</creationDate>
|
||||||
<infourl title='MokoCassiopeia Alpha'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/alpha</infourl>
|
<infourl title='MokoCassiopeia Alpha'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/alpha</infourl>
|
||||||
<downloads>
|
<downloads>
|
||||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/alpha/mokocassiopeia-03.09.14-alpha.zip</downloadurl>
|
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/alpha/mokocassiopeia-03.09.16-alpha.zip</downloadurl>
|
||||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/alpha/mokocassiopeia-03.09.14-alpha.zip</downloadurl>
|
|
||||||
</downloads>
|
</downloads>
|
||||||
<sha256>c2660acdf7389244462485f7ab4c286e9f851366a148acc16739a184576f7932</sha256>
|
<sha256>c2660acdf7389244462485f7ab4c286e9f851366a148acc16739a184576f7932</sha256>
|
||||||
<tags><tag>alpha</tag></tags>
|
<tags><tag>alpha</tag></tags>
|
||||||
@@ -57,12 +55,11 @@
|
|||||||
<element>mokocassiopeia</element>
|
<element>mokocassiopeia</element>
|
||||||
<type>template</type>
|
<type>template</type>
|
||||||
<client>site</client>
|
<client>site</client>
|
||||||
<version>03.09.14</version>
|
<version>03.09.16</version>
|
||||||
<creationDate>2026-04-14</creationDate>
|
<creationDate>2026-04-14</creationDate>
|
||||||
<infourl title='MokoCassiopeia Beta'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/beta</infourl>
|
<infourl title='MokoCassiopeia Beta'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/beta</infourl>
|
||||||
<downloads>
|
<downloads>
|
||||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/beta/mokocassiopeia-03.09.14-beta.zip</downloadurl>
|
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/beta/mokocassiopeia-03.09.16-beta.zip</downloadurl>
|
||||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/beta/mokocassiopeia-03.09.14-beta.zip</downloadurl>
|
|
||||||
</downloads>
|
</downloads>
|
||||||
<sha256>4cbe4fc379182ef17580396e7d12ce4ce95a90017ef364b922bdc2d04b0b3d97</sha256>
|
<sha256>4cbe4fc379182ef17580396e7d12ce4ce95a90017ef364b922bdc2d04b0b3d97</sha256>
|
||||||
<tags><tag>beta</tag></tags>
|
<tags><tag>beta</tag></tags>
|
||||||
@@ -79,12 +76,12 @@
|
|||||||
<element>mokocassiopeia</element>
|
<element>mokocassiopeia</element>
|
||||||
<type>template</type>
|
<type>template</type>
|
||||||
<client>site</client>
|
<client>site</client>
|
||||||
<version>03.09.14</version>
|
<version>03.09.16</version>
|
||||||
<creationDate>2026-04-14</creationDate>
|
<creationDate>2026-04-14</creationDate>
|
||||||
<infourl title='MokoCassiopeia RC'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/release-candidate</infourl>
|
<infourl title='MokoCassiopeia RC'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/release-candidate</infourl>
|
||||||
<downloads>
|
<downloads>
|
||||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/release-candidate/mokocassiopeia-03.09.14-rc.zip</downloadurl>
|
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/release-candidate/mokocassiopeia-03.09.16-rc.zip</downloadurl>
|
||||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/release-candidate/mokocassiopeia-03.09.14-rc.zip</downloadurl>
|
<downloadurl type='full' format='zip'>https://github.com/mokoconsulting-tech/MokoCassiopeia/releases/download/release-candidate/mokocassiopeia-03.09.16-rc.zip</downloadurl>
|
||||||
</downloads>
|
</downloads>
|
||||||
<sha256>c2660acdf7389244462485f7ab4c286e9f851366a148acc16739a184576f7932</sha256>
|
<sha256>c2660acdf7389244462485f7ab4c286e9f851366a148acc16739a184576f7932</sha256>
|
||||||
<tags><tag>rc</tag></tags>
|
<tags><tag>rc</tag></tags>
|
||||||
@@ -101,12 +98,12 @@
|
|||||||
<element>mokocassiopeia</element>
|
<element>mokocassiopeia</element>
|
||||||
<type>template</type>
|
<type>template</type>
|
||||||
<client>site</client>
|
<client>site</client>
|
||||||
<version>03.09.14</version>
|
<version>03.09.16</version>
|
||||||
<creationDate>2026-04-14</creationDate>
|
<creationDate>2026-04-14</creationDate>
|
||||||
<infourl title='MokoCassiopeia'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/v03</infourl>
|
<infourl title='MokoCassiopeia'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/v03</infourl>
|
||||||
<downloads>
|
<downloads>
|
||||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/v03/mokocassiopeia-03.09.14.zip</downloadurl>
|
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/v03/mokocassiopeia-03.09.16.zip</downloadurl>
|
||||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/v03/mokocassiopeia-03.09.14.zip</downloadurl>
|
<downloadurl type='full' format='zip'>https://github.com/mokoconsulting-tech/MokoCassiopeia/releases/download/v03/mokocassiopeia-03.09.16.zip</downloadurl>
|
||||||
</downloads>
|
</downloads>
|
||||||
<sha256>c2660acdf7389244462485f7ab4c286e9f851366a148acc16739a184576f7932</sha256>
|
<sha256>c2660acdf7389244462485f7ab4c286e9f851366a148acc16739a184576f7932</sha256>
|
||||||
<tags><tag>stable</tag></tags>
|
<tags><tag>stable</tag></tags>
|
||||||
|
|||||||
Reference in New Issue
Block a user