809 Commits
Author SHA1 Message Date
Weblate 614e978708 Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
Translation: Cacti/monitor
2026-09-28 07:49:57 -05:00
Weblate 1c865ef08a Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
Translation: Cacti/monitor
2026-09-28 07:49:57 -05:00
Weblate b5da3273a4 Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
Translation: Cacti/monitor
2026-09-28 07:49:57 -05:00
Weblate 4b211daab5 Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
Translation: Cacti/monitor
2026-09-28 07:49:56 -05:00
TheWitness 8f961badb7 security(csp): version-safe inline-script nonce wrapper + strengthen PO/MO instructions (#249)
* security(csp): add version-safe inline-script nonce wrapper; strengthen PO/MO instructions

* test(csp): exercise nonce delegation in isolated process
2026-09-28 08:49:50 -04:00
TheWitness 86480ea85c Add PHPDoc blocks to all functions in setup.php (#248)
* Add PHPDoc blocks to all functions in setup.php

This plugin's other PHP files (db_functions.php, monitor_controller.php,
monitor_render.php, poller_functions.php) already have complete PHPDoc
coverage from prior work. This adds PHPDoc blocks (description,
@param, @return, and applicable @global tags) to the 25 functions in
setup.php, the one file that had none.

No functional changes; documentation only. Validated with php -l.

* Address review feedback and refresh translation template

- Correct plugin_monitor_uninstall() docblock to list the three tables it actually drops
- Fix @global type/usage for $page_refresh_interval in monitor_config_settings()
- Fix @return type for monitor_top_graph_refresh() (int|string, not int)
- Regenerate locales/po/cacti.pot (source line references only)

* Fix .gitignore pattern for compiled .mo files (they live under locales/LC_MESSAGES/, not locales/po/)
2026-09-24 17:00:29 -04:00
TheWitness 7ba762c1c6 Skip selectmenu init on criticality select if Cacti core already applied select2 (#247)
* fix: don't apply jQuery UI selectmenu on the criticality select if select2 already did

Cacti core is converting its global select-enhancement catch-all from
jQuery UI selectmenu to select2. If core's catch-all already turned the
dynamically-inserted #criticality select into a select2, skip re-applying
selectmenu to it here too, so it doesn't render twice.

* chore: bump minimum compatible Cacti version to 1.2.32

* fix: wire applyFilter() to the select2 branch of the criticality select

Copilot review caught this: the select2-hidden-accessible branch skipped
selectmenu's change:applyFilter() callback entirely, so choosing a
criticality no longer reloaded the filtered device list once core had
already converted the select to select2. Bind change->applyFilter()
directly in that branch instead.

Also regenerate locales/po/cacti.pot (and the merged .po/.mo files) via
locales/build_gettext.sh - setup.php's line numbers shifted.
2026-09-23 10:25:39 -04:00
TheWitness 2e5f294c1f test: add Security baseline and expand Unit/Integration coverage for lifecycle (#246)
This plugin had no tests/Security category at all, and setup.php's
lifecycle/device-hook functions had zero test coverage (only db_functions.php
and the request-output escaping/wiring were tested). Closed both gaps:

- Security: added the standard PHP compatibility scan (8.0-8.4
  removed/added syntax) and a static structure check (required
  functions, INFO keys), matching the baseline used across the rest of
  the plugin fleet.
- Unit: plugin_monitor_version(), the lifecycle contract functions
  (plugin_monitor_uninstall - verifies it drops every table it owns,
  plugin_monitor_check_config - both the out-of-range and valid
  monitor_refresh branches, plugin_monitor_upgrade,
  monitor_check_upgrade()'s page-guard and version-drift branches),
  the device-list hooks (monitor_device_filters, monitor_device_sql_where,
  monitor_device_action_array, monitor_device_remove), monitor_draw_navigation_text(),
  monitor_get_default(), monitor_setup_table() (verifies every table it
  provisions), and monitor_poller_bottom() (primary-poller and
  non-primary-poller branches).
- Integration: plugin_monitor_install() (verifies every hook, the
  realm, the tables it provisions, and the config defaults it sets,
  together, in one pass) - this plugin had no tests/Integration
  coverage of setup.php before (the existing Integration tests cover
  request-output wiring, not the plugin lifecycle).

No new unserialize() hardening was needed: setup.php's one
unserialize() call already goes through
sanitize_unserialize_selected_items().

Also fixed tests/.cacti-version, which was pinned to a stale "1.2.31"
and failed the bootstrap's version check against any other real Cacti
checkout (e.g. a local 1.2.32 checkout); "1.2.x" matches the
moving-branch convention used elsewhere in this fleet.

Intentionally left uncovered: monitor_device_table_bottom()/monitor_show_tab()/
monitor_top_graph_refresh()/plugin_monitor_page_head() (print-heavy UI
rendering), monitor_config_settings()/monitor_config_arrays()/monitor_config_form()
(very large), monitor_device_action_execute()/monitor_device_action_prepare()
(large, print/DB-heavy confirmation dialogs), and monitor_api_device_save()
(moderate complexity, comparatively low value relative to the effort of
safely mocking its dependencies) - consistent with similarly-scoped
functions skipped elsewhere in this coverage-expansion pass.

tests/bootstrap-unit.php gained a fixture-mock DB API
(monitor_test_mock_db/monitor_test_reset_db_mocks/monitor_test_db_result,
matching the convention used elsewhere in the plugin fleet),
api_plugin_register_hook/api_plugin_register_realm call-logging stubs,
db_table_exists, and exec_background (call-logging, safe here since
setup.php's poller include always goes through $config['library_path'],
which points at a throwaway test stub, never Cacti core's real
lib/poller.php); read_config_option/set_config_option were rewired from
hardcoded no-ops to a real backing store - all needed by the new tests.

Verified via a real WSL Cacti install (composer-managed Pest, not a
plugin-local vendor tree): 63 passed (303 assertions), up from 31.
2026-09-23 10:04:23 -04:00
TheWitness cdca534aef docs: add Security & Quality Conventions to copilot-instructions.md (#245)
* docs: add Security & Quality Conventions to copilot-instructions.md

* docs: fix unserialize() hardening option name (allowed_classes)

PHP's unserialize() option is 'allowed_classes' (with the 'ed'), not
'allow_classes' - the latter is silently ignored, so following the prior
wording would not actually disable object instantiation.
2026-09-22 20:19:16 -04:00
Weblate da82125993 Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
Translation: Cacti/monitor
2026-09-21 14:44:47 -05:00
Weblate 9fd2384e14 Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
Translation: Cacti/monitor
2026-09-21 14:44:47 -05:00
Weblate 5cd40f433c Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
Translation: Cacti/monitor
2026-09-21 14:44:47 -05:00
Weblate 25021ea582 Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
Translation: Cacti/monitor
2026-09-21 14:44:47 -05:00
Weblate fc320215b4 Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
Translation: Cacti/monitor
2026-09-21 14:44:47 -05:00
Weblate b9bb6366a7 Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
Translation: Cacti/monitor
2026-09-21 14:44:47 -05:00
Weblate ddafbbe628 Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
Translation: Cacti/monitor
2026-09-21 14:44:47 -05:00
Weblate fe0e6ea1f5 Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
Translation: Cacti/monitor
2026-09-21 14:44:47 -05:00
Weblate 98cb071698 Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
Translation: Cacti/monitor
2026-09-21 14:44:47 -05:00
Weblate 0d7c1ca43d Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
Translation: Cacti/monitor
2026-09-21 14:44:47 -05:00
Weblate 1ea9c91fa0 Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
Translation: Cacti/monitor
2026-09-21 14:44:47 -05:00
Weblate 8eeeb287b0 Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
Translation: Cacti/monitor
2026-09-21 14:44:47 -05:00
Weblate 5da10c2c03 Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
Translation: Cacti/monitor
2026-09-21 14:44:47 -05:00
Weblate 798b08050a Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
Translation: Cacti/monitor
2026-09-21 14:44:47 -05:00
Weblate 679982ccfa Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
Translation: Cacti/monitor
2026-09-21 14:44:47 -05:00
Weblate e11daa6bc2 Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
Translation: Cacti/monitor
2026-09-21 14:44:47 -05:00
Weblate b9884da13f Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
Translation: Cacti/monitor
2026-09-21 14:44:47 -05:00
Weblate f4eadcd7f0 Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
Translation: Cacti/monitor
2026-09-21 14:44:47 -05:00
Weblate 34b05dcfd4 Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
Translation: Cacti/monitor
2026-09-21 14:44:47 -05:00
Weblate 9aefe5c839 Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
Translation: Cacti/monitor
2026-09-21 14:44:47 -05:00
Weblate 0ec1f39dcf Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
Translation: Cacti/monitor
2026-09-21 14:44:47 -05:00
Weblate f6422c86fa Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
Translation: Cacti/monitor
2026-09-21 14:44:47 -05:00
Weblate 97b4713bfd Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
Translation: Cacti/monitor
2026-09-21 14:44:47 -05:00
TheWitness 4b999d66b9 chore: harmonize CI workflow, templates, and test structure (#244)
* chore: harmonize CI workflow, templates, and test structure

Part of the fleet-wide plugin_* harmonization effort.

- Pin actions/checkout, shivammathur/setup-php, actions/upload-artifact to
  current release commit SHAs (was floating @v4/@v2).
- Stop logging the MySQL root password in CI output (cat ~/.my.cnf ->
  chmod 600).
- Harden MySQL bootstrap: quoted --defaults-file, grants added for both
  'cactiuser'@'localhost' and 'cactiuser'@'127.0.0.1'.
- Add "Restore vendor ownership for Pest" step after Composer install.
- Switch the PHP syntax-check step to the vendor-excluding, null-delimited
  find/xargs pattern used in plugin_audit.
- Remove the unused "Configure Apache" step (apache2/libapache2-mod-php are
  not installed and not needed).
- Simplify the Pest invocation to rely solely on phpunit.xml's <testsuites>.
- No CodeQL workflow added: this repo has no JavaScript/Python/Ruby content
  (PHP only), so there is nothing for CodeQL to scan.
- Consolidate tests/Security/Php74CompatibilityTest.php into
  tests/Security/PhpCompatibilityTest.php, now checking for PHP 8.3/8.4-only
  syntax (this plugin's floor is PHP 8.2 per the CI matrix).
- Remove tests/TestCase.php and its require in tests/bootstrap-unit.php: not
  referenced by any uses(TestCase::class) call in this plugin's tests.
- Add .github/ISSUE_TEMPLATE/{bug_report,feature_request}.md and
  .github/PULL_REQUEST_TEMPLATE.md, styled after Cacti/cacti's own templates.
- Document CI/dependency baselines in copilot-instructions.md.

* chore: add i18n build/verify workflow and bump MariaDB floor to 11.8

- Document the locales/build_gettext.sh + cacti.pot workflow in
  copilot-instructions.md (Weblate owns per-language .po/.mo sync).
- Add a CI step that regenerates cacti.pot and fails if it is stale,
  ignoring the POT-Creation-Date timestamp.
- Mark locales/build_gettext.sh executable.
- Bump the CI MariaDB service image floor to 11.8 (from mariadb:10.6 /
  mysql:8.0).

* fix: mariadb:11.8 healthcheck and i18n step permissions

- mariadb:11.8 no longer ships mysqladmin; use mariadb-admin for the
  service container healthcheck.
- Run chmod/build_gettext.sh with sudo in the i18n verification step,
  since locales/ is owned by www-data by the time it runs.

* chore: regenerate locales/po/cacti.pot with current source strings

Ran the real locales/build_gettext.sh (xgettext/msgmerge/msgfmt) to
refresh the translation template against current source. Per the i18n
workflow documented in copilot-instructions.md, only the regenerated
cacti.pot is committed here; Weblate owns syncing the per-language
.po/.mo files from it.

* fix: make locales/build_gettext.sh string extraction order deterministic

`find` without `sort` returns filesystem/readdir-order results, which
can differ between machines (e.g. a local regen vs. a GitHub Actions
runner), producing a spurious reordering diff in cacti.pot even when
no strings actually changed. Pipe through `sort` and regenerate
cacti.pot with the now-deterministic order.

* fix: Address Copilot review findings on the harmonization PR

- tests/Security/PhpCompatibilityTest.php: fixed the #[Override]/#[Deprecated]
  attribute regexes to also match the fully qualified (`#[\Override]`,
  `#[\Deprecated]`) form, added a realpath() false-guard for the plugin root,
  included the relative file path in both RuntimeException messages, added
  typed-class-constant and dynamic-class-constant-fetch checks (PHP 8.3), and
  restored each()/create_function() removed-in-PHP-8.0 guards that the
  consolidation had dropped. Also excludes include/vendor/ (not just vendor/)
  from the recursive source scan.
- .github/workflows/plugin-ci-workflow.yml: the "Create MySQL Config" step's
  root password is now masked via `::add-mask::` before it's echoed into
  ~/.my.cnf, so it no longer appears in plaintext in the Actions log (chmod
  600 alone only protected the file after creation, not the command's own
  echoed source in the log).
2026-09-21 12:44:08 -07:00
dependabot[bot] 214ad64d3b ci(deps): bump the github-actions group with 4 updates (#242)
Bumps the github-actions group with 4 updates: [actions/checkout](https://github.com/actions/checkout), [github/codeql-action/init](https://github.com/github/codeql-action), [github/codeql-action/autobuild](https://github.com/github/codeql-action) and [github/codeql-action/analyze](https://github.com/github/codeql-action).


Updates `actions/checkout` from 4.2.2 to 7.0.1
- [Release notes](https://github.com/actions/checkout/releases)
- [Commits](https://github.com/actions/checkout/compare/v4.2.2...v7.0.1)

Updates `github/codeql-action/init` from 3.28.10 to 4.38.0
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d...b96794f015dfd88f77b49b1c93e0fa7110f94c63)

Updates `github/codeql-action/autobuild` from 3.28.10 to 4.38.0
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d...b96794f015dfd88f77b49b1c93e0fa7110f94c63)

Updates `github/codeql-action/analyze` from 3.28.10 to 4.38.0
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d...b96794f015dfd88f77b49b1c93e0fa7110f94c63)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 7.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: github/codeql-action/init
  dependency-version: 4.38.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: github/codeql-action/autobuild
  dependency-version: 4.38.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: github/codeql-action/analyze
  dependency-version: 4.38.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-19 20:01:07 -04:00
TheWitness f1eef20a25 ci: fix bootstrap redeclare fatal, add coverage driver, bump PHP floor to 8.2 (#243)
- tests/bootstrap-unit.php: stop stubbing validateRequestVars() globally; monitor_controller.php declares it unconditionally, so the stub caused a Cannot redeclare fatal once a test loaded plugin source via loadPluginSource()/monitor_test_load().
- .github/workflows/plugin-ci-workflow.yml: add coverage: pcov to the setup-php step so the Pest --coverage-clover report has a driver to run against.
- Document the PHP 8.2 floor (matrix is already 8.2-8.4) in copilot-instructions.md, the php-developer agent, and the hexagonal-monitor ADR, replacing stale PHP 8.1 references now that PHP 8.1 is no longer tested.
- Verified apache2/libapache2-mod-php do not need to be re-added to the Install System Dependencies step: apache2 ships preinstalled on the ubuntu-latest runner image and shivammathur/setup-php configures the matching Apache PHP module for the selected matrix version.
2026-09-19 14:56:07 -04:00
TheWitness 9a8a3a9fc1 Document that get_filter_request_var()/gfrv() output should not be cast to (int) for string output (#239) 2026-09-18 14:38:57 -07:00
TheWitness b12cdec41b ci: run composer commands with sudo in plugin CI workflow (#241)
The Pest install step in .github/workflows/plugin-ci-workflow.yml now runs
composer config, composer require, rm, and composer install with sudo so
the step can write to directories owned by another user in the CI
runner. Also drop the deprecated --dev flag from composer require.
2026-09-18 14:08:16 -07:00
Sean Mancini b758fe18c8 Add shared PHP coding instructions (#240) 2026-09-17 16:42:13 -07:00
TheWitness b349b8f306 ci: add CodeQL workflow and adopt DbFunctionsTest/OutputEscapingTest from #229 (#238)
Cherry-picked from Cacti/plugin_monitor#229 (somethingwithproof:hardening/testing-and-workflows) and adapted to this repo's existing Pest setup:

- .github/workflows/codeql.yml: added as-is (JS/TS CodeQL scanning).
- tests/Integration/OutputEscapingTest.php: added as-is, references tests/Unit instead of tests/unit in its docblock.
- tests/Unit/DbFunctionsTest.php: added, placed under tests/Unit (PascalCase) instead of tests/unit to match this repo's layout.
- tests/bootstrap-unit.php: get_request_var()/get_nfilter_request_var()/get_filter_request_var()/set_request_var() now read/write a stubbed \['__test_request'] store, and a new test_set_request() helper lets tests control request vars, mirroring #229's tests/bootstrap.php.
- tests/Pest.php: added a beforeEach() hook resetting __test_db_calls and the request var store between tests.
2026-09-15 15:37:04 -04:00
dependabot[bot] 48bfa530fc ci(deps): bump the github-actions group across 1 directory with 2 updates (#237)
Bumps the github-actions group with 2 updates in the / directory: [actions/checkout](https://github.com/actions/checkout) and [actions/upload-artifact](https://github.com/actions/upload-artifact).


Updates `actions/checkout` from 4 to 7
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v7)

Updates `actions/upload-artifact` from 4 to 7
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4...v7)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: actions/upload-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-15 15:34:55 -04:00
TheWitness 93485cd870 ci: fail workflow when Cacti log contains FATAL/ERROR/WARNING entries (#232) 2026-09-15 15:26:43 -04:00
TheWitnessandCopilot Autofix powered by AI 5b387572aa docs: add Copilot instructions modeled on plugin_evidence (#235)
* docs: add Copilot instructions modeled on plugin_evidence

* Update security standards and naming conventions

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-09-15 15:26:16 -04:00
e2fc5aed5f ci: rebuild Monitor CI workflow from plugin_evidence template with Pest tests (#236)
* ci: modernize Monitor workflow

* ci: pin integration tests to Cacti 1.2.31

* ci(security): pin GitHub Actions to commit SHAs

Pin actions/checkout (v5), shivammathur/setup-php (v2) and actions/upload-artifact (v4) to full commit SHAs with a trailing # vX comment. Mutable tags let a compromised or force-pushed tag run arbitrary code in CI; pinning to an immutable SHA is the supply-chain-hardening best practice and matches the SHA-pinned checkout used in the core security workflow.

* Allow Cacti dependency validation warnings

* Align Monitor matrix with Cacti dependencies

* Fix Monitor PHPStan working directory

* Fix duplicate Monitor workflow key

* Guard optional PHPStan configuration

* Guard optional Composer vendor binaries

* Skip unavailable Composer quality scripts

* ci: restore full PHP 8.1-8.4 integration matrix

Keep 1.2.31 pin while covering mid-stream PHP releases.

Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>

* ci: grant the Cacti database user the host pattern the service uses

The service container publishes a port, so Cacti reaches MariaDB from the
Docker gateway address and matches cactiuser@'%', not cactiuser@localhost.

Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>

* ci: rebuild plugin CI workflow from plugin_evidence template

Replace the Monitor CI workflow wholesale with the plugin_evidence CI workflow, renamed for plugin_monitor, adding Pest test support (phpunit.xml, tests/Pest.php, tests/TestCase.php, tests/bootstrap-unit.php, tests/.cacti-version). Convert the existing raw-script sanity checks in tests/unit, tests/e2e, and tests/Integration into Pest tests, renaming tests/unit to tests/Unit and using PascalCase *Test.php file names.

---------

Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>
Co-authored-by: Thomas Vincent <thomasvincent@gmail.com>
Co-authored-by: Thomas Vincent <thomas@vincent.dev>
2026-09-15 15:24:17 -04:00
Thomas Vincent 399c09fa71 docs: add Monitor architecture decision record (#224)
* docs: add Monitor architecture decision record

* ci: add code-quality workflow (lint/cs-fixer)

Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>

* docs: keep ADR PR documentation-only

Drop code-quality workflow and php-cs-fixer scaffolding that would
gate merges without a format pass.

Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>

* docs: state the PHP 8.1 baseline the CI actually tests

Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>

---------

Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>
2026-09-15 18:33:33 +02:00
TheWitness b92262e796 chore: move monitor.css into css/ directory (#233) 2026-09-15 11:23:51 -04:00
TheWitness dcd18afa13 chore: normalize line endings to LF (#234) 2026-09-15 11:23:25 -04:00
Thomas Vincent 3854f7ac58 chore: add enterprise Dependabot configuration (#226) 2026-09-12 21:22:23 -04:00
Weblate f1e3e59ffc Update translation files
Updated by "Squash Git commits" hook in Weblate.

Translation: Cacti/monitor
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/
2026-09-12 03:18:15 -05:00
WeblateandDaniel Nylander 5d1318d928 Translated using Weblate (Swedish)
Currently translated at 100.0% (241 of 241 strings)

Co-authored-by: Daniel Nylander <daniel@danielnylander.se>
Translate-URL: https://translate.cacti.net/projects/cacti/monitor/sv/
Translation: Cacti/monitor
2026-09-12 03:18:15 -05:00
TheWitness 11c7b6c642 chore: Preparing for release (#223) v2.9 2026-07-09 10:42:39 -04:00