Commit Graph

337 Commits

Author SHA1 Message Date
gitea-actions[bot] ce99cebf80 chore(version): auto-bump patch 01.25.03-dev [skip ci] 2026-06-21 22:36:12 +00:00
Jonathan Miller 0a4f896f31 Merge remote-tracking branch 'origin/feature/47-backup-status-helper' into feature/47-backup-status-helper
Joomla: Extension CI / Tests (PHP 8.2) (pull_request) Blocked by required conditions
Joomla: Extension CI / Tests (PHP 8.3) (pull_request) Blocked by required conditions
Joomla: Extension CI / PHPStan Analysis (pull_request) Blocked by required conditions
Joomla: Extension CI / Build RC Pre-Release (pull_request) Blocked by required conditions
Universal: PR Check / Build RC Package (pull_request) Blocked by required conditions
Universal: PR Check / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Scripts governance (pull_request) Blocked by required conditions
Generic: Repo Health / Repository health (pull_request) Blocked by required conditions
Generic: Repo Health / Report Issues (pull_request) Blocked by required conditions
Universal: PR Check / Branch Policy (pull_request) Failing after 2s
Generic: Repo Health / Access control (pull_request) Successful in 2s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Joomla: Extension CI / Release Readiness Check (pull_request) Failing after 5s
Universal: PR Check / Validate PR (pull_request) Failing after 6s
Universal: PR Check / Secret Scan (pull_request) Successful in 6s
Joomla: Extension CI / Lint & Validate (pull_request) Failing after 9s
Joomla: Metadata Validation / Validate Joomla Metadata (pull_request) Successful in 12s
RC Revert / Rename rc/ back to dev/ (pull_request) Has been skipped
Branch Cleanup / Delete merged branch (pull_request) Failing after 2s
Universal: Workflow Sync Trigger / Sync workflows to live repos (pull_request) Failing after 3s
Universal: Auto Version Bump / Version Bump (push) Successful in 8s
Universal: Build & Release / Promote to RC (pull_request) Has been skipped
Universal: Build & Release / Build & Release Pipeline (pull_request) Successful in 15s
2026-06-21 17:32:53 -05:00
Jonathan Miller 8d67dfbc42 Merge remote-tracking branch 'origin/main' into feature/47-backup-status-helper
# Conflicts:
#	.mokogitea/workflows/issue-branch.yml
#	.mokogitea/workflows/pr-check.yml
#	README.md
#	mokosuitebackup.xml
#	source/packages/com_mokosuitebackup/mokosuitebackup.xml
#	source/packages/plg_actionlog_mokosuitebackup/mokosuitebackup.xml
#	source/packages/plg_console_mokosuitebackup/mokosuitebackup.xml
#	source/packages/plg_content_mokosuitebackup/mokosuitebackup.xml
#	source/packages/plg_quickicon_mokosuitebackup/mokosuitebackup.xml
#	source/packages/plg_system_mokosuitebackup/mokosuitebackup.xml
#	source/packages/plg_task_mokosuitebackup/mokosuitebackup.xml
#	source/packages/plg_webservices_mokosuitebackup/mokosuitebackup.xml
#	source/pkg_mokosuitebackup.xml
2026-06-21 17:29:58 -05:00
gitea-actions[bot] c2a88a898d chore(version): auto-bump patch 01.25.02-dev [skip ci] 2026-06-21 22:22:40 +00:00
Jonathan Miller d5421738b7 fix: address PR review findings — error handling and safety
Generic: Project CI / Tests (pull_request) Blocked by required conditions
Joomla: Extension CI / Tests (PHP 8.2) (pull_request) Blocked by required conditions
Joomla: Extension CI / Tests (PHP 8.3) (pull_request) Blocked by required conditions
Joomla: Extension CI / PHPStan Analysis (pull_request) Blocked by required conditions
Joomla: Extension CI / Build RC Pre-Release (pull_request) Blocked by required conditions
Universal: PR Check / Build RC Package (pull_request) Blocked by required conditions
Universal: PR Check / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Scripts governance (pull_request) Blocked by required conditions
Generic: Repo Health / Repository health (pull_request) Blocked by required conditions
Generic: Repo Health / Report Issues (pull_request) Blocked by required conditions
Universal: PR Check / Branch Policy (pull_request) Failing after 2s
Joomla: Extension CI / Release Readiness Check (pull_request) Failing after 4s
Universal: Secret Scanning / Gitleaks Secret Scan (pull_request) Successful in 9s
Universal: PR Check / Validate PR (pull_request) Failing after 6s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Generic: Repo Health / Access control (pull_request) Successful in 2s
Universal: Auto Version Bump / Version Bump (push) Successful in 14s
Generic: Project CI / Lint & Validate (pull_request) Successful in 44s
Joomla: Extension CI / Lint & Validate (pull_request) Failing after 49s
Joomla: Metadata Validation / Validate Joomla Metadata (pull_request) Successful in 51s
Fixes from code review and silent failure audit:

