chore: harmonize CI workflow, templates, and test structure - #244
Conversation
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.
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
The CI workflow still logs the MySQL root password because it appears in the command line that writes ~/.my.cnf, undermining the stated credential-leak fix.
Get a fresh assessment by requesting another Copilot review.
Review effort: Lite
Findings: 1
Open (1)
What changed in this PR
This PR aligns the Monitor plugin repository with the fleet-wide plugin_* CI/template/test-structure standards by tightening GitHub Actions workflows, consolidating/cleaning up tests, and adding standardized GitHub templates and Copilot guidance.
Changes:
- Pins GitHub Actions to specific commit SHAs, removes dead workflow steps, and adjusts MySQL/bootstrap + Pest execution patterns.
- Simplifies the PHPUnit/Pest test suite structure by removing unused e2e scaffolding and consolidating source-pattern checks.
- Adds Issue/PR templates and documents CI/dependency baselines in Copilot instructions.
| File | Description |
|---|---|
tests/TestCase.php |
Removes an unused PHPUnit base class fixture. |
tests/Integration/OutputEscapingTest.php |
Consolidates “raw request reuse” detection into the integration source-pattern ruleset. |
tests/e2e/MonitorNoRawRequestReuseTest.php |
Removes an e2e test file and its dataset (now covered elsewhere). |
tests/bootstrap-unit.php |
Drops the unused TestCase.php include from the unit bootstrap. |
phpunit.xml |
Removes the tests/e2e suite directory and relies on the remaining test structure. |
.github/workflows/plugin-ci-workflow.yml |
Harmonizes CI steps (pinned actions, MySQL bootstrap changes, Pest run simplification, syntax-check update). |
.github/workflows/codeql.yml |
Updates pinned action SHAs for CodeQL workflow steps. |
.github/PULL_REQUEST_TEMPLATE.md |
Adds a PR template aligned with org/repo standards. |
.github/ISSUE_TEMPLATE/feature_request.md |
Adds labels/formatting updates for feature request issues. |
.github/ISSUE_TEMPLATE/bug_report.md |
Adds labels/formatting updates for bug report issues. |
.github/copilot-instructions.md |
Documents CI/dependency baselines for contributors and automation. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
- 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).
- 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.
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.
`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.
- 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).
|
This PR's |

Description
Part of the fleet-wide
plugin_*CI/template/test-structure harmonizationeffort (see plugin_analytics#8, plugin_apcupsd#29).
Changes
actions/checkout,shivammathur/setup-php,actions/upload-artifactnow pinned to current release commit SHAs.cat ~/.my.cnfprinted the root passwordinto the Actions log; replaced with
chmod 600.--defaults-file, grants added forboth
'cactiuser'@'localhost'and'cactiuser'@'127.0.0.1'.step after Composer install, matching the pattern in
plugin_apcupsd.find/xargspattern fromplugin_audit.never installed in this workflow, so the step was dead weight.
phpunit.xml's own<testsuites>block instead of duplicating the test directory list.test replaced with
tests/Security/PhpCompatibilityTest.php, checking forPHP 8.3/8.4-only syntax (this plugin's floor is PHP 8.2 per the CI matrix).
tests/TestCase.php: not referenced by anyuses(TestCase::class)call in this plugin's actual tests.Related Issue
N/A — internal fleet harmonization, not tracked against a specific issue.
How Has This Been Tested?
Types of changes
Checklist
out across
plugin_*repos.