- pluginHolder/views: use dir+meta.xml for installed count; exclude core apps;
repair pass to restore meta.xml from source or GitHub; ensure_plugin_meta_xml
falls back to GitHub when source missing; cap active <= installed
- pluginHolder/urls: include plugin routes for all on-disk plugins (not only
INSTALLED_APPS) so /plugins/<name>/settings/ works after install
- pluginHolder/plugins.html: Install button tries local then store (GitHub)
- CyberCP/settings: sync INSTALLED_APPS with plugin dirs on disk (meta.xml+urls.py)
Author: master3395
GitHub reported: Unrecognized function: 'hashFiles' at ci.yml L40.
Remove job-level if: hashFiles(...); skip inside the run step when
plogical/versionFetcher.py is missing (e.g. stable branch).
- All jobs now use runs-on: ubuntu-22.04 (avoids ubuntu-latest/24.04 Docker issues)
- validate-on-os: replaced 16 Docker matrix jobs with single validate-upgrade-script job
- No Docker in CI so workflow passes on hosted runners; multi-OS still testable locally
- validate-python: add timeout-minutes: 2
- Tested locally: all four job steps pass
- Add .github/scripts/ci-validate-upgrade.sh (single source for Docker validation)
- validate-on-os: run script inside container instead of inline bash -c
- Avoids nested quoting and glob/exit behavior differences across shells
- Same script can be run locally: bash .github/scripts/ci-validate-upgrade.sh
- stable branch has no plogical/versionFetcher.py; CI #23 failed on smoke-key-files and validate-python
- validate-python: run only if hashFiles('plogical/versionFetcher.py') != ''
- smoke-key-files and validate-on-os: require only preUpgrade, loader, upgrade.py, install.py; versionFetcher optional
- CI: when upgrade_modules/ exists, check all 12 modules and grep Branch_Check in modules
- CI: syntax-check upgrade_modules/*.sh in validate-shell and validate-on-os
- Loader: BRANCH_FOR_MODULES default 'stable' so one-liner works without -b
- Loader: show both stable and -b v2.5.5-dev in root-check message
- cyberpanel_upgrade.sh is now a loader that sources upgrade_modules/*.sh
- When upgrade_modules/ is missing (e.g. one-liner), loader downloads modules from GitHub
- All modules kept under 500 lines for easier debugging
- cyberpanel_upgrade_monolithic.sh preserves full original script
- to-do/UPGRADE-MODULES-DESIGN.md documents module layout
- versionFetcher: normalize RELEASE_5_2_3 -> 5.2.3 for phpMyAdmin tags
- upgrade: verify tarball size after download; chown lscpd at end of phpMyAdmin install
- install: same glob-based extract + verify; check tarball size
- fix-phpmyadmin.sh: one-off script to install/fix phpMyAdmin on server (404 fix)
- index.html: notification dropdown scroll (list max-height, flex min-height:0), button min-width and contrast, dark text on white for dark mode visibility
- cyberpanel.sh, cyberpanel_upgrade.sh, preUpgrade.sh: default install/upgrade URLs to usmannasir/cyberpanel (keep -r/--repo for fork)
- databases/plogical: AutoLogin, views, phpmyadminsignin updates
- Register dashboard controller under both 'dashboardStatsController' and
'newDashboardStat' so templates/caches using either name work (fixes
$controller:ctrlreg error and unrendered {$ cpuUsage $} placeholders)
- Initialize systemStatusInfo scope with cpuUsage/ramUsage/diskUsage etc.
defaults so overview never shows undefined when API is slow or fails
- Set defaults in cantLoadInitialData on getSystemStatus failure
- CyberCP/urls.py: make emailMarketing include optional (ModuleNotFoundError)
so clean clone or git clean -fd does not break with missing app
- cyberpanel_upgrade.sh: in Sync_CyberCP_To_Latest, backup settings.py before
sync and restore after so production DB/config are not overwritten by repo
- Broader sed for baseurl uncomment (# baseurl= and #baseurl=)
- Fallback: inject explicit baseurl for appstream/baseos sections
- Uses repo.almalinux.org to avoid mirror timeouts