- SnapshotRestoreEngine: catch only duplicate key errors (MySQL 1062)
  in merge mode, re-throw all other exceptions instead of swallowing
- SnapshotRestoreEngine: add json_last_error() check for better error
  messages on corrupt snapshot files
- SnapshotRestoreEngine: log warnings when set_time_limit/ini_set fail
- SnapshotEngine: use strlen($json) instead of filesize() to avoid
  race conditions; catch \Exception instead of \Throwable
- SnapshotsController: remove @unlink suppression, add try-catch
  around delete loop with partial failure reporting
- script.php: add user-facing warning when webcron secret generation
  fails (was silently swallowed, inconsistent with other catch blocks)
2026-06-21 17:21:55 -05:00
jmiller 1962e39032 chore: sync auto-release.yml from Template-Generic [skip ci] 2026-06-21 22:03:24 +00:00
Jonathan Miller 658ed77090 Merge remote-tracking branch 'origin/feature/47-backup-status-helper' into feature/47-backup-status-helper 2026-06-21 16:59:54 -05:00
Jonathan Miller 3bd103f0af chore: normalize CRLF in workflow files 2026-06-21 16:59:54 -05:00
Jonathan Miller 854383a899 fix: scope module DELETE to snapshot IDs in replace mode
The truncateFiltered() method ran unfiltered DELETE FROM #__modules
in replace mode, which would wipe ALL site modules (admin toolbar,
login, menus) — not just the ones in the snapshot. Now scoped to
only delete modules whose IDs exist in the snapshot data.

Also scopes #__modules_menu delete to snapshot module IDs, and adds
defense-in-depth validation of restore_mode in the controller.
2026-06-21 15:50:41 -05:00
gitea-actions[bot] 43c73d20e8 chore(version): auto-bump patch 01.25.01-dev [skip ci] 2026-06-21 20:30:09 +00:00
Jonathan Miller ef31713029 feat: content snapshots, restore UI, and config hardening (v01.25.00)
Universal: Auto Version Bump / Version Bump (push) Successful in 10s
Add content snapshot system for lightweight article/category/module
versioning independent of full backups. Snapshots store as JSON files
with replace or merge restore modes, wrapped in DB transactions.

- SnapshotEngine: dumps articles, categories, modules + related tables
  (workflow_associations, tag maps, frontpage) to JSON
- SnapshotRestoreEngine: replace (clean slate) or merge (upsert) mode
- Full MVC: controller, models, view, template with create/restore modals
- New ACL permission: mokosuitebackup.snapshot.manage
- Submenu entry with camera icon, upgrade SQL for snapshots table

Improve full-site restore UI with confirmation modal offering options
for files, database, preserve config, and encryption password.

Config improvements:
- WebcronSecretField: CSPRNG generator, strength meter, rejects weak
  patterns (password, admin, secret), enforces min 16 chars
- IpWhitelistField: table-based management, current IP detection with
  one-click "Add my IP" button
