Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
894597536e | ||
|
|
ca5614db73 | ||
|
|
e0627da41b | ||
|
|
66e1496c43 | ||
|
|
f76e2b6c05 | ||
|
|
e2add41f69 | ||
|
|
254295311b |
82
.github/workflows/release.yml
vendored
82
.github/workflows/release.yml
vendored
@@ -104,15 +104,7 @@ jobs:
|
|||||||
INPUT_SUFFIX: ${{ steps.meta.outputs.suffix }}
|
INPUT_SUFFIX: ${{ steps.meta.outputs.suffix }}
|
||||||
run: |
|
run: |
|
||||||
BRANCH="${{ github.ref_name }}"
|
BRANCH="${{ github.ref_name }}"
|
||||||
|
GITEA_API="${GITEA_URL}/api/v1/repos/${{ github.repository }}"
|
||||||
# Skip auto-bump on main — version is already set before merge
|
|
||||||
if [ "$BRANCH" = "main" ]; then
|
|
||||||
CURRENT=$(sed -n 's/.*VERSION:[[:space:]]*\([0-9][0-9]\.[0-9][0-9]\.[0-9][0-9]\).*/\1/p' README.md 2>/dev/null | head -1)
|
|
||||||
echo "On main — using current version ${CURRENT} (no bump)"
|
|
||||||
echo "version=${CURRENT}" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "zip_name=${EXT_ELEMENT}-${CURRENT}${INPUT_SUFFIX}.zip" >> "$GITHUB_OUTPUT"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Read current version from README.md
|
# Read current version from README.md
|
||||||
CURRENT=$(sed -n 's/.*VERSION:[[:space:]]*\([0-9][0-9]\.[0-9][0-9]\.[0-9][0-9]\).*/\1/p' README.md 2>/dev/null | head -1)
|
CURRENT=$(sed -n 's/.*VERSION:[[:space:]]*\([0-9][0-9]\.[0-9][0-9]\.[0-9][0-9]\).*/\1/p' README.md 2>/dev/null | head -1)
|
||||||
@@ -163,7 +155,7 @@ jobs:
|
|||||||
PYEOF
|
PYEOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Commit bump
|
# Commit bump to current branch
|
||||||
git config --local user.email "gitea-actions[bot]@mokoconsulting.tech"
|
git config --local user.email "gitea-actions[bot]@mokoconsulting.tech"
|
||||||
git config --local user.name "gitea-actions[bot]"
|
git config --local user.name "gitea-actions[bot]"
|
||||||
git remote set-url origin "https://jmiller:${GA_TOKEN}@git.mokoconsulting.tech/${{ github.repository }}.git"
|
git remote set-url origin "https://jmiller:${GA_TOKEN}@git.mokoconsulting.tech/${{ github.repository }}.git"
|
||||||
@@ -174,6 +166,21 @@ jobs:
|
|||||||
git push
|
git push
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# For stable releases from dev: merge dev → main via Gitea API
|
||||||
|
if [ "$INPUT_STABILITY" = "stable" ] && [ "$BRANCH" != "main" ]; then
|
||||||
|
echo "Merging ${BRANCH} → main via Gitea API..."
|
||||||
|
MERGE_RESULT=$(curl -sf -X POST -H "Authorization: token ${GA_TOKEN}" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
"${GITEA_API}/merges" \
|
||||||
|
-d "$(jq -n \
|
||||||
|
--arg base "main" \
|
||||||
|
--arg head "${BRANCH}" \
|
||||||
|
--arg msg "chore(release): merge ${BRANCH} for stable ${NEW_VERSION} [skip ci]" \
|
||||||
|
'{base: $base, head: $head, merge_message_field: $msg}'
|
||||||
|
)" 2>&1) || true
|
||||||
|
echo "Merge result: ${MERGE_RESULT}"
|
||||||
|
fi
|
||||||
|
|
||||||
echo "version=${NEW_VERSION}" >> "$GITHUB_OUTPUT"
|
echo "version=${NEW_VERSION}" >> "$GITHUB_OUTPUT"
|
||||||
echo "zip_name=${EXT_ELEMENT}-${NEW_VERSION}${INPUT_SUFFIX}.zip" >> "$GITHUB_OUTPUT"
|
echo "zip_name=${EXT_ELEMENT}-${NEW_VERSION}${INPUT_SUFFIX}.zip" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
@@ -368,6 +375,7 @@ jobs:
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Cascading channels: each stability updates itself and all lower levels
|
||||||
export PY_STABILITY="$STABILITY" PY_VERSION="$VERSION" PY_SHA256="$SHA256" \
|
export PY_STABILITY="$STABILITY" PY_VERSION="$VERSION" PY_SHA256="$SHA256" \
|
||||||
PY_ZIP_NAME="$ZIP_NAME" PY_TAG="$TAG" PY_DATE="$DATE" \
|
PY_ZIP_NAME="$ZIP_NAME" PY_TAG="$TAG" PY_DATE="$DATE" \
|
||||||
PY_GITEA_ORG="$GITEA_ORG" PY_GITEA_REPO="$GITEA_REPO"
|
PY_GITEA_ORG="$GITEA_ORG" PY_GITEA_REPO="$GITEA_REPO"
|
||||||
@@ -383,73 +391,53 @@ jobs:
|
|||||||
gitea_org = os.environ["PY_GITEA_ORG"]
|
gitea_org = os.environ["PY_GITEA_ORG"]
|
||||||
gitea_repo = os.environ["PY_GITEA_REPO"]
|
gitea_repo = os.environ["PY_GITEA_REPO"]
|
||||||
|
|
||||||
# Map stability to the <tag> value in updates.xml
|
# Cascade map: each level updates itself + all lower levels
|
||||||
tag_map = {
|
cascade = {
|
||||||
"development": "development",
|
"stable": ["development", "alpha", "beta", "rc", "stable"],
|
||||||
"alpha": "alpha",
|
"rc": ["development", "alpha", "beta", "rc"],
|
||||||
"beta": "beta",
|
"beta": ["development", "alpha", "beta"],
|
||||||
"rc": "rc",
|
"alpha": ["development", "alpha"],
|
||||||
"stable": "stable",
|
"development": ["development"],
|
||||||
}
|
}
|
||||||
xml_tag = tag_map.get(stability, "development")
|
targets = cascade.get(stability, [stability])
|
||||||
|
|
||||||
with open("updates.xml", "r") as f:
|
with open("updates.xml", "r") as f:
|
||||||
content = f.read()
|
content = f.read()
|
||||||
|
|
||||||
# Build regex to find the specific <update> block for this stability tag
|
gitea_url = f"https://git.mokoconsulting.tech/{gitea_org}/{gitea_repo}/releases/download/{tag}/{zip_name}"
|
||||||
# Use negative lookahead to avoid matching across multiple <update> blocks
|
|
||||||
|
for xml_tag in targets:
|
||||||
block_pattern = r"(<update>(?:(?!</update>).)*?<tag>" + re.escape(xml_tag) + r"</tag>.*?</update>)"
|
block_pattern = r"(<update>(?:(?!</update>).)*?<tag>" + re.escape(xml_tag) + r"</tag>.*?</update>)"
|
||||||
match = re.search(block_pattern, content, re.DOTALL)
|
match = re.search(block_pattern, content, re.DOTALL)
|
||||||
|
|
||||||
if not match:
|
if not match:
|
||||||
print(f"No <update> block found for <tag>{xml_tag}</tag>")
|
print(f"No block for <tag>{xml_tag}</tag> — skipping")
|
||||||
exit(0)
|
continue
|
||||||
|
|
||||||
block = match.group(1)
|
block = match.group(1)
|
||||||
original_block = block
|
original = block
|
||||||
|
|
||||||
# Update version
|
|
||||||
block = re.sub(r"<version>[^<]*</version>", f"<version>{version}</version>", block)
|
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)
|
block = re.sub(r"<creationDate>[^<]*</creationDate>", f"<creationDate>{date}</creationDate>", block)
|
||||||
|
|
||||||
# Update or add SHA-256
|
|
||||||
if "<sha256>" in block:
|
if "<sha256>" in block:
|
||||||
block = re.sub(r"<sha256>[^<]*</sha256>", f"<sha256>{sha256}</sha256>", block)
|
block = re.sub(r"<sha256>[^<]*</sha256>", f"<sha256>{sha256}</sha256>", block)
|
||||||
else:
|
else:
|
||||||
block = block.replace("</downloads>", f"</downloads>\n <sha256>{sha256}</sha256>")
|
block = block.replace("</downloads>", f"</downloads>\n <sha256>{sha256}</sha256>")
|
||||||
|
|
||||||
# Update Gitea download URL
|
|
||||||
gitea_url = f"https://git.mokoconsulting.tech/{gitea_org}/{gitea_repo}/releases/download/{tag}/{zip_name}"
|
|
||||||
block = re.sub(
|
block = re.sub(
|
||||||
r"(<downloadurl[^>]*>)https://git\.mokoconsulting\.tech/[^<]*(</downloadurl>)",
|
r"(<downloadurl[^>]*>)https://git\.mokoconsulting\.tech/[^<]*(</downloadurl>)",
|
||||||
rf"\g<1>{gitea_url}\g<2>",
|
rf"\g<1>{gitea_url}\g<2>",
|
||||||
block
|
block
|
||||||
)
|
)
|
||||||
|
|
||||||
# Update GitHub download URL only for RC and stable (others are Gitea-only)
|
content = content.replace(original, block)
|
||||||
if stability in ("rc", "stable"):
|
print(f"Updated {xml_tag} channel")
|
||||||
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:
|
with open("updates.xml", "w") as f:
|
||||||
f.write(content)
|
f.write(content)
|
||||||
|
|
||||||
print(f"Updated {xml_tag} channel: version={version}, sha={sha256[:16]}..., date={date}")
|
print(f"Cascaded {stability} → {', '.join(targets)}: v={version}, sha={sha256[:16]}...")
|
||||||
PYEOF
|
PYEOF
|
||||||
|
|
||||||
- name: "Commit updates.xml to current branch and main"
|
- name: "Commit updates.xml to current branch and main"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
INGROUP: MokoCassiopeia.Documentation
|
INGROUP: MokoCassiopeia.Documentation
|
||||||
REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia
|
REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia
|
||||||
FILE: ./README.md
|
FILE: ./README.md
|
||||||
VERSION: 03.10.22
|
VERSION: 03.10.23
|
||||||
BRIEF: Documentation for MokoCassiopeia template
|
BRIEF: Documentation for MokoCassiopeia template
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
|||||||
@@ -122,11 +122,14 @@ class Tpl_MokocassiopeiaInstallerScript implements InstallerScriptInterface
|
|||||||
// 5. Redirect update server to MokoOnyx
|
// 5. Redirect update server to MokoOnyx
|
||||||
$this->updateUpdateServer();
|
$this->updateUpdateServer();
|
||||||
|
|
||||||
// 6. Notify
|
// 6. Unlock MokoCassiopeia (allow uninstall) + lock MokoOnyx (prevent accidental uninstall)
|
||||||
|
$this->updateExtensionLocks();
|
||||||
|
|
||||||
|
// 7. Notify
|
||||||
$app->enqueueMessage(
|
$app->enqueueMessage(
|
||||||
'<strong>MokoOnyx has been installed as a replacement for MokoCassiopeia.</strong><br>'
|
'<strong>MokoOnyx has been installed as a replacement for MokoCassiopeia.</strong><br>'
|
||||||
. 'Your template settings have been migrated. MokoOnyx is now your active site template.<br>'
|
. 'Your template settings have been migrated. MokoOnyx is now your active site template.<br>'
|
||||||
. 'You can safely uninstall MokoCassiopeia from Extensions → Manage.',
|
. 'MokoCassiopeia has been unlocked — you can uninstall it from Extensions → Manage.',
|
||||||
'success'
|
'success'
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -362,6 +365,42 @@ class Tpl_MokocassiopeiaInstallerScript implements InstallerScriptInterface
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function updateExtensionLocks(): void
|
||||||
|
{
|
||||||
|
$db = Factory::getDbo();
|
||||||
|
|
||||||
|
// Unlock MokoCassiopeia — allow uninstall
|
||||||
|
try {
|
||||||
|
$query = $db->getQuery(true)
|
||||||
|
->update('#__extensions')
|
||||||
|
->set($db->quoteName('locked') . ' = 0')
|
||||||
|
->set($db->quoteName('protected') . ' = 0')
|
||||||
|
->where($db->quoteName('element') . ' = ' . $db->quote(self::OLD_NAME))
|
||||||
|
->where($db->quoteName('type') . ' = ' . $db->quote('template'));
|
||||||
|
$db->setQuery($query)->execute();
|
||||||
|
if ($db->getAffectedRows() > 0) {
|
||||||
|
$this->log('Bridge: unlocked MokoCassiopeia (can be uninstalled).');
|
||||||
|
}
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
$this->log('Bridge: failed to unlock MokoCassiopeia: ' . $e->getMessage(), 'warning');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Lock MokoOnyx — prevent accidental uninstall
|
||||||
|
try {
|
||||||
|
$query = $db->getQuery(true)
|
||||||
|
->update('#__extensions')
|
||||||
|
->set($db->quoteName('locked') . ' = 1')
|
||||||
|
->where($db->quoteName('element') . ' = ' . $db->quote(self::NEW_NAME))
|
||||||
|
->where($db->quoteName('type') . ' = ' . $db->quote('template'));
|
||||||
|
$db->setQuery($query)->execute();
|
||||||
|
if ($db->getAffectedRows() > 0) {
|
||||||
|
$this->log('Bridge: locked MokoOnyx (protected from uninstall).');
|
||||||
|
}
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
$this->log('Bridge: failed to lock MokoOnyx: ' . $e->getMessage(), 'warning');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ── Logging ────────────────────────────────────────────────────────
|
// ── Logging ────────────────────────────────────────────────────────
|
||||||
|
|
||||||
private function log(string $message, string $priority = 'info'): void
|
private function log(string $message, string $priority = 'info'): void
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
</server>
|
</server>
|
||||||
</updateservers>
|
</updateservers>
|
||||||
<name>MokoCassiopeia</name>
|
<name>MokoCassiopeia</name>
|
||||||
<version>03.10.22</version>
|
<version>03.10.23</version>
|
||||||
<scriptfile>script.php</scriptfile>
|
<scriptfile>script.php</scriptfile>
|
||||||
<creationDate>2026-04-19</creationDate>
|
<creationDate>2026-04-19</creationDate>
|
||||||
<author>Jonathan Miller || Moko Consulting</author>
|
<author>Jonathan Miller || Moko Consulting</author>
|
||||||
|
|||||||
67
updates.xml
67
updates.xml
@@ -1,25 +1,28 @@
|
|||||||
<?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.10.18
|
VERSION: 03.10.23
|
||||||
|
NOTE: This repository is RETIRED. All channels point to the same final stable release.
|
||||||
|
All future development is at https://git.mokoconsulting.tech/MokoConsulting/MokoOnyx
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<updates>
|
<updates>
|
||||||
|
|
||||||
<!-- 1. DEVELOPMENT — dev → -->
|
<!-- All channels point to the same final release so every site sees the update -->
|
||||||
|
|
||||||
<update>
|
<update>
|
||||||
<name>MokoCassiopeia</name>
|
<name>MokoCassiopeia</name>
|
||||||
<description>MokoCassiopeia development build — unstable.</description>
|
<description>MokoCassiopeia is retired. Please install MokoOnyx instead.</description>
|
||||||
<element>mokocassiopeia</element>
|
<element>mokocassiopeia</element>
|
||||||
<type>template</type>
|
<type>template</type>
|
||||||
<client>site</client>
|
<client>site</client>
|
||||||
<version>03.10.21</version>
|
<version>03.10.23</version>
|
||||||
<creationDate>2026-04-21</creationDate>
|
<creationDate>2026-04-21</creationDate>
|
||||||
<infourl title='MokoCassiopeia Dev'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/development</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/development/mokocassiopeia-03.10.21-dev.zip</downloadurl>
|
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/v03/mokocassiopeia-03.10.23.zip</downloadurl>
|
||||||
</downloads>
|
</downloads>
|
||||||
<sha256>2d21714719dd3e3d87228e1d021d5fc69a96a837a9ec2d5880da733eb28fa5d0</sha256>
|
<sha256>314ead3bafbaea370796b7ed9d8353ae9964becbf7ccf9be09e94229973440fc</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>
|
||||||
@@ -27,20 +30,19 @@
|
|||||||
<php_minimum>8.1</php_minimum>
|
<php_minimum>8.1</php_minimum>
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<!-- 2. ALPHA — dev → alpha → -->
|
|
||||||
<update>
|
<update>
|
||||||
<name>MokoCassiopeia</name>
|
<name>MokoCassiopeia</name>
|
||||||
<description>MokoCassiopeia alpha build — early testing.</description>
|
<description>MokoCassiopeia is retired. Please install MokoOnyx instead.</description>
|
||||||
<element>mokocassiopeia</element>
|
<element>mokocassiopeia</element>
|
||||||
<type>template</type>
|
<type>template</type>
|
||||||
<client>site</client>
|
<client>site</client>
|
||||||
<version>03.10.13</version>
|
<version>03.10.23</version>
|
||||||
<creationDate>2026-04-19</creationDate>
|
<creationDate>2026-04-21</creationDate>
|
||||||
<infourl title='MokoCassiopeia Alpha'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/alpha</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/alpha/mokocassiopeia-03.10.13.zip</downloadurl>
|
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/v03/mokocassiopeia-03.10.23.zip</downloadurl>
|
||||||
</downloads>
|
</downloads>
|
||||||
<sha256></sha256>
|
<sha256>314ead3bafbaea370796b7ed9d8353ae9964becbf7ccf9be09e94229973440fc</sha256>
|
||||||
<tags><tag>alpha</tag></tags>
|
<tags><tag>alpha</tag></tags>
|
||||||
<maintainer>Moko Consulting</maintainer>
|
<maintainer>Moko Consulting</maintainer>
|
||||||
<maintainerurl>https://mokoconsulting.tech</maintainerurl>
|
<maintainerurl>https://mokoconsulting.tech</maintainerurl>
|
||||||
@@ -48,20 +50,19 @@
|
|||||||
<php_minimum>8.1</php_minimum>
|
<php_minimum>8.1</php_minimum>
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<!-- 3. BETA — dev → alpha → beta → -->
|
|
||||||
<update>
|
<update>
|
||||||
<name>MokoCassiopeia</name>
|
<name>MokoCassiopeia</name>
|
||||||
<description>MokoCassiopeia beta build — feature complete, stability testing.</description>
|
<description>MokoCassiopeia is retired. Please install MokoOnyx instead.</description>
|
||||||
<element>mokocassiopeia</element>
|
<element>mokocassiopeia</element>
|
||||||
<type>template</type>
|
<type>template</type>
|
||||||
<client>site</client>
|
<client>site</client>
|
||||||
<version>03.10.13</version>
|
<version>03.10.23</version>
|
||||||
<creationDate>2026-04-19</creationDate>
|
<creationDate>2026-04-21</creationDate>
|
||||||
<infourl title='MokoCassiopeia Beta'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/beta</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/beta/mokocassiopeia-03.10.13.zip</downloadurl>
|
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/v03/mokocassiopeia-03.10.23.zip</downloadurl>
|
||||||
</downloads>
|
</downloads>
|
||||||
<sha256></sha256>
|
<sha256>314ead3bafbaea370796b7ed9d8353ae9964becbf7ccf9be09e94229973440fc</sha256>
|
||||||
<tags><tag>beta</tag></tags>
|
<tags><tag>beta</tag></tags>
|
||||||
<maintainer>Moko Consulting</maintainer>
|
<maintainer>Moko Consulting</maintainer>
|
||||||
<maintainerurl>https://mokoconsulting.tech</maintainerurl>
|
<maintainerurl>https://mokoconsulting.tech</maintainerurl>
|
||||||
@@ -69,20 +70,19 @@
|
|||||||
<php_minimum>8.1</php_minimum>
|
<php_minimum>8.1</php_minimum>
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<!-- 4. RC — dev → alpha → beta → rc → -->
|
|
||||||
<update>
|
<update>
|
||||||
<name>MokoCassiopeia</name>
|
<name>MokoCassiopeia</name>
|
||||||
<description>MokoCassiopeia release candidate — testing only.</description>
|
<description>MokoCassiopeia is retired. Please install MokoOnyx instead.</description>
|
||||||
<element>mokocassiopeia</element>
|
<element>mokocassiopeia</element>
|
||||||
<type>template</type>
|
<type>template</type>
|
||||||
<client>site</client>
|
<client>site</client>
|
||||||
<version>03.10.13</version>
|
<version>03.10.23</version>
|
||||||
<creationDate>2026-04-19</creationDate>
|
<creationDate>2026-04-21</creationDate>
|
||||||
<infourl title='MokoCassiopeia RC'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/tag/release-candidate</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/release-candidate/mokocassiopeia-03.10.13.zip</downloadurl>
|
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/v03/mokocassiopeia-03.10.23.zip</downloadurl>
|
||||||
</downloads>
|
</downloads>
|
||||||
<sha256></sha256>
|
<sha256>314ead3bafbaea370796b7ed9d8353ae9964becbf7ccf9be09e94229973440fc</sha256>
|
||||||
<tags><tag>rc</tag></tags>
|
<tags><tag>rc</tag></tags>
|
||||||
<maintainer>Moko Consulting</maintainer>
|
<maintainer>Moko Consulting</maintainer>
|
||||||
<maintainerurl>https://mokoconsulting.tech</maintainerurl>
|
<maintainerurl>https://mokoconsulting.tech</maintainerurl>
|
||||||
@@ -90,20 +90,19 @@
|
|||||||
<php_minimum>8.1</php_minimum>
|
<php_minimum>8.1</php_minimum>
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<!-- 5. STABLE — dev → alpha → beta → rc → version/XX → main -->
|
|
||||||
<update>
|
<update>
|
||||||
<name>MokoCassiopeia</name>
|
<name>MokoCassiopeia</name>
|
||||||
<description>Moko Consulting's site template based on Cassiopeia.</description>
|
<description>MokoCassiopeia is retired. Please install MokoOnyx instead.</description>
|
||||||
<element>mokocassiopeia</element>
|
<element>mokocassiopeia</element>
|
||||||
<type>template</type>
|
<type>template</type>
|
||||||
<client>site</client>
|
<client>site</client>
|
||||||
<version>03.10.13</version>
|
<version>03.10.23</version>
|
||||||
<creationDate>2026-04-19</creationDate>
|
<creationDate>2026-04-21</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.10.13.zip</downloadurl>
|
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoCassiopeia/releases/download/v03/mokocassiopeia-03.10.23.zip</downloadurl>
|
||||||
</downloads>
|
</downloads>
|
||||||
<sha256></sha256>
|
<sha256>314ead3bafbaea370796b7ed9d8353ae9964becbf7ccf9be09e94229973440fc</sha256>
|
||||||
<tags><tag>stable</tag></tags>
|
<tags><tag>stable</tag></tags>
|
||||||
<maintainer>Moko Consulting</maintainer>
|
<maintainer>Moko Consulting</maintainer>
|
||||||
<maintainerurl>https://mokoconsulting.tech</maintainerurl>
|
<maintainerurl>https://mokoconsulting.tech</maintainerurl>
|
||||||
|
|||||||
Reference in New Issue
Block a user