From 6c79443be035f03a92fd982dbbebe780baea8199 Mon Sep 17 00:00:00 2001 From: "gitea-actions[bot]" Date: Tue, 14 Jul 2026 20:40:32 +0000 Subject: [PATCH 01/13] chore(version): auto-bump patch 02.64.01-dev [skip ci] --- .mokogitea/workflows/issue-branch.yml | 2 +- SECURITY.md | 2 +- source/packages/com_mokosuitebackup/mokosuitebackup.xml | 2 +- .../packages/com_mokosuitebackup/sql/updates/mysql/02.64.01.sql | 1 + .../mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml | 2 +- .../packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml | 2 +- source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml | 2 +- source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml | 2 +- .../packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml | 2 +- source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml | 2 +- source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml | 2 +- .../plg_webservices_mokosuitebackup/mokosuitebackup.xml | 2 +- source/pkg_mokosuitebackup.xml | 2 +- 13 files changed, 13 insertions(+), 12 deletions(-) create mode 100644 source/packages/com_mokosuitebackup/sql/updates/mysql/02.64.01.sql diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 6ecec819..8b4d6182 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: MokoGitea.Workflow # INGROUP: mokocli.Automation -# VERSION: 02.64.00 +# VERSION: 02.64.01 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/SECURITY.md b/SECURITY.md index b5b0f4ac..6c9a3773 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: Template-Joomla INGROUP: Template-Joomla.Documentation REPO: https://git.mokoconsulting.tech/MokoConsulting/Template-Joomla PATH: /SECURITY.md -VERSION: 02.64.00 +VERSION: 02.64.01 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/source/packages/com_mokosuitebackup/mokosuitebackup.xml b/source/packages/com_mokosuitebackup/mokosuitebackup.xml index d1b4b8ba..b40b2e94 100644 --- a/source/packages/com_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/com_mokosuitebackup/mokosuitebackup.xml @@ -17,7 +17,7 @@ display label there. --> MokoSuiteBackup - 02.64.00 + 02.64.01 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/com_mokosuitebackup/sql/updates/mysql/02.64.01.sql b/source/packages/com_mokosuitebackup/sql/updates/mysql/02.64.01.sql new file mode 100644 index 00000000..318ab76d --- /dev/null +++ b/source/packages/com_mokosuitebackup/sql/updates/mysql/02.64.01.sql @@ -0,0 +1 @@ +/* 02.64.01 — no schema changes */ diff --git a/source/packages/mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml b/source/packages/mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml index eb77253a..3764dc0c 100644 --- a/source/packages/mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml +++ b/source/packages/mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml @@ -8,7 +8,7 @@ --> Module - MokoSuiteBackup - cPanel - 02.64.00 + 02.64.01 2026-06-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml index 7a2e6d0f..4eb7e4e8 100644 --- a/source/packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Action Log - MokoSuiteBackup - 02.64.00 + 02.64.01 2026-06-04 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml index 1558db5f..28e6ef8d 100644 --- a/source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Console - MokoSuiteBackup - 02.64.00 + 02.64.01 2026-06-04 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml index d1dc3721..b4506b91 100644 --- a/source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Content - MokoSuiteBackup - 02.64.00 + 02.64.01 2026-06-04 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml index 098e71e8..68a64cd9 100644 --- a/source/packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml @@ -1,7 +1,7 @@ Quick Icon - MokoSuiteBackup - 02.64.00 + 02.64.01 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml index 97ad808a..86d9fc92 100644 --- a/source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> System - MokoSuiteBackup - 02.64.00 + 02.64.01 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml index 5184a4f6..0678539e 100644 --- a/source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Task - MokoSuiteBackup - 02.64.00 + 02.64.01 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_webservices_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_webservices_mokosuitebackup/mokosuitebackup.xml index e89345c8..96d59ca5 100644 --- a/source/packages/plg_webservices_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_webservices_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Web Services - MokoSuiteBackup - 02.64.00 + 02.64.01 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/pkg_mokosuitebackup.xml b/source/pkg_mokosuitebackup.xml index ff55d58d..67fd3718 100644 --- a/source/pkg_mokosuitebackup.xml +++ b/source/pkg_mokosuitebackup.xml @@ -8,7 +8,7 @@ Package - MokoSuiteBackup mokosuitebackup - 02.64.00 + 02.64.01 2026-06-02 Moko Consulting hello@mokoconsulting.tech -- 2.52.0 From 8df658c5da0ccf6f84f35cb5444c40ae892158f4 Mon Sep 17 00:00:00 2001 From: "mokogitea-actions[bot]" Date: Tue, 14 Jul 2026 20:40:49 +0000 Subject: [PATCH 02/13] chore(version): pre-release bump to 02.64.02-dev [skip ci] --- .mokogitea/workflows/issue-branch.yml | 2 +- SECURITY.md | 2 +- source/packages/com_mokosuitebackup/mokosuitebackup.xml | 2 +- .../packages/com_mokosuitebackup/sql/updates/mysql/02.64.02.sql | 1 + .../mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml | 2 +- .../packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml | 2 +- source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml | 2 +- source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml | 2 +- .../packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml | 2 +- source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml | 2 +- source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml | 2 +- .../plg_webservices_mokosuitebackup/mokosuitebackup.xml | 2 +- source/pkg_mokosuitebackup.xml | 2 +- 13 files changed, 13 insertions(+), 12 deletions(-) create mode 100644 source/packages/com_mokosuitebackup/sql/updates/mysql/02.64.02.sql diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 8b4d6182..cebf32f4 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: MokoGitea.Workflow # INGROUP: mokocli.Automation -# VERSION: 02.64.01 +# VERSION: 02.64.02 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/SECURITY.md b/SECURITY.md index 6c9a3773..d57699b6 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: Template-Joomla INGROUP: Template-Joomla.Documentation REPO: https://git.mokoconsulting.tech/MokoConsulting/Template-Joomla PATH: /SECURITY.md -VERSION: 02.64.01 +VERSION: 02.64.02 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/source/packages/com_mokosuitebackup/mokosuitebackup.xml b/source/packages/com_mokosuitebackup/mokosuitebackup.xml index b40b2e94..236b2fa9 100644 --- a/source/packages/com_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/com_mokosuitebackup/mokosuitebackup.xml @@ -17,7 +17,7 @@ display label there. --> MokoSuiteBackup - 02.64.01 + 02.64.02 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/com_mokosuitebackup/sql/updates/mysql/02.64.02.sql b/source/packages/com_mokosuitebackup/sql/updates/mysql/02.64.02.sql new file mode 100644 index 00000000..6da09efb --- /dev/null +++ b/source/packages/com_mokosuitebackup/sql/updates/mysql/02.64.02.sql @@ -0,0 +1 @@ +/* 02.64.02 — no schema changes */ diff --git a/source/packages/mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml b/source/packages/mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml index 3764dc0c..1ec9e37f 100644 --- a/source/packages/mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml +++ b/source/packages/mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml @@ -8,7 +8,7 @@ --> Module - MokoSuiteBackup - cPanel - 02.64.01 + 02.64.02 2026-06-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml index 4eb7e4e8..0761b5a4 100644 --- a/source/packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Action Log - MokoSuiteBackup - 02.64.01 + 02.64.02 2026-06-04 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml index 28e6ef8d..c064a5e7 100644 --- a/source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Console - MokoSuiteBackup - 02.64.01 + 02.64.02 2026-06-04 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml index b4506b91..830bf090 100644 --- a/source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Content - MokoSuiteBackup - 02.64.01 + 02.64.02 2026-06-04 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml index 68a64cd9..ac8a4e6e 100644 --- a/source/packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml @@ -1,7 +1,7 @@ Quick Icon - MokoSuiteBackup - 02.64.01 + 02.64.02 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml index 86d9fc92..7735ee81 100644 --- a/source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> System - MokoSuiteBackup - 02.64.01 + 02.64.02 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml index 0678539e..162ce421 100644 --- a/source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Task - MokoSuiteBackup - 02.64.01 + 02.64.02 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_webservices_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_webservices_mokosuitebackup/mokosuitebackup.xml index 96d59ca5..05a894f8 100644 --- a/source/packages/plg_webservices_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_webservices_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Web Services - MokoSuiteBackup - 02.64.01 + 02.64.02 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/pkg_mokosuitebackup.xml b/source/pkg_mokosuitebackup.xml index 67fd3718..9d8c2380 100644 --- a/source/pkg_mokosuitebackup.xml +++ b/source/pkg_mokosuitebackup.xml @@ -8,7 +8,7 @@ Package - MokoSuiteBackup mokosuitebackup - 02.64.01 + 02.64.02 2026-06-02 Moko Consulting hello@mokoconsulting.tech -- 2.52.0 From 9e7ebfe89e9bf63424ad30814116f7f67743c106 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 14 Jul 2026 22:16:47 -0500 Subject: [PATCH 03/13] fix(task): scheduled-task fieldset label renders raw string com_scheduler's task edit view renders a params fieldset legend as Text::_($fieldset->label ?: 'COM_SCHEDULER_FIELDSET_'.$name). The run_profile / run_snapshot fieldsets had no `label` attribute, so it fell back to an undefined generated key (COM_SCHEDULER_RUN_PROFILE_FIELDSET_LABEL) and showed the raw constant. Give each fieldset a label attribute pointing to a plugin-defined constant, and define them in en-GB/en-US. Claude-Session: https://claude.ai/code/session_01WbGBN9VyRK61zczYWcCQ2i --- source/packages/plg_task_mokosuitebackup/forms/run_profile.xml | 2 +- source/packages/plg_task_mokosuitebackup/forms/run_snapshot.xml | 2 +- .../language/en-GB/plg_task_mokosuitebackup.ini | 2 ++ .../language/en-US/plg_task_mokosuitebackup.ini | 2 ++ 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/source/packages/plg_task_mokosuitebackup/forms/run_profile.xml b/source/packages/plg_task_mokosuitebackup/forms/run_profile.xml index 8471774f..05d712d4 100644 --- a/source/packages/plg_task_mokosuitebackup/forms/run_profile.xml +++ b/source/packages/plg_task_mokosuitebackup/forms/run_profile.xml @@ -5,7 +5,7 @@ * "MokoSuiteBackup: Run Backup Profile" task. -->
-
+
-
+
diff --git a/source/packages/plg_task_mokosuitebackup/language/en-GB/plg_task_mokosuitebackup.ini b/source/packages/plg_task_mokosuitebackup/language/en-GB/plg_task_mokosuitebackup.ini index d2a490c9..44f7282b 100644 --- a/source/packages/plg_task_mokosuitebackup/language/en-GB/plg_task_mokosuitebackup.ini +++ b/source/packages/plg_task_mokosuitebackup/language/en-GB/plg_task_mokosuitebackup.ini @@ -8,5 +8,7 @@ PLG_TASK_MOKOJOOMBACKUP_TASK_RUN_PROFILE_DESC="Run a MokoSuiteBackup backup usin ; Task form fields PLG_TASK_MOKOJOOMBACKUP_FIELD_PROFILE="Backup Profile" +PLG_TASK_MOKOJOOMBACKUP_FIELDSET_RUN_PROFILE="Backup Profile" +PLG_TASK_MOKOJOOMBACKUP_FIELDSET_RUN_SNAPSHOT="Content Snapshot" PLG_TASK_MOKOJOOMBACKUP_FIELD_PROFILE_DESC="Select which backup profile to run. Each profile defines backup type (full/database/files), exclusion filters, and storage settings." PLG_TASK_MOKOJOOMBACKUP_SELECT_PROFILE="- Select Profile -" diff --git a/source/packages/plg_task_mokosuitebackup/language/en-US/plg_task_mokosuitebackup.ini b/source/packages/plg_task_mokosuitebackup/language/en-US/plg_task_mokosuitebackup.ini index 5283b83b..a8fd1e2f 100644 --- a/source/packages/plg_task_mokosuitebackup/language/en-US/plg_task_mokosuitebackup.ini +++ b/source/packages/plg_task_mokosuitebackup/language/en-US/plg_task_mokosuitebackup.ini @@ -4,5 +4,7 @@ PLG_TASK_MOKOJOOMBACKUP_DESCRIPTION="Scheduled task plugin for MokoSuiteBackup. PLG_TASK_MOKOJOOMBACKUP_TASK_RUN_PROFILE_TITLE="MokoSuiteBackup: Run Backup Profile" PLG_TASK_MOKOJOOMBACKUP_TASK_RUN_PROFILE_DESC="Run a MokoSuiteBackup backup using the selected profile. Create multiple tasks with different profiles for different backup schedules." PLG_TASK_MOKOJOOMBACKUP_FIELD_PROFILE="Backup Profile" +PLG_TASK_MOKOJOOMBACKUP_FIELDSET_RUN_PROFILE="Backup Profile" +PLG_TASK_MOKOJOOMBACKUP_FIELDSET_RUN_SNAPSHOT="Content Snapshot" PLG_TASK_MOKOJOOMBACKUP_FIELD_PROFILE_DESC="Select which backup profile to run." PLG_TASK_MOKOJOOMBACKUP_SELECT_PROFILE="- Select Profile -" -- 2.52.0 From 254bf18c456016e0e8353e14f769c311063607fe Mon Sep 17 00:00:00 2001 From: "mokogitea-actions[bot]" Date: Wed, 15 Jul 2026 03:17:23 +0000 Subject: [PATCH 04/13] chore(version): pre-release bump to 02.64.03-dev [skip ci] --- .mokogitea/workflows/issue-branch.yml | 2 +- SECURITY.md | 2 +- source/packages/MokoSuiteClient | 2 +- source/packages/com_mokosuitebackup/mokosuitebackup.xml | 2 +- .../packages/com_mokosuitebackup/sql/updates/mysql/02.64.03.sql | 1 + .../mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml | 2 +- .../packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml | 2 +- source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml | 2 +- source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml | 2 +- .../packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml | 2 +- source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml | 2 +- source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml | 2 +- .../plg_webservices_mokosuitebackup/mokosuitebackup.xml | 2 +- source/pkg_mokosuitebackup.xml | 2 +- 14 files changed, 14 insertions(+), 13 deletions(-) create mode 100644 source/packages/com_mokosuitebackup/sql/updates/mysql/02.64.03.sql diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index cebf32f4..92387761 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: MokoGitea.Workflow # INGROUP: mokocli.Automation -# VERSION: 02.64.02 +# VERSION: 02.64.03 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/SECURITY.md b/SECURITY.md index d57699b6..ae76670a 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: Template-Joomla INGROUP: Template-Joomla.Documentation REPO: https://git.mokoconsulting.tech/MokoConsulting/Template-Joomla PATH: /SECURITY.md -VERSION: 02.64.02 +VERSION: 02.64.03 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/source/packages/MokoSuiteClient b/source/packages/MokoSuiteClient index 050b05d6..beca7e84 160000 --- a/source/packages/MokoSuiteClient +++ b/source/packages/MokoSuiteClient @@ -1 +1 @@ -Subproject commit 050b05d6efae146a7dc002d434a90cfaf7ba827d +Subproject commit beca7e8406be2a0b8f8f6ccc01ca2e98d7226fe9 diff --git a/source/packages/com_mokosuitebackup/mokosuitebackup.xml b/source/packages/com_mokosuitebackup/mokosuitebackup.xml index 236b2fa9..6da357e9 100644 --- a/source/packages/com_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/com_mokosuitebackup/mokosuitebackup.xml @@ -17,7 +17,7 @@ display label there. --> MokoSuiteBackup - 02.64.02 + 02.64.03 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/com_mokosuitebackup/sql/updates/mysql/02.64.03.sql b/source/packages/com_mokosuitebackup/sql/updates/mysql/02.64.03.sql new file mode 100644 index 00000000..865837ae --- /dev/null +++ b/source/packages/com_mokosuitebackup/sql/updates/mysql/02.64.03.sql @@ -0,0 +1 @@ +/* 02.64.03 — no schema changes */ diff --git a/source/packages/mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml b/source/packages/mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml index 1ec9e37f..9e546386 100644 --- a/source/packages/mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml +++ b/source/packages/mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml @@ -8,7 +8,7 @@ --> Module - MokoSuiteBackup - cPanel - 02.64.02 + 02.64.03 2026-06-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml index 0761b5a4..a55e2e67 100644 --- a/source/packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Action Log - MokoSuiteBackup - 02.64.02 + 02.64.03 2026-06-04 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml index c064a5e7..f6e5f812 100644 --- a/source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Console - MokoSuiteBackup - 02.64.02 + 02.64.03 2026-06-04 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml index 830bf090..f3bf9b05 100644 --- a/source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Content - MokoSuiteBackup - 02.64.02 + 02.64.03 2026-06-04 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml index ac8a4e6e..c4d9f477 100644 --- a/source/packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml @@ -1,7 +1,7 @@ Quick Icon - MokoSuiteBackup - 02.64.02 + 02.64.03 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml index 7735ee81..add19714 100644 --- a/source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> System - MokoSuiteBackup - 02.64.02 + 02.64.03 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml index 162ce421..49e32ff1 100644 --- a/source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Task - MokoSuiteBackup - 02.64.02 + 02.64.03 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_webservices_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_webservices_mokosuitebackup/mokosuitebackup.xml index 05a894f8..06ebfa96 100644 --- a/source/packages/plg_webservices_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_webservices_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Web Services - MokoSuiteBackup - 02.64.02 + 02.64.03 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/pkg_mokosuitebackup.xml b/source/pkg_mokosuitebackup.xml index 9d8c2380..a6d41802 100644 --- a/source/pkg_mokosuitebackup.xml +++ b/source/pkg_mokosuitebackup.xml @@ -8,7 +8,7 @@ Package - MokoSuiteBackup mokosuitebackup - 02.64.02 + 02.64.03 2026-06-02 Moko Consulting hello@mokoconsulting.tech -- 2.52.0 From 257003fb74d0c6a800431f5111fbca3ab3120276 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 14 Jul 2026 22:33:07 -0500 Subject: [PATCH 05/13] feat: lock the admin UI while a backup is actively running MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New "Lock admin during backup" option (on by default). While a stepped backup is running, every admin page load except the full-screen backup screen and the login page is replaced by a "backup in progress" interstitial that auto-refreshes, so no other window can navigate or change anything mid-backup. Detection uses the stepped-backup session file heartbeat (JPATH_ROOT/tmp/mokosuitebackup-sessions/mb_*.json is rewritten every step and deleted on completion) — a file with an mtime within ~45s means a backup is live. A crashed/abandoned backup goes stale and releases the lock on its own, so the admin is never permanently locked. Implemented in the system plugin's onAfterRoute (admin, HTML page loads only; AJAX/assets and the backup's own step requests are unaffected). Claude-Session: https://claude.ai/code/session_01WbGBN9VyRK61zczYWcCQ2i --- .../packages/com_mokosuitebackup/config.xml | 11 +++ .../language/en-GB/com_mokosuitebackup.ini | 2 + .../language/en-US/com_mokosuitebackup.ini | 2 + .../en-GB/plg_system_mokosuitebackup.ini | 2 + .../en-US/plg_system_mokosuitebackup.ini | 2 + .../src/Extension/MokoSuiteBackup.php | 95 +++++++++++++++++++ 6 files changed, 114 insertions(+) diff --git a/source/packages/com_mokosuitebackup/config.xml b/source/packages/com_mokosuitebackup/config.xml index f0ce6bda..bd73a14d 100644 --- a/source/packages/com_mokosuitebackup/config.xml +++ b/source/packages/com_mokosuitebackup/config.xml @@ -162,6 +162,17 @@ + + + +
diff --git a/source/packages/com_mokosuitebackup/language/en-GB/com_mokosuitebackup.ini b/source/packages/com_mokosuitebackup/language/en-GB/com_mokosuitebackup.ini index fa663c7f..30d012bd 100644 --- a/source/packages/com_mokosuitebackup/language/en-GB/com_mokosuitebackup.ini +++ b/source/packages/com_mokosuitebackup/language/en-GB/com_mokosuitebackup.ini @@ -335,6 +335,8 @@ COM_MOKOJOOMBACKUP_CONFIG_PREUPDATE_AUTO_INTERCEPT="Auto-run on Update click" COM_MOKOJOOMBACKUP_CONFIG_PREUPDATE_AUTO_INTERCEPT_DESC="When enabled, clicking the Update button on the Joomla Update or Extensions update page first pops the backup progress modal, runs the pre-update backup, then automatically continues the update. When disabled, a notice with a manual 'Back up now' button is shown instead." COM_MOKOJOOMBACKUP_CONFIG_BACKUP_BEFORE_UNINSTALL="Backup Before Extension Uninstall" COM_MOKOJOOMBACKUP_CONFIG_BACKUP_BEFORE_UNINSTALL_DESC="Automatically run a full backup before any extension is uninstalled. Uses the default profile. Throttled to once per 10 minutes." +COM_MOKOJOOMBACKUP_CONFIG_LOCK_ADMIN="Lock admin during backup" +COM_MOKOJOOMBACKUP_CONFIG_LOCK_ADMIN_DESC="While a backup is actively running, show a \"backup in progress\" screen on all other admin pages until it finishes, so nothing changes mid-backup. The backup screen itself and the login page stay accessible. Auto-releases if a backup stops responding." ; Full-screen backup progress view (runbackup) COM_MOKOJOOMBACKUP_RUNBACKUP_TITLE="Backing Up" diff --git a/source/packages/com_mokosuitebackup/language/en-US/com_mokosuitebackup.ini b/source/packages/com_mokosuitebackup/language/en-US/com_mokosuitebackup.ini index 61f2219d..cd24d53b 100644 --- a/source/packages/com_mokosuitebackup/language/en-US/com_mokosuitebackup.ini +++ b/source/packages/com_mokosuitebackup/language/en-US/com_mokosuitebackup.ini @@ -57,6 +57,8 @@ COM_MOKOJOOMBACKUP_CONFIG_PREUPDATE_AUTO_INTERCEPT="Auto-run on Update click" COM_MOKOJOOMBACKUP_CONFIG_PREUPDATE_AUTO_INTERCEPT_DESC="When enabled, clicking the Update button on the Joomla Update or Extensions update page first pops the backup progress modal, runs the pre-update backup, then automatically continues the update. When disabled, a notice with a manual 'Back up now' button is shown instead." COM_MOKOJOOMBACKUP_CONFIG_BACKUP_BEFORE_UNINSTALL="Backup Before Extension Uninstall" COM_MOKOJOOMBACKUP_CONFIG_BACKUP_BEFORE_UNINSTALL_DESC="Automatically run a full backup before any extension is uninstalled. Uses the default profile. Throttled to once per 10 minutes." +COM_MOKOJOOMBACKUP_CONFIG_LOCK_ADMIN="Lock admin during backup" +COM_MOKOJOOMBACKUP_CONFIG_LOCK_ADMIN_DESC="While a backup is actively running, show a \"backup in progress\" screen on all other admin pages until it finishes, so nothing changes mid-backup. The backup screen itself and the login page stay accessible. Auto-releases if a backup stops responding." ; Full-screen backup progress view (runbackup) COM_MOKOJOOMBACKUP_RUNBACKUP_TITLE="Backing Up" diff --git a/source/packages/plg_system_mokosuitebackup/language/en-GB/plg_system_mokosuitebackup.ini b/source/packages/plg_system_mokosuitebackup/language/en-GB/plg_system_mokosuitebackup.ini index 7cc78952..e3085701 100644 --- a/source/packages/plg_system_mokosuitebackup/language/en-GB/plg_system_mokosuitebackup.ini +++ b/source/packages/plg_system_mokosuitebackup/language/en-GB/plg_system_mokosuitebackup.ini @@ -15,3 +15,5 @@ PLG_SYSTEM_MOKOJOOMBACKUP_BACKUP_COMPLETE="Backup complete — safe to update." PLG_SYSTEM_MOKOJOOMBACKUP_BACKUP_FAILED="Backup failed" PLG_SYSTEM_MOKOJOOMBACKUP_BACKUP_STARTING="Starting backup…" PLG_SYSTEM_MOKOSUITEBACKUP_UPDATE_RUNNING="Backup complete. The update is now running — please wait and do not close this window…" +PLG_SYSTEM_MOKOSUITEBACKUP_LOCK_TITLE="Backup in progress" +PLG_SYSTEM_MOKOSUITEBACKUP_LOCK_MESSAGE="A MokoSuiteBackup backup is currently running in another window. The administrator area is locked until it finishes — this page will refresh automatically. Please do not make changes while the backup runs." diff --git a/source/packages/plg_system_mokosuitebackup/language/en-US/plg_system_mokosuitebackup.ini b/source/packages/plg_system_mokosuitebackup/language/en-US/plg_system_mokosuitebackup.ini index 12552aea..2f6c301e 100644 --- a/source/packages/plg_system_mokosuitebackup/language/en-US/plg_system_mokosuitebackup.ini +++ b/source/packages/plg_system_mokosuitebackup/language/en-US/plg_system_mokosuitebackup.ini @@ -15,3 +15,5 @@ PLG_SYSTEM_MOKOJOOMBACKUP_BACKUP_COMPLETE="Backup complete — safe to update." PLG_SYSTEM_MOKOJOOMBACKUP_BACKUP_FAILED="Backup failed" PLG_SYSTEM_MOKOJOOMBACKUP_BACKUP_STARTING="Starting backup…" PLG_SYSTEM_MOKOSUITEBACKUP_UPDATE_RUNNING="Backup complete. The update is now running — please wait and do not close this window…" +PLG_SYSTEM_MOKOSUITEBACKUP_LOCK_TITLE="Backup in progress" +PLG_SYSTEM_MOKOSUITEBACKUP_LOCK_MESSAGE="A MokoSuiteBackup backup is currently running in another window. The administrator area is locked until it finishes — this page will refresh automatically. Please do not make changes while the backup runs." diff --git a/source/packages/plg_system_mokosuitebackup/src/Extension/MokoSuiteBackup.php b/source/packages/plg_system_mokosuitebackup/src/Extension/MokoSuiteBackup.php index ea4626e1..c6f869da 100644 --- a/source/packages/plg_system_mokosuitebackup/src/Extension/MokoSuiteBackup.php +++ b/source/packages/plg_system_mokosuitebackup/src/Extension/MokoSuiteBackup.php @@ -133,6 +133,10 @@ final class MokoSuiteBackup extends CMSPlugin implements SubscriberInterface return; } + // While a backup is actively running, lock the admin UI so no other + // window/page can navigate or change anything mid-backup. May close(). + $this->maybeLockAdminDuringBackup(); + // Pre-update: send Joomla core-update installs through the full-screen // backup page BEFORE the update runs (may not return from here). $this->maybeRedirectForUpdate(); @@ -155,6 +159,97 @@ final class MokoSuiteBackup extends CMSPlugin implements SubscriberInterface $this->cleanupOldSnapshots(); } + /** + * Detect whether a stepped backup is actively running right now. + * + * The stepped-backup engine rewrites its session JSON file + * (JPATH_ROOT/tmp/mokosuitebackup-sessions/mb_*.json) on every step and + * deletes it on completion, so a file whose mtime is within the last ~45s + * is a reliable, cross-session heartbeat. A crashed/abandoned backup goes + * stale and stops locking on its own — the admin is never permanently locked. + */ + private function backupIsActive(): bool + { + $dir = JPATH_ROOT . '/tmp/mokosuitebackup-sessions'; + + if (!is_dir($dir)) { + return false; + } + + $cutoff = time() - 45; + + foreach (glob($dir . '/mb_*.json') ?: [] as $file) { + if (@filemtime($file) >= $cutoff) { + return true; + } + } + + return false; + } + + /** + * While a backup is actively running, lock the admin UI: every admin page + * load (except the full-screen backup screen and the login/logout page) + * gets a "backup in progress" interstitial that auto-refreshes, so no other + * window can navigate or change anything mid-backup. Gated by the + * lock_admin_during_backup option; auto-released when the backup ends. + */ + private function maybeLockAdminDuringBackup(): void + { + if (!(int) ComponentHelper::getParams('com_mokosuitebackup')->get('lock_admin_during_backup', 1)) { + return; + } + + $app = $this->getApplication(); + $input = $app->getInput(); + $option = $input->getCmd('option', ''); + $view = $input->getCmd('view', ''); + + // Never lock the full-screen backup screen (it IS the backup) nor login/logout. + if (($option === 'com_mokosuitebackup' && $view === 'runbackup') || $option === 'com_login') { + return; + } + + if (!$this->backupIsActive()) { + return; + } + + $this->renderBackupLockPage(); + $app->close(); + } + + /** + * Emit a self-contained "backup in progress" interstitial that refreshes + * itself (meta refresh) until the backup finishes and the lock releases. + */ + private function renderBackupLockPage(): void + { + $app = $this->getApplication(); + $title = Text::_('PLG_SYSTEM_MOKOSUITEBACKUP_LOCK_TITLE'); + $message = Text::_('PLG_SYSTEM_MOKOSUITEBACKUP_LOCK_MESSAGE'); + $t = htmlspecialchars($title, ENT_QUOTES, 'UTF-8'); + $m = htmlspecialchars($message, ENT_QUOTES, 'UTF-8'); + + $html = '' + . '' + . '' + . '' . $t . '
' + . '

' . $t . '

' . $m . '

'; + + $app->setHeader('Content-Type', 'text/html; charset=utf-8', true); + $app->sendHeaders(); + echo $html; + } + /** * Inject the client-side interceptor on the Extensions → Update and * Extensions → Manage pages, so an EXTENSION update / uninstall also runs -- 2.52.0 From 120cca5594d7ec2a9f241c2edcf7ed635c4c510e Mon Sep 17 00:00:00 2001 From: "mokogitea-actions[bot]" Date: Wed, 15 Jul 2026 03:33:52 +0000 Subject: [PATCH 06/13] chore(version): pre-release bump to 02.64.04-dev [skip ci] --- .mokogitea/workflows/issue-branch.yml | 2 +- SECURITY.md | 2 +- source/packages/MokoSuiteClient | 2 +- source/packages/com_mokosuitebackup/mokosuitebackup.xml | 2 +- .../packages/com_mokosuitebackup/sql/updates/mysql/02.64.04.sql | 1 + .../mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml | 2 +- .../packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml | 2 +- source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml | 2 +- source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml | 2 +- .../packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml | 2 +- source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml | 2 +- source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml | 2 +- .../plg_webservices_mokosuitebackup/mokosuitebackup.xml | 2 +- source/pkg_mokosuitebackup.xml | 2 +- 14 files changed, 14 insertions(+), 13 deletions(-) create mode 100644 source/packages/com_mokosuitebackup/sql/updates/mysql/02.64.04.sql diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogitea/workflows/issue-branch.yml index 92387761..796c8e18 100644 --- a/.mokogitea/workflows/issue-branch.yml +++ b/.mokogitea/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: MokoGitea.Workflow # INGROUP: mokocli.Automation -# VERSION: 02.64.03 +# VERSION: 02.64.04 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/SECURITY.md b/SECURITY.md index ae76670a..0689d332 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: Template-Joomla INGROUP: Template-Joomla.Documentation REPO: https://git.mokoconsulting.tech/MokoConsulting/Template-Joomla PATH: /SECURITY.md -VERSION: 02.64.03 +VERSION: 02.64.04 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/source/packages/MokoSuiteClient b/source/packages/MokoSuiteClient index beca7e84..33ffcda3 160000 --- a/source/packages/MokoSuiteClient +++ b/source/packages/MokoSuiteClient @@ -1 +1 @@ -Subproject commit beca7e8406be2a0b8f8f6ccc01ca2e98d7226fe9 +Subproject commit 33ffcda3ed7ca440fda074ff34cac8b541c9fc37 diff --git a/source/packages/com_mokosuitebackup/mokosuitebackup.xml b/source/packages/com_mokosuitebackup/mokosuitebackup.xml index 6da357e9..8f972219 100644 --- a/source/packages/com_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/com_mokosuitebackup/mokosuitebackup.xml @@ -17,7 +17,7 @@ display label there. --> MokoSuiteBackup - 02.64.03 + 02.64.04 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/com_mokosuitebackup/sql/updates/mysql/02.64.04.sql b/source/packages/com_mokosuitebackup/sql/updates/mysql/02.64.04.sql new file mode 100644 index 00000000..8a4647f2 --- /dev/null +++ b/source/packages/com_mokosuitebackup/sql/updates/mysql/02.64.04.sql @@ -0,0 +1 @@ +/* 02.64.04 — no schema changes */ diff --git a/source/packages/mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml b/source/packages/mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml index 9e546386..16275875 100644 --- a/source/packages/mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml +++ b/source/packages/mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml @@ -8,7 +8,7 @@ --> Module - MokoSuiteBackup - cPanel - 02.64.03 + 02.64.04 2026-06-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml index a55e2e67..8882538b 100644 --- a/source/packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Action Log - MokoSuiteBackup - 02.64.03 + 02.64.04 2026-06-04 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml index f6e5f812..a0cc65cf 100644 --- a/source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Console - MokoSuiteBackup - 02.64.03 + 02.64.04 2026-06-04 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml index f3bf9b05..a52794ca 100644 --- a/source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Content - MokoSuiteBackup - 02.64.03 + 02.64.04 2026-06-04 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml index c4d9f477..6447f467 100644 --- a/source/packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml @@ -1,7 +1,7 @@ Quick Icon - MokoSuiteBackup - 02.64.03 + 02.64.04 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml index add19714..4719961a 100644 --- a/source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> System - MokoSuiteBackup - 02.64.03 + 02.64.04 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml index 49e32ff1..0c7cd5aa 100644 --- a/source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Task - MokoSuiteBackup - 02.64.03 + 02.64.04 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_webservices_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_webservices_mokosuitebackup/mokosuitebackup.xml index 06ebfa96..10952876 100644 --- a/source/packages/plg_webservices_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_webservices_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Web Services - MokoSuiteBackup - 02.64.03 + 02.64.04 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/pkg_mokosuitebackup.xml b/source/pkg_mokosuitebackup.xml index a6d41802..229ced95 100644 --- a/source/pkg_mokosuitebackup.xml +++ b/source/pkg_mokosuitebackup.xml @@ -8,7 +8,7 @@ Package - MokoSuiteBackup mokosuitebackup - 02.64.03 + 02.64.04 2026-06-02 Moko Consulting hello@mokoconsulting.tech -- 2.52.0 From d1a5a57847a590c0ad2add1e593ae81d0c7c201b Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Thu, 16 Jul 2026 07:47:14 -0500 Subject: [PATCH 07/13] chore(ci): rename .mokogitea workflow directory to .mokogit Server-side Actions scanning path was reconfigured to .mokogit/workflows. Renames the directory (history preserved) and updates every internal path reference: trigger globs, reusable-workflow `uses:` includes, WORKFLOWS_DIR, REPO_REQUIRED_ARTIFACTS, PATH headers, and .gitattributes export-ignore. Scope: this repo only. Product name "MokoGitea", the actions bot, env vars, and URLs are unaffected. Claude-Session: https://claude.ai/code/session_01WbGBN9VyRK61zczYWcCQ2i --- .gitattributes | 2 +- {.mokogitea => .mokogit}/CLAUDE.md | 4 +-- .../workflows/auto-bump.yml | 2 +- .../workflows/auto-release.yml | 2 +- .../workflows/branch-cleanup.yml | 2 +- .../workflows/cascade-dev.yml | 0 .../workflows/ci-generic.yml | 2 +- .../workflows/ci-issue-reporter.yml | 2 +- .../workflows/ci-joomla.yml | 0 .../workflows/cleanup.yml | 2 +- .../workflows/gitleaks.yml | 0 .../workflows/issue-branch.yml | 0 {.mokogitea => .mokogit}/workflows/notify.yml | 2 +- .../workflows/pr-check.yml | 2 +- .../workflows/pr-metadata-check.yml | 0 .../workflows/pre-release.yml | 0 .../workflows/rc-revert.yml | 2 +- .../workflows/repo-health.yml | 8 ++--- .../workflows/standards-compliance.yml | 32 +++++++++---------- .../workflows/version-set.yml | 2 +- 20 files changed, 33 insertions(+), 33 deletions(-) rename {.mokogitea => .mokogit}/CLAUDE.md (96%) rename {.mokogitea => .mokogit}/workflows/auto-bump.yml (98%) rename {.mokogitea => .mokogit}/workflows/auto-release.yml (99%) rename {.mokogitea => .mokogit}/workflows/branch-cleanup.yml (97%) rename {.mokogitea => .mokogit}/workflows/cascade-dev.yml (100%) rename {.mokogitea => .mokogit}/workflows/ci-generic.yml (99%) rename {.mokogitea => .mokogit}/workflows/ci-issue-reporter.yml (97%) rename {.mokogitea => .mokogit}/workflows/ci-joomla.yml (100%) rename {.mokogitea => .mokogit}/workflows/cleanup.yml (98%) rename {.mokogitea => .mokogit}/workflows/gitleaks.yml (100%) rename {.mokogitea => .mokogit}/workflows/issue-branch.yml (100%) rename {.mokogitea => .mokogit}/workflows/notify.yml (98%) rename {.mokogitea => .mokogit}/workflows/pr-check.yml (99%) rename {.mokogitea => .mokogit}/workflows/pr-metadata-check.yml (100%) rename {.mokogitea => .mokogit}/workflows/pre-release.yml (100%) rename {.mokogitea => .mokogit}/workflows/rc-revert.yml (98%) rename {.mokogitea => .mokogit}/workflows/repo-health.yml (99%) rename {.mokogitea => .mokogit}/workflows/standards-compliance.yml (98%) rename {.mokogitea => .mokogit}/workflows/version-set.yml (99%) diff --git a/.gitattributes b/.gitattributes index 205c550d..fd59c854 100644 --- a/.gitattributes +++ b/.gitattributes @@ -49,7 +49,7 @@ *.eot binary # Export ignore (not included in archives) -.mokogitea/ export-ignore +.mokogit/ export-ignore .editorconfig export-ignore .gitattributes export-ignore .gitignore export-ignore diff --git a/.mokogitea/CLAUDE.md b/.mokogit/CLAUDE.md similarity index 96% rename from .mokogitea/CLAUDE.md rename to .mokogit/CLAUDE.md index 6c2ab8b8..f2339595 100644 --- a/.mokogitea/CLAUDE.md +++ b/.mokogit/CLAUDE.md @@ -57,10 +57,10 @@ Joomla **package** with four sub-extensions: - **Never commit** `.claude/`, `.mcp.json`, `TODO.md`, `*.min.css`/`*.min.js` - **Attribution**: `Authored-by: Moko Consulting` -- **Workflow directory**: `.mokogitea/` (not `.gitea/` or `.github/`) +- **Workflow directory**: `.mokogit/` (not `.gitea/` or `.github/`) - **Minification**: handled at build time (CI) - **Wiki**: documentation lives in the MokoGitea wiki, not `docs/` files -- **Standards**: [MokoStandards](https://git.mokoconsulting.tech/MokoConsulting/.mokogitea/wiki) +- **Standards**: [MokoStandards](https://git.mokoconsulting.tech/MokoConsulting/.mokogit/wiki) ## Coding Standards diff --git a/.mokogitea/workflows/auto-bump.yml b/.mokogit/workflows/auto-bump.yml similarity index 98% rename from .mokogitea/workflows/auto-bump.yml rename to .mokogit/workflows/auto-bump.yml index a47661a4..7b28754a 100644 --- a/.mokogitea/workflows/auto-bump.yml +++ b/.mokogit/workflows/auto-bump.yml @@ -6,7 +6,7 @@ # DEFGROUP: MokoGitea.Workflow # INGROUP: MokoCLI.Release # REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli -# PATH: /.mokogitea/workflows/auto-bump.yml +# PATH: /.mokogit/workflows/auto-bump.yml # VERSION: 09.02.00 # BRIEF: Auto patch-bump version on every push to dev (skips merge commits) diff --git a/.mokogitea/workflows/auto-release.yml b/.mokogit/workflows/auto-release.yml similarity index 99% rename from .mokogitea/workflows/auto-release.yml rename to .mokogit/workflows/auto-release.yml index ce7bc6c7..51ba7eaf 100644 --- a/.mokogitea/workflows/auto-release.yml +++ b/.mokogit/workflows/auto-release.yml @@ -31,7 +31,7 @@ on: branches: - main paths-ignore: - - '.mokogitea/workflows/**' + - '.mokogit/workflows/**' - '*.md' - 'wiki/**' - '.editorconfig' diff --git a/.mokogitea/workflows/branch-cleanup.yml b/.mokogit/workflows/branch-cleanup.yml similarity index 97% rename from .mokogitea/workflows/branch-cleanup.yml rename to .mokogit/workflows/branch-cleanup.yml index aca4a9d2..1fbcf4d3 100644 --- a/.mokogitea/workflows/branch-cleanup.yml +++ b/.mokogit/workflows/branch-cleanup.yml @@ -6,7 +6,7 @@ # DEFGROUP: MokoGitea.Workflow # INGROUP: MokoCLI.Universal # REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli -# PATH: /.mokogitea/workflows/branch-cleanup.yml +# PATH: /.mokogit/workflows/branch-cleanup.yml # VERSION: 01.00.00 # BRIEF: Delete feature branches after PR merge diff --git a/.mokogitea/workflows/cascade-dev.yml b/.mokogit/workflows/cascade-dev.yml similarity index 100% rename from .mokogitea/workflows/cascade-dev.yml rename to .mokogit/workflows/cascade-dev.yml diff --git a/.mokogitea/workflows/ci-generic.yml b/.mokogit/workflows/ci-generic.yml similarity index 99% rename from .mokogitea/workflows/ci-generic.yml rename to .mokogit/workflows/ci-generic.yml index 330e6f95..6154540e 100644 --- a/.mokogitea/workflows/ci-generic.yml +++ b/.mokogit/workflows/ci-generic.yml @@ -6,7 +6,7 @@ # DEFGROUP: MokoGitea.Workflow # INGROUP: MokoCLI.CI # REPO: https://git.mokoconsulting.tech/MokoConsulting/Template-Generic -# PATH: /.mokogitea/workflows/ci-generic.yml +# PATH: /.mokogit/workflows/ci-generic.yml # VERSION: 01.00.00 # BRIEF: CI pipeline — lint, validate, and test for generic projects (PHP + Node.js) diff --git a/.mokogitea/workflows/ci-issue-reporter.yml b/.mokogit/workflows/ci-issue-reporter.yml similarity index 97% rename from .mokogitea/workflows/ci-issue-reporter.yml rename to .mokogit/workflows/ci-issue-reporter.yml index 335e92fe..e602580f 100644 --- a/.mokogitea/workflows/ci-issue-reporter.yml +++ b/.mokogit/workflows/ci-issue-reporter.yml @@ -6,7 +6,7 @@ # DEFGROUP: MokoGitea.Workflow # INGROUP: MokoCLI.Universal # REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli -# PATH: /.mokogitea/workflows/ci-issue-reporter.yml +# PATH: /.mokogit/workflows/ci-issue-reporter.yml # VERSION: 01.00.00 # BRIEF: Reusable workflow — creates/updates a MokoGitea issue when a CI gate fails. # Clones MokoCLI and runs cli/ci_issue_reporter.sh. diff --git a/.mokogitea/workflows/ci-joomla.yml b/.mokogit/workflows/ci-joomla.yml similarity index 100% rename from .mokogitea/workflows/ci-joomla.yml rename to .mokogit/workflows/ci-joomla.yml diff --git a/.mokogitea/workflows/cleanup.yml b/.mokogit/workflows/cleanup.yml similarity index 98% rename from .mokogitea/workflows/cleanup.yml rename to .mokogit/workflows/cleanup.yml index d08e29e5..56bc118d 100644 --- a/.mokogitea/workflows/cleanup.yml +++ b/.mokogit/workflows/cleanup.yml @@ -6,7 +6,7 @@ # DEFGROUP: MokoGitea.Workflow # INGROUP: MokoCLI.Maintenance # REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli -# PATH: /.mokogitea/workflows/cleanup.yml +# PATH: /.mokogit/workflows/cleanup.yml # VERSION: 01.00.00 # BRIEF: Scheduled cleanup — delete merged branches and old workflow runs diff --git a/.mokogitea/workflows/gitleaks.yml b/.mokogit/workflows/gitleaks.yml similarity index 100% rename from .mokogitea/workflows/gitleaks.yml rename to .mokogit/workflows/gitleaks.yml diff --git a/.mokogitea/workflows/issue-branch.yml b/.mokogit/workflows/issue-branch.yml similarity index 100% rename from .mokogitea/workflows/issue-branch.yml rename to .mokogit/workflows/issue-branch.yml diff --git a/.mokogitea/workflows/notify.yml b/.mokogit/workflows/notify.yml similarity index 98% rename from .mokogitea/workflows/notify.yml rename to .mokogit/workflows/notify.yml index 6d029c2f..44a589d5 100644 --- a/.mokogitea/workflows/notify.yml +++ b/.mokogit/workflows/notify.yml @@ -6,7 +6,7 @@ # DEFGROUP: MokoGitea.Workflow # INGROUP: MokoCLI.Notifications # REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli -# PATH: /.mokogitea/workflows/notify.yml +# PATH: /.mokogit/workflows/notify.yml # VERSION: 01.00.00 # BRIEF: Push notifications via ntfy on release success or workflow failure diff --git a/.mokogitea/workflows/pr-check.yml b/.mokogit/workflows/pr-check.yml similarity index 99% rename from .mokogitea/workflows/pr-check.yml rename to .mokogit/workflows/pr-check.yml index 2cd896ca..72d532d5 100644 --- a/.mokogitea/workflows/pr-check.yml +++ b/.mokogit/workflows/pr-check.yml @@ -518,7 +518,7 @@ jobs: if: >- always() && needs.validate.result == 'failure' - uses: ./.mokogitea/workflows/ci-issue-reporter.yml + uses: ./.mokogit/workflows/ci-issue-reporter.yml with: gate: "PR Validation" workflow: "PR Check" diff --git a/.mokogitea/workflows/pr-metadata-check.yml b/.mokogit/workflows/pr-metadata-check.yml similarity index 100% rename from .mokogitea/workflows/pr-metadata-check.yml rename to .mokogit/workflows/pr-metadata-check.yml diff --git a/.mokogitea/workflows/pre-release.yml b/.mokogit/workflows/pre-release.yml similarity index 100% rename from .mokogitea/workflows/pre-release.yml rename to .mokogit/workflows/pre-release.yml diff --git a/.mokogitea/workflows/rc-revert.yml b/.mokogit/workflows/rc-revert.yml similarity index 98% rename from .mokogitea/workflows/rc-revert.yml rename to .mokogit/workflows/rc-revert.yml index 8874441d..39280744 100644 --- a/.mokogitea/workflows/rc-revert.yml +++ b/.mokogit/workflows/rc-revert.yml @@ -6,7 +6,7 @@ # DEFGROUP: MokoGitea.Workflow # INGROUP: MokoCLI.Universal # REPO: https://git.mokoconsulting.tech/MokoConsulting/mokocli -# PATH: /.mokogitea/workflows/rc-revert.yml +# PATH: /.mokogit/workflows/rc-revert.yml # VERSION: 09.23.00 # BRIEF: Rename rc/ branch back to dev/ when PR is closed without merge diff --git a/.mokogitea/workflows/repo-health.yml b/.mokogit/workflows/repo-health.yml similarity index 99% rename from .mokogitea/workflows/repo-health.yml rename to .mokogit/workflows/repo-health.yml index 31736e8b..12ea115a 100644 --- a/.mokogitea/workflows/repo-health.yml +++ b/.mokogit/workflows/repo-health.yml @@ -45,7 +45,7 @@ env: SCRIPTS_ALLOWED_DIRS: scripts,scripts/fix,scripts/lib,scripts/release,scripts/run,scripts/validate # Repo health policy - REPO_REQUIRED_ARTIFACTS: README.md,LICENSE,CHANGELOG.md,CONTRIBUTING.md,CODE_OF_CONDUCT.md,.mokogitea/workflows/ + REPO_REQUIRED_ARTIFACTS: README.md,LICENSE,CHANGELOG.md,CONTRIBUTING.md,CODE_OF_CONDUCT.md,.mokogit/workflows/ REPO_OPTIONAL_FILES: SECURITY.md,GOVERNANCE.md,.editorconfig,.gitattributes,.gitignore,README.md,docs/ REPO_DISALLOWED_DIRS: REPO_DISALLOWED_FILES: TODO.md,todo.md @@ -56,7 +56,7 @@ env: # File / directory variables DOCS_INDEX: docs/docs-index.md SCRIPT_DIR: scripts - WORKFLOWS_DIR: .mokogitea/workflows + WORKFLOWS_DIR: .mokogit/workflows SHELLCHECK_PATTERN: '*.sh' SPDX_FILE_GLOBS: '*.sh,*.php,*.js,*.ts,*.css,*.xml,*.yml,*.yaml' FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true @@ -677,7 +677,7 @@ jobs: if: >- always() && needs.scripts_governance.result == 'failure' - uses: ./.mokogitea/workflows/ci-issue-reporter.yml + uses: ./.mokogit/workflows/ci-issue-reporter.yml with: gate: "Scripts Governance" workflow: "Repo Health" @@ -691,7 +691,7 @@ jobs: if: >- always() && needs.repo_health.result == 'failure' - uses: ./.mokogitea/workflows/ci-issue-reporter.yml + uses: ./.mokogit/workflows/ci-issue-reporter.yml with: gate: "Repository Health" workflow: "Repo Health" diff --git a/.mokogitea/workflows/standards-compliance.yml b/.mokogit/workflows/standards-compliance.yml similarity index 98% rename from .mokogitea/workflows/standards-compliance.yml rename to .mokogit/workflows/standards-compliance.yml index 2a7abc38..4a8d9d6c 100644 --- a/.mokogitea/workflows/standards-compliance.yml +++ b/.mokogit/workflows/standards-compliance.yml @@ -4,7 +4,7 @@ # DEFGROUP: GitHub.Workflow # INGROUP: MokoCLI.Compliance # REPO: https://github.com/mokoconsulting-tech/mokocli -# PATH: /.mokogitea/workflows/standards-compliance.yml +# PATH: /.mokogit/workflows/standards-compliance.yml # VERSION: 04.06.00 # BRIEF: MokoCLI compliance validation workflow # NOTE: Validates repository structure, documentation, and coding standards @@ -299,7 +299,7 @@ jobs: echo "|-----------|--------|-------|------|-------|" >> $GITHUB_STEP_SUMMARY # Check required directories - for dir in .mokogitea; do + for dir in .mokogit; do if [ -d "$dir" ]; then FILE_COUNT=$(find "$dir" -type f 2>/dev/null | wc -l) DIR_SIZE=$(du -sh "$dir" 2>/dev/null | cut -f1) @@ -320,7 +320,7 @@ jobs: echo "### 🔴 Critical Issues: $MISSING" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "**Remediation Steps:**" >> $GITHUB_STEP_SUMMARY - [ ! -d ".mokogitea" ] && echo "- Create .mokogitea directory: \`mkdir -p .mokogitea/workflows\`" >> $GITHUB_STEP_SUMMARY + [ ! -d ".mokogit" ] && echo "- Create .mokogit directory: \`mkdir -p .mokogit/workflows\`" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "📚 Reference: [MokoCLI Repository Structure](https://github.com/mokoconsulting-tech/mokocli/tree/main/docs/policy/core-structure.md)" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY @@ -563,17 +563,17 @@ jobs: set -x echo "### GitHub Actions Workflows" >> $GITHUB_STEP_SUMMARY - WORKFLOWS_DIR=".mokogitea/workflows" + WORKFLOWS_DIR=".mokogit/workflows" if [ ! -d "$WORKFLOWS_DIR" ]; then echo "❌ No workflows directory found" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "### ❌ Validation Failed: Workflows Directory Missing" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY - echo "**Error:** .mokogitea/workflows directory is required for CI/CD automation" >> $GITHUB_STEP_SUMMARY - echo "**Action Required:** Create .mokogitea/workflows directory and add GitHub Actions workflows" >> $GITHUB_STEP_SUMMARY + echo "**Error:** .mokogit/workflows directory is required for CI/CD automation" >> $GITHUB_STEP_SUMMARY + echo "**Action Required:** Create .mokogit/workflows directory and add GitHub Actions workflows" >> $GITHUB_STEP_SUMMARY echo "" - echo "❌ ERROR: .mokogitea/workflows directory not found" + echo "❌ ERROR: .mokogit/workflows directory not found" exit 1 fi @@ -612,7 +612,7 @@ jobs: echo "### Workflow YAML Syntax" >> $GITHUB_STEP_SUMMARY INVALID=0 - for workflow in $(find .mokogitea/workflows -maxdepth 1 -type f \( -name "*.yml" -o -name "*.yaml" \) 2>/dev/null); do + for workflow in $(find .mokogit/workflows -maxdepth 1 -type f \( -name "*.yml" -o -name "*.yaml" \) 2>/dev/null); do if [ -f "$workflow" ]; then if python3 -c "import yaml, sys; yaml.safe_load(open(sys.argv[1]))" "$workflow" 2>/dev/null; then echo "✅ $(basename $workflow)" >> $GITHUB_STEP_SUMMARY @@ -629,7 +629,7 @@ jobs: echo "" >> $GITHUB_STEP_SUMMARY echo "**Error:** $INVALID workflow file(s) have invalid YAML syntax" >> $GITHUB_STEP_SUMMARY echo "**Action Required:** Fix YAML syntax errors in the marked workflow files" >> $GITHUB_STEP_SUMMARY - echo "**Tool:** Run \`python3 -c \"import yaml; yaml.safe_load(open('.mokogitea/workflows/FILE.yml'))\"\` locally" >> $GITHUB_STEP_SUMMARY + echo "**Tool:** Run \`python3 -c \"import yaml; yaml.safe_load(open('.mokogit/workflows/FILE.yml'))\"\` locally" >> $GITHUB_STEP_SUMMARY echo "" echo "❌ ERROR: $INVALID workflow file(s) with invalid YAML syntax" exit 1 @@ -641,7 +641,7 @@ jobs: echo "✅ SUCCESS: All workflow files passed YAML validation" - name: Validate CodeQL Configuration - if: hashFiles('.mokogitea/workflows/codeql-analysis.yml') != '' + if: hashFiles('.mokogit/workflows/codeql-analysis.yml') != '' run: | set -e echo "" >> $GITHUB_STEP_SUMMARY @@ -649,7 +649,7 @@ jobs: echo "" >> $GITHUB_STEP_SUMMARY # Inline validation (rewritten from Python to bash for PHP-only architecture) - CODEQL_FILE=".mokogitea/workflows/codeql-analysis.yml" + CODEQL_FILE=".mokogit/workflows/codeql-analysis.yml" if [ ! -f "$CODEQL_FILE" ]; then echo "⚠️ CodeQL workflow file not found" >> $GITHUB_STEP_SUMMARY @@ -1186,7 +1186,7 @@ jobs: fi # Run yamllint and count line-length warnings - YAML_OUTPUT=$(yamllint .mokogitea/workflows/*.yml 2>&1 | grep "line too long" || true) + YAML_OUTPUT=$(yamllint .mokogit/workflows/*.yml 2>&1 | grep "line too long" || true) if [ -n "$YAML_OUTPUT" ]; then YAML_VIOLATIONS=$(echo "$YAML_OUTPUT" | wc -l) echo "⚠️ Found $YAML_VIOLATIONS lines exceeding 180 characters in YAML files" >> $GITHUB_STEP_SUMMARY @@ -2130,17 +2130,17 @@ jobs: WARNINGS=0 ERRORS=0 - # 1. Check .mokogitea/config.tf location (not root override files) + # 1. Check .mokogit/config.tf location (not root override files) echo "### Override Configuration Check" >> $GITHUB_STEP_SUMMARY LEGACY_OVERRIDES=$(find . -maxdepth 1 -name "*override*.tf" -o -name "MokoCLI.override.tf" 2>/dev/null | wc -l || echo 0) if [ "$LEGACY_OVERRIDES" -gt 0 ]; then echo "⚠️ Found legacy override files in root directory" >> $GITHUB_STEP_SUMMARY - echo "**Expected Location**: .mokogitea/config.tf" >> $GITHUB_STEP_SUMMARY + echo "**Expected Location**: .mokogit/config.tf" >> $GITHUB_STEP_SUMMARY echo "**Legacy files found**: $LEGACY_OVERRIDES" >> $GITHUB_STEP_SUMMARY WARNINGS=$((WARNINGS + 1)) else - if [ -f ".mokogitea/config.tf" ]; then - echo "✅ Override configuration in correct location (.mokogitea/config.tf)" >> $GITHUB_STEP_SUMMARY + if [ -f ".mokogit/config.tf" ]; then + echo "✅ Override configuration in correct location (.mokogit/config.tf)" >> $GITHUB_STEP_SUMMARY else echo "ℹ️ No override configuration found" >> $GITHUB_STEP_SUMMARY fi diff --git a/.mokogitea/workflows/version-set.yml b/.mokogit/workflows/version-set.yml similarity index 99% rename from .mokogitea/workflows/version-set.yml rename to .mokogit/workflows/version-set.yml index 172c0859..c9874067 100644 --- a/.mokogitea/workflows/version-set.yml +++ b/.mokogit/workflows/version-set.yml @@ -6,7 +6,7 @@ # DEFGROUP: MokoGitea.Workflow.Template # INGROUP: MokoCLI.CI # REPO: https://git.mokoconsulting.tech/MokoConsulting/Template-Joomla -# PATH: /.mokogitea/workflows/version-set.yml +# PATH: /.mokogit/workflows/version-set.yml # VERSION: 01.00.00 # BRIEF: Set or reset the extension version across all version-bearing files -- 2.52.0 From 595a5d9f3ff470fe09c375124479755080be6c5d Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Thu, 16 Jul 2026 08:36:49 -0500 Subject: [PATCH 08/13] chore(ci): rename MOKOGITEA_TOKEN/URL to MOKOGIT_TOKEN/URL Completes the .mokogit rebrand to match main: the server secret was renamed MOKOGITEA_TOKEN -> MOKOGIT_TOKEN and the workflow env var MOKOGITEA_URL -> MOKOGIT_URL. Without this the merged workflows would reference an undefined secret and CI auth would fail. Claude-Session: https://claude.ai/code/session_01WbGBN9VyRK61zczYWcCQ2i --- .mokogit/workflows/auto-bump.yml | 10 ++--- .mokogit/workflows/auto-release.yml | 52 ++++++++++++------------ .mokogit/workflows/branch-cleanup.yml | 2 +- .mokogit/workflows/cascade-dev.yml | 2 +- .mokogit/workflows/ci-issue-reporter.yml | 12 +++--- .mokogit/workflows/ci-joomla.yml | 14 +++---- .mokogit/workflows/cleanup.yml | 20 ++++----- .mokogit/workflows/issue-branch.yml | 8 ++-- .mokogit/workflows/pr-check.yml | 6 +-- .mokogit/workflows/pr-metadata-check.yml | 10 ++--- .mokogit/workflows/pre-release.yml | 16 ++++---- .mokogit/workflows/rc-revert.yml | 2 +- .mokogit/workflows/repo-health.yml | 2 +- .mokogit/workflows/version-set.yml | 2 +- 14 files changed, 79 insertions(+), 79 deletions(-) diff --git a/.mokogit/workflows/auto-bump.yml b/.mokogit/workflows/auto-bump.yml index 7b28754a..d124afdd 100644 --- a/.mokogit/workflows/auto-bump.yml +++ b/.mokogit/workflows/auto-bump.yml @@ -22,7 +22,7 @@ on: env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true - MOKOGITEA_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} + MOKOGIT_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} permissions: contents: write @@ -40,7 +40,7 @@ jobs: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 with: - token: ${{ secrets.MOKOGITEA_TOKEN }} + token: ${{ secrets.MOKOGIT_TOKEN }} fetch-depth: 1 - name: Setup MokoCLI tools @@ -52,7 +52,7 @@ jobs: echo "MOKO_CLI=/opt/mokocli/cli" >> "$GITHUB_ENV" else git clone --depth 1 --branch main --quiet \ - "https://x-access-token:${{ secrets.MOKOGITEA_TOKEN }}@git.mokoconsulting.tech/MokoConsulting/mokocli.git" \ + "https://x-access-token:${{ secrets.MOKOGIT_TOKEN }}@git.mokoconsulting.tech/MokoConsulting/mokocli.git" \ /tmp/mokocli cd /tmp/mokocli && composer install --no-dev --no-interaction --quiet echo "MOKO_CLI=/tmp/mokocli/cli" >> "$GITHUB_ENV" @@ -62,5 +62,5 @@ jobs: run: | php ${MOKO_CLI}/version_auto_bump.php \ --path . --branch "${GITHUB_REF_NAME}" \ - --token "${{ secrets.MOKOGITEA_TOKEN }}" \ - --repo-url "https://x-access-token:${{ secrets.MOKOGITEA_TOKEN }}@git.mokoconsulting.tech/${{ github.repository }}.git" + --token "${{ secrets.MOKOGIT_TOKEN }}" \ + --repo-url "https://x-access-token:${{ secrets.MOKOGIT_TOKEN }}@git.mokoconsulting.tech/${{ github.repository }}.git" diff --git a/.mokogit/workflows/auto-release.yml b/.mokogit/workflows/auto-release.yml index 51ba7eaf..d06d75ca 100644 --- a/.mokogit/workflows/auto-release.yml +++ b/.mokogit/workflows/auto-release.yml @@ -52,7 +52,7 @@ on: env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true - MOKOGITEA_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} + MOKOGIT_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} GITEA_ORG: ${{ vars.GITEA_ORG || github.repository_owner }} GITEA_REPO: ${{ vars.GITEA_REPO || github.event.repository.name }} @@ -77,13 +77,13 @@ jobs: - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 with: - token: ${{ secrets.MOKOGITEA_TOKEN }} + token: ${{ secrets.MOKOGIT_TOKEN }} fetch-depth: 1 submodules: recursive - name: Setup MokoCLI tools env: - MOKO_CLONE_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} + MOKO_CLONE_TOKEN: ${{ secrets.MOKOGIT_TOKEN }} MOKO_CLONE_HOST: git.mokoconsulting.tech/MokoConsulting run: | if [ -f /opt/mokocli/cli/version_bump.php ] && [ -f /opt/mokocli/vendor/autoload.php ]; then @@ -106,8 +106,8 @@ jobs: run: | php ${MOKO_CLI}/branch_rename.php \ --from "${{ github.event.pull_request.head.ref || 'dev' }}" --to rc \ - --token "${{ secrets.MOKOGITEA_TOKEN }}" \ - --api-base "${MOKOGITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" \ + --token "${{ secrets.MOKOGIT_TOKEN }}" \ + --api-base "${MOKOGIT_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" \ --pr "${{ github.event.pull_request.number }}" - name: Checkout rc and configure git @@ -116,18 +116,18 @@ jobs: git checkout rc git config --local user.email "mokogitea-actions[bot]@mokoconsulting.tech" git config --local user.name "mokogitea-actions[bot]" - git remote set-url origin "https://x-access-token:${{ secrets.MOKOGITEA_TOKEN }}@git.mokoconsulting.tech/${{ github.repository }}.git" + git remote set-url origin "https://x-access-token:${{ secrets.MOKOGIT_TOKEN }}@git.mokoconsulting.tech/${{ github.repository }}.git" - name: Publish RC release run: | php ${MOKO_CLI}/release_publish.php \ --path . --stability rc --bump minor --branch rc \ - --token "${{ secrets.MOKOGITEA_TOKEN }}" + --token "${{ secrets.MOKOGIT_TOKEN }}" - name: Update RC release notes from CHANGELOG.md run: | - API_BASE="${MOKOGITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" - TOKEN="${{ secrets.MOKOGITEA_TOKEN }}" + API_BASE="${MOKOGIT_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" + TOKEN="${{ secrets.MOKOGIT_TOKEN }}" # Extract [Unreleased] section from changelog NOTES="" @@ -180,7 +180,7 @@ jobs: - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 with: - token: ${{ secrets.MOKOGITEA_TOKEN }} + token: ${{ secrets.MOKOGIT_TOKEN }} fetch-depth: 0 submodules: recursive @@ -188,7 +188,7 @@ jobs: run: | git config --local user.email "mokogitea-actions[bot]@mokoconsulting.tech" git config --local user.name "mokogitea-actions[bot]" - git remote set-url origin "https://x-access-token:${{ secrets.MOKOGITEA_TOKEN }}@git.mokoconsulting.tech/${{ github.repository }}.git" + git remote set-url origin "https://x-access-token:${{ secrets.MOKOGIT_TOKEN }}@git.mokoconsulting.tech/${{ github.repository }}.git" - name: Check for merge conflict markers run: | @@ -205,7 +205,7 @@ jobs: - name: Setup MokoCLI tools env: - MOKO_CLONE_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} + MOKO_CLONE_TOKEN: ${{ secrets.MOKOGIT_TOKEN }} MOKO_CLONE_HOST: git.mokoconsulting.tech/MokoConsulting COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_MIRROR_TOKEN }}"}}' run: | @@ -252,7 +252,7 @@ jobs: fi php ${MOKO_CLI}/release_publish.php \ --path . --stability stable ${BUMP_FLAG} --branch main \ - --token "${{ secrets.MOKOGITEA_TOKEN }}" + --token "${{ secrets.MOKOGIT_TOKEN }}" - name: "Read published version" id: version @@ -279,8 +279,8 @@ jobs: !startsWith(steps.platform.outputs.platform, 'joomla') run: | VERSION="${{ steps.version.outputs.version }}" - API_BASE="${MOKOGITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" - TOKEN="${{ secrets.MOKOGITEA_TOKEN }}" + API_BASE="${MOKOGIT_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" + TOKEN="${{ secrets.MOKOGIT_TOKEN }}" SEMVER_TAG="v${VERSION}" echo "Creating semver tag: ${SEMVER_TAG}" @@ -304,8 +304,8 @@ jobs: - name: Update release notes and promote changelog run: | - API_BASE="${MOKOGITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" - TOKEN="${{ secrets.MOKOGITEA_TOKEN }}" + API_BASE="${MOKOGIT_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" + TOKEN="${{ secrets.MOKOGIT_TOKEN }}" # Get the stable release info (version and ID) RELEASE_JSON=$(curl -sf -H "Authorization: token ${TOKEN}" \ @@ -373,10 +373,10 @@ jobs: VERSION="${{ steps.bump.outputs.version || steps.version.outputs.version }}" RELEASE_TAG="${{ steps.version.outputs.release_tag }}" GH_REPO="${{ vars.GH_MIRROR_REPO || github.repository }}" - API_BASE="${MOKOGITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" + API_BASE="${MOKOGIT_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" php ${MOKO_CLI}/release_mirror.php \ --version "$VERSION" --tag "$RELEASE_TAG" \ - --token "${{ secrets.MOKOGITEA_TOKEN }}" --api-base "$API_BASE" \ + --token "${{ secrets.MOKOGIT_TOKEN }}" --api-base "$API_BASE" \ --gh-token "${{ secrets.GH_MIRROR_TOKEN }}" --gh-repo "$GH_REPO" \ --branch main 2>&1 || true echo "GitHub mirror updated" >> $GITHUB_STEP_SUMMARY @@ -402,8 +402,8 @@ jobs: if: steps.version.outputs.skip != 'true' continue-on-error: true run: | - API_BASE="${MOKOGITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" - TOKEN="${{ secrets.MOKOGITEA_TOKEN }}" + API_BASE="${MOKOGIT_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" + TOKEN="${{ secrets.MOKOGIT_TOKEN }}" # Delete rc branch (ephemeral — created by promote-rc) curl -sf -X DELETE -H "Authorization: token ${TOKEN}" \ @@ -418,8 +418,8 @@ jobs: if: steps.version.outputs.skip != 'true' continue-on-error: true run: | - API_BASE="${MOKOGITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" - TOKEN="${{ secrets.MOKOGITEA_TOKEN }}" + API_BASE="${MOKOGIT_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" + TOKEN="${{ secrets.MOKOGIT_TOKEN }}" VERSION="${{ steps.bump.outputs.version || steps.version.outputs.version }}" BRANCH_NAME="version/${VERSION}" MAIN_SHA=$(git rev-parse HEAD) @@ -439,9 +439,9 @@ jobs: if: steps.version.outputs.skip != 'true' continue-on-error: true run: | - API_BASE="${MOKOGITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" + API_BASE="${MOKOGIT_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" php ${MOKO_CLI}/version_reset_dev.php \ - --token "${{ secrets.MOKOGITEA_TOKEN }}" --api-base "${API_BASE}" \ + --token "${{ secrets.MOKOGIT_TOKEN }}" --api-base "${API_BASE}" \ --branch dev --path . 2>&1 || true # -- Summary -------------------------------------------------------------- @@ -465,5 +465,5 @@ jobs: echo "| Version | \`${VERSION}\` |" >> $GITHUB_STEP_SUMMARY echo "| Branch | \`${{ steps.version.outputs.branch }}\` |" >> $GITHUB_STEP_SUMMARY echo "| Tag | \`${{ steps.version.outputs.tag }}\` |" >> $GITHUB_STEP_SUMMARY - echo "| Release | [View](${MOKOGITEA_URL}/${GITEA_ORG}/${GITEA_REPO}/releases/tag/${{ steps.version.outputs.tag }}) |" >> $GITHUB_STEP_SUMMARY + echo "| Release | [View](${MOKOGIT_URL}/${GITEA_ORG}/${GITEA_REPO}/releases/tag/${{ steps.version.outputs.tag }}) |" >> $GITHUB_STEP_SUMMARY fi diff --git a/.mokogit/workflows/branch-cleanup.yml b/.mokogit/workflows/branch-cleanup.yml index 1fbcf4d3..f8f72ba9 100644 --- a/.mokogit/workflows/branch-cleanup.yml +++ b/.mokogit/workflows/branch-cleanup.yml @@ -37,7 +37,7 @@ jobs: ENCODED=$(printf '%s' "${BRANCH}" | sed 's|/|%2F|g') STATUS=$(curl -sf -o /dev/null -w "%{http_code}" -X DELETE \ - -H "Authorization: token ${{ secrets.MOKOGITEA_TOKEN }}" \ + -H "Authorization: token ${{ secrets.MOKOGIT_TOKEN }}" \ "${API}/${ENCODED}" 2>/dev/null || true) if [ "$STATUS" = "204" ]; then diff --git a/.mokogit/workflows/cascade-dev.yml b/.mokogit/workflows/cascade-dev.yml index 1b9f8a6b..b63181f2 100644 --- a/.mokogit/workflows/cascade-dev.yml +++ b/.mokogit/workflows/cascade-dev.yml @@ -43,7 +43,7 @@ jobs: steps: - name: Force dev to main env: - TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} + TOKEN: ${{ secrets.MOKOGIT_TOKEN }} SERVER: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} REPO: ${{ github.repository }} run: | diff --git a/.mokogit/workflows/ci-issue-reporter.yml b/.mokogit/workflows/ci-issue-reporter.yml index e602580f..cb259ff3 100644 --- a/.mokogit/workflows/ci-issue-reporter.yml +++ b/.mokogit/workflows/ci-issue-reporter.yml @@ -35,7 +35,7 @@ on: type: string default: "" secrets: - MOKOGITEA_TOKEN: + MOKOGIT_TOKEN: required: true env: @@ -49,16 +49,16 @@ jobs: steps: - name: Clone MokoCLI env: - MOKOGITEA_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} + MOKOGIT_TOKEN: ${{ secrets.MOKOGIT_TOKEN }} run: | - MOKOGITEA_URL="${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }}" - git clone --depth 1 --filter=blob:none --sparse "${MOKOGITEA_URL}/MokoConsulting/mokocli.git" /tmp/mokocli + MOKOGIT_URL="${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }}" + git clone --depth 1 --filter=blob:none --sparse "${MOKOGIT_URL}/MokoConsulting/mokocli.git" /tmp/mokocli cd /tmp/mokocli && git sparse-checkout set cli/ci_issue_reporter.sh - name: Report CI failure env: - MOKOGITEA_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} - MOKOGITEA_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} + MOKOGIT_TOKEN: ${{ secrets.MOKOGIT_TOKEN }} + MOKOGIT_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} run: | chmod +x /tmp/mokocli/cli/ci_issue_reporter.sh /tmp/mokocli/cli/ci_issue_reporter.sh \ diff --git a/.mokogit/workflows/ci-joomla.yml b/.mokogit/workflows/ci-joomla.yml index e61ed5bd..3b7473bb 100644 --- a/.mokogit/workflows/ci-joomla.yml +++ b/.mokogit/workflows/ci-joomla.yml @@ -49,8 +49,8 @@ jobs: - name: Setup MokoCLI tools env: - MOKO_CLONE_TOKEN: ${{ secrets.MOKOGITEA_TOKEN || github.token }} - MOKO_CLONE_HOST: ${{ secrets.MOKOGITEA_TOKEN && 'git.mokoconsulting.tech/MokoConsulting' || 'github.com/mokoconsulting-tech' }} + MOKO_CLONE_TOKEN: ${{ secrets.MOKOGIT_TOKEN || github.token }} + MOKO_CLONE_HOST: ${{ secrets.MOKOGIT_TOKEN && 'git.mokoconsulting.tech/MokoConsulting' || 'github.com/mokoconsulting-tech' }} run: | if [ -d "/opt/mokocli" ] || [ -d "/tmp/mokocli" ]; then echo "MokoCLI already available on runner — skipping clone" @@ -62,7 +62,7 @@ jobs: - name: Install dependencies env: - COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_TOKEN || secrets.MOKOGITEA_TOKEN || github.token }}"}}' + COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_TOKEN || secrets.MOKOGIT_TOKEN || github.token }}"}}' run: | if [ -f "composer.json" ]; then composer install \ @@ -2067,7 +2067,7 @@ jobs: - name: Install dependencies env: - COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_TOKEN || secrets.MOKOGITEA_TOKEN || github.token }}"}}' + COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_TOKEN || secrets.MOKOGIT_TOKEN || github.token }}"}}' run: | if [ -f "composer.json" ]; then composer install \ @@ -2118,7 +2118,7 @@ jobs: - name: Install dependencies env: - COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_TOKEN || secrets.MOKOGITEA_TOKEN || github.token }}"}}' + COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GH_TOKEN || secrets.MOKOGIT_TOKEN || github.token }}"}}' run: | if [ -f "composer.json" ]; then composer install --no-interaction --prefer-dist --optimize-autoloader @@ -2185,13 +2185,13 @@ jobs: steps: - name: Trigger pre-release build env: - MOKOGITEA_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} + MOKOGIT_TOKEN: ${{ secrets.MOKOGIT_TOKEN }} REPO: ${{ github.repository }} BRANCH: ${{ github.head_ref }} run: | curl -s -X POST \ "${GITEA_URL:-https://git.mokoconsulting.tech}/api/v1/repos/${REPO}/actions/workflows/pre-release.yml/dispatches" \ - -H "Authorization: token ${MOKOGITEA_TOKEN}" \ + -H "Authorization: token ${MOKOGIT_TOKEN}" \ -H "Content-Type: application/json" \ -d "{\"ref\":\"${BRANCH}\",\"inputs\":{\"stability\":\"release-candidate\"}}" echo "### Pre-Release" >> $GITHUB_STEP_SUMMARY diff --git a/.mokogit/workflows/cleanup.yml b/.mokogit/workflows/cleanup.yml index 56bc118d..06e06a54 100644 --- a/.mokogit/workflows/cleanup.yml +++ b/.mokogit/workflows/cleanup.yml @@ -21,7 +21,7 @@ permissions: contents: write env: - MOKOGITEA_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} + MOKOGIT_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} jobs: cleanup: @@ -33,17 +33,17 @@ jobs: uses: actions/checkout@v4 with: fetch-depth: 0 - token: ${{ secrets.MOKOGITEA_TOKEN }} + token: ${{ secrets.MOKOGIT_TOKEN }} - name: Delete merged branches env: - MOKOGITEA_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} + MOKOGIT_TOKEN: ${{ secrets.MOKOGIT_TOKEN }} run: | echo "=== Merged Branch Cleanup ===" - API="${MOKOGITEA_URL}/api/v1/repos/${{ github.repository }}" + API="${MOKOGIT_URL}/api/v1/repos/${{ github.repository }}" # List branches via API - BRANCHES=$(curl -sS -H "Authorization: token ${MOKOGITEA_TOKEN}" \ + BRANCHES=$(curl -sS -H "Authorization: token ${MOKOGIT_TOKEN}" \ "${API}/branches?limit=50" | jq -r '.[].name') DELETED=0 @@ -56,7 +56,7 @@ jobs: # Check if branch is merged into main if git merge-base --is-ancestor "origin/${BRANCH}" origin/main 2>/dev/null; then echo " Deleting merged branch: ${BRANCH}" - curl -sS -X DELETE -H "Authorization: token ${MOKOGITEA_TOKEN}" \ + curl -sS -X DELETE -H "Authorization: token ${MOKOGIT_TOKEN}" \ "${API}/branches/${BRANCH}" 2>/dev/null || true DELETED=$((DELETED + 1)) fi @@ -66,20 +66,20 @@ jobs: - name: Clean old workflow runs env: - MOKOGITEA_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} + MOKOGIT_TOKEN: ${{ secrets.MOKOGIT_TOKEN }} run: | echo "=== Workflow Run Cleanup ===" - API="${MOKOGITEA_URL}/api/v1/repos/${{ github.repository }}" + API="${MOKOGIT_URL}/api/v1/repos/${{ github.repository }}" CUTOFF=$(date -d "30 days ago" +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -v-30d +%Y-%m-%dT%H:%M:%SZ) # Get old completed runs - RUNS=$(curl -sS -H "Authorization: token ${MOKOGITEA_TOKEN}" \ + RUNS=$(curl -sS -H "Authorization: token ${MOKOGIT_TOKEN}" \ "${API}/actions/runs?status=completed&limit=50" | \ jq -r ".workflow_runs[] | select(.created_at < \"${CUTOFF}\") | .id" 2>/dev/null) DELETED=0 for RUN_ID in $RUNS; do - curl -sS -X DELETE -H "Authorization: token ${MOKOGITEA_TOKEN}" \ + curl -sS -X DELETE -H "Authorization: token ${MOKOGIT_TOKEN}" \ "${API}/actions/runs/${RUN_ID}" 2>/dev/null || true DELETED=$((DELETED + 1)) done diff --git a/.mokogit/workflows/issue-branch.yml b/.mokogit/workflows/issue-branch.yml index 796c8e18..d832b683 100644 --- a/.mokogit/workflows/issue-branch.yml +++ b/.mokogit/workflows/issue-branch.yml @@ -19,7 +19,7 @@ permissions: issues: write env: - MOKOGITEA_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} + MOKOGIT_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} jobs: create-branch: @@ -28,8 +28,8 @@ jobs: steps: - name: Create branch and comment run: | - TOKEN="${{ secrets.MOKOGITEA_TOKEN }}" - API="${MOKOGITEA_URL}/api/v1/repos/${{ github.repository }}" + TOKEN="${{ secrets.MOKOGIT_TOKEN }}" + API="${MOKOGIT_URL}/api/v1/repos/${{ github.repository }}" ISSUE_NUM="${{ github.event.issue.number }}" ISSUE_TITLE="${{ github.event.issue.title }}" @@ -58,7 +58,7 @@ jobs: echo "Created branch: ${BRANCH}" # Comment on issue with branch link - REPO_URL="${MOKOGITEA_URL}/${{ github.repository }}" + REPO_URL="${MOKOGIT_URL}/${{ github.repository }}" BODY="Branch created: [\`${BRANCH}\`](${REPO_URL}/src/branch/${BRANCH})\n\n\`\`\`bash\ngit fetch origin\ngit checkout ${BRANCH}\n\`\`\`" curl -sf -X POST \ diff --git a/.mokogit/workflows/pr-check.yml b/.mokogit/workflows/pr-check.yml index 72d532d5..e9156f31 100644 --- a/.mokogit/workflows/pr-check.yml +++ b/.mokogit/workflows/pr-check.yml @@ -502,12 +502,12 @@ jobs: steps: - name: Trigger RC pre-release env: - MOKOGITEA_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} + MOKOGIT_TOKEN: ${{ secrets.MOKOGIT_TOKEN }} REPO: ${{ github.repository }} BRANCH: ${{ github.head_ref }} - MOKOGITEA_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} + MOKOGIT_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} run: | - curl -s -X POST "${MOKOGITEA_URL}/api/v1/repos/${REPO}/actions/workflows/pre-release.yml/dispatches" -H "Authorization: token ${MOKOGITEA_TOKEN}" -H "Content-Type: application/json" -d "{\"ref\":\"${BRANCH}\",\"inputs\":{\"stability\":\"release-candidate\"}}" + curl -s -X POST "${MOKOGIT_URL}/api/v1/repos/${REPO}/actions/workflows/pre-release.yml/dispatches" -H "Authorization: token ${MOKOGIT_TOKEN}" -H "Content-Type: application/json" -d "{\"ref\":\"${BRANCH}\",\"inputs\":{\"stability\":\"release-candidate\"}}" echo "### Pre-Release" >> $GITHUB_STEP_SUMMARY echo "Triggered RC build on branch \`${BRANCH}\`" >> $GITHUB_STEP_SUMMARY diff --git a/.mokogit/workflows/pr-metadata-check.yml b/.mokogit/workflows/pr-metadata-check.yml index a706c41b..40ec0fc5 100644 --- a/.mokogit/workflows/pr-metadata-check.yml +++ b/.mokogit/workflows/pr-metadata-check.yml @@ -20,7 +20,7 @@ permissions: contents: read env: - MOKOGITEA_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} + MOKOGIT_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} GITEA_ORG: ${{ vars.GITEA_ORG || github.repository_owner }} GITEA_REPO: ${{ vars.GITEA_REPO || github.event.repository.name }} @@ -37,7 +37,7 @@ jobs: - name: Setup MokoCLI tools env: - MOKO_CLONE_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} + MOKO_CLONE_TOKEN: ${{ secrets.MOKOGIT_TOKEN }} MOKO_CLONE_HOST: git.mokoconsulting.tech/MokoConsulting run: | if [ -f /opt/mokocli/cli/joomla_metadata_validate.php ] && [ -f /opt/mokocli/vendor/autoload.php ]; then @@ -57,14 +57,14 @@ jobs: - name: Validate metadata against Joomla manifest env: - MOKOGITEA_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} + MOKOGIT_TOKEN: ${{ secrets.MOKOGIT_TOKEN }} run: | php ${MOKO_CLI}/joomla_metadata_validate.php \ --path . \ - --token "${MOKOGITEA_TOKEN}" \ + --token "${MOKOGIT_TOKEN}" \ --org "${GITEA_ORG}" \ --repo "${GITEA_REPO}" \ - --api-base "${MOKOGITEA_URL}/api/v1" \ + --api-base "${MOKOGIT_URL}/api/v1" \ --ci if [ $? -ne 0 ]; then diff --git a/.mokogit/workflows/pre-release.yml b/.mokogit/workflows/pre-release.yml index 2c4d3c94..7f7bcc8d 100644 --- a/.mokogit/workflows/pre-release.yml +++ b/.mokogit/workflows/pre-release.yml @@ -61,7 +61,7 @@ jobs: uses: actions/checkout@v4 with: fetch-depth: 0 - token: ${{ secrets.MOKOGITEA_TOKEN }} + token: ${{ secrets.MOKOGIT_TOKEN }} ref: ${{ github.ref_name }} submodules: recursive @@ -71,7 +71,7 @@ jobs: - name: Setup MokoCLI tools env: - MOKO_CLONE_TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} + MOKO_CLONE_TOKEN: ${{ secrets.MOKOGIT_TOKEN }} MOKO_CLONE_HOST: git.mokoconsulting.tech/MokoConsulting run: | # Use pre-installed /opt/mokocli if available (updated by cron every 6h) @@ -158,7 +158,7 @@ jobs: # Commit version bump git config --local user.email "mokogitea-actions[bot]@mokoconsulting.tech" git config --local user.name "mokogitea-actions[bot]" - git remote set-url origin "https://x-access-token:${{ secrets.MOKOGITEA_TOKEN }}@git.mokoconsulting.tech/${{ github.repository }}.git" + git remote set-url origin "https://x-access-token:${{ secrets.MOKOGIT_TOKEN }}@git.mokoconsulting.tech/${{ github.repository }}.git" git add -A git diff --cached --quiet || { git commit -m "chore(version): pre-release bump to ${VERSION} [skip ci]" @@ -194,7 +194,7 @@ jobs: API_BASE="${GITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" php ${MOKO_CLI}/release_create.php \ --path . --version "$VERSION" --tag "$TAG" \ - --token "${{ secrets.MOKOGITEA_TOKEN }}" --api-base "$API_BASE" \ + --token "${{ secrets.MOKOGIT_TOKEN }}" --api-base "$API_BASE" \ --repo "${GITEA_REPO}" --branch "${{ github.ref_name }}" --prerelease - name: Update release notes from CHANGELOG.md @@ -213,7 +213,7 @@ jobs: fi # Update release body via API - RELEASE_ID=$(curl -sf -H "Authorization: token ${{ secrets.MOKOGITEA_TOKEN }}" \ + RELEASE_ID=$(curl -sf -H "Authorization: token ${{ secrets.MOKOGIT_TOKEN }}" \ "${API_BASE}/releases/tags/${TAG}" | python3 -c "import json,sys; print(json.load(sys.stdin).get('id',''))" 2>/dev/null || true) if [ -n "$RELEASE_ID" ]; then @@ -225,7 +225,7 @@ jobs: '${API_BASE}/releases/${RELEASE_ID}', data=payload, method='PATCH', headers={ - 'Authorization': 'token ${{ secrets.MOKOGITEA_TOKEN }}', + 'Authorization': 'token ${{ secrets.MOKOGIT_TOKEN }}', 'Content-Type': 'application/json' }) urllib.request.urlopen(req) @@ -242,7 +242,7 @@ jobs: API_BASE="${GITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" php ${MOKO_CLI}/release_package.php \ --path . --version "$VERSION" --tag "$TAG" \ - --token "${{ secrets.MOKOGITEA_TOKEN }}" --api-base "$API_BASE" \ + --token "${{ secrets.MOKOGIT_TOKEN }}" --api-base "$API_BASE" \ --repo "${GITEA_REPO}" --output /tmp || true # updates.xml is generated dynamically by MokoGitea license server @@ -253,7 +253,7 @@ jobs: continue-on-error: true run: | API_BASE="${GITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" - TOKEN="${{ secrets.MOKOGITEA_TOKEN }}" + TOKEN="${{ secrets.MOKOGIT_TOKEN }}" php ${MOKO_CLI}/release_cascade.php \ --stability "${{ steps.meta.outputs.stability }}" \ diff --git a/.mokogit/workflows/rc-revert.yml b/.mokogit/workflows/rc-revert.yml index 39280744..10535b15 100644 --- a/.mokogit/workflows/rc-revert.yml +++ b/.mokogit/workflows/rc-revert.yml @@ -33,7 +33,7 @@ jobs: BRANCH: ${{ github.event.pull_request.head.ref }} REPO: ${{ github.repository }} GITEA_URL: ${{ vars.GITEA_URL || 'https://git.mokoconsulting.tech' }} - TOKEN: ${{ secrets.MOKOGITEA_TOKEN }} + TOKEN: ${{ secrets.MOKOGIT_TOKEN }} run: | set -euo pipefail # BRANCH is attacker-controlled (PR head ref). Strict allowlist before ANY use. diff --git a/.mokogit/workflows/repo-health.yml b/.mokogit/workflows/repo-health.yml index 12ea115a..47cdaf42 100644 --- a/.mokogit/workflows/repo-health.yml +++ b/.mokogit/workflows/repo-health.yml @@ -77,7 +77,7 @@ jobs: - name: Check actor permission (admin only) id: perm env: - TOKEN: ${{ secrets.MOKOGITEA_TOKEN || github.token }} + TOKEN: ${{ secrets.MOKOGIT_TOKEN || github.token }} REPO: ${{ github.repository }} ACTOR: ${{ github.actor }} run: | diff --git a/.mokogit/workflows/version-set.yml b/.mokogit/workflows/version-set.yml index c9874067..7199a5f8 100644 --- a/.mokogit/workflows/version-set.yml +++ b/.mokogit/workflows/version-set.yml @@ -48,7 +48,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 with: - token: ${{ secrets.MOKOGITEA_TOKEN || github.token }} + token: ${{ secrets.MOKOGIT_TOKEN || github.token }} ref: ${{ inputs.branch || github.ref }} fetch-depth: 1 -- 2.52.0 From 3765c99769b92a211f0f1df704ddd3786ce269a7 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Thu, 16 Jul 2026 07:38:56 -0500 Subject: [PATCH 09/13] fix(db): reconcile mokosuitebackup_profiles schema with update history Joomla's Database maintenance view reported "One Problem" on MokoSuiteBackup with four sub-issues in #__mokosuitebackup_profiles. All were schema-definition drift, not data corruption (confirmed against Joomla 6.1 core: ChangeSet/MysqlChangeItem check each update statement independently, with no cross-file supersession). - install.mysql.sql: restore the legacy sftp_* columns so the old ADD COLUMN checks (01.35.00/01.36.00) pass on fresh installs. The data itself lives in #__mokosuitebackup_remotes; these columns are retained only for checker consistency with upgraded sites. - 01.01.01.sql: declare include_mokorestore as VARCHAR(20) (was TINYINT, later widened in 01.39.00). Without supersession the stale TINYINT check fails forever against the now-VARCHAR column. - 01.39.00.sql: MODIFY COLUMN -> MODIFY. The checker misparses "MODIFY COLUMN x" as column-name="COLUMN". - 02.64.05.sql: idempotent MODIFY to guarantee VARCHAR on stragglers; version bump 02.64.04 -> 02.64.05 with its matching update file. Claude-Session: https://claude.ai/code/session_01WbGBN9VyRK61zczYWcCQ2i --- CHANGELOG.md | 3 +++ .../packages/com_mokosuitebackup/mokosuitebackup.xml | 2 +- .../com_mokosuitebackup/sql/install.mysql.sql | 11 +++++++++++ .../sql/updates/mysql/01.01.01.sql | 6 +++++- .../sql/updates/mysql/01.39.00.sql | 5 ++++- .../sql/updates/mysql/02.64.05.sql | 6 ++++++ 6 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 source/packages/com_mokosuitebackup/sql/updates/mysql/02.64.05.sql diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e74cf38..b4db5f5e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ # Changelog ## [Unreleased] +### Fixed +- Database view "One Problem" on MokoSuiteBackup: reconciled `#__mokosuitebackup_profiles` schema with the update-file history. Restored the legacy `sftp_*` columns to `install.mysql.sql`, corrected the stale `TINYINT` definition in `01.01.01.sql` to match the final `VARCHAR(20)` type, and fixed the `MODIFY COLUMN` parser trip-up in `01.39.00.sql`. Joomla's schema checker now reports no problems. + ## [02.64.00] --- 2026-07-14 ## [02.64.00] --- 2026-07-14 diff --git a/source/packages/com_mokosuitebackup/mokosuitebackup.xml b/source/packages/com_mokosuitebackup/mokosuitebackup.xml index 8f972219..1226ff8a 100644 --- a/source/packages/com_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/com_mokosuitebackup/mokosuitebackup.xml @@ -17,7 +17,7 @@ display label there. --> MokoSuiteBackup - 02.64.04 + 02.64.05 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/com_mokosuitebackup/sql/install.mysql.sql b/source/packages/com_mokosuitebackup/sql/install.mysql.sql index a2c23fd5..6226f141 100644 --- a/source/packages/com_mokosuitebackup/sql/install.mysql.sql +++ b/source/packages/com_mokosuitebackup/sql/install.mysql.sql @@ -28,6 +28,17 @@ CREATE TABLE IF NOT EXISTS `#__mokosuitebackup_profiles` ( `ntfy_topic` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'ntfy topic name', `ntfy_server` VARCHAR(512) NOT NULL DEFAULT 'https://ntfy.sh' COMMENT 'ntfy server URL', `ntfy_token` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'ntfy access token (optional)', + -- Legacy per-profile SFTP columns. Superseded by #__mokosuitebackup_remotes + -- (JSON params) in 01.35.00/01.36.00 + 01.41.00. Retained here so the schema + -- checker's ADD COLUMN checks (01.35.00/01.36.00) pass on fresh installs. + `sftp_host` VARCHAR(255) NOT NULL DEFAULT '', + `sftp_port` INT(5) UNSIGNED NOT NULL DEFAULT 22, + `sftp_username` VARCHAR(255) NOT NULL DEFAULT '', + `sftp_auth_type` VARCHAR(20) NOT NULL DEFAULT 'key', + `sftp_password` VARCHAR(255) NOT NULL DEFAULT '', + `sftp_key_data` MEDIUMTEXT, + `sftp_passphrase` VARCHAR(255) NOT NULL DEFAULT '', + `sftp_path` VARCHAR(512) NOT NULL DEFAULT '/backups', `published` TINYINT(1) NOT NULL DEFAULT 1, `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', diff --git a/source/packages/com_mokosuitebackup/sql/updates/mysql/01.01.01.sql b/source/packages/com_mokosuitebackup/sql/updates/mysql/01.01.01.sql index 0c6a4735..3c0a4435 100644 --- a/source/packages/com_mokosuitebackup/sql/updates/mysql/01.01.01.sql +++ b/source/packages/com_mokosuitebackup/sql/updates/mysql/01.01.01.sql @@ -1 +1,5 @@ -ALTER TABLE `#__mokosuitebackup_profiles` CHANGE `include_kickstart` `include_mokorestore` TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'Include MokoRestore standalone restore script in archive'; +-- Renames include_kickstart -> include_mokorestore. Declared VARCHAR(20) here to +-- match the final column type (widened from TINYINT in 01.39.00). Joomla's schema +-- checker does no cross-file supersession, so an earlier TINYINT definition would +-- be flagged forever against the now-VARCHAR column. +ALTER TABLE `#__mokosuitebackup_profiles` CHANGE `include_kickstart` `include_mokorestore` VARCHAR(20) NOT NULL DEFAULT '0' COMMENT 'Include MokoRestore standalone restore script in archive'; diff --git a/source/packages/com_mokosuitebackup/sql/updates/mysql/01.39.00.sql b/source/packages/com_mokosuitebackup/sql/updates/mysql/01.39.00.sql index e7820b06..4f22a1d0 100644 --- a/source/packages/com_mokosuitebackup/sql/updates/mysql/01.39.00.sql +++ b/source/packages/com_mokosuitebackup/sql/updates/mysql/01.39.00.sql @@ -1,5 +1,8 @@ -- MokoSuiteBackup 01.39.00 — Change include_mokorestore from TINYINT to VARCHAR -- Needed to support 'standalone' value alongside 0/1 +-- NB: MySQL syntax is `MODIFY `, not `MODIFY COLUMN `. Joomla's schema +-- checker parses `MODIFY COLUMN x` as column-name="COLUMN", type="x", producing a +-- bogus "wrong type for column 'COLUMN'" problem. Keep it as bare MODIFY. ALTER TABLE `#__mokosuitebackup_profiles` - MODIFY COLUMN `include_mokorestore` VARCHAR(20) NOT NULL DEFAULT '0'; + MODIFY `include_mokorestore` VARCHAR(20) NOT NULL DEFAULT '0'; diff --git a/source/packages/com_mokosuitebackup/sql/updates/mysql/02.64.05.sql b/source/packages/com_mokosuitebackup/sql/updates/mysql/02.64.05.sql new file mode 100644 index 00000000..35e91a50 --- /dev/null +++ b/source/packages/com_mokosuitebackup/sql/updates/mysql/02.64.05.sql @@ -0,0 +1,6 @@ +-- MokoSuiteBackup 02.64.05 — Schema-checker reconciliation for #__mokosuitebackup_profiles +-- Ensures include_mokorestore is VARCHAR(20) on any install (idempotent; no-op if +-- already VARCHAR). Paired with retro-fixes to 01.01.01/01.39.00 and the legacy +-- sftp_* columns restored to install.mysql.sql so the Database view reports no problems. +ALTER TABLE `#__mokosuitebackup_profiles` + MODIFY `include_mokorestore` VARCHAR(20) NOT NULL DEFAULT '0'; -- 2.52.0 From 7425f9d204f1748448d23577bf79e63c8654ebba Mon Sep 17 00:00:00 2001 From: "mokogitea-actions[bot]" Date: Thu, 16 Jul 2026 12:40:15 +0000 Subject: [PATCH 10/13] chore(version): pre-release bump to 02.64.06-dev [skip ci] --- .mokogit/workflows/issue-branch.yml | 2 +- SECURITY.md | 2 +- source/packages/com_mokosuitebackup/mokosuitebackup.xml | 2 +- .../packages/com_mokosuitebackup/sql/updates/mysql/02.64.06.sql | 1 + .../mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml | 2 +- .../packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml | 2 +- source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml | 2 +- source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml | 2 +- .../packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml | 2 +- source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml | 2 +- source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml | 2 +- .../plg_webservices_mokosuitebackup/mokosuitebackup.xml | 2 +- source/pkg_mokosuitebackup.xml | 2 +- 13 files changed, 13 insertions(+), 12 deletions(-) create mode 100644 source/packages/com_mokosuitebackup/sql/updates/mysql/02.64.06.sql diff --git a/.mokogit/workflows/issue-branch.yml b/.mokogit/workflows/issue-branch.yml index d832b683..bd196234 100644 --- a/.mokogit/workflows/issue-branch.yml +++ b/.mokogit/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: MokoGitea.Workflow # INGROUP: mokocli.Automation -# VERSION: 02.64.04 +# VERSION: 02.64.06 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/SECURITY.md b/SECURITY.md index 0689d332..aca9cc2e 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -23,7 +23,7 @@ DEFGROUP: Template-Joomla INGROUP: Template-Joomla.Documentation REPO: https://git.mokoconsulting.tech/MokoConsulting/Template-Joomla PATH: /SECURITY.md -VERSION: 02.64.04 +VERSION: 02.64.06 BRIEF: Security vulnerability reporting and handling policy --> diff --git a/source/packages/com_mokosuitebackup/mokosuitebackup.xml b/source/packages/com_mokosuitebackup/mokosuitebackup.xml index 1226ff8a..dd27b138 100644 --- a/source/packages/com_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/com_mokosuitebackup/mokosuitebackup.xml @@ -17,7 +17,7 @@ display label there. --> MokoSuiteBackup - 02.64.05 + 02.64.06 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/com_mokosuitebackup/sql/updates/mysql/02.64.06.sql b/source/packages/com_mokosuitebackup/sql/updates/mysql/02.64.06.sql new file mode 100644 index 00000000..49b619b2 --- /dev/null +++ b/source/packages/com_mokosuitebackup/sql/updates/mysql/02.64.06.sql @@ -0,0 +1 @@ +/* 02.64.06 — no schema changes */ diff --git a/source/packages/mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml b/source/packages/mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml index 16275875..b0595f12 100644 --- a/source/packages/mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml +++ b/source/packages/mod_mokosuitebackup_cpanel/mod_mokosuitebackup_cpanel.xml @@ -8,7 +8,7 @@ --> Module - MokoSuiteBackup - cPanel - 02.64.04 + 02.64.06 2026-06-23 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml index 8882538b..9b0c1b9e 100644 --- a/source/packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Action Log - MokoSuiteBackup - 02.64.04 + 02.64.06 2026-06-04 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml index a0cc65cf..89157c58 100644 --- a/source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Console - MokoSuiteBackup - 02.64.04 + 02.64.06 2026-06-04 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml index a52794ca..f317643f 100644 --- a/source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Content - MokoSuiteBackup - 02.64.04 + 02.64.06 2026-06-04 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml index 6447f467..e0dc6532 100644 --- a/source/packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml @@ -1,7 +1,7 @@ Quick Icon - MokoSuiteBackup - 02.64.04 + 02.64.06 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml index 4719961a..555fe385 100644 --- a/source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> System - MokoSuiteBackup - 02.64.04 + 02.64.06 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml index 0c7cd5aa..19555752 100644 --- a/source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Task - MokoSuiteBackup - 02.64.04 + 02.64.06 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/packages/plg_webservices_mokosuitebackup/mokosuitebackup.xml b/source/packages/plg_webservices_mokosuitebackup/mokosuitebackup.xml index 10952876..5fccc301 100644 --- a/source/packages/plg_webservices_mokosuitebackup/mokosuitebackup.xml +++ b/source/packages/plg_webservices_mokosuitebackup/mokosuitebackup.xml @@ -7,7 +7,7 @@ --> Web Services - MokoSuiteBackup - 02.64.04 + 02.64.06 2026-06-02 Moko Consulting hello@mokoconsulting.tech diff --git a/source/pkg_mokosuitebackup.xml b/source/pkg_mokosuitebackup.xml index 229ced95..6a36cda2 100644 --- a/source/pkg_mokosuitebackup.xml +++ b/source/pkg_mokosuitebackup.xml @@ -8,7 +8,7 @@ Package - MokoSuiteBackup mokosuitebackup - 02.64.04 + 02.64.06 2026-06-02 Moko Consulting hello@mokoconsulting.tech -- 2.52.0 From b4813903556e48eacd0a7eddbe43d7b2336da898 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Thu, 16 Jul 2026 07:58:48 -0500 Subject: [PATCH 11/13] fix(db): retire sftp_* checker demands instead of re-adding columns MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Review of PR #278 caught that script.php postflight (dropLegacyRemoteColumns) and 02.52.25.sql deliberately purge the legacy sftp_* columns on every install/update, so re-adding them to install.mysql.sql was futile — postflight drops them right back, leaving the ADD-COLUMN checks (01.35.00/01.36.00) still failing. Corrected approach: - Revert the install.mysql.sql sftp_* block. - Rewrite the retired sftp_* ADD COLUMN statements in 01.35.00/01.36.00 as bare ADD. MySQL treats ADD and ADD COLUMN identically, but Joomla's MysqlChangeItem only builds an ADD-COLUMN check for the `ADD COLUMN` form; bare `ADD` is skipped. Upgrades still add the columns (so the 01.41.00 migration works) and 02.52.25/postflight still drop them, so they stay absent at rest and the checker no longer flags them. include_mokorestore fixes (01.01.01 VARCHAR, 01.39.00 MODIFY) and the 02.64.05 bump are unchanged. Claude-Session: https://claude.ai/code/session_01WbGBN9VyRK61zczYWcCQ2i --- CHANGELOG.md | 2 +- .../com_mokosuitebackup/sql/install.mysql.sql | 11 ---------- .../sql/updates/mysql/01.35.00.sql | 22 ++++++++++++------- .../sql/updates/mysql/01.36.00.sql | 6 +++-- 4 files changed, 19 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b4db5f5e..d05c63ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ## [Unreleased] ### Fixed -- Database view "One Problem" on MokoSuiteBackup: reconciled `#__mokosuitebackup_profiles` schema with the update-file history. Restored the legacy `sftp_*` columns to `install.mysql.sql`, corrected the stale `TINYINT` definition in `01.01.01.sql` to match the final `VARCHAR(20)` type, and fixed the `MODIFY COLUMN` parser trip-up in `01.39.00.sql`. Joomla's schema checker now reports no problems. +- Database view "One Problem" on MokoSuiteBackup: reconciled the `#__mokosuitebackup_profiles` schema-checker output with the update-file history. Corrected the stale `TINYINT` definition in `01.01.01.sql` to the final `VARCHAR(20)` type, fixed the `MODIFY COLUMN` parser trip-up in `01.39.00.sql`, and rewrote the retired `sftp_*` `ADD COLUMN` statements in `01.35.00.sql`/`01.36.00.sql` as bare `ADD` so Joomla's checker no longer demands columns that `02.52.25` and the postflight purge deliberately remove. Joomla's schema checker now reports no problems. ## [02.64.00] --- 2026-07-14 diff --git a/source/packages/com_mokosuitebackup/sql/install.mysql.sql b/source/packages/com_mokosuitebackup/sql/install.mysql.sql index 6226f141..a2c23fd5 100644 --- a/source/packages/com_mokosuitebackup/sql/install.mysql.sql +++ b/source/packages/com_mokosuitebackup/sql/install.mysql.sql @@ -28,17 +28,6 @@ CREATE TABLE IF NOT EXISTS `#__mokosuitebackup_profiles` ( `ntfy_topic` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'ntfy topic name', `ntfy_server` VARCHAR(512) NOT NULL DEFAULT 'https://ntfy.sh' COMMENT 'ntfy server URL', `ntfy_token` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'ntfy access token (optional)', - -- Legacy per-profile SFTP columns. Superseded by #__mokosuitebackup_remotes - -- (JSON params) in 01.35.00/01.36.00 + 01.41.00. Retained here so the schema - -- checker's ADD COLUMN checks (01.35.00/01.36.00) pass on fresh installs. - `sftp_host` VARCHAR(255) NOT NULL DEFAULT '', - `sftp_port` INT(5) UNSIGNED NOT NULL DEFAULT 22, - `sftp_username` VARCHAR(255) NOT NULL DEFAULT '', - `sftp_auth_type` VARCHAR(20) NOT NULL DEFAULT 'key', - `sftp_password` VARCHAR(255) NOT NULL DEFAULT '', - `sftp_key_data` MEDIUMTEXT, - `sftp_passphrase` VARCHAR(255) NOT NULL DEFAULT '', - `sftp_path` VARCHAR(512) NOT NULL DEFAULT '/backups', `published` TINYINT(1) NOT NULL DEFAULT 1, `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', diff --git a/source/packages/com_mokosuitebackup/sql/updates/mysql/01.35.00.sql b/source/packages/com_mokosuitebackup/sql/updates/mysql/01.35.00.sql index 0fcc6075..0cec1abc 100644 --- a/source/packages/com_mokosuitebackup/sql/updates/mysql/01.35.00.sql +++ b/source/packages/com_mokosuitebackup/sql/updates/mysql/01.35.00.sql @@ -1,10 +1,16 @@ -- MokoSuiteBackup 01.35.00 — SFTP support with key file storage - +-- +-- These columns are legacy: 01.41.00 migrates them into #__mokosuitebackup_remotes +-- and 02.52.25 + the postflight dropLegacyRemoteColumns() purge them, so they do not +-- exist at rest. Written as bare `ADD` (not `ADD COLUMN`) on purpose: MySQL treats +-- the two identically, but Joomla's schema checker only builds an ADD-COLUMN check +-- for the `ADD COLUMN` form. Bare `ADD` is skipped by the checker, so it no longer +-- reports these retired columns as "missing" while the upgrade still adds them. ALTER TABLE `#__mokosuitebackup_profiles` - ADD COLUMN `sftp_host` VARCHAR(255) NOT NULL DEFAULT '' AFTER `ftp_ssl`, - ADD COLUMN `sftp_port` INT(5) UNSIGNED NOT NULL DEFAULT 22 AFTER `sftp_host`, - ADD COLUMN `sftp_username` VARCHAR(255) NOT NULL DEFAULT '' AFTER `sftp_port`, - ADD COLUMN `sftp_password` VARCHAR(255) NOT NULL DEFAULT '' AFTER `sftp_username`, - ADD COLUMN `sftp_key_data` MEDIUMTEXT AFTER `sftp_password`, - ADD COLUMN `sftp_passphrase` VARCHAR(255) NOT NULL DEFAULT '' AFTER `sftp_key_data`, - ADD COLUMN `sftp_path` VARCHAR(512) NOT NULL DEFAULT '/backups' AFTER `sftp_passphrase`; + ADD `sftp_host` VARCHAR(255) NOT NULL DEFAULT '' AFTER `ftp_ssl`, + ADD `sftp_port` INT(5) UNSIGNED NOT NULL DEFAULT 22 AFTER `sftp_host`, + ADD `sftp_username` VARCHAR(255) NOT NULL DEFAULT '' AFTER `sftp_port`, + ADD `sftp_password` VARCHAR(255) NOT NULL DEFAULT '' AFTER `sftp_username`, + ADD `sftp_key_data` MEDIUMTEXT AFTER `sftp_password`, + ADD `sftp_passphrase` VARCHAR(255) NOT NULL DEFAULT '' AFTER `sftp_key_data`, + ADD `sftp_path` VARCHAR(512) NOT NULL DEFAULT '/backups' AFTER `sftp_passphrase`; diff --git a/source/packages/com_mokosuitebackup/sql/updates/mysql/01.36.00.sql b/source/packages/com_mokosuitebackup/sql/updates/mysql/01.36.00.sql index b8b65657..6388359b 100644 --- a/source/packages/com_mokosuitebackup/sql/updates/mysql/01.36.00.sql +++ b/source/packages/com_mokosuitebackup/sql/updates/mysql/01.36.00.sql @@ -1,4 +1,6 @@ -- MokoSuiteBackup 01.36.00 — SFTP auth type column - +-- +-- Legacy column (see 01.35.00). Bare `ADD` so Joomla's schema checker skips it — +-- the column is purged by 02.52.25 + postflight and must not exist at rest. ALTER TABLE `#__mokosuitebackup_profiles` - ADD COLUMN `sftp_auth_type` VARCHAR(20) NOT NULL DEFAULT 'key' AFTER `sftp_username`; + ADD `sftp_auth_type` VARCHAR(20) NOT NULL DEFAULT 'key' AFTER `sftp_username`; -- 2.52.0 From 15992574c3b7554e3fbc3c9f71c667dc264ac288 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Thu, 16 Jul 2026 08:44:26 -0500 Subject: [PATCH 12/13] feat(ui): unify backup/restore progress modals with the runbackup theme Gives the stepped backup-progress and restore-progress modals in the backups view the same full-screen black, big-text, Atum-coloured progress-bar look as the view=runbackup screen, so every backup progress surface matches. - New media/css/backup-progress.css: black is scoped to .msb-progress-modal (not html/body), reuses the runbackup .msb-rb-progress/.msb-rb-bar bar with animated/success/danger states. - Registered com_mokosuitebackup.backup-progress asset; loaded in the backups view via addStyleSheet (useStyle does not emit for this component). - Both modals: full-screen dialog, big heading, big status text, shared bar. - setBarState() drives animated -> green(complete)/red(fail) for both bars. Claude-Session: https://claude.ai/code/session_01WbGBN9VyRK61zczYWcCQ2i --- .../media/css/backup-progress.css | 139 ++++++++++++++++++ .../media/joomla.asset.json | 5 + .../tmpl/backups/default.php | 66 +++++++-- 3 files changed, 194 insertions(+), 16 deletions(-) create mode 100644 source/packages/com_mokosuitebackup/media/css/backup-progress.css diff --git a/source/packages/com_mokosuitebackup/media/css/backup-progress.css b/source/packages/com_mokosuitebackup/media/css/backup-progress.css new file mode 100644 index 00000000..9dfdf671 --- /dev/null +++ b/source/packages/com_mokosuitebackup/media/css/backup-progress.css @@ -0,0 +1,139 @@ +/* + * @package MokoSuiteBackup + * @subpackage com_mokosuitebackup + * @copyright Copyright (C) 2026 Moko Consulting. All rights reserved. + * @license GNU General Public License version 3 or later; see LICENSE + * + * Full-screen backup/restore progress modals (backups view). Gives the stepped + * backup and restore modals the same full-black, big-text, Atum-coloured + * progress-bar treatment as the runbackup screen (media/css/runbackup.css), so + * all backup progress surfaces share one look. The black is scoped to the modal + * (via .msb-progress-modal) rather than html/body, so the list page behind it is + * unaffected until the modal opens. + */ + +/* Accent colours pulled from the Atum admin template's own custom properties, + with Bootstrap and then a literal as progressive fallbacks — identical to the + runbackup screen so the two match whatever theme the site runs. */ +.msb-progress-modal { + --msb-accent: var(--template-link-color, var(--bs-link-color, #2a69b8)); + --msb-accent2: var(--template-special-color, var(--msb-accent)); + --msb-success: var(--template-success-color, var(--bs-success, #2f7d32)); + --msb-danger: var(--template-danger-color, var(--bs-danger, #c52128)); + --msb-track: var(--template-bg-light, var(--bs-gray-200, #edf0f5)); +} + +/* Full-screen black takeover, mirroring the runbackup page. */ +.msb-progress-modal .modal-dialog { + max-width: 100%; + width: 100%; + min-height: 100%; + margin: 0; +} + +.msb-progress-modal .modal-content { + min-height: 100vh; + border: 0; + border-radius: 0; + background-color: #000; + color: #fff; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + padding: 1.5rem; +} + +.msb-progress-modal .modal-header { + border: 0; + padding: 0 0 1.5rem; + justify-content: center; + text-align: center; +} + +/* Big heading, like the runbackup title. */ +.msb-progress-modal .modal-title { + color: #fff; + font-size: clamp(1.75rem, 4vw, 2.75rem); + font-weight: 700; + letter-spacing: .01em; +} + +.msb-progress-modal .modal-body { + width: 100%; + max-width: 680px; + padding: 0; + text-align: center; +} + +.msb-progress-modal .msb-pm-status { + color: #fff; + font-size: 1.25rem; + margin: 1rem 0 .25rem; +} + +.msb-progress-modal .msb-pm-phase { + color: rgba(255, 255, 255, .6); + font-size: .95rem; + margin: 0; +} + +.msb-progress-modal .msb-pm-warn { + color: #ffd23f; + font-weight: 600; + font-size: 1rem; + margin-bottom: 1.25rem; +} + +/* Progress bar — mirrors runbackup.css .msb-rb-progress/.msb-rb-bar. */ +.msb-progress-modal .msb-rb-progress { + height: 2.75rem; + background: var(--msb-track); + border-radius: .35rem; + overflow: hidden; +} + +.msb-progress-modal .msb-rb-bar { + position: relative; + height: 100%; + width: 0; + display: flex; + align-items: center; + justify-content: center; + color: #fff; + font-weight: 600; + font-size: 1rem; + white-space: nowrap; + background-color: var(--msb-accent); + background-image: linear-gradient(90deg, var(--msb-accent), var(--msb-accent2)); + transition: width .35s ease; +} + +.msb-progress-modal .msb-rb-bar.is-animated::after { + content: ""; + position: absolute; + inset: 0; + background-image: linear-gradient(45deg, rgba(255, 255, 255, .18) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .18) 50%, rgba(255, 255, 255, .18) 75%, transparent 75%, transparent); + background-size: 1rem 1rem; + animation: msb-pm-stripes 1s linear infinite; +} + +.msb-progress-modal .msb-rb-bar.is-success { + background-image: none; + background-color: var(--msb-success); +} + +.msb-progress-modal .msb-rb-bar.is-danger { + background-image: none; + background-color: var(--msb-danger); +} + +@keyframes msb-pm-stripes { + from { + background-position: 1rem 0; + } + + to { + background-position: 0 0; + } +} diff --git a/source/packages/com_mokosuitebackup/media/joomla.asset.json b/source/packages/com_mokosuitebackup/media/joomla.asset.json index 12194cba..3d17df66 100644 --- a/source/packages/com_mokosuitebackup/media/joomla.asset.json +++ b/source/packages/com_mokosuitebackup/media/joomla.asset.json @@ -14,6 +14,11 @@ "name": "com_mokosuitebackup.runbackup", "type": "style", "uri": "com_mokosuitebackup/css/runbackup.css" + }, + { + "name": "com_mokosuitebackup.backup-progress", + "type": "style", + "uri": "com_mokosuitebackup/css/backup-progress.css" } ] } diff --git a/source/packages/com_mokosuitebackup/tmpl/backups/default.php b/source/packages/com_mokosuitebackup/tmpl/backups/default.php index 53fe54c6..d5b56220 100644 --- a/source/packages/com_mokosuitebackup/tmpl/backups/default.php +++ b/source/packages/com_mokosuitebackup/tmpl/backups/default.php @@ -16,8 +16,14 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\Layout\LayoutHelper; use Joomla\CMS\Router\Route; use Joomla\CMS\Session\Session; +use Joomla\CMS\Uri\Uri; HTMLHelper::_('behavior.multiselect'); + +// Full-black progress theme for the backup/restore modals (matches view=runbackup). +// Loaded directly rather than via useStyle(), which does not emit a link for this +// component (same pattern as the runbackup screen). +$this->getDocument()->addStyleSheet(Uri::root(true) . '/media/com_mokosuitebackup/css/backup-progress.css'); $user = Factory::getApplication()->getIdentity(); $canDownload = $user->authorise('mokosuitebackup.backup.download', 'com_mokosuitebackup'); @@ -135,22 +141,25 @@ $listDirn = $this->escape($this->state->get('list.direction')); -