- Default profile shows "Title (#ID)" format
- Default backup dir uses [DEFAULT_DIR] placeholder
- Install script generates random 32-char webcron secret
- Dashboard quick actions: full-width dropdown with button below
2026-06-21 15:25:53 -05:00
jmiller 4c1615e337 chore: sync pre-release.yml from Template-Generic [skip ci] 2026-06-21 16:06:03 +00:00
jmiller 26a13ef692 chore: sync composer-publish.yml from Template-Generic [skip ci] 2026-06-21 06:35:25 +00:00
jmiller f55836df0d chore: sync workflow-sync-trigger.yml from Template-Generic [skip ci] 2026-06-21 01:29:19 +00:00
jmiller 680e242465 chore: sync auto-release.yml from Template-Generic [skip ci] 2026-06-21 01:29:18 +00:00
jmiller e2b12ef313 ci: sync rc-revert.yml from Template-Joomla [skip ci] 2026-06-21 00:15:06 +00:00
jmiller d1ca1d8e48 ci: sync issue-branch.yml from Template-Joomla [skip ci] 2026-06-21 00:14:37 +00:00
jmiller b2f8ae8b1f ci: sync ci-joomla.yml from Template-Joomla [skip ci] 2026-06-21 00:14:13 +00:00
jmiller 3d84e8079f chore: sync repo-health.yml from Template-Generic [skip ci] 2026-06-20 23:47:05 +00:00
jmiller cb68071155 chore: sync pr-check.yml from Template-Generic [skip ci] 2026-06-20 23:47:04 +00:00
jmiller eeba315a0d chore: sync issue-branch.yml from Template-Generic [skip ci] 2026-06-20 23:47:04 +00:00
jmiller 91bc675ea7 chore: sync gitleaks.yml from Template-Generic [skip ci] 2026-06-20 23:47:03 +00:00
jmiller 1b042311fb chore: sync ci-generic.yml from Template-Generic [skip ci] 2026-06-20 23:47:02 +00:00
jmiller b4927163a6 chore: sync auto-bump.yml from Template-Generic [skip ci] 2026-06-20 23:47:01 +00:00
gitea-actions[bot] 571c0a7143 chore: promote changelog [Unreleased] → [01.25.00]
Universal: Auto Version Bump / Version Bump (push) Successful in 8s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Failing after 8s
2026-06-20 23:31:25 +00:00
gitea-actions[bot] 2d7359cefd chore(release): build 01.25.00 [skip ci] 2026-06-20 23:31:22 +00:00
jmiller c828c46a4b Merge pull request 'feat: add BackupStatusHelper for bridge integration' (#53) from feature/47-backup-status-helper into main 2026-06-20 23:31:11 +00:00
gitea-actions[bot] 38a98e5ea3 chore(version): auto-bump patch 01.24.01-dev [skip ci]
Universal: Build & Release / Promote to RC (pull_request) Has been skipped
RC Revert / Rename rc/ back to dev/ (pull_request) Has been skipped
Branch Cleanup / Delete merged branch (pull_request) Failing after 2s
Universal: Workflow Sync Trigger / Sync workflows to live repos (pull_request) Failing after 4s
Universal: Build & Release / Build & Release Pipeline (pull_request) Successful in 14s
2026-06-20 23:31:10 +00:00
Jonathan Miller a5a2f48e7c feat: add BackupStatusHelper for bridge integration (#47)
Universal: PR Check / Branch Policy (pull_request) Failing after 2s
Joomla: Extension CI / Release Readiness Check (pull_request) Failing after 6s
Generic: Repo Health / Access control (pull_request) Successful in 1s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Universal: Secret Scanning / Gitleaks Secret Scan (pull_request) Successful in 9s
Universal: PR Check / Validate PR (pull_request) Failing after 6s
Universal: Auto Version Bump / Version Bump (push) Successful in 15s
Joomla: Metadata Validation / Validate Joomla Metadata (pull_request) Successful in 13s
Generic: Project CI / Lint & Validate (pull_request) Successful in 32s
Joomla: Extension CI / Lint & Validate (pull_request) Failing after 35s
Generic: Project CI / Tests (pull_request) Has been cancelled
Joomla: Extension CI / Tests (PHP 8.2) (pull_request) Has been cancelled
Joomla: Extension CI / Tests (PHP 8.3) (pull_request) Has been cancelled
Joomla: Extension CI / PHPStan Analysis (pull_request) Has been cancelled
Joomla: Extension CI / Build RC Pre-Release (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
Generic: Repo Health / Scripts governance (pull_request) Has been cancelled
Generic: Repo Health / Repository health (pull_request) Has been cancelled
Generic: Repo Health / Report Issues (pull_request) Has been cancelled
Static helper class for external consumers (bridge plugins, MCP servers)
to query backup status without bootstrapping the full component.

Methods:
- isInstalled(): check if MokoSuiteBackup is installed and enabled
- getLatestRecord(): get the most recent completed/failed backup
- getStatusSummary(): full heartbeat payload with latest status,
  all-time/7-day totals, and consecutive success streak
2026-06-20 18:30:54 -05:00
jmiller 70f25f6e79 chore: sync repo-health.yml from Template-Generic [skip ci] 2026-06-20 22:30:30 +00:00
jmiller 26dd5cf5c2 chore: sync rc-revert.yml from Template-Generic [skip ci] 2026-06-20 22:30:29 +00:00
jmiller b754542254 chore: sync pr-check.yml from Template-Generic [skip ci] 2026-06-20 22:30:28 +00:00
jmiller 3942fa4661 chore: sync cleanup.yml from Template-Generic [skip ci] 2026-06-20 22:30:28 +00:00
jmiller 0764697086 ci: sync security-audit.yml from Template-Joomla [skip ci] 2026-06-20 22:26:32 +00:00
jmiller f7767b76dd ci: sync repo-health.yml from Template-Joomla [skip ci] 2026-06-20 22:26:04 +00:00
jmiller 37c003a97a ci: sync rc-revert.yml from Template-Joomla [skip ci] 2026-06-20 22:25:54 +00:00
jmiller 3c5460559b ci: sync pr-check.yml from Template-Joomla [skip ci] 2026-06-20 22:24:48 +00:00
jmiller e433314e42 ci: sync issue-branch.yml from Template-Joomla [skip ci] 2026-06-20 22:22:22 +00:00
jmiller db3beae7d3 ci: sync cleanup.yml from Template-Joomla [skip ci] 2026-06-20 22:15:38 +00:00
jmiller 734a5326e5 chore: sync ci-generic.yml from Template-Generic [skip ci] 2026-06-20 21:35:49 +00:00
jmiller 6c48a6a777 ci: sync ci-generic.yml from Template-Joomla [skip ci] 2026-06-20 21:34:03 +00:00
jmiller 4e4e608f89 ci: sync cascade-dev.yml from Template-Joomla [skip ci] 2026-06-20 21:31:35 +00:00
jmiller 2c17b07835 ci: sync branch-cleanup.yml from Template-Joomla [skip ci] 2026-06-20 21:28:11 +00:00
jmiller ea17d81e5e ci: sync auto-release.yml from Template-Joomla [skip ci] 2026-06-20 21:26:58 +00:00
jmiller 58080a5ad7 chore: sync workflow-sync-trigger.yml from Template-Generic [skip ci] 2026-06-20 20:54:09 +00:00
jmiller e8f054ddae chore: sync issue-branch.yml from Template-Generic [skip ci] 2026-06-20 20:54:08 +00:00
jmiller 21bcf479cc ci: sync ci-generic.yml from Template-Joomla [skip ci] 2026-06-20 20:35:06 +00:00
jmiller 695b9e0be5 ci: sync cascade-dev.yml from Template-Joomla [skip ci] 2026-06-20 20:32:53 +00:00
jmiller 8fc7616d4d ci: sync branch-cleanup.yml from Template-Joomla [skip ci] 2026-06-20 20:31:55 +00:00
jmiller afe766302a ci: sync auto-release.yml from Template-Joomla [skip ci] 2026-06-20 20:31:01 +00:00