fix: auto-release skip gate blocking patch releases #8
@@ -133,11 +133,8 @@ jobs:
|
||||
echo "tag_exists=$TAG_EXISTS" >> "$GITHUB_OUTPUT"
|
||||
echo "branch_exists=$BRANCH_EXISTS" >> "$GITHUB_OUTPUT"
|
||||
|
||||
if [ "$TAG_EXISTS" = "true" ] && [ "$BRANCH_EXISTS" = "true" ]; then
|
||||
echo "already_released=true" >> "$GITHUB_OUTPUT"
|
||||
else
|
||||
echo "already_released=false" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
# Tag and branch may persist across patch releases — never skip
|
||||
echo "already_released=false" >> "$GITHUB_OUTPUT"
|
||||
|
||||
# -- SANITY CHECKS -------------------------------------------------------
|
||||
- name: "Sanity: Pre-release validation"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
DEFGROUP: Joomla.Plugin
|
||||
INGROUP: MokoWaaS
|
||||
REPO: https://github.com/mokoconsulting-tech/mokowaas
|
||||
VERSION: 02.01.20
|
||||
VERSION: 02.01.21
|
||||
PATH: /README.md
|
||||
BRIEF: Rebranding plugin for MokoWaaS platform
|
||||
NOTE: Internal WaaS identity abstraction layer
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
| 4 | Check admin dashboard | "Welcome to MokoWaaS!" appears in control panel | [ ] |
|
||||
| 5 | Check admin footer | "Powered by MokoWaaS" appears | [ ] |
|
||||
| 6 | Check admin login page | "MokoWaaS Administrator Login" title, support links show "Moko Consulting" | [ ] |
|
||||
| 7 | Check frontend footer | "Powered by MokoWaaS" in Cassiopeia template | [ ] |
|
||||
| 7 | Check frontend footer | "Powered by MokoWaaS" in MokoOnyx template | [ ] |
|
||||
| 8 | Check Joomla override files at `administrator/language/overrides/en-GB.override.ini` | Contains `BEGIN MokoWaaS Overrides` sentinel block | [ ] |
|
||||
| 9 | Check Joomla override files at `language/overrides/en-GB.override.ini` | Contains `BEGIN MokoWaaS Overrides` sentinel block | [ ] |
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
|---|------|-----------------|------|
|
||||
| 1 | Set Enable Branding to "No", save | Save succeeds | [ ] |
|
||||
| 2 | Reload admin dashboard | Default Joomla strings appear (e.g., "Welcome to Joomla!") | [ ] |
|
||||
| 3 | Check frontend footer | Default "Powered by Joomla" or Cassiopeia default | [ ] |
|
||||
| 3 | Check frontend footer | Default "Powered by Joomla" or MokoOnyx default | [ ] |
|
||||
| 4 | Set Enable Branding back to "Yes", save | Branding strings restored immediately | [ ] |
|
||||
|
||||
### 2.7 Update (Upgrade from Previous Version)
|
||||
@@ -138,7 +138,7 @@ Verify the following admin areas no longer show "Joomla":
|
||||
|
||||
| # | Location | Expected Brand Text | Pass |
|
||||
|---|----------|-------------------|------|
|
||||
| 1 | Cassiopeia footer | "Powered by {brand}" | [ ] |
|
||||
| 1 | MokoOnyx footer | "Powered by {brand}" | [ ] |
|
||||
| 2 | Site offline page | Maintenance message (no Joomla reference) | [ ] |
|
||||
| 3 | 404 error page | "Page Not Found" (no Joomla reference) | [ ] |
|
||||
| 4 | Frontend login support | "{company} Support" / "{brand} Documentation" | [ ] |
|
||||
|
||||
+32
-8
@@ -29,8 +29,30 @@ Joomla checks for extension updates by fetching an XML file from the URL defined
|
||||
| Event | Workflow | `<tag>` | `<version>` |
|
||||
|-------|----------|---------|-------------|
|
||||
| Merge to `main` | `auto-release.yml` | `stable` | `XX.YY.ZZ` |
|
||||
| Push to `dev/**` | `deploy-dev.yml` | `development` | `development` |
|
||||
| Push to `rc/**` | `deploy-dev.yml` | `rc` | `XX.YY.ZZ-rc` |
|
||||
| Push to `dev` or `dev/**` | `update-server.yml` | `development` | `XX.YY.ZZ-dev` |
|
||||
| Push to `alpha/**` | `update-server.yml` | `alpha` | `XX.YY.ZZ-alpha` |
|
||||
| Push to `beta/**` | `update-server.yml` | `beta` | `XX.YY.ZZ-beta` |
|
||||
| Push to `rc/**` | `update-server.yml` | `rc` | `XX.YY.ZZ-rc` |
|
||||
|
||||
**Trigger behavior**: `update-server.yml` triggers on both direct pushes and PR merges to `dev`, `dev/**`, `alpha/**`, `beta/**`, and `rc/**` branches. It supports bare `dev` branches (not just `dev/**` patterns).
|
||||
|
||||
### Cascade Release Channels
|
||||
|
||||
Each stability level writes itself **and all lower channels** to `updates.xml`:
|
||||
|
||||
| Release Stream | Channels written |
|
||||
|---------------|-----------------|
|
||||
| development | `development` |
|
||||
| alpha | `development`, `alpha` |
|
||||
| beta | `development`, `alpha`, `beta` |
|
||||
| rc | `development`, `alpha`, `beta`, `rc` |
|
||||
| stable | `development`, `alpha`, `beta`, `rc`, `stable` |
|
||||
|
||||
This ensures Joomla sites on any "Minimum Stability" setting always see the latest available release.
|
||||
|
||||
### Sync to Main
|
||||
|
||||
Since Joomla sites read `updates.xml` from the `main` branch, the `update-server.yml` workflow **syncs `updates.xml` to `main` via the Gitea API** after building on non-main branches. This ensures pre-release channel entries are visible to sites checking for updates without requiring a PR merge to main.
|
||||
|
||||
### Generated XML Structure
|
||||
|
||||
@@ -94,14 +116,16 @@ Your XML manifest must include an `<updateservers>` tag pointing to the `update.
|
||||
### Branch Lifecycle
|
||||
|
||||
```
|
||||
dev/XX.YY.ZZ → rc/XX.YY.ZZ → main → version/XX.YY
|
||||
(development) (rc) (stable) (frozen snapshot)
|
||||
dev → [alpha] → [beta] → rc → version/XX → main → dev
|
||||
optional optional (integration) (production) (feedback)
|
||||
```
|
||||
|
||||
1. **Development** (`dev/**`): `update.xml` with `<tag>development</tag>`, download points to branch archive
|
||||
2. **Release Candidate** (`rc/**`): `update.xml` with `<tag>rc</tag>`, version set to `XX.YY.ZZ-rc`
|
||||
3. **Stable Release** (merge to `main`): `update.xml` with `<tag>stable</tag>`, download points to GitHub Release asset
|
||||
4. **Frozen Snapshot** (`version/XX.YY`): immutable, never force-pushed
|
||||
1. **Development** (`dev` or `dev/**`): `updates.xml` with `<tag>development</tag>`, download points to Gitea release ZIP
|
||||
2. **Alpha** (`alpha/**`): `updates.xml` with `<tag>alpha</tag>`, cascades to development channel
|
||||
3. **Beta** (`beta/**`): `updates.xml` with `<tag>beta</tag>`, cascades to alpha + development channels
|
||||
4. **Release Candidate** (`rc/**`): `updates.xml` with `<tag>rc</tag>`, cascades to beta + alpha + development channels
|
||||
5. **Stable Release** (merge to `main`): `updates.xml` with `<tag>stable</tag>`, cascades to all channels, download points to GitHub Release asset
|
||||
6. **Frozen Snapshot** (`version/XX`): immutable, never force-pushed
|
||||
|
||||
### Health Checks
|
||||
|
||||
|
||||
@@ -851,8 +851,6 @@ class MokoWaaS extends CMSPlugin
|
||||
}
|
||||
|
||||
$this->injectFavicon($doc);
|
||||
$this->injectColorScheme($doc);
|
||||
$this->injectCustomCss($doc);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1528,127 +1526,4 @@ class MokoWaaS extends CMSPlugin
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Inject CSS custom properties for the admin color scheme.
|
||||
*
|
||||
* @param \Joomla\CMS\Document\HtmlDocument $doc
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 02.01.08
|
||||
*/
|
||||
/**
|
||||
* Inject admin color scheme.
|
||||
*
|
||||
* Atum reads colors from template style params at render time and
|
||||
* outputs them as inline CSS variables. We enforce the params in
|
||||
* enforceAtumBranding(). This method handles any additional CSS
|
||||
* overrides needed beyond what the params support.
|
||||
*
|
||||
* @param \Joomla\CMS\Document\HtmlDocument $doc
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 02.01.08
|
||||
*/
|
||||
protected function injectColorScheme($doc)
|
||||
{
|
||||
$primary = $this->params->get('color_primary', '');
|
||||
$brandIcon = $this->params->get('brand_icon', '');
|
||||
$css = '';
|
||||
|
||||
// Brand button colors derived from primary color
|
||||
if (!empty($primary))
|
||||
{
|
||||
$primary = htmlspecialchars($primary, ENT_QUOTES, 'UTF-8');
|
||||
|
||||
$css .= '.btn-primary,'
|
||||
. '.btn-primary:not(:disabled):not(.disabled){'
|
||||
. 'background-color:' . $primary . ';'
|
||||
. 'border-color:' . $primary . ';'
|
||||
. 'color:#000;'
|
||||
. 'box-shadow:0 2px 4px rgba(0,0,0,.15);}'
|
||||
. '.btn-primary:hover,.btn-primary:focus{'
|
||||
. 'background-color:' . $primary . ';'
|
||||
. 'border-color:' . $primary . ';'
|
||||
. 'color:#000;'
|
||||
. 'filter:brightness(0.85);'
|
||||
. 'box-shadow:0 4px 8px rgba(0,0,0,.2);}'
|
||||
. '.btn-primary:active,.btn-primary.active{'
|
||||
. 'background-color:' . $primary . ';'
|
||||
. 'border-color:' . $primary . ';'
|
||||
. 'color:#000;'
|
||||
. 'filter:brightness(0.75);}'
|
||||
. '.btn-outline-primary{'
|
||||
. 'color:' . $primary . ';'
|
||||
. 'border-color:' . $primary . ';'
|
||||
. 'border-width:2px;}'
|
||||
. '.btn-outline-primary:hover,.btn-outline-primary:focus{'
|
||||
. 'background-color:' . $primary . ';'
|
||||
. 'border-color:' . $primary . ';'
|
||||
. 'color:#000;}';
|
||||
}
|
||||
|
||||
// Drawer toggle button: flat edge on the sidebar-facing side
|
||||
// Close button in drawer: styled to match brand
|
||||
$css .= '[dir="ltr"] .main-nav-container .menu-collapse,'
|
||||
. '[dir="ltr"] .sidebar-toggle{'
|
||||
. 'border-top-left-radius:0!important;'
|
||||
. 'border-bottom-left-radius:0!important;}'
|
||||
. '[dir="rtl"] .main-nav-container .menu-collapse,'
|
||||
. '[dir="rtl"] .sidebar-toggle{'
|
||||
. 'border-top-right-radius:0!important;'
|
||||
. 'border-bottom-right-radius:0!important;}'
|
||||
. '.sidebar-wrapper .btn-close,'
|
||||
. '.sidebar-wrapper [data-bs-dismiss]{'
|
||||
. 'opacity:1;'
|
||||
. 'filter:none;'
|
||||
. 'font-size:1.1rem;}';
|
||||
|
||||
// Brand icon override (FontAwesome unicode codepoint)
|
||||
if (!empty($brandIcon))
|
||||
{
|
||||
$brandIcon = preg_replace('/[^a-fA-F0-9]/', '', $brandIcon);
|
||||
|
||||
if (!empty($brandIcon))
|
||||
{
|
||||
$css .= '.icon-joomla::before,'
|
||||
. '.icon-brands.fa-joomla::before{'
|
||||
. 'font-family:"Font Awesome 6 Free"!important;'
|
||||
. 'content:"\\' . $brandIcon . '"!important;'
|
||||
. 'font-weight:900!important;}';
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty(trim($css)))
|
||||
{
|
||||
$css = str_replace('</style>', '', $css);
|
||||
$doc->addStyleDeclaration($css);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Inject custom CSS from the plugin config textarea.
|
||||
*
|
||||
* @param \Joomla\CMS\Document\HtmlDocument $doc
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 02.01.08
|
||||
*/
|
||||
protected function injectCustomCss($doc)
|
||||
{
|
||||
$css = $this->params->get('custom_css', '');
|
||||
|
||||
if (empty($css))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Sanitize: strip </style> to prevent injection
|
||||
$css = str_replace('</style>', '', $css);
|
||||
|
||||
$doc->addStyleDeclaration($css);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+1
-1
@@ -197,7 +197,7 @@ class plgSystemMokoWaaSInstallerScript implements InstallerScriptInterface
|
||||
$db->getQuery(true)
|
||||
->update($db->quoteName('#__extensions'))
|
||||
->set($db->quoteName('enabled') . ' = 1')
|
||||
->set($db->quoteName('locked') . ' = 0')
|
||||
->set($db->quoteName('locked') . ' = 1')
|
||||
->set($db->quoteName('protected') . ' = 1')
|
||||
->where($db->quoteName('element') . ' = '
|
||||
. $db->quote('mokowaas'))
|
||||
|
||||
+3
-3
@@ -11,7 +11,7 @@
|
||||
<description>System - MokoWaaS (development)</description>
|
||||
<element>mokowaas</element>
|
||||
<type>plugin</type>
|
||||
<version>02.01.20-dev</version>
|
||||
<version>02.01.21-dev</version>
|
||||
<client>site</client>
|
||||
<folder>system</folder>
|
||||
<tags>
|
||||
@@ -19,9 +19,9 @@
|
||||
</tags>
|
||||
<infourl title="System - MokoWaaS">https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS</infourl>
|
||||
<downloads>
|
||||
<downloadurl type="full" format="zip">https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/mokowaas-02.01.20-dev.zip</downloadurl>
|
||||
<downloadurl type="full" format="zip">https://git.mokoconsulting.tech/MokoConsulting/MokoWaaS/releases/download/development/mokowaas-02.01.21-dev.zip</downloadurl>
|
||||
</downloads>
|
||||
<sha256>edb7ccb285d9d5889a559c55b85e2555006c0b41040ddf0f8a4dd34f1ca0f14b</sha256>
|
||||
<sha256>a395d1c0691302a4a15f02decdc57e06a4168f3d7334c6f184996fc50beabebc</sha256>
|
||||
<targetplatform name="joomla" version="((5.[0-9])|(6.[0-9]))" />
|
||||
<maintainer>Moko Consulting</maintainer>
|
||||
<maintainerurl>https://mokoconsulting.tech</maintainerurl>
|
||||
|
||||
Reference in New Issue
Block